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