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/gdicmn.h" 
  20     #include "wx/window.h" 
  21     #include "wx/settings.h" 
  22     #include "wx/module.h" 
  25 #include "wx/fontutil.h" 
  27 #include "wx/os2/private.h" 
  29 // the module which is used to clean up wxSystemSettings data (this is a 
  30 // singleton class so it can't be done in the dtor) 
  31 class wxSystemSettingsModule 
: public wxModule
 
  33     friend class wxSystemSettings
; 
  35     virtual bool OnInit(); 
  36     virtual void OnExit(); 
  39     DECLARE_DYNAMIC_CLASS(wxSystemSettingsModule
) 
  41     static wxArrayString   sm_optionNames
; 
  42     static wxArrayString   sm_optionValues
; 
  45 // ---------------------------------------------------------------------------- 
  47 // ---------------------------------------------------------------------------- 
  49 static wxFont 
*gs_fontDefault 
= NULL
; 
  51 // ============================================================================ 
  53 // ============================================================================ 
  55 // ---------------------------------------------------------------------------- 
  56 // wxSystemSettingsModule 
  57 // ---------------------------------------------------------------------------- 
  59 IMPLEMENT_DYNAMIC_CLASS(wxSystemSettingsModule
, wxModule
) 
  61 wxArrayString 
wxSystemSettingsModule::sm_optionNames
; 
  62 wxArrayString 
wxSystemSettingsModule::sm_optionValues
; 
  64 bool wxSystemSettingsModule::OnInit() 
  69 void wxSystemSettingsModule::OnExit() 
  71     sm_optionNames
.Clear(); 
  72     sm_optionValues
.Clear(); 
  73     delete gs_fontDefault
; 
  74     gs_fontDefault 
= NULL
; 
  77 wxColour 
wxSystemSettingsNative::GetColour( 
  87         // PM actually has values for these 
  89         case wxSYS_COLOUR_WINDOW
: 
  90             vSysClr 
= SYSCLR_WINDOW
; 
  93         case wxSYS_COLOUR_WINDOWFRAME
: 
  94             vSysClr 
= SYSCLR_WINDOWFRAME
; 
  97         case wxSYS_COLOUR_MENUTEXT
: 
  98             vSysClr 
= SYSCLR_MENUTEXT
; 
 101         case wxSYS_COLOUR_MENUHILIGHT
: 
 102             vSysClr 
= SYSCLR_MENUHILITE
; 
 105         case wxSYS_COLOUR_BTNFACE
: 
 106             vSysClr 
= SYSCLR_BUTTONMIDDLE
; 
 109         case wxSYS_COLOUR_BTNSHADOW
: 
 110             vSysClr 
= SYSCLR_BUTTONDARK
; 
 113         case wxSYS_COLOUR_BTNHIGHLIGHT
: 
 114             vSysClr 
= SYSCLR_BUTTONLIGHT
; 
 117         case wxSYS_COLOUR_BACKGROUND
: 
 118             vSysClr 
= SYSCLR_BACKGROUND
; 
 121         case wxSYS_COLOUR_APPWORKSPACE
: 
 122             vSysClr 
= SYSCLR_APPWORKSPACE
; 
 125         case wxSYS_COLOUR_MENUBAR
: 
 126         case wxSYS_COLOUR_MENU
: 
 127             vSysClr 
= SYSCLR_MENU
; 
 130         case wxSYS_COLOUR_INACTIVECAPTION
: 
 131             vSysClr 
= SYSCLR_INACTIVETITLE
; 
 134         case wxSYS_COLOUR_INACTIVEBORDER
: 
 135             vSysClr 
= SYSCLR_INACTIVEBORDER
; 
 138         case wxSYS_COLOUR_LISTBOX
: 
 139             vSysClr 
= SYSCLR_ENTRYFIELD
; 
 142         case wxSYS_COLOUR_CAPTIONTEXT
: 
 143             vSysClr 
= SYSCLR_TITLETEXT
; 
 146         case wxSYS_COLOUR_INACTIVECAPTIONTEXT
: 
 147             vSysClr 
= SYSCLR_INACTIVETITLETEXT
; 
 150         case wxSYS_COLOUR_WINDOWTEXT
: 
 151         case wxSYS_COLOUR_BTNTEXT
: 
 152             vSysClr 
= SYSCLR_WINDOWTEXT
; 
 155         case wxSYS_COLOUR_INFOTEXT
: 
 156             vSysClr 
= SYSCLR_HELPTEXT
; 
 159         case wxSYS_COLOUR_ACTIVECAPTION
: 
 160             vSysClr 
= SYSCLR_ACTIVETITLE
; 
 163         case wxSYS_COLOUR_ACTIVEBORDER
: 
 164             vSysClr 
= SYSCLR_ACTIVEBORDER
; 
 167         case wxSYS_COLOUR_HIGHLIGHT
: 
 168             vSysClr 
= SYSCLR_HILITEBACKGROUND
; 
 171         case wxSYS_COLOUR_SCROLLBAR
: 
 172             vSysClr 
= SYSCLR_SCROLLBAR
; 
 175         case wxSYS_COLOUR_HIGHLIGHTTEXT
: 
 176             vSysClr 
= SYSCLR_HILITEFOREGROUND
; 
 179         case wxSYS_COLOUR_INFOBK
: 
 180             vSysClr 
= SYSCLR_HELPBACKGROUND
; 
 183         // Don't know what these should be, so leave them grey (normally) 
 184         case wxSYS_COLOUR_GRAYTEXT
: 
 185         case wxSYS_COLOUR_3DDKSHADOW
: 
 186         case wxSYS_COLOUR_3DLIGHT
: 
 187         case wxSYS_COLOUR_HOTLIGHT
: 
 188         case wxSYS_COLOUR_GRADIENTACTIVECAPTION
: 
 189         case wxSYS_COLOUR_GRADIENTINACTIVECAPTION
: 
 190             vSysClr 
= SYSCLR_BUTTONMIDDLE
; 
 194             vSysClr 
= SYSCLR_WINDOW
; 
 197     vRef 
= (ULONG
)::WinQuerySysColor(   HWND_DESKTOP
, 
 200     vCol
.Set(   GetRValue(vRef
), 
 204 } // end of wxSystemSettingsNative::GetColour 
 206 // ---------------------------------------------------------------------------- 
 208 // ---------------------------------------------------------------------------- 
 210 wxFont 
wxSystemSettingsNative::GetFont( 
 214     const bool isDefaultRequested 
= index 
== wxSYS_DEFAULT_GUI_FONT
; 
 215     if ( isDefaultRequested 
) 
 217         if ( gs_fontDefault 
) 
 218             return *gs_fontDefault
; 
 222     // FIXME: The mapping could be improved and also OS/2 system fonts 
 223     // should be taken into account e.g. by using PrfQueryProfileString 
 224     // to look for PM_System_Fonts in HINI_USERPROFILE. 
 225     // FIXME2: Creating a font from the native font info does not 
 226     // seem to work properly. 
 229         case wxSYS_SYSTEM_FIXED_FONT
: 
 230         case wxSYS_OEM_FIXED_FONT
: 
 231         case wxSYS_ANSI_FIXED_FONT
: 
 233                               wxFONTFAMILY_TELETYPE
, 
 235                               wxFONTWEIGHT_NORMAL   
); 
 237         case wxSYS_ANSI_VAR_FONT
: 
 241                               wxFONTWEIGHT_NORMAL   
); 
 243         case wxSYS_SYSTEM_FONT
: 
 244         case wxSYS_DEFAULT_GUI_FONT
: 
 248                               wxFONTWEIGHT_NORMAL   
); 
 251                 wxFAIL_MSG( wxT("stock font not found") ); 
 252                 return GetFont(wxSYS_ANSI_VAR_FONT
); 
 256     if ( isDefaultRequested 
) 
 258         // if we got here it means we hadn't cached it yet - do now 
 259         gs_fontDefault 
= new wxFont(font
); 
 265 // Get a system metric, e.g. scrollbar size 
 266 int wxSystemSettingsNative::GetMetric( wxSystemMetric index
, 
 267                                        wxWindow
*      WXUNUSED(win
) ) 
 271         // TODO case wxSYS_MOUSE_BUTTONS: 
 272         // TODO case wxSYS_BORDER_X: 
 273         // TODO case wxSYS_BORDER_Y: 
 274         // TODO case wxSYS_CURSOR_X: 
 275         // TODO case wxSYS_CURSOR_Y: 
 276         // TODO case wxSYS_DCLICK_X: 
 277         // TODO case wxSYS_DCLICK_Y: 
 278         // TODO case wxSYS_DRAG_X: 
 279         // TODO case wxSYS_DRAG_Y: 
 280         // TODO case wxSYS_EDGE_X: 
 281         // TODO case wxSYS_EDGE_Y: 
 282         // TODO case wxSYS_HSCROLL_ARROW_X: 
 283         // TODO case wxSYS_HSCROLL_ARROW_Y: 
 284         // TODO case wxSYS_HTHUMB_X: 
 285         // TODO case wxSYS_ICON_X: 
 286         // TODO case wxSYS_ICON_Y: 
 287         // TODO case wxSYS_ICONSPACING_X: 
 288         // TODO case wxSYS_ICONSPACING_Y: 
 289         // TODO case wxSYS_WINDOWMIN_X: 
 290         // TODO case wxSYS_WINDOWMIN_Y: 
 293             return ::WinQuerySysValue(HWND_DESKTOP
,SV_CXSCREEN
); 
 295             return ::WinQuerySysValue(HWND_DESKTOP
,SV_CYSCREEN
); 
 297         // TODO case wxSYS_FRAMESIZE_X: 
 298         // TODO case wxSYS_FRAMESIZE_Y: 
 299         // TODO case wxSYS_SMALLICON_X: 
 300         // TODO case wxSYS_SMALLICON_Y: 
 302         case wxSYS_HSCROLL_Y
: 
 303             return ::WinQuerySysValue(HWND_DESKTOP
,SV_CYHSCROLL
); 
 304         case wxSYS_VSCROLL_X
: 
 305             return ::WinQuerySysValue(HWND_DESKTOP
,SV_CXVSCROLL
); 
 307         // TODO case wxSYS_VSCROLL_ARROW_X: 
 308         // TODO case wxSYS_VSCROLL_ARROW_Y: 
 309         // TODO case wxSYS_VTHUMB_Y: 
 310         // TODO case wxSYS_CAPTION_Y: 
 311         // TODO case wxSYS_MENU_Y: 
 312         // TODO case wxSYS_NETWORK_PRESENT: 
 313         // TODO case wxSYS_PENWINDOWS_PRESENT: 
 314         // TODO case wxSYS_SHOW_SOUNDS: 
 315         // TODO case wxSYS_SWAP_BUTTONS: 
 320     return -1;  // unsupported metric 
 323 bool wxSystemSettingsNative::HasFeature( wxSystemFeature index 
) 
 327         case wxSYS_CAN_ICONIZE_FRAME
: 
 330         // TODO case wxSYS_CAN_DRAW_FRAME_DECORATIONS: 
 331         // TODO case wxSYS_TABLET_PRESENT: