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: