wxMotif for OS/2 adjustements. Source cleaning.
[wxWidgets.git] / src / motif / settings.cpp
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: src/motif/settings.cpp
3 // Purpose: wxSettings
4 // Author: Julian Smart
5 // Modified by:
6 // Created: 17/09/98
7 // RCS-ID: $Id$
8 // Copyright: (c) Julian Smart
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
11
12 // TODO: these settings should probably be configurable from some central or
13 // per-user file, which can be edited using a Windows-control-panel clone.
14 // Also they should be documented better. Some are very MS Windows-ish.
15
16 // For compilers that support precompilation, includes "wx.h".
17 #include "wx/wxprec.h"
18
19 #include "wx/settings.h"
20 #include "wx/gdicmn.h"
21 #include "wx/app.h"
22
23 #ifdef __VMS__
24 #pragma message disable nosimpint
25 #endif
26 #include <Xm/Xm.h>
27 #include <Xm/PushB.h>
28 #ifdef __VMS__
29 #pragma message enable nosimpint
30 #endif
31
32 #include "wx/x11/privx.h"
33
34 // To correctly read the resources from the database, we create a
35 // sample widget. This has the application shell as the parent and
36 // so will be destroyed when the applicaion is closed.
37 static Widget but_setting_wid = NULL;
38
39 wxColour wxSystemSettingsNative::GetColour(wxSystemColour index)
40 {
41 if (NULL == but_setting_wid && wxTheApp && wxTheApp->GetTopLevelWidget())
42 {
43 but_setting_wid = XtVaCreateWidget("settings_button", xmPushButtonWidgetClass,
44 (Widget)wxTheApp->GetTopLevelWidget(), NULL);
45 }
46
47 switch (index)
48 {
49 case wxSYS_COLOUR_WINDOW:
50 {
51 return *wxWHITE;
52 }
53 case wxSYS_COLOUR_SCROLLBAR:
54 // case wxSYS_COLOUR_DESKTOP: // Same as wxSYS_COLOUR_BACKGROUND
55 case wxSYS_COLOUR_BACKGROUND:
56 case wxSYS_COLOUR_ACTIVECAPTION:
57 case wxSYS_COLOUR_INACTIVECAPTION:
58 case wxSYS_COLOUR_MENU:
59 case wxSYS_COLOUR_MENUBAR:
60 case wxSYS_COLOUR_WINDOWFRAME:
61 case wxSYS_COLOUR_ACTIVEBORDER:
62 case wxSYS_COLOUR_INACTIVEBORDER:
63 case wxSYS_COLOUR_BTNFACE:
64 // case wxSYS_COLOUR_3DFACE: // Same as wxSYS_COLOUR_BTNFACE
65 case wxSYS_COLOUR_GRAYTEXT:
66 {
67 if (but_setting_wid)
68 {
69 XColor bg;
70 XtVaGetValues(but_setting_wid,
71 XtVaTypedArg, XmNbackground, XtRColor, &bg, sizeof(bg),
72 NULL);
73 return wxColor((unsigned char)(bg.red >> 8),
74 (unsigned char)(bg.green >> 8),
75 (unsigned char)(bg.blue >> 8));
76 }
77 else
78 {
79 return wxColour("LIGHT GREY");
80 }
81 }
82 case wxSYS_COLOUR_BTNSHADOW:
83 // case wxSYS_COLOUR_3DSHADOW: // Same as wxSYS_COLOUR_BTNSHADOW
84 {
85 return wxColour("GREY");
86 }
87 case wxSYS_COLOUR_3DDKSHADOW:
88 {
89 return *wxBLACK;
90 }
91 case wxSYS_COLOUR_HIGHLIGHT:
92 {
93 return *wxBLUE;
94 }
95 case wxSYS_COLOUR_BTNHIGHLIGHT:
96 case wxSYS_COLOUR_LISTBOX:
97 // case wxSYS_COLOUR_3DHIGHLIGHT: // Same as wxSYS_COLOUR_BTNHIGHLIGHT
98 {
99 return *wxWHITE;
100 }
101 case wxSYS_COLOUR_3DLIGHT:
102 {
103 return wxColour("LIGHT GREY");
104 }
105 case wxSYS_COLOUR_MENUTEXT:
106 case wxSYS_COLOUR_WINDOWTEXT:
107 case wxSYS_COLOUR_CAPTIONTEXT:
108 case wxSYS_COLOUR_INACTIVECAPTIONTEXT:
109 case wxSYS_COLOUR_BTNTEXT:
110 case wxSYS_COLOUR_INFOTEXT:
111 {
112 if (but_setting_wid)
113 {
114 XColor fg;
115 XtVaGetValues(but_setting_wid,
116 XtVaTypedArg, XmNforeground, XtRColor, &fg, sizeof(fg),
117 NULL);
118 return wxColor((unsigned char)(fg.red >> 8),
119 (unsigned char)(fg.green >> 8),
120 (unsigned char)(fg.blue >> 8));
121 }
122 else
123 {
124 return *wxBLACK;
125 }
126 }
127 case wxSYS_COLOUR_HIGHLIGHTTEXT:
128 {
129 return *wxWHITE;
130 }
131 case wxSYS_COLOUR_INFOBK:
132 case wxSYS_COLOUR_APPWORKSPACE:
133 {
134 if (but_setting_wid)
135 {
136 XColor bg;
137 XtVaGetValues(but_setting_wid,
138 XtVaTypedArg, XmNbackground, XtRColor, &bg, sizeof(bg),
139 NULL);
140 return wxColor((unsigned char)(bg.red >> 8),
141 (unsigned char)(bg.green >> 8),
142 (unsigned char)(bg.blue >> 8));
143 }
144 else
145 {
146 return wxColour("LIGHT GREY");
147 }
148 }
149
150 case wxSYS_COLOUR_HOTLIGHT:
151 case wxSYS_COLOUR_GRADIENTACTIVECAPTION:
152 case wxSYS_COLOUR_GRADIENTINACTIVECAPTION:
153 case wxSYS_COLOUR_MENUHILIGHT:
154 // TODO
155 return wxColour("LIGHT GREY");
156
157 default:
158 case wxSYS_COLOUR_MAX:
159 wxFAIL_MSG( _T("unknown colour") );
160 }
161 return *wxWHITE;
162 }
163
164 wxFont wxSystemSettingsNative::GetFont(wxSystemFont index)
165 {
166 int pointSize = 12;
167
168 if ( wxFont::GetDefaultEncoding() == wxFONTENCODING_SHIFT_JIS
169 || wxFont::GetDefaultEncoding() == wxFONTENCODING_EUC_JP)
170 pointSize = 15;
171
172 wxFont font;
173
174 switch (index)
175 {
176 case wxSYS_SYSTEM_FIXED_FONT:
177 {
178 font = wxFont(pointSize, wxMODERN, wxNORMAL, wxNORMAL, false);
179 break;
180 }
181 case wxSYS_DEVICE_DEFAULT_FONT:
182 case wxSYS_SYSTEM_FONT:
183 case wxSYS_DEFAULT_GUI_FONT:
184 default:
185 {
186 font = wxFont(pointSize, wxSWISS, wxNORMAL, wxNORMAL, false);
187 break;
188 }
189 }
190
191 return font;
192 }
193
194 // Get a system metric, e.g. scrollbar size
195 int wxSystemSettingsNative::GetMetric(wxSystemMetric index, wxWindow* WXUNUSED(win))
196 {
197 int return_value = 0;
198
199 switch ( index)
200 {
201 case wxSYS_HSCROLL_Y:
202 case wxSYS_VSCROLL_X:
203 return 15;
204
205 case wxSYS_SCREEN_X:
206 return_value = DisplayWidth( wxGlobalDisplay(), 0 );
207 break;
208 case wxSYS_SCREEN_Y:
209 return_value = DisplayHeight( wxGlobalDisplay(), 0 );
210 break;
211
212 // TODO case wxSYS_MOUSE_BUTTONS:
213 // TODO case wxSYS_BORDER_X:
214 // TODO case wxSYS_BORDER_Y:
215 // TODO case wxSYS_CURSOR_X:
216 // TODO case wxSYS_CURSOR_Y:
217 // TODO case wxSYS_DCLICK_X:
218 // TODO case wxSYS_DCLICK_Y:
219 // TODO case wxSYS_DRAG_X:
220 // TODO case wxSYS_DRAG_Y:
221 // TODO case wxSYS_EDGE_X:
222 // TODO case wxSYS_EDGE_Y:
223 // TODO case wxSYS_HSCROLL_ARROW_X:
224 // TODO case wxSYS_HSCROLL_ARROW_Y:
225 // TODO case wxSYS_HTHUMB_X:
226 // TODO case wxSYS_ICON_X:
227 // TODO case wxSYS_ICON_Y:
228 // TODO case wxSYS_ICONSPACING_X:
229 // TODO case wxSYS_ICONSPACING_Y:
230 // TODO case wxSYS_WINDOWMIN_X:
231 // TODO case wxSYS_WINDOWMIN_Y:
232 // TODO case wxSYS_FRAMESIZE_X:
233 // TODO case wxSYS_FRAMESIZE_Y:
234 // TODO case wxSYS_SMALLICON_X:
235 // TODO case wxSYS_SMALLICON_Y:
236 // TODO case wxSYS_VSCROLL_ARROW_X:
237 // TODO case wxSYS_VSCROLL_ARROW_Y:
238 // TODO case wxSYS_VTHUMB_Y:
239 // TODO case wxSYS_CAPTION_Y:
240 // TODO case wxSYS_MENU_Y:
241 // TODO case wxSYS_NETWORK_PRESENT:
242 // TODO case wxSYS_PENWINDOWS_PRESENT:
243 // TODO case wxSYS_SHOW_SOUNDS:
244 // TODO case wxSYS_SWAP_BUTTONS:
245
246 default:
247 return_value = -1; // unsuported metric
248 }
249
250 return return_value;
251 }
252
253 bool wxSystemSettingsNative::HasFeature(wxSystemFeature index)
254 {
255 switch (index)
256 {
257 case wxSYS_CAN_ICONIZE_FRAME:
258 case wxSYS_CAN_DRAW_FRAME_DECORATIONS:
259 return true;
260
261 default:
262 return false;
263 }
264 }