1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: Window styles
4 // Author: Julian Smart
8 // Copyright: (c) Julian Smart
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
13 #pragma implementation "winstyle.h"
16 // For compilers that support precompilation, includes "wx/wx.h".
17 #include "wx/wxprec.h"
27 #include "wx/listctrl.h"
28 #include "wx/treectrl.h"
29 #include "wx/splitter.h"
43 static wxWindowStylePair g_WindowStylesListBox
[] = {
44 { "wxLB_SINGLE", wxLB_SINGLE
},
45 { "wxLB_MULTIPLE", wxLB_MULTIPLE
},
46 { "wxLB_EXTENDED", wxLB_EXTENDED
},
47 { "wxLB_NEEDED_SB", wxLB_NEEDED_SB
},
48 { "wxLB_ALWAYS_SB", wxLB_ALWAYS_SB
},
49 { "wxLB_SORT", wxLB_SORT
},
50 { "wxLB_OWNERDRAW", wxLB_OWNERDRAW
},
51 { "wxLB_HSCROLL", wxLB_HSCROLL
}
54 int g_WindowStylesListBoxCount
= sizeof(g_WindowStylesListBox
)/sizeof(wxWindowStylePair
) ;
57 static wxWindowStylePair g_WindowStylesComboBox
[] = {
58 { "wxCB_SIMPLE", wxCB_SIMPLE
},
59 { "wxCB_DROPDOWN", wxCB_DROPDOWN
},
60 { "wxCB_READONLY", wxCB_READONLY
},
61 { "wxCB_SORT", wxCB_SORT
}
64 int g_WindowStylesComboBoxCount
= sizeof(g_WindowStylesComboBox
)/sizeof(wxWindowStylePair
) ;
68 static wxWindowStylePair g_WindowStylesChoice
[] = {
71 int g_WindowStylesChoiceCount
= sizeof(g_WindowStylesChoice
)/sizeof(wxWindowStylePair
) ;
75 static wxWindowStylePair g_WindowStylesGauge
[] = {
76 { "wxGA_PROGRESSBAR", wxGA_PROGRESSBAR
},
77 { "wxGA_HORIZONTAL", wxGA_HORIZONTAL
},
78 { "wxGA_VERTICAL", wxGA_VERTICAL
}
81 int g_WindowStylesGaugeCount
= sizeof(g_WindowStylesGauge
)/sizeof(wxWindowStylePair
) ;
84 static wxWindowStylePair g_WindowStylesTextCtrl
[] = {
85 // { "wxPASSWORD", wxPASSWORD},
86 // { "wxPROCESS_ENTER", wxPROCESS_ENTER},
87 { "wxTE_PASSWORD", wxTE_PASSWORD
},
88 { "wxTE_READONLY", wxTE_READONLY
},
89 { "wxTE_PROCESS_ENTER", wxTE_PROCESS_ENTER
},
90 { "wxTE_MULTILINE", wxTE_MULTILINE
}
93 int g_WindowStylesTextCtrlCount
= sizeof(g_WindowStylesTextCtrl
)/sizeof(wxWindowStylePair
) ;
96 static wxWindowStylePair g_WindowStylesRadioButton
[] = {
97 { "wxRB_GROUP", wxRB_GROUP
}
100 int g_WindowStylesRadioButtonCount
= sizeof(g_WindowStylesRadioButton
)/sizeof(wxWindowStylePair
) ;
103 static wxWindowStylePair g_WindowStylesRadioBox
[] = {
104 { "wxRA_SPECIFY_COLS", wxRA_SPECIFY_COLS
},
105 { "wxRA_SPECIFY_ROWS", wxRA_SPECIFY_ROWS
}
108 { "wxRA_HORIZONTAL", wxRA_HORIZONTAL },
109 { "wxRA_VERTICAL", wxRA_VERTICAL }
113 int g_WindowStylesRadioBoxCount
= sizeof(g_WindowStylesRadioBox
)/sizeof(wxWindowStylePair
) ;
116 static wxWindowStylePair g_WindowStylesSlider
[] = {
117 { "wxSL_HORIZONTAL", wxSL_HORIZONTAL
},
118 { "wxSL_VERTICAL", wxSL_VERTICAL
},
119 { "wxSL_AUTOTICKS", wxSL_AUTOTICKS
},
120 { "wxSL_LABELS", wxSL_LABELS
},
121 { "wxSL_LEFT", wxSL_LEFT
},
122 { "wxSL_TOP", wxSL_TOP
},
123 { "wxSL_RIGHT", wxSL_RIGHT
},
124 { "wxSL_BOTTOM", wxSL_BOTTOM
},
125 { "wxSL_BOTH", wxSL_BOTH
},
126 { "wxSL_SELRANGE", wxSL_SELRANGE
}
129 int g_WindowStylesSliderCount
= sizeof(g_WindowStylesSlider
)/sizeof(wxWindowStylePair
) ;
132 static wxWindowStylePair g_WindowStylesScrollBar
[] = {
133 { "wxSB_HORIZONTAL", wxSB_HORIZONTAL
},
134 { "wxSB_VERTICAL", wxSB_VERTICAL
}
137 int g_WindowStylesScrollBarCount
= sizeof(g_WindowStylesScrollBar
)/sizeof(wxWindowStylePair
) ;
140 static wxWindowStylePair g_WindowStylesButton
[] = {
141 { "wxBU_AUTODRAW", wxBU_AUTODRAW
},
142 { "wxBU_NOAUTODRAW", wxBU_NOAUTODRAW
}
145 int g_WindowStylesButtonCount
= sizeof(g_WindowStylesButton
)/sizeof(wxWindowStylePair
) ;
148 static wxWindowStylePair g_WindowStylesTreeCtrl
[] = {
149 { "wxTR_HAS_BUTTONS", wxTR_HAS_BUTTONS
},
150 { "wxTR_EDIT_LABELS", wxTR_EDIT_LABELS
},
151 { "wxTR_LINES_AT_ROOT", wxTR_LINES_AT_ROOT
}
154 int g_WindowStylesTreeCtrlCount
= sizeof(g_WindowStylesTreeCtrl
)/sizeof(wxWindowStylePair
) ;
157 static wxWindowStylePair g_WindowStylesListCtrl
[] = {
158 { "wxLC_ICON", wxLC_ICON
},
159 { "wxLC_SMALL_ICON", wxLC_SMALL_ICON
},
160 { "wxLC_LIST", wxLC_LIST
},
161 { "wxLC_REPORT", wxLC_REPORT
},
162 { "wxLC_ALIGN_TOP", wxLC_ALIGN_TOP
},
163 { "wxLC_ALIGN_LEFT", wxLC_ALIGN_LEFT
},
164 { "wxLC_AUTOARRANGE", wxLC_AUTOARRANGE
},
165 { "wxLC_USER_TEXT", wxLC_USER_TEXT
},
166 { "wxLC_EDIT_LABELS", wxLC_EDIT_LABELS
},
167 { "wxLC_NO_HEADER", wxLC_NO_HEADER
},
168 { "wxLC_NO_SORT_HEADER", wxLC_NO_SORT_HEADER
},
169 { "wxLC_SINGLE_SEL", wxLC_SINGLE_SEL
},
170 { "wxLC_SORT_ASCENDING", wxLC_SORT_ASCENDING
},
171 { "wxLC_SORT_DESCENDING", wxLC_SORT_DESCENDING
}
174 int g_WindowStylesListCtrlCount
= sizeof(g_WindowStylesListCtrl
)/sizeof(wxWindowStylePair
) ;
177 static wxWindowStylePair g_WindowStylesSpinButton
[] = {
178 { "wxSP_VERTICAL", wxSP_VERTICAL
},
179 { "wxSP_HORIZONTAL", wxSP_HORIZONTAL
},
180 { "wxSP_ARROW_KEYS", wxSP_ARROW_KEYS
},
181 { "wxSP_WRAP", wxSP_WRAP
}
184 int g_WindowStylesSpinButtonCount
= sizeof(g_WindowStylesSpinButton
)/sizeof(wxWindowStylePair
) ;
186 /* wxSplitterWindow */
187 static wxWindowStylePair g_WindowStylesSplitterWindow
[] = {
188 { "wxSP_NOBORDER", wxSP_NOBORDER
},
189 { "wxSP_3D", wxSP_3D
},
190 { "wxSP_BORDER", wxSP_BORDER
}
193 int g_WindowStylesSplitterWindowCount
= sizeof(g_WindowStylesSplitterWindow
)/sizeof(wxWindowStylePair
) ;
196 static wxWindowStylePair g_WindowStylesTabCtrl
[] = {
197 { "wxTC_MULTILINE", wxTC_MULTILINE
},
198 { "wxTC_RIGHTJUSTIFY", wxTC_RIGHTJUSTIFY
},
199 { "wxTC_FIXEDWIDTH", wxTC_FIXEDWIDTH
},
200 { "wxTC_OWNERDRAW", wxTC_OWNERDRAW
}
203 int g_WindowStylesTabCtrlCount
= sizeof(g_WindowStylesTabCtrl
)/sizeof(wxWindowStylePair
) ;
206 static wxWindowStylePair g_WindowStylesStatusBar
[] = {
207 { "wxST_SIZEGRIP", wxST_SIZEGRIP
}
210 int g_WindowStylesStatusBarCount
= sizeof(g_WindowStylesStatusBar
)/sizeof(wxWindowStylePair
) ;
213 static wxWindowStylePair g_WindowStylesControl
[] = {
214 { "wxFIXED_LENGTH", wxFIXED_LENGTH
},
215 { "wxALIGN_LEFT", wxALIGN_LEFT
},
216 { "wxALIGN_CENTRE", wxALIGN_CENTRE
},
217 { "wxALIGN_RIGHT", wxALIGN_RIGHT
},
218 { "wxCOLOURED", wxCOLOURED
}
221 int g_WindowStylesControlCount
= sizeof(g_WindowStylesControl
)/sizeof(wxWindowStylePair
) ;
224 static wxWindowStylePair g_WindowStylesToolBar
[] = {
225 { "wxTB_3DBUTTONS", wxTB_3DBUTTONS
},
226 { "wxTB_HORIZONTAL", wxTB_HORIZONTAL
},
227 { "wxTB_VERTICAL", wxTB_VERTICAL
},
228 { "wxTB_FLAT", wxTB_FLAT
}
231 int g_WindowStylesToolBarCount
= sizeof(g_WindowStylesToolBar
)/sizeof(wxWindowStylePair
) ;
234 static wxWindowStylePair g_WindowStylesDialog
[] = {
235 { "wxSTAY_ON_TOP", wxSTAY_ON_TOP
},
236 { "wxCAPTION", wxCAPTION
},
237 { "wxICONIZE", wxICONIZE
},
238 { "wxMINIMIZE", wxICONIZE
},
239 { "wxMAXIMIZE", wxMAXIMIZE
},
240 { "wxTHICK_FRAME", wxTHICK_FRAME
},
241 { "wxRESIZE_BORDER", wxRESIZE_BORDER
},
242 { "wxSYSTEM_MENU", wxSYSTEM_MENU
},
243 { "wxMINIMIZE_BOX", wxMINIMIZE_BOX
},
244 { "wxMAXIMIZE_BOX", wxMAXIMIZE_BOX
},
245 { "wxDIALOG_MODAL", wxDIALOG_MODAL
},
246 { "wxRESIZE_BOX", wxRESIZE_BOX
}
249 int g_WindowStylesDialogCount
= sizeof(g_WindowStylesDialog
)/sizeof(wxWindowStylePair
) ;
252 static wxWindowStylePair g_WindowStylesWindow
[] = {
253 { "wxBORDER", wxBORDER
},
254 { "wxDOUBLE_BORDER", wxDOUBLE_BORDER
},
255 { "wxSUNKEN_BORDER", wxSUNKEN_BORDER
},
256 { "wxRAISED_BORDER", wxRAISED_BORDER
},
257 { "wxSIMPLE_BORDER", wxSIMPLE_BORDER
},
258 { "wxSTATIC_BORDER", wxSTATIC_BORDER
},
259 { "wxTRANSPARENT_WINDOW", wxTRANSPARENT_WINDOW
},
260 { "wxNO_BORDER", wxNO_BORDER
},
261 { "wxCLIP_CHILDREN", wxCLIP_CHILDREN
}
263 /* Would be duplicated with e.g. wxLB_HSCROLL
264 { "wxVSCROLL", wxVSCROLL },
265 { "wxHSCROLL", wxHSCROLL }
269 int g_WindowStylesWindowCount
= sizeof(g_WindowStylesWindow
)/sizeof(wxWindowStylePair
) ;
272 * A table holding all class style objects
276 wxWindowStyleTable::wxWindowStyleTable():
277 m_classes(wxKEY_STRING
)
281 wxWindowStyleTable::~wxWindowStyleTable()
286 void wxWindowStyleTable::Init()
288 AddStyles("wxWindow", g_WindowStylesWindowCount
, g_WindowStylesWindow
);
289 AddStyles("wxDialog", g_WindowStylesDialogCount
, g_WindowStylesDialog
);
290 AddStyles("wxButton", g_WindowStylesButtonCount
, g_WindowStylesButton
);
291 AddStyles("wxTextCtrl", g_WindowStylesTextCtrlCount
, g_WindowStylesTextCtrl
);
292 AddStyles("wxSpinButton", g_WindowStylesSpinButtonCount
, g_WindowStylesSpinButton
);
293 AddStyles("wxListBox", g_WindowStylesListBoxCount
, g_WindowStylesListBox
);
294 AddStyles("wxRadioButton", g_WindowStylesRadioButtonCount
, g_WindowStylesRadioButton
);
295 AddStyles("wxRadioBox", g_WindowStylesRadioBoxCount
, g_WindowStylesRadioBox
);
296 AddStyles("wxControl", g_WindowStylesControlCount
, g_WindowStylesControl
);
297 AddStyles("wxListCtrl", g_WindowStylesListCtrlCount
, g_WindowStylesListCtrl
);
298 AddStyles("wxTreeCtrl", g_WindowStylesTreeCtrlCount
, g_WindowStylesTreeCtrl
);
299 AddStyles("wxSlider", g_WindowStylesSliderCount
, g_WindowStylesSlider
);
300 AddStyles("wxGauge", g_WindowStylesGaugeCount
, g_WindowStylesGauge
);
301 AddStyles("wxComboBox", g_WindowStylesComboBoxCount
, g_WindowStylesComboBox
);
302 // AddStyles("wxChoice", g_WindowStylesChoice, g_WindowStylesChoice);
303 AddStyles("wxScrollBar", g_WindowStylesScrollBarCount
, g_WindowStylesScrollBar
);
307 void wxWindowStyleTable::ClearTable()
309 wxNode
* node
= m_classes
.First();
312 wxWindowStyleClass
* styleClass
= (wxWindowStyleClass
*) node
->Data();
319 void wxWindowStyleTable::AddStyles(const wxString
& className
, int n
, wxWindowStylePair
*styles
)
321 wxWindowStyleClass
* styleClass
= new wxWindowStyleClass(n
, styles
);
322 m_classes
.Append(className
, styleClass
);
325 wxWindowStyleClass
* wxWindowStyleTable::FindClass(const wxString
& className
)
327 wxNode
* node
= m_classes
.Find(className
);
330 wxWindowStyleClass
* styleClass
= (wxWindowStyleClass
*) node
->Data();
337 bool wxWindowStyleTable::GenerateStyleStrings(const wxString
& className
, long windowStyle
, char *buf
)
339 wxWindowStyleClass
* styleClass
= FindClass(className
);
343 styleClass
->GenerateStyleStrings(windowStyle
, buf
);
348 * Holds all the styles for a particular class
351 wxWindowStyleClass::wxWindowStyleClass(int n
, wxWindowStylePair
*styles
)
356 m_styles = new wxWindowStylePair[n];
358 for (i = 0; i < n; i++)
359 m_styles[i] = styles[i];
363 wxWindowStyleClass::~wxWindowStyleClass()
367 void wxWindowStyleClass::GenerateStyleStrings(long windowStyle
, char *buf
)
370 for (i
= 0; i
< m_styleCount
; i
++)
371 GenerateStyle(buf
, windowStyle
, m_styles
[i
].m_styleId
, m_styles
[i
].m_styleName
);
374 bool wxWindowStyleClass::GenerateStyle(char *buf
, long windowStyle
, long flag
, const wxString
& strStyle
)
380 if ((windowStyle
& flag
) == flag
)
384 strcat(buf
, (const char*) strStyle
);