]> git.saurik.com Git - wxWidgets.git/blame - src/os2/settings.cpp
Compilo fix
[wxWidgets.git] / src / os2 / settings.cpp
CommitLineData
0e320a79 1/////////////////////////////////////////////////////////////////////////////
63a3cd7a 2// Name: src/os2/settings.cpp
0e320a79 3// Purpose: wxSettings
409c9842 4// Author: David Webster
0e320a79 5// Modified by:
409c9842 6// Created: 10/15/99
0e320a79 7// RCS-ID: $Id$
409c9842 8// Copyright: (c) David Webster
65571936 9// Licence: wxWindows licence
0e320a79
DW
10/////////////////////////////////////////////////////////////////////////////
11
409c9842
DW
12// For compilers that support precompilation, includes "wx.h".
13#include "wx/wxprec.h"
14
15#ifndef WX_PRECOMP
7520f3da
WS
16 #include <stdio.h>
17 #include "wx/pen.h"
18 #include "wx/brush.h"
109c9204 19 #include "wx/fontutil.h"
7520f3da 20 #include "wx/gdicmn.h"
cdccdfab 21 #include "wx/window.h"
9eddec69 22 #include "wx/settings.h"
02761f6c 23 #include "wx/module.h"
0e320a79
DW
24#endif
25
409c9842 26#include "wx/os2/private.h"
0e320a79 27
fd6d5c94
DW
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)
30class wxSystemSettingsModule : public wxModule
31{
32 friend class wxSystemSettings;
33public:
34 virtual bool OnInit();
35 virtual void OnExit();
36
37private:
38 DECLARE_DYNAMIC_CLASS(wxSystemSettingsModule)
39
40 static wxArrayString sm_optionNames;
41 static wxArrayString sm_optionValues;
42};
43
44// ----------------------------------------------------------------------------
45// global data
46// ----------------------------------------------------------------------------
47
48static wxFont *gs_fontDefault = NULL;
49
50// ============================================================================
51// implementation
52// ============================================================================
53
54// ----------------------------------------------------------------------------
55// wxSystemSettingsModule
56// ----------------------------------------------------------------------------
57
58IMPLEMENT_DYNAMIC_CLASS(wxSystemSettingsModule, wxModule)
59
60wxArrayString wxSystemSettingsModule::sm_optionNames;
61wxArrayString wxSystemSettingsModule::sm_optionValues;
62
63bool wxSystemSettingsModule::OnInit()
64{
63a3cd7a 65 return true;
fd6d5c94
DW
66}
67
68void wxSystemSettingsModule::OnExit()
69{
70 sm_optionNames.Clear();
71 sm_optionValues.Clear();
72 delete gs_fontDefault;
109c9204 73 gs_fontDefault = NULL;
fd6d5c94
DW
74}
75
793c7f9b
DW
76wxColour wxSystemSettingsNative::GetColour(
77 wxSystemColour nIndex
a0606634 78)
0e320a79 79{
a0606634
DW
80 COLORREF vRef;
81 wxColour vCol;
a12f4647 82 LONG vSysClr;
a0606634
DW
83 switch (nIndex)
84 {
85 //
86 // PM actually has values for these
87 //
88 case wxSYS_COLOUR_WINDOW:
a12f4647 89 vSysClr = SYSCLR_WINDOW;
a0606634
DW
90 break;
91
92 case wxSYS_COLOUR_WINDOWFRAME:
a12f4647 93 vSysClr = SYSCLR_WINDOWFRAME;
a0606634
DW
94 break;
95
96 case wxSYS_COLOUR_MENUTEXT:
a12f4647
SN
97 vSysClr = SYSCLR_MENUTEXT;
98 break;
99
100 case wxSYS_COLOUR_MENUHILIGHT:
101 vSysClr = SYSCLR_MENUHILITE;
a0606634
DW
102 break;
103
104 case wxSYS_COLOUR_BTNFACE:
a12f4647 105 vSysClr = SYSCLR_BUTTONMIDDLE;
a0606634
DW
106 break;
107
108 case wxSYS_COLOUR_BTNSHADOW:
a12f4647 109 vSysClr = SYSCLR_BUTTONDARK;
a0606634
DW
110 break;
111
112 case wxSYS_COLOUR_BTNHIGHLIGHT:
a12f4647
SN
113 vSysClr = SYSCLR_BUTTONLIGHT;
114 break;
115
116 case wxSYS_COLOUR_BACKGROUND:
117 vSysClr = SYSCLR_BACKGROUND;
118 break;
119
120 case wxSYS_COLOUR_APPWORKSPACE:
121 vSysClr = SYSCLR_APPWORKSPACE;
a0606634
DW
122 break;
123
d697657f 124 case wxSYS_COLOUR_MENUBAR:
a12f4647
SN
125 case wxSYS_COLOUR_MENU:
126 vSysClr = SYSCLR_MENU;
127 break;
128
129 case wxSYS_COLOUR_INACTIVECAPTION:
130 vSysClr = SYSCLR_INACTIVETITLE;
131 break;
132
133 case wxSYS_COLOUR_INACTIVEBORDER:
134 vSysClr = SYSCLR_INACTIVEBORDER;
d697657f
DW
135 break;
136
a0606634 137 case wxSYS_COLOUR_LISTBOX:
a12f4647
SN
138 vSysClr = SYSCLR_ENTRYFIELD;
139 break;
140
a0606634 141 case wxSYS_COLOUR_CAPTIONTEXT:
a12f4647
SN
142 vSysClr = SYSCLR_TITLETEXT;
143 break;
a0606634 144
a0606634 145 case wxSYS_COLOUR_INACTIVECAPTIONTEXT:
a12f4647
SN
146 vSysClr = SYSCLR_INACTIVETITLETEXT;
147 break;
148
149 case wxSYS_COLOUR_WINDOWTEXT:
a0606634 150 case wxSYS_COLOUR_BTNTEXT:
a12f4647 151 vSysClr = SYSCLR_WINDOWTEXT;
a0606634
DW
152 break;
153
a12f4647
SN
154 case wxSYS_COLOUR_INFOTEXT:
155 vSysClr = SYSCLR_HELPTEXT;
156 break;
a0606634
DW
157
158 case wxSYS_COLOUR_ACTIVECAPTION:
a12f4647
SN
159 vSysClr = SYSCLR_ACTIVETITLE;
160 break;
161
a0606634 162 case wxSYS_COLOUR_ACTIVEBORDER:
a12f4647
SN
163 vSysClr = SYSCLR_ACTIVEBORDER;
164 break;
165
a0606634 166 case wxSYS_COLOUR_HIGHLIGHT:
a12f4647 167 vSysClr = SYSCLR_HILITEBACKGROUND;
a0606634
DW
168 break;
169
170 case wxSYS_COLOUR_SCROLLBAR:
a12f4647
SN
171 vSysClr = SYSCLR_SCROLLBAR;
172 break;
173
a0606634 174 case wxSYS_COLOUR_HIGHLIGHTTEXT:
a12f4647
SN
175 vSysClr = SYSCLR_HILITEFOREGROUND;
176 break;
177
178 case wxSYS_COLOUR_INFOBK:
179 vSysClr = SYSCLR_HELPBACKGROUND;
180 break;
181
182 // Don't know what these should be, so leave them grey (normally)
a0606634
DW
183 case wxSYS_COLOUR_GRAYTEXT:
184 case wxSYS_COLOUR_3DDKSHADOW:
185 case wxSYS_COLOUR_3DLIGHT:
a12f4647
SN
186 case wxSYS_COLOUR_HOTLIGHT:
187 case wxSYS_COLOUR_GRADIENTACTIVECAPTION:
188 case wxSYS_COLOUR_GRADIENTINACTIVECAPTION:
189 vSysClr = SYSCLR_BUTTONMIDDLE;
a0606634
DW
190 break;
191
192 default:
a12f4647 193 vSysClr = SYSCLR_WINDOW;
a0606634
DW
194 break;
195 }
a12f4647
SN
196 vRef = (ULONG)::WinQuerySysColor( HWND_DESKTOP,
197 vSysClr,
198 0L );
199 vCol.Set( GetRValue(vRef),
200 GetGValue(vRef),
201 GetBValue(vRef) );
a0606634 202 return(vCol);
793c7f9b 203} // end of wxSystemSettingsNative::GetColour
0e320a79 204
109c9204
SN
205// ----------------------------------------------------------------------------
206// fonts
207// ----------------------------------------------------------------------------
208
209wxFont wxCreateFontFromStockObject(int index)
210{
211 wxFont font;
212
213 FONTMETRICS metrics;
214 HPS hPS = ::WinGetScreenPS(HWND_DESKTOP);
215 if (::GpiQueryFontMetrics(hPS, sizeof(FONTMETRICS), &metrics))
216 {
217 wxNativeFontInfo info;
218 info.fm = metrics;
219 font.Create(info);
220 }
221 else // GetStockObject() failed
222 {
223 wxFAIL_MSG( _T("stock font not found") );
224 }
225
226 return font;
227}
228
793c7f9b
DW
229wxFont wxSystemSettingsNative::GetFont(
230 wxSystemFont index
231)
0e320a79 232{
109c9204
SN
233 const bool isDefaultRequested = index == wxSYS_DEFAULT_GUI_FONT;
234 if ( isDefaultRequested )
0e320a79 235 {
109c9204
SN
236 if ( gs_fontDefault )
237 return *gs_fontDefault;
238 }
239
240 wxFont font = wxCreateFontFromStockObject(index);
241
242 if ( isDefaultRequested )
243 {
244 // if we got here it means we hadn't cached it yet - do now
245 gs_fontDefault = new wxFont(font);
0e320a79
DW
246 }
247
109c9204 248 return font;
0e320a79
DW
249}
250
251// Get a system metric, e.g. scrollbar size
6670f564
WS
252int wxSystemSettingsNative::GetMetric( wxSystemMetric index,
253 wxWindow* WXUNUSED(win) )
0e320a79 254{
409c9842
DW
255 switch ( index)
256 {
1d451c5b
RD
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:
6670f564 277
0e320a79 278 case wxSYS_SCREEN_X:
68a2e005 279 return ::WinQuerySysValue(HWND_DESKTOP,SV_CXSCREEN);
0e320a79 280 case wxSYS_SCREEN_Y:
68a2e005 281 return ::WinQuerySysValue(HWND_DESKTOP,SV_CYSCREEN);
6670f564 282
1d451c5b
RD
283 // TODO case wxSYS_FRAMESIZE_X:
284 // TODO case wxSYS_FRAMESIZE_Y:
285 // TODO case wxSYS_SMALLICON_X:
286 // TODO case wxSYS_SMALLICON_Y:
a12f4647
SN
287
288 case wxSYS_HSCROLL_Y:
289 return ::WinQuerySysValue(HWND_DESKTOP,SV_CYHSCROLL);
290 case wxSYS_VSCROLL_X:
291 return ::WinQuerySysValue(HWND_DESKTOP,SV_CXVSCROLL);
292
1d451c5b
RD
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:
63a3cd7a
WS
302
303 default:
63ae3663 304 break;
409c9842 305 }
6670f564 306 return -1; // unsupported metric
0e320a79
DW
307}
308
6670f564 309bool wxSystemSettingsNative::HasFeature( wxSystemFeature index )
253293c1
VS
310{
311 switch (index)
312 {
1a2076a2 313 case wxSYS_CAN_ICONIZE_FRAME:
6670f564 314 return true;
793c7f9b 315
45abfa71
WS
316 // TODO case wxSYS_CAN_DRAW_FRAME_DECORATIONS:
317 // TODO case wxSYS_TABLET_PRESENT:
318
319 default:
320 break;
253293c1 321 }
6670f564
WS
322
323 return false;
253293c1 324}