1 ///////////////////////////////////////////////////////////////////////////// 
   2 // Name:        src/os2/settings.cpp 
   4 // Author:      David Webster 
   8 // Copyright:   (c) David Webster 
   9 // Licence:     wxWindows licence 
  10 ///////////////////////////////////////////////////////////////////////////// 
  12 // For compilers that support precompilation, includes "wx.h". 
  13 #include "wx/wxprec.h" 
  19     #include "wx/fontutil.h" 
  20     #include "wx/gdicmn.h" 
  21     #include "wx/window.h" 
  22     #include "wx/settings.h" 
  23     #include "wx/module.h" 
  26 #include "wx/os2/private.h" 
  28 // the module which is used to clean up wxSystemSettings data (this is a 
  29 // singleton class so it can't be done in the dtor) 
  30 class wxSystemSettingsModule 
: public wxModule
 
  32     friend class wxSystemSettings
; 
  34     virtual bool OnInit(); 
  35     virtual void OnExit(); 
  38     DECLARE_DYNAMIC_CLASS(wxSystemSettingsModule
) 
  40     static wxArrayString   sm_optionNames
; 
  41     static wxArrayString   sm_optionValues
; 
  44 // ---------------------------------------------------------------------------- 
  46 // ---------------------------------------------------------------------------- 
  48 static wxFont 
*gs_fontDefault 
= NULL
; 
  50 // ============================================================================ 
  52 // ============================================================================ 
  54 // ---------------------------------------------------------------------------- 
  55 // wxSystemSettingsModule 
  56 // ---------------------------------------------------------------------------- 
  58 IMPLEMENT_DYNAMIC_CLASS(wxSystemSettingsModule
, wxModule
) 
  60 wxArrayString 
wxSystemSettingsModule::sm_optionNames
; 
  61 wxArrayString 
wxSystemSettingsModule::sm_optionValues
; 
  63 bool wxSystemSettingsModule::OnInit() 
  68 void wxSystemSettingsModule::OnExit() 
  70     sm_optionNames
.Clear(); 
  71     sm_optionValues
.Clear(); 
  72     delete gs_fontDefault
; 
  73     gs_fontDefault 
= NULL
; 
  76 wxColour 
wxSystemSettingsNative::GetColour( 
  86         // PM actually has values for these 
  88         case wxSYS_COLOUR_WINDOW
: 
  89             vSysClr 
= SYSCLR_WINDOW
; 
  92         case wxSYS_COLOUR_WINDOWFRAME
: 
  93             vSysClr 
= SYSCLR_WINDOWFRAME
; 
  96         case wxSYS_COLOUR_MENUTEXT
: 
  97             vSysClr 
= SYSCLR_MENUTEXT
; 
 100         case wxSYS_COLOUR_MENUHILIGHT
: 
 101             vSysClr 
= SYSCLR_MENUHILITE
; 
 104         case wxSYS_COLOUR_BTNFACE
: 
 105             vSysClr 
= SYSCLR_BUTTONMIDDLE
; 
 108         case wxSYS_COLOUR_BTNSHADOW
: 
 109             vSysClr 
= SYSCLR_BUTTONDARK
; 
 112         case wxSYS_COLOUR_BTNHIGHLIGHT
: 
 113             vSysClr 
= SYSCLR_BUTTONLIGHT
; 
 116         case wxSYS_COLOUR_BACKGROUND
: 
 117             vSysClr 
= SYSCLR_BACKGROUND
; 
 120         case wxSYS_COLOUR_APPWORKSPACE
: 
 121             vSysClr 
= SYSCLR_APPWORKSPACE
; 
 124         case wxSYS_COLOUR_MENUBAR
: 
 125         case wxSYS_COLOUR_MENU
: 
 126             vSysClr 
= SYSCLR_MENU
; 
 129         case wxSYS_COLOUR_INACTIVECAPTION
: 
 130             vSysClr 
= SYSCLR_INACTIVETITLE
; 
 133         case wxSYS_COLOUR_INACTIVEBORDER
: 
 134             vSysClr 
= SYSCLR_INACTIVEBORDER
; 
 137         case wxSYS_COLOUR_LISTBOX
: 
 138             vSysClr 
= SYSCLR_ENTRYFIELD
; 
 141         case wxSYS_COLOUR_CAPTIONTEXT
: 
 142             vSysClr 
= SYSCLR_TITLETEXT
; 
 145         case wxSYS_COLOUR_INACTIVECAPTIONTEXT
: 
 146             vSysClr 
= SYSCLR_INACTIVETITLETEXT
; 
 149         case wxSYS_COLOUR_WINDOWTEXT
: 
 150         case wxSYS_COLOUR_BTNTEXT
: 
 151             vSysClr 
= SYSCLR_WINDOWTEXT
; 
 154         case wxSYS_COLOUR_INFOTEXT
: 
 155             vSysClr 
= SYSCLR_HELPTEXT
; 
 158         case wxSYS_COLOUR_ACTIVECAPTION
: 
 159             vSysClr 
= SYSCLR_ACTIVETITLE
; 
 162         case wxSYS_COLOUR_ACTIVEBORDER
: 
 163             vSysClr 
= SYSCLR_ACTIVEBORDER
; 
 166         case wxSYS_COLOUR_HIGHLIGHT
: 
 167             vSysClr 
= SYSCLR_HILITEBACKGROUND
; 
 170         case wxSYS_COLOUR_SCROLLBAR
: 
 171             vSysClr 
= SYSCLR_SCROLLBAR
; 
 174         case wxSYS_COLOUR_HIGHLIGHTTEXT
: 
 175             vSysClr 
= SYSCLR_HILITEFOREGROUND
; 
 178         case wxSYS_COLOUR_INFOBK
: 
 179             vSysClr 
= SYSCLR_HELPBACKGROUND
; 
 182         // Don't know what these should be, so leave them grey (normally) 
 183         case wxSYS_COLOUR_GRAYTEXT
: 
 184         case wxSYS_COLOUR_3DDKSHADOW
: 
 185         case wxSYS_COLOUR_3DLIGHT
: 
 186         case wxSYS_COLOUR_HOTLIGHT
: 
 187         case wxSYS_COLOUR_GRADIENTACTIVECAPTION
: 
 188         case wxSYS_COLOUR_GRADIENTINACTIVECAPTION
: 
 189             vSysClr 
= SYSCLR_BUTTONMIDDLE
; 
 193             vSysClr 
= SYSCLR_WINDOW
; 
 196     vRef 
= (ULONG
)::WinQuerySysColor(   HWND_DESKTOP
, 
 199     vCol
.Set(   GetRValue(vRef
), 
 203 } // end of wxSystemSettingsNative::GetColour 
 205 // ---------------------------------------------------------------------------- 
 207 // ---------------------------------------------------------------------------- 
 209 wxFont 
wxCreateFontFromStockObject(int index
) 
 214     HPS hPS 
= ::WinGetScreenPS(HWND_DESKTOP
); 
 215     if (::GpiQueryFontMetrics(hPS
, sizeof(FONTMETRICS
), &metrics
)) 
 217         wxNativeFontInfo info
; 
 221     else // GetStockObject() failed 
 223         wxFAIL_MSG( _T("stock font not found") ); 
 229 wxFont 
wxSystemSettingsNative::GetFont( 
 233     const bool isDefaultRequested 
= index 
== wxSYS_DEFAULT_GUI_FONT
; 
 234     if ( isDefaultRequested 
) 
 236         if ( gs_fontDefault 
) 
 237             return *gs_fontDefault
; 
 240     wxFont font 
= wxCreateFontFromStockObject(index
); 
 242     if ( isDefaultRequested 
) 
 244         // if we got here it means we hadn't cached it yet - do now 
 245         gs_fontDefault 
= new wxFont(font
); 
 251 // Get a system metric, e.g. scrollbar size 
 252 int wxSystemSettingsNative::GetMetric( wxSystemMetric index
, 
 253                                        wxWindow
*      WXUNUSED(win
) ) 
 257         // TODO case wxSYS_MOUSE_BUTTONS: 
 258         // TODO case wxSYS_BORDER_X: 
 259         // TODO case wxSYS_BORDER_Y: 
 260         // TODO case wxSYS_CURSOR_X: 
 261         // TODO case wxSYS_CURSOR_Y: 
 262         // TODO case wxSYS_DCLICK_X: 
 263         // TODO case wxSYS_DCLICK_Y: 
 264         // TODO case wxSYS_DRAG_X: 
 265         // TODO case wxSYS_DRAG_Y: 
 266         // TODO case wxSYS_EDGE_X: 
 267         // TODO case wxSYS_EDGE_Y: 
 268         // TODO case wxSYS_HSCROLL_ARROW_X: 
 269         // TODO case wxSYS_HSCROLL_ARROW_Y: 
 270         // TODO case wxSYS_HTHUMB_X: 
 271         // TODO case wxSYS_ICON_X: 
 272         // TODO case wxSYS_ICON_Y: 
 273         // TODO case wxSYS_ICONSPACING_X: 
 274         // TODO case wxSYS_ICONSPACING_Y: 
 275         // TODO case wxSYS_WINDOWMIN_X: 
 276         // TODO case wxSYS_WINDOWMIN_Y: 
 279             return ::WinQuerySysValue(HWND_DESKTOP
,SV_CXSCREEN
); 
 281             return ::WinQuerySysValue(HWND_DESKTOP
,SV_CYSCREEN
); 
 283         // TODO case wxSYS_FRAMESIZE_X: 
 284         // TODO case wxSYS_FRAMESIZE_Y: 
 285         // TODO case wxSYS_SMALLICON_X: 
 286         // TODO case wxSYS_SMALLICON_Y: 
 288         case wxSYS_HSCROLL_Y
: 
 289             return ::WinQuerySysValue(HWND_DESKTOP
,SV_CYHSCROLL
); 
 290         case wxSYS_VSCROLL_X
: 
 291             return ::WinQuerySysValue(HWND_DESKTOP
,SV_CXVSCROLL
); 
 293         // TODO case wxSYS_VSCROLL_ARROW_X: 
 294         // TODO case wxSYS_VSCROLL_ARROW_Y: 
 295         // TODO case wxSYS_VTHUMB_Y: 
 296         // TODO case wxSYS_CAPTION_Y: 
 297         // TODO case wxSYS_MENU_Y: 
 298         // TODO case wxSYS_NETWORK_PRESENT: 
 299         // TODO case wxSYS_PENWINDOWS_PRESENT: 
 300         // TODO case wxSYS_SHOW_SOUNDS: 
 301         // TODO case wxSYS_SWAP_BUTTONS: 
 306     return -1;  // unsupported metric 
 309 bool wxSystemSettingsNative::HasFeature( wxSystemFeature index 
) 
 313         case wxSYS_CAN_ICONIZE_FRAME
: 
 316         // TODO case wxSYS_CAN_DRAW_FRAME_DECORATIONS: 
 317         // TODO case wxSYS_TABLET_PRESENT: