1///////////////////////////////////////////////////////////////////////////// 2// Name: src/os2/settings.cpp 3// Purpose: wxSettings 4// Author: David Webster 5// Modified by: 6// Created: 10/15/99 7// RCS-ID: $Id: settings.cpp 67017 2011-02-25 09:37:28Z JS $ 8// Copyright: (c) David Webster 9// Licence: wxWindows licence 10///////////////////////////////////////////////////////////////////////////// 11 12// For compilers that support precompilation, includes "wx.h". 13#include "wx/wxprec.h" 14 15#ifndef WX_PRECOMP 16 #include <stdio.h> 17 #include "wx/pen.h" 18 #include "wx/brush.h" 19 #include "wx/gdicmn.h" 20 #include "wx/window.h" 21 #include "wx/settings.h" 22 #include "wx/module.h" 23#endif 24 25#include "wx/fontutil.h" 26 27#include "wx/os2/private.h" 28 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) 31class wxSystemSettingsModule : public wxModule 32{ 33 friend class wxSystemSettings; 34public: 35 virtual bool OnInit(); 36 virtual void OnExit(); 37 38private: 39 DECLARE_DYNAMIC_CLASS(wxSystemSettingsModule) 40 41 static wxArrayString sm_optionNames; 42 static wxArrayString sm_optionValues; 43}; 44 45// ---------------------------------------------------------------------------- 46// global data 47// ---------------------------------------------------------------------------- 48 49static wxFont *gs_fontDefault = NULL; 50 51// ============================================================================ 52// implementation 53// ============================================================================ 54 55// ---------------------------------------------------------------------------- 56// wxSystemSettingsModule 57// ---------------------------------------------------------------------------- 58 59IMPLEMENT_DYNAMIC_CLASS(wxSystemSettingsModule, wxModule) 60 61wxArrayString wxSystemSettingsModule::sm_optionNames; 62wxArrayString wxSystemSettingsModule::sm_optionValues; 63 64bool wxSystemSettingsModule::OnInit() 65{ 66 return true; 67} 68 69void wxSystemSettingsModule::OnExit() 70{ 71 sm_optionNames.Clear(); 72 sm_optionValues.Clear(); 73 delete gs_fontDefault; 74 gs_fontDefault = NULL; 75} 76 77wxColour wxSystemSettingsNative::GetColour( 78 wxSystemColour nIndex 79) 80{ 81 COLORREF vRef; 82 wxColour vCol; 83 LONG vSysClr; 84 switch (nIndex) 85 { 86 // 87 // PM actually has values for these 88 // 89 case wxSYS_COLOUR_WINDOW: 90 vSysClr = SYSCLR_WINDOW; 91 break; 92 93 case wxSYS_COLOUR_WINDOWFRAME: 94 vSysClr = SYSCLR_WINDOWFRAME; 95 break; 96 97 case wxSYS_COLOUR_MENUTEXT: 98 vSysClr = SYSCLR_MENUTEXT; 99 break; 100 101 case wxSYS_COLOUR_MENUHILIGHT: 102 vSysClr = SYSCLR_MENUHILITE; 103 break; 104 105 case wxSYS_COLOUR_BTNFACE: 106 vSysClr = SYSCLR_BUTTONMIDDLE; 107 break; 108 109 case wxSYS_COLOUR_BTNSHADOW: 110 vSysClr = SYSCLR_BUTTONDARK; 111 break; 112 113 case wxSYS_COLOUR_BTNHIGHLIGHT: 114 vSysClr = SYSCLR_BUTTONLIGHT; 115 break; 116 117 case wxSYS_COLOUR_BACKGROUND: 118 vSysClr = SYSCLR_BACKGROUND; 119 break; 120 121 case wxSYS_COLOUR_APPWORKSPACE: 122 vSysClr = SYSCLR_APPWORKSPACE; 123 break; 124 125 case wxSYS_COLOUR_MENUBAR: 126 case wxSYS_COLOUR_MENU: 127 vSysClr = SYSCLR_MENU; 128 break; 129 130 case wxSYS_COLOUR_INACTIVECAPTION: 131 vSysClr = SYSCLR_INACTIVETITLE; 132 break; 133 134 case wxSYS_COLOUR_INACTIVEBORDER: 135 vSysClr = SYSCLR_INACTIVEBORDER; 136 break; 137 138 case wxSYS_COLOUR_LISTBOX: 139 vSysClr = SYSCLR_ENTRYFIELD; 140 break; 141 142 case wxSYS_COLOUR_CAPTIONTEXT: 143 vSysClr = SYSCLR_TITLETEXT; 144 break; 145 146 case wxSYS_COLOUR_INACTIVECAPTIONTEXT: 147 vSysClr = SYSCLR_INACTIVETITLETEXT; 148 break; 149 150 case wxSYS_COLOUR_WINDOWTEXT: 151 case wxSYS_COLOUR_BTNTEXT: 152 vSysClr = SYSCLR_WINDOWTEXT; 153 break; 154 155 case wxSYS_COLOUR_INFOTEXT: 156 vSysClr = SYSCLR_HELPTEXT; 157 break; 158 159 case wxSYS_COLOUR_ACTIVECAPTION: 160 vSysClr = SYSCLR_ACTIVETITLE; 161 break; 162 163 case wxSYS_COLOUR_ACTIVEBORDER: 164 vSysClr = SYSCLR_ACTIVEBORDER; 165 break; 166 167 case wxSYS_COLOUR_HIGHLIGHT: 168 vSysClr = SYSCLR_HILITEBACKGROUND; 169 break; 170 171 case wxSYS_COLOUR_SCROLLBAR: 172 vSysClr = SYSCLR_SCROLLBAR; 173 break; 174 175 case wxSYS_COLOUR_LISTBOXHIGHLIGHTTEXT: 176 case wxSYS_COLOUR_HIGHLIGHTTEXT: 177 vSysClr = SYSCLR_HILITEFOREGROUND; 178 break; 179 180 case wxSYS_COLOUR_INFOBK: 181 vSysClr = SYSCLR_HELPBACKGROUND; 182 break; 183 184 // Don't know what these should be, so leave them grey (normally) 185 case wxSYS_COLOUR_GRAYTEXT: 186 case wxSYS_COLOUR_3DDKSHADOW: 187 case wxSYS_COLOUR_3DLIGHT: 188 case wxSYS_COLOUR_HOTLIGHT: 189 case wxSYS_COLOUR_GRADIENTACTIVECAPTION: 190 case wxSYS_COLOUR_GRADIENTINACTIVECAPTION: 191 vSysClr = SYSCLR_BUTTONMIDDLE; 192 break; 193 194 default: 195 vSysClr = SYSCLR_WINDOW; 196 break; 197 } 198 vRef = (ULONG)::WinQuerySysColor( HWND_DESKTOP, 199 vSysClr, 200 0L ); 201 vCol.Set( GetRValue(vRef), 202 GetGValue(vRef), 203 GetBValue(vRef) ); 204 return(vCol); 205} // end of wxSystemSettingsNative::GetColour 206 207// ---------------------------------------------------------------------------- 208// fonts 209// ---------------------------------------------------------------------------- 210 211wxFont wxSystemSettingsNative::GetFont( 212 wxSystemFont index 213) 214{ 215 const bool isDefaultRequested = index == wxSYS_DEFAULT_GUI_FONT; 216 if ( isDefaultRequested ) 217 { 218 if ( gs_fontDefault ) 219 return *gs_fontDefault; 220 } 221 222 wxFont font; 223 // FIXME: The mapping could be improved and also OS/2 system fonts 224 // should be taken into account e.g. by using PrfQueryProfileString 225 // to look for PM_System_Fonts in HINI_USERPROFILE. 226 // FIXME2: Creating a font from the native font info does not 227 // seem to work properly. 228 switch (index) 229 { 230 case wxSYS_SYSTEM_FIXED_FONT: 231 case wxSYS_OEM_FIXED_FONT: 232 case wxSYS_ANSI_FIXED_FONT: 233 font.Create( 10, 234 wxFONTFAMILY_TELETYPE, 235 wxFONTSTYLE_NORMAL, 236 wxFONTWEIGHT_NORMAL ); 237 break; 238 case wxSYS_ANSI_VAR_FONT: 239 font.Create( 10, 240 wxFONTFAMILY_MODERN, 241 wxFONTSTYLE_NORMAL, 242 wxFONTWEIGHT_NORMAL ); 243 break; 244 case wxSYS_SYSTEM_FONT: 245 case wxSYS_DEFAULT_GUI_FONT: 246 font.Create( 10, 247 wxFONTFAMILY_SWISS, 248 wxFONTSTYLE_NORMAL, 249 wxFONTWEIGHT_NORMAL ); 250 break; 251 default: 252 wxFAIL_MSG( _T("stock font not found") ); 253 return GetFont(wxSYS_ANSI_VAR_FONT); 254 } 255 256 257 if ( isDefaultRequested ) 258 { 259 // if we got here it means we hadn't cached it yet - do now 260 gs_fontDefault = new wxFont(font); 261 } 262 263 return font; 264} 265 266// Get a system metric, e.g. scrollbar size 267int wxSystemSettingsNative::GetMetric( wxSystemMetric index, 268 wxWindow* WXUNUSED(win) ) 269{ 270 switch ( index) 271 { 272 // TODO case wxSYS_MOUSE_BUTTONS: 273 // TODO case wxSYS_BORDER_X: 274 // TODO case wxSYS_BORDER_Y: 275 // TODO case wxSYS_CURSOR_X: 276 // TODO case wxSYS_CURSOR_Y: 277 // TODO case wxSYS_DCLICK_X: 278 // TODO case wxSYS_DCLICK_Y: 279 // TODO case wxSYS_DRAG_X: 280 // TODO case wxSYS_DRAG_Y: 281 // TODO case wxSYS_EDGE_X: 282 // TODO case wxSYS_EDGE_Y: 283 // TODO case wxSYS_HSCROLL_ARROW_X: 284 // TODO case wxSYS_HSCROLL_ARROW_Y: 285 // TODO case wxSYS_HTHUMB_X: 286 // TODO case wxSYS_ICON_X: 287 // TODO case wxSYS_ICON_Y: 288 // TODO case wxSYS_ICONSPACING_X: 289 // TODO case wxSYS_ICONSPACING_Y: 290 // TODO case wxSYS_WINDOWMIN_X: 291 // TODO case wxSYS_WINDOWMIN_Y: 292 293 case wxSYS_SCREEN_X: 294 return ::WinQuerySysValue(HWND_DESKTOP,SV_CXSCREEN); 295 case wxSYS_SCREEN_Y: 296 return ::WinQuerySysValue(HWND_DESKTOP,SV_CYSCREEN); 297 298 // TODO case wxSYS_FRAMESIZE_X: 299 // TODO case wxSYS_FRAMESIZE_Y: 300 // TODO case wxSYS_SMALLICON_X: 301 // TODO case wxSYS_SMALLICON_Y: 302 303 case wxSYS_HSCROLL_Y: 304 return ::WinQuerySysValue(HWND_DESKTOP,SV_CYHSCROLL); 305 case wxSYS_VSCROLL_X: 306 return ::WinQuerySysValue(HWND_DESKTOP,SV_CXVSCROLL); 307 308 // TODO case wxSYS_VSCROLL_ARROW_X: 309 // TODO case wxSYS_VSCROLL_ARROW_Y: 310 // TODO case wxSYS_VTHUMB_Y: 311 // TODO case wxSYS_CAPTION_Y: 312 // TODO case wxSYS_MENU_Y: 313 // TODO case wxSYS_NETWORK_PRESENT: 314 // TODO case wxSYS_PENWINDOWS_PRESENT: 315 // TODO case wxSYS_SHOW_SOUNDS: 316 // TODO case wxSYS_SWAP_BUTTONS: 317 318 default: 319 break; 320 } 321 return -1; // unsupported metric 322} 323 324bool wxSystemSettingsNative::HasFeature( wxSystemFeature index ) 325{ 326 switch (index) 327 { 328 case wxSYS_CAN_ICONIZE_FRAME: 329 return true; 330 331 // TODO case wxSYS_CAN_DRAW_FRAME_DECORATIONS: 332 // TODO case wxSYS_TABLET_PRESENT: 333 334 default: 335 break; 336 } 337 338 return false; 339} 340