]> git.saurik.com Git - wxWidgets.git/blob - src/os2/settings.cpp
some cleanup, and plug a few small holes
[wxWidgets.git] / src / os2 / settings.cpp
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$
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)
31 class wxSystemSettingsModule : public wxModule
32 {
33 friend class wxSystemSettings;
34 public:
35 virtual bool OnInit();
36 virtual void OnExit();
37
38 private:
39 DECLARE_DYNAMIC_CLASS(wxSystemSettingsModule)
40
41 static wxArrayString sm_optionNames;
42 static wxArrayString sm_optionValues;
43 };
44
45 // ----------------------------------------------------------------------------
46 // global data
47 // ----------------------------------------------------------------------------
48
49 static wxFont *gs_fontDefault = NULL;
50
51 // ============================================================================
52 // implementation
53 // ============================================================================
54
55 // ----------------------------------------------------------------------------
56 // wxSystemSettingsModule
57 // ----------------------------------------------------------------------------
58
59 IMPLEMENT_DYNAMIC_CLASS(wxSystemSettingsModule, wxModule)
60
61 wxArrayString wxSystemSettingsModule::sm_optionNames;
62 wxArrayString wxSystemSettingsModule::sm_optionValues;
63
64 bool wxSystemSettingsModule::OnInit()
65 {
66 return true;
67 }
68
69 void wxSystemSettingsModule::OnExit()
70 {
71 sm_optionNames.Clear();
72 sm_optionValues.Clear();
73 delete gs_fontDefault;
74 gs_fontDefault = NULL;
75 }
76
77 wxColour 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_HIGHLIGHTTEXT:
176 vSysClr = SYSCLR_HILITEFOREGROUND;
177 break;
178
179 case wxSYS_COLOUR_INFOBK:
180 vSysClr = SYSCLR_HELPBACKGROUND;
181 break;
182
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;
191 break;
192
193 default:
194 vSysClr = SYSCLR_WINDOW;
195 break;
196 }
197 vRef = (ULONG)::WinQuerySysColor( HWND_DESKTOP,
198 vSysClr,
199 0L );
200 vCol.Set( GetRValue(vRef),
201 GetGValue(vRef),
202 GetBValue(vRef) );
203 return(vCol);
204 } // end of wxSystemSettingsNative::GetColour
205
206 // ----------------------------------------------------------------------------
207 // fonts
208 // ----------------------------------------------------------------------------
209
210 wxFont wxCreateFontFromStockObject(int WXUNUSED(index))
211 {
212 wxFont font;
213
214 FONTMETRICS metrics;
215 HPS hPS = ::WinGetScreenPS(HWND_DESKTOP);
216 if (::GpiQueryFontMetrics(hPS, sizeof(FONTMETRICS), &metrics))
217 {
218 wxNativeFontInfo info;
219 info.fm = metrics;
220 font.Create(info);
221 }
222 else // GetStockObject() failed
223 {
224 wxFAIL_MSG( _T("stock font not found") );
225 }
226
227 return font;
228 }
229
230 wxFont wxSystemSettingsNative::GetFont(
231 wxSystemFont index
232 )
233 {
234 const bool isDefaultRequested = index == wxSYS_DEFAULT_GUI_FONT;
235 if ( isDefaultRequested )
236 {
237 if ( gs_fontDefault )
238 return *gs_fontDefault;
239 }
240
241 wxFont font = wxCreateFontFromStockObject(index);
242
243 if ( isDefaultRequested )
244 {
245 // if we got here it means we hadn't cached it yet - do now
246 gs_fontDefault = new wxFont(font);
247 }
248
249 return font;
250 }
251
252 // Get a system metric, e.g. scrollbar size
253 int wxSystemSettingsNative::GetMetric( wxSystemMetric index,
254 wxWindow* WXUNUSED(win) )
255 {
256 switch ( index)
257 {
258 // TODO case wxSYS_MOUSE_BUTTONS:
259 // TODO case wxSYS_BORDER_X:
260 // TODO case wxSYS_BORDER_Y:
261 // TODO case wxSYS_CURSOR_X:
262 // TODO case wxSYS_CURSOR_Y:
263 // TODO case wxSYS_DCLICK_X:
264 // TODO case wxSYS_DCLICK_Y:
265 // TODO case wxSYS_DRAG_X:
266 // TODO case wxSYS_DRAG_Y:
267 // TODO case wxSYS_EDGE_X:
268 // TODO case wxSYS_EDGE_Y:
269 // TODO case wxSYS_HSCROLL_ARROW_X:
270 // TODO case wxSYS_HSCROLL_ARROW_Y:
271 // TODO case wxSYS_HTHUMB_X:
272 // TODO case wxSYS_ICON_X:
273 // TODO case wxSYS_ICON_Y:
274 // TODO case wxSYS_ICONSPACING_X:
275 // TODO case wxSYS_ICONSPACING_Y:
276 // TODO case wxSYS_WINDOWMIN_X:
277 // TODO case wxSYS_WINDOWMIN_Y:
278
279 case wxSYS_SCREEN_X:
280 return ::WinQuerySysValue(HWND_DESKTOP,SV_CXSCREEN);
281 case wxSYS_SCREEN_Y:
282 return ::WinQuerySysValue(HWND_DESKTOP,SV_CYSCREEN);
283
284 // TODO case wxSYS_FRAMESIZE_X:
285 // TODO case wxSYS_FRAMESIZE_Y:
286 // TODO case wxSYS_SMALLICON_X:
287 // TODO case wxSYS_SMALLICON_Y:
288
289 case wxSYS_HSCROLL_Y:
290 return ::WinQuerySysValue(HWND_DESKTOP,SV_CYHSCROLL);
291 case wxSYS_VSCROLL_X:
292 return ::WinQuerySysValue(HWND_DESKTOP,SV_CXVSCROLL);
293
294 // TODO case wxSYS_VSCROLL_ARROW_X:
295 // TODO case wxSYS_VSCROLL_ARROW_Y:
296 // TODO case wxSYS_VTHUMB_Y:
297 // TODO case wxSYS_CAPTION_Y:
298 // TODO case wxSYS_MENU_Y:
299 // TODO case wxSYS_NETWORK_PRESENT:
300 // TODO case wxSYS_PENWINDOWS_PRESENT:
301 // TODO case wxSYS_SHOW_SOUNDS:
302 // TODO case wxSYS_SWAP_BUTTONS:
303
304 default:
305 break;
306 }
307 return -1; // unsupported metric
308 }
309
310 bool wxSystemSettingsNative::HasFeature( wxSystemFeature index )
311 {
312 switch (index)
313 {
314 case wxSYS_CAN_ICONIZE_FRAME:
315 return true;
316
317 // TODO case wxSYS_CAN_DRAW_FRAME_DECORATIONS:
318 // TODO case wxSYS_TABLET_PRESENT:
319
320 default:
321 break;
322 }
323
324 return false;
325 }