]>
Commit | Line | Data |
---|---|---|
7c23a0b0 JS |
1 | ///////////////////////////////////////////////////////////////////////////// |
2 | // Name: winstyle.cpp | |
3 | // Purpose: Window styles | |
4 | // Author: Julian Smart | |
5 | // Modified by: | |
6 | // Created: 04/01/98 | |
7 | // RCS-ID: $Id$ | |
8 | // Copyright: (c) Julian Smart | |
9 | // Licence: wxWindows licence | |
10 | ///////////////////////////////////////////////////////////////////////////// | |
11 | ||
12 | #ifdef __GNUG__ | |
13 | #pragma implementation "winstyle.h" | |
14 | #endif | |
15 | ||
16 | // For compilers that support precompilation, includes "wx/wx.h". | |
17 | #include "wx/wxprec.h" | |
18 | ||
19 | #ifdef __BORLANDC__ | |
20 | #pragma hdrstop | |
21 | #endif | |
22 | ||
23 | #ifndef WX_PRECOMP | |
24 | #include "wx/wx.h" | |
25 | #endif | |
26 | ||
27 | #include <ctype.h> | |
28 | #include <stdlib.h> | |
29 | #include <math.h> | |
30 | #include <string.h> | |
31 | ||
32 | #include "winstyle.h" | |
33 | ||
34 | /* | |
35 | * Styles | |
36 | */ | |
37 | ||
38 | /* wxListBox */ | |
39 | static wxWindowStylePair g_WindowStylesListBox[] = { | |
40 | { "wxLB_SINGLE", wxLB_SINGLE }, | |
41 | { "wxLB_MULTIPLE", wxLB_MULTIPLE }, | |
42 | { "wxLB_EXTENDED", wxLB_EXTENDED }, | |
43 | { "wxLB_NEEDED_SB", wxLB_NEEDED_SB }, | |
44 | { "wxLB_ALWAYS_SB", wxLB_ALWAYS_SB }, | |
45 | { "wxLB_SORT", wxLB_SORT }, | |
46 | { "wxLB_OWNERDRAW", wxLB_OWNERDRAW }, | |
47 | { "wxLB_HSCROLL", wxLB_HSCROLL } | |
48 | }; | |
49 | ||
50 | int g_WindowStylesListBoxCount = sizeof(g_WindowStylesListBox)/sizeof(wxWindowStylePair) ; | |
51 | ||
52 | /* wxComboxBox */ | |
53 | static wxWindowStylePair g_WindowStylesComboBox[] = { | |
54 | { "wxCB_SIMPLE", wxCB_SIMPLE }, | |
55 | { "wxCB_DROPDOWN", wxCB_DROPDOWN }, | |
56 | { "wxCB_READONLY", wxCB_READONLY }, | |
57 | { "wxCB_SORT", wxCB_SORT } | |
58 | }; | |
59 | ||
60 | int g_WindowStylesComboBoxCount = sizeof(g_WindowStylesComboBox)/sizeof(wxWindowStylePair) ; | |
61 | ||
62 | #if 0 | |
63 | /* wxChoice */ | |
64 | static wxWindowStylePair g_WindowStylesChoice[] = { | |
65 | }; | |
66 | ||
67 | int g_WindowStylesChoiceCount = sizeof(g_WindowStylesChoice)/sizeof(wxWindowStylePair) ; | |
68 | #endif | |
69 | ||
70 | /* wxGauge */ | |
71 | static wxWindowStylePair g_WindowStylesGauge[] = { | |
72 | { "wxGA_PROGRESSBAR", wxGA_PROGRESSBAR }, | |
73 | { "wxGA_HORIZONTAL", wxGA_HORIZONTAL }, | |
74 | { "wxGA_VERTICAL", wxGA_VERTICAL } | |
75 | }; | |
76 | ||
77 | int g_WindowStylesGaugeCount = sizeof(g_WindowStylesGauge)/sizeof(wxWindowStylePair) ; | |
78 | ||
79 | /* wxTextCtrl */ | |
80 | static wxWindowStylePair g_WindowStylesTextCtrl[] = { | |
6cd47507 JS |
81 | // { "wxPASSWORD", wxPASSWORD}, |
82 | // { "wxPROCESS_ENTER", wxPROCESS_ENTER}, | |
7c23a0b0 JS |
83 | { "wxTE_PASSWORD", wxTE_PASSWORD}, |
84 | { "wxTE_READONLY", wxTE_READONLY}, | |
85 | { "wxTE_PROCESS_ENTER", wxTE_PROCESS_ENTER}, | |
86 | { "wxTE_MULTILINE", wxTE_MULTILINE} | |
87 | }; | |
88 | ||
89 | int g_WindowStylesTextCtrlCount = sizeof(g_WindowStylesTextCtrl)/sizeof(wxWindowStylePair) ; | |
90 | ||
91 | /* wxRadioButton */ | |
92 | static wxWindowStylePair g_WindowStylesRadioButton[] = { | |
93 | { "wxRB_GROUP", wxRB_GROUP } | |
94 | }; | |
95 | ||
96 | int g_WindowStylesRadioButtonCount = sizeof(g_WindowStylesRadioButton)/sizeof(wxWindowStylePair) ; | |
97 | ||
98 | /* wxRadioBox */ | |
99 | static wxWindowStylePair g_WindowStylesRadioBox[] = { | |
94b49b93 | 100 | { "wxRA_SPECIFY_COLS", wxRA_SPECIFY_COLS }, |
1f916a19 JS |
101 | { "wxRA_SPECIFY_ROWS", wxRA_SPECIFY_ROWS } |
102 | /* | |
103 | , | |
7c23a0b0 JS |
104 | { "wxRA_HORIZONTAL", wxRA_HORIZONTAL }, |
105 | { "wxRA_VERTICAL", wxRA_VERTICAL } | |
1f916a19 | 106 | */ |
7c23a0b0 JS |
107 | }; |
108 | ||
109 | int g_WindowStylesRadioBoxCount = sizeof(g_WindowStylesRadioBox)/sizeof(wxWindowStylePair) ; | |
110 | ||
111 | /* wxSlider */ | |
112 | static wxWindowStylePair g_WindowStylesSlider[] = { | |
113 | { "wxSL_HORIZONTAL", wxSL_HORIZONTAL }, | |
114 | { "wxSL_VERTICAL", wxSL_VERTICAL }, | |
115 | { "wxSL_AUTOTICKS", wxSL_AUTOTICKS }, | |
116 | { "wxSL_LABELS", wxSL_LABELS }, | |
117 | { "wxSL_LEFT", wxSL_LEFT }, | |
118 | { "wxSL_TOP", wxSL_TOP }, | |
119 | { "wxSL_RIGHT", wxSL_RIGHT }, | |
120 | { "wxSL_BOTTOM", wxSL_BOTTOM }, | |
121 | { "wxSL_BOTH", wxSL_BOTH }, | |
122 | { "wxSL_SELRANGE", wxSL_SELRANGE } | |
123 | }; | |
124 | ||
125 | int g_WindowStylesSliderCount = sizeof(g_WindowStylesSlider)/sizeof(wxWindowStylePair) ; | |
126 | ||
127 | /* wxScrollBar */ | |
128 | static wxWindowStylePair g_WindowStylesScrollBar[] = { | |
129 | { "wxSB_HORIZONTAL", wxSB_HORIZONTAL }, | |
130 | { "wxSB_VERTICAL", wxSB_VERTICAL } | |
131 | }; | |
132 | ||
133 | int g_WindowStylesScrollBarCount = sizeof(g_WindowStylesScrollBar)/sizeof(wxWindowStylePair) ; | |
134 | ||
135 | /* wxButton */ | |
136 | static wxWindowStylePair g_WindowStylesButton[] = { | |
137 | { "wxBU_AUTODRAW", wxBU_AUTODRAW }, | |
138 | { "wxBU_NOAUTODRAW", wxBU_NOAUTODRAW } | |
139 | }; | |
140 | ||
141 | int g_WindowStylesButtonCount = sizeof(g_WindowStylesButton)/sizeof(wxWindowStylePair) ; | |
142 | ||
143 | /* wxTreeCtrl */ | |
144 | static wxWindowStylePair g_WindowStylesTreeCtrl[] = { | |
145 | { "wxTR_HAS_BUTTONS", wxTR_HAS_BUTTONS }, | |
146 | { "wxTR_EDIT_LABELS", wxTR_EDIT_LABELS }, | |
147 | { "wxTR_LINES_AT_ROOT", wxTR_LINES_AT_ROOT } | |
148 | }; | |
149 | ||
150 | int g_WindowStylesTreeCtrlCount = sizeof(g_WindowStylesTreeCtrl)/sizeof(wxWindowStylePair) ; | |
151 | ||
152 | /* wxListCtrl */ | |
153 | static wxWindowStylePair g_WindowStylesListCtrl[] = { | |
154 | { "wxLC_ICON", wxLC_ICON }, | |
155 | { "wxLC_SMALL_ICON", wxLC_SMALL_ICON }, | |
156 | { "wxLC_LIST", wxLC_LIST }, | |
157 | { "wxLC_REPORT", wxLC_REPORT }, | |
158 | { "wxLC_ALIGN_TOP", wxLC_ALIGN_TOP }, | |
159 | { "wxLC_ALIGN_LEFT", wxLC_ALIGN_LEFT }, | |
160 | { "wxLC_AUTOARRANGE", wxLC_AUTOARRANGE }, | |
161 | { "wxLC_USER_TEXT", wxLC_USER_TEXT }, | |
162 | { "wxLC_EDIT_LABELS", wxLC_EDIT_LABELS }, | |
163 | { "wxLC_NO_HEADER", wxLC_NO_HEADER }, | |
164 | { "wxLC_NO_SORT_HEADER", wxLC_NO_SORT_HEADER }, | |
165 | { "wxLC_SINGLE_SEL", wxLC_SINGLE_SEL }, | |
166 | { "wxLC_SORT_ASCENDING", wxLC_SORT_ASCENDING }, | |
167 | { "wxLC_SORT_DESCENDING", wxLC_SORT_DESCENDING } | |
168 | }; | |
169 | ||
170 | int g_WindowStylesListCtrlCount = sizeof(g_WindowStylesListCtrl)/sizeof(wxWindowStylePair) ; | |
171 | ||
172 | /* wxSpinButton */ | |
173 | static wxWindowStylePair g_WindowStylesSpinButton[] = { | |
174 | { "wxSP_VERTICAL", wxSP_VERTICAL}, | |
175 | { "wxSP_HORIZONTAL", wxSP_HORIZONTAL}, | |
176 | { "wxSP_ARROW_KEYS", wxSP_ARROW_KEYS}, | |
177 | { "wxSP_WRAP", wxSP_WRAP} | |
178 | }; | |
179 | ||
180 | int g_WindowStylesSpinButtonCount = sizeof(g_WindowStylesSpinButton)/sizeof(wxWindowStylePair) ; | |
181 | ||
182 | /* wxSplitterWindow */ | |
183 | static wxWindowStylePair g_WindowStylesSplitterWindow[] = { | |
184 | { "wxSP_NOBORDER", wxSP_NOBORDER}, | |
185 | { "wxSP_3D", wxSP_3D}, | |
186 | { "wxSP_BORDER", wxSP_BORDER} | |
187 | }; | |
188 | ||
189 | int g_WindowStylesSplitterWindowCount = sizeof(g_WindowStylesSplitterWindow)/sizeof(wxWindowStylePair) ; | |
190 | ||
191 | /* wxTabCtrl */ | |
192 | static wxWindowStylePair g_WindowStylesTabCtrl[] = { | |
193 | { "wxTC_MULTILINE", wxTC_MULTILINE}, | |
194 | { "wxTC_RIGHTJUSTIFY", wxTC_RIGHTJUSTIFY}, | |
195 | { "wxTC_FIXEDWIDTH", wxTC_FIXEDWIDTH}, | |
196 | { "wxTC_OWNERDRAW", wxTC_OWNERDRAW} | |
197 | }; | |
198 | ||
199 | int g_WindowStylesTabCtrlCount = sizeof(g_WindowStylesTabCtrl)/sizeof(wxWindowStylePair) ; | |
200 | ||
201 | /* wxStatusBar95 */ | |
202 | static wxWindowStylePair g_WindowStylesStatusBar[] = { | |
203 | { "wxST_SIZEGRIP", wxST_SIZEGRIP} | |
204 | }; | |
205 | ||
206 | int g_WindowStylesStatusBarCount = sizeof(g_WindowStylesStatusBar)/sizeof(wxWindowStylePair) ; | |
207 | ||
208 | /* wxControl */ | |
209 | static wxWindowStylePair g_WindowStylesControl[] = { | |
210 | { "wxFIXED_LENGTH", wxFIXED_LENGTH}, | |
211 | { "wxALIGN_LEFT", wxALIGN_LEFT}, | |
212 | { "wxALIGN_CENTRE", wxALIGN_CENTRE}, | |
213 | { "wxALIGN_RIGHT", wxALIGN_RIGHT}, | |
214 | { "wxCOLOURED", wxCOLOURED} | |
215 | }; | |
216 | ||
217 | int g_WindowStylesControlCount = sizeof(g_WindowStylesControl)/sizeof(wxWindowStylePair) ; | |
218 | ||
219 | /* wxToolBar */ | |
220 | static wxWindowStylePair g_WindowStylesToolBar[] = { | |
221 | { "wxTB_3DBUTTONS", wxTB_3DBUTTONS}, | |
222 | { "wxTB_HORIZONTAL", wxTB_HORIZONTAL}, | |
223 | { "wxTB_VERTICAL", wxTB_VERTICAL}, | |
224 | { "wxTB_FLAT", wxTB_FLAT} | |
225 | }; | |
226 | ||
227 | int g_WindowStylesToolBarCount = sizeof(g_WindowStylesToolBar)/sizeof(wxWindowStylePair) ; | |
228 | ||
229 | /* Frame/dialog */ | |
230 | static wxWindowStylePair g_WindowStylesDialog[] = { | |
231 | { "wxSTAY_ON_TOP", wxSTAY_ON_TOP}, | |
232 | { "wxCAPTION", wxCAPTION}, | |
233 | { "wxICONIZE", wxICONIZE}, | |
234 | { "wxMINIMIZE", wxICONIZE}, | |
235 | { "wxMAXIMIZE", wxMAXIMIZE}, | |
236 | { "wxTHICK_FRAME", wxTHICK_FRAME}, | |
237 | { "wxRESIZE_BORDER", wxRESIZE_BORDER}, | |
238 | { "wxSYSTEM_MENU", wxSYSTEM_MENU}, | |
239 | { "wxMINIMIZE_BOX", wxMINIMIZE_BOX}, | |
240 | { "wxMAXIMIZE_BOX", wxMAXIMIZE_BOX}, | |
241 | { "wxRESIZE_BOX", wxRESIZE_BOX} | |
242 | }; | |
243 | ||
244 | int g_WindowStylesDialogCount = sizeof(g_WindowStylesDialog)/sizeof(wxWindowStylePair) ; | |
245 | ||
246 | /* Generic */ | |
247 | static wxWindowStylePair g_WindowStylesWindow[] = { | |
248 | { "wxBORDER", wxBORDER}, | |
249 | { "wxDOUBLE_BORDER", wxDOUBLE_BORDER}, | |
250 | { "wxSUNKEN_BORDER", wxSUNKEN_BORDER}, | |
251 | { "wxRAISED_BORDER", wxRAISED_BORDER}, | |
252 | { "wxSIMPLE_BORDER", wxSIMPLE_BORDER}, | |
253 | { "wxSTATIC_BORDER", wxSTATIC_BORDER}, | |
254 | { "wxTRANSPARENT_WINDOW", wxTRANSPARENT_WINDOW}, | |
255 | { "wxNO_BORDER", wxNO_BORDER}, | |
9c331ded JS |
256 | { "wxCLIP_CHILDREN", wxCLIP_CHILDREN} |
257 | ||
258 | /* Would be duplicated with e.g. wxLB_HSCROLL | |
7c23a0b0 JS |
259 | { "wxVSCROLL", wxVSCROLL }, |
260 | { "wxHSCROLL", wxHSCROLL } | |
9c331ded | 261 | */ |
7c23a0b0 JS |
262 | }; |
263 | ||
264 | int g_WindowStylesWindowCount = sizeof(g_WindowStylesWindow)/sizeof(wxWindowStylePair) ; | |
265 | ||
266 | /* | |
267 | * A table holding all class style objects | |
268 | */ | |
269 | ||
270 | ||
271 | wxWindowStyleTable::wxWindowStyleTable(): | |
272 | m_classes(wxKEY_STRING) | |
273 | { | |
274 | } | |
275 | ||
276 | wxWindowStyleTable::~wxWindowStyleTable() | |
277 | { | |
278 | ClearTable(); | |
279 | } | |
280 | ||
281 | void wxWindowStyleTable::Init() | |
282 | { | |
283 | AddStyles("wxWindow", g_WindowStylesWindowCount, g_WindowStylesWindow); | |
284 | AddStyles("wxDialog", g_WindowStylesDialogCount, g_WindowStylesDialog); | |
285 | AddStyles("wxButton", g_WindowStylesButtonCount, g_WindowStylesButton); | |
286 | AddStyles("wxTextCtrl", g_WindowStylesTextCtrlCount, g_WindowStylesTextCtrl); | |
287 | AddStyles("wxSpinButton", g_WindowStylesSpinButtonCount, g_WindowStylesSpinButton); | |
288 | AddStyles("wxListBox", g_WindowStylesListBoxCount, g_WindowStylesListBox); | |
289 | AddStyles("wxRadioButton", g_WindowStylesRadioButtonCount, g_WindowStylesRadioButton); | |
290 | AddStyles("wxRadioBox", g_WindowStylesRadioBoxCount, g_WindowStylesRadioBox); | |
291 | AddStyles("wxControl", g_WindowStylesControlCount, g_WindowStylesControl); | |
292 | AddStyles("wxListCtrl", g_WindowStylesListCtrlCount, g_WindowStylesListCtrl); | |
293 | AddStyles("wxTreeCtrl", g_WindowStylesTreeCtrlCount, g_WindowStylesTreeCtrl); | |
294 | AddStyles("wxSlider", g_WindowStylesSliderCount, g_WindowStylesSlider); | |
295 | AddStyles("wxGauge", g_WindowStylesGaugeCount, g_WindowStylesGauge); | |
296 | AddStyles("wxComboBox", g_WindowStylesComboBoxCount, g_WindowStylesComboBox); | |
297 | // AddStyles("wxChoice", g_WindowStylesChoice, g_WindowStylesChoice); | |
298 | AddStyles("wxScrollBar", g_WindowStylesScrollBarCount, g_WindowStylesScrollBar); | |
299 | } | |
300 | ||
301 | // Operations | |
302 | void wxWindowStyleTable::ClearTable() | |
303 | { | |
304 | wxNode* node = m_classes.First(); | |
305 | while (node) | |
306 | { | |
307 | wxWindowStyleClass* styleClass = (wxWindowStyleClass*) node->Data(); | |
308 | delete styleClass; | |
309 | node = node->Next(); | |
310 | } | |
311 | m_classes.Clear(); | |
312 | } | |
313 | ||
314 | void wxWindowStyleTable::AddStyles(const wxString& className, int n, wxWindowStylePair *styles) | |
315 | { | |
316 | wxWindowStyleClass* styleClass = new wxWindowStyleClass(n, styles); | |
317 | m_classes.Append(className, styleClass); | |
318 | } | |
319 | ||
320 | wxWindowStyleClass* wxWindowStyleTable::FindClass(const wxString& className) | |
321 | { | |
322 | wxNode* node = m_classes.Find(className); | |
323 | if (node) | |
324 | { | |
325 | wxWindowStyleClass* styleClass = (wxWindowStyleClass*) node->Data(); | |
326 | return styleClass; | |
327 | } | |
328 | else | |
329 | return NULL; | |
330 | } | |
331 | ||
332 | bool wxWindowStyleTable::GenerateStyleStrings(const wxString& className, long windowStyle, char *buf) | |
333 | { | |
334 | wxWindowStyleClass* styleClass = FindClass(className); | |
335 | if (!styleClass) | |
336 | return FALSE; | |
337 | ||
338 | styleClass->GenerateStyleStrings(windowStyle, buf); | |
339 | return TRUE; | |
340 | } | |
341 | ||
342 | /* | |
343 | * Holds all the styles for a particular class | |
344 | */ | |
345 | ||
346 | wxWindowStyleClass::wxWindowStyleClass(int n, wxWindowStylePair *styles) | |
347 | { | |
348 | m_styleCount = n; | |
349 | m_styles = styles; | |
350 | /* | |
351 | m_styles = new wxWindowStylePair[n]; | |
352 | int i; | |
353 | for (i = 0; i < n; i++) | |
354 | m_styles[i] = styles[i]; | |
355 | */ | |
356 | } | |
357 | ||
358 | wxWindowStyleClass::~wxWindowStyleClass() | |
359 | { | |
360 | } | |
361 | ||
362 | void wxWindowStyleClass::GenerateStyleStrings(long windowStyle, char *buf) | |
363 | { | |
364 | int i; | |
365 | for (i = 0; i < m_styleCount; i++) | |
366 | GenerateStyle(buf, windowStyle, m_styles[i].m_styleId, m_styles[i].m_styleName); | |
367 | } | |
368 | ||
369 | bool wxWindowStyleClass::GenerateStyle(char *buf, long windowStyle, long flag, const wxString& strStyle) | |
370 | { | |
371 | // Ignore zero flags | |
372 | if (flag == 0) | |
373 | return TRUE; | |
374 | ||
375 | if ((windowStyle & flag) == flag) | |
376 | { | |
377 | if (strlen(buf) > 0) | |
378 | strcat(buf, " | "); | |
379 | strcat(buf, (const char*) strStyle); | |
380 | return TRUE; | |
381 | } | |
382 | else | |
383 | return FALSE; | |
384 | } | |
385 |