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 
GetColour(wxSystemColour index)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 
GetFont(wxSystemFont index)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
GetMetric(wxSystemMetric index,wxWindow * WXUNUSED (win))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 
HasFeature(wxSystemFeature index)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 }
268