1 /////////////////////////////////////////////////////////////////////////////
2 // Program: wxWidgets Widgets Sample
4 // Purpose: Part of the widgets sample showing various static controls
5 // Author: Vadim Zeitlin
8 // Copyright: (c) 2001 Vadim Zeitlin
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
12 // ============================================================================
14 // ============================================================================
16 // ----------------------------------------------------------------------------
18 // ----------------------------------------------------------------------------
20 // for compilers that support precompilation, includes "wx/wx.h".
21 #include "wx/wxprec.h"
27 // for all others, include the necessary headers
31 #include "wx/bitmap.h"
32 #include "wx/button.h"
33 #include "wx/checkbox.h"
34 #include "wx/radiobox.h"
35 #include "wx/statbox.h"
36 #include "wx/stattext.h"
37 #include "wx/textctrl.h"
42 #include "wx/statline.h"
43 #include "wx/generic/stattextg.h"
46 #include "icons/statbox.xpm"
48 // ----------------------------------------------------------------------------
50 // ----------------------------------------------------------------------------
55 StaticPage_Reset
= wxID_HIGHEST
,
58 StaticPage_LabelTextWithMarkup
61 // alignment radiobox values
80 StaticEllipsize_Start
,
81 StaticEllipsize_Middle
,
86 // ----------------------------------------------------------------------------
88 // ----------------------------------------------------------------------------
90 class StaticWidgetsPage
: public WidgetsPage
93 StaticWidgetsPage(WidgetsBookCtrl
*book
, wxImageList
*imaglist
);
94 virtual ~StaticWidgetsPage(){};
96 virtual wxControl
*GetWidget() const { return m_statText
; }
97 virtual Widgets
GetWidgets() const
100 widgets
.push_back(m_sizerStatBox
->GetStaticBox());
101 widgets
.push_back(m_statText
);
102 widgets
.push_back(m_statMarkup
);
104 widgets
.push_back(m_statLine
);
105 #endif // wxUSE_STATLINE
109 virtual void RecreateWidget() { CreateStatic(); }
111 // lazy creation of the content
112 virtual void CreateContent();
116 void OnCheckOrRadioBox(wxCommandEvent
& event
);
118 void OnButtonReset(wxCommandEvent
& event
);
119 void OnButtonBoxText(wxCommandEvent
& event
);
120 void OnButtonLabelText(wxCommandEvent
& event
);
121 void OnButtonLabelWithMarkupText(wxCommandEvent
& event
);
122 void OnMouseEvent(wxMouseEvent
& event
);
124 // reset all parameters
127 // (re)create all controls
133 // the check/radio boxes for styles
134 wxCheckBox
*m_chkVert
,
141 wxRadioBox
*m_radioHAlign
,
145 // the controls and the sizer containing them
146 wxStaticBoxSizer
*m_sizerStatBox
;
147 wxStaticTextBase
*m_statText
,
150 wxStaticLine
*m_statLine
;
151 #endif // wxUSE_STATLINE
152 wxSizer
*m_sizerStatic
;
154 // the text entries for command parameters
155 wxTextCtrl
*m_textBox
,
157 *m_textLabelWithMarkup
;
160 DECLARE_EVENT_TABLE()
161 DECLARE_WIDGETS_PAGE(StaticWidgetsPage
)
164 // ----------------------------------------------------------------------------
166 // ----------------------------------------------------------------------------
168 BEGIN_EVENT_TABLE(StaticWidgetsPage
, WidgetsPage
)
169 EVT_BUTTON(StaticPage_Reset
, StaticWidgetsPage::OnButtonReset
)
170 EVT_BUTTON(StaticPage_LabelText
, StaticWidgetsPage::OnButtonLabelText
)
171 EVT_BUTTON(StaticPage_LabelTextWithMarkup
, StaticWidgetsPage::OnButtonLabelWithMarkupText
)
172 EVT_BUTTON(StaticPage_BoxText
, StaticWidgetsPage::OnButtonBoxText
)
174 EVT_CHECKBOX(wxID_ANY
, StaticWidgetsPage::OnCheckOrRadioBox
)
175 EVT_RADIOBOX(wxID_ANY
, StaticWidgetsPage::OnCheckOrRadioBox
)
178 // ============================================================================
180 // ============================================================================
182 IMPLEMENT_WIDGETS_PAGE(StaticWidgetsPage
, wxT("Static"),
183 (int)wxPlatform(GENERIC_CTRLS
).If(wxOS_WINDOWS
,NATIVE_CTRLS
)
186 StaticWidgetsPage::StaticWidgetsPage(WidgetsBookCtrl
*book
,
187 wxImageList
*imaglist
)
188 : WidgetsPage(book
, imaglist
, statbox_xpm
)
192 m_chkAutoResize
= (wxCheckBox
*)NULL
;
197 m_radioVAlign
= (wxRadioBox
*)NULL
;
200 m_statLine
= (wxStaticLine
*)NULL
;
201 #endif // wxUSE_STATLINE
202 m_statText
= m_statMarkup
= NULL
;
204 m_sizerStatBox
= (wxStaticBoxSizer
*)NULL
;
205 m_sizerStatic
= (wxSizer
*)NULL
;
207 m_textBox
= m_textLabel
= m_textLabelWithMarkup
= NULL
;
210 void StaticWidgetsPage::CreateContent()
212 wxSizer
*sizerTop
= new wxBoxSizer(wxHORIZONTAL
);
215 wxSizer
*sizerLeft
= new wxStaticBoxSizer(wxVERTICAL
, this, "&Set style");
217 m_chkGeneric
= CreateCheckBoxAndAddToSizer(sizerLeft
,
218 "&Generic wxStaticText");
219 m_chkVert
= CreateCheckBoxAndAddToSizer(sizerLeft
, "&Vertical line");
220 m_chkAutoResize
= CreateCheckBoxAndAddToSizer(sizerLeft
, "&Fit to text");
221 sizerLeft
->Add(5, 5, 0, wxGROW
| wxALL
, 5); // spacer
223 static const wxString halign
[] =
230 static const wxString valign
[] =
237 m_radioHAlign
= new wxRadioBox(this, wxID_ANY
, wxT("&Horz alignment"),
238 wxDefaultPosition
, wxDefaultSize
,
239 WXSIZEOF(halign
), halign
, 3);
240 m_radioVAlign
= new wxRadioBox(this, wxID_ANY
, wxT("&Vert alignment"),
241 wxDefaultPosition
, wxDefaultSize
,
242 WXSIZEOF(valign
), valign
, 3);
244 sizerLeft
->Add(m_radioHAlign
, 0, wxGROW
| wxALL
, 5);
245 sizerLeft
->Add(m_radioVAlign
, 0, wxGROW
| wxALL
, 5);
248 sizerLeft
->Add(5, 5, 0, wxGROW
| wxALL
, 5); // spacer
250 m_chkEllipsize
= CreateCheckBoxAndAddToSizer(sizerLeft
, wxT("&Ellipsize"));
252 static const wxString ellipsizeMode
[] =
259 m_radioEllipsize
= new wxRadioBox(this, wxID_ANY
, wxT("&Ellipsize mode"),
260 wxDefaultPosition
, wxDefaultSize
,
261 WXSIZEOF(ellipsizeMode
), ellipsizeMode
,
264 sizerLeft
->Add(m_radioEllipsize
, 0, wxGROW
| wxALL
, 5);
266 wxButton
*btn
= new wxButton(this, StaticPage_Reset
, wxT("&Reset"));
267 sizerLeft
->Add(btn
, 0, wxALIGN_CENTRE_HORIZONTAL
| wxALL
, 15);
270 wxSizer
*sizerMiddle
= new wxStaticBoxSizer(wxVERTICAL
, this,
273 m_textBox
= new wxTextCtrl(this, wxID_ANY
, wxEmptyString
);
274 wxButton
*b1
= new wxButton(this, wxID_ANY
, "Change &box label");
275 b1
->Connect(wxEVT_COMMAND_BUTTON_CLICKED
,
276 wxCommandEventHandler(StaticWidgetsPage::OnButtonBoxText
),
278 sizerMiddle
->Add(m_textBox
, 0, wxEXPAND
|wxALL
, 5);
279 sizerMiddle
->Add(b1
, 0, wxLEFT
|wxBOTTOM
, 5);
281 m_textLabel
= new wxTextCtrl(this, wxID_ANY
, wxEmptyString
,
282 wxDefaultPosition
, wxDefaultSize
,
283 wxTE_MULTILINE
|wxHSCROLL
);
284 wxButton
*b2
= new wxButton(this, wxID_ANY
, "Change &text label");
285 b2
->Connect(wxEVT_COMMAND_BUTTON_CLICKED
,
286 wxCommandEventHandler(StaticWidgetsPage::OnButtonLabelText
),
288 sizerMiddle
->Add(m_textLabel
, 0, wxEXPAND
|wxALL
, 5);
289 sizerMiddle
->Add(b2
, 0, wxLEFT
|wxBOTTOM
, 5);
291 m_textLabelWithMarkup
= new wxTextCtrl(this, wxID_ANY
, wxEmptyString
,
292 wxDefaultPosition
, wxDefaultSize
,
293 wxTE_MULTILINE
|wxHSCROLL
);
295 wxButton
*b3
= new wxButton(this, wxID_ANY
, "Change decorated text label");
296 b3
->Connect(wxEVT_COMMAND_BUTTON_CLICKED
,
297 wxCommandEventHandler(StaticWidgetsPage::OnButtonLabelWithMarkupText
),
299 sizerMiddle
->Add(m_textLabelWithMarkup
, 0, wxEXPAND
|wxALL
, 5);
300 sizerMiddle
->Add(b3
, 0, wxLEFT
|wxBOTTOM
, 5);
302 m_chkGreen
= CreateCheckBoxAndAddToSizer(sizerLeft
,
303 "Decorated label on g&reen");
304 sizerMiddle
->Add(m_chkGreen
, 0, wxALL
, 5);
306 // final initializations
307 // NB: must be done _before_ calling CreateStatic()
310 m_textBox
->SetValue(wxT("This is a &box"));
311 m_textLabel
->SetValue(wxT("And this is a\n\tlabel inside the box with a &mnemonic.\n")
312 wxT("Only this text is affected by the ellipsize settings."));
313 m_textLabelWithMarkup
->SetValue(wxT("Another label, this time <b>decorated</b> ")
314 wxT("with <u>markup</u>; here you need entities ")
315 wxT("for the symbols: < > & ' " ")
316 wxT(" but you can still place &mnemonics..."));
319 wxSizer
*sizerRight
= new wxBoxSizer(wxHORIZONTAL
);
320 sizerRight
->SetMinSize(150, 0);
321 m_sizerStatic
= sizerRight
;
325 // the 3 panes panes compose the window
326 sizerTop
->Add(sizerLeft
, 0, wxGROW
| (wxALL
& ~wxLEFT
), 10);
327 sizerTop
->Add(sizerMiddle
, 0, wxGROW
| wxALL
, 10);
328 sizerTop
->Add(sizerRight
, 1, wxGROW
| (wxALL
& ~wxRIGHT
), 10);
333 // ----------------------------------------------------------------------------
335 // ----------------------------------------------------------------------------
337 void StaticWidgetsPage::Reset()
339 m_chkGeneric
->SetValue(false);
340 m_chkVert
->SetValue(false);
341 m_chkAutoResize
->SetValue(true);
342 m_chkEllipsize
->SetValue(true);
344 m_radioHAlign
->SetSelection(StaticHAlign_Left
);
345 m_radioVAlign
->SetSelection(StaticVAlign_Top
);
348 void StaticWidgetsPage::CreateStatic()
350 bool isVert
= m_chkVert
->GetValue();
352 if ( m_sizerStatBox
)
354 // delete m_sizerStatBox; -- deleted by Remove()
355 m_sizerStatic
->Remove(m_sizerStatBox
);
360 #endif // wxUSE_STATLINE
364 flagsText
= ms_defaultFlags
,
365 flagsDummyText
= ms_defaultFlags
;
367 if ( !m_chkAutoResize
->GetValue() )
369 flagsText
|= wxST_NO_AUTORESIZE
;
370 flagsDummyText
|= wxST_NO_AUTORESIZE
;
374 switch ( m_radioHAlign
->GetSelection() )
377 wxFAIL_MSG(wxT("unexpected radiobox selection"));
380 case StaticHAlign_Left
:
381 align
|= wxALIGN_LEFT
;
384 case StaticHAlign_Centre
:
385 align
|= wxALIGN_CENTRE_HORIZONTAL
;
388 case StaticHAlign_Right
:
389 align
|= wxALIGN_RIGHT
;
393 switch ( m_radioVAlign
->GetSelection() )
396 wxFAIL_MSG(wxT("unexpected radiobox selection"));
399 case StaticVAlign_Top
:
400 align
|= wxALIGN_TOP
;
403 case StaticVAlign_Centre
:
404 align
|= wxALIGN_CENTRE_VERTICAL
;
407 case StaticVAlign_Bottom
:
408 align
|= wxALIGN_BOTTOM
;
412 if ( m_chkEllipsize
->GetValue() )
414 switch ( m_radioEllipsize
->GetSelection() )
417 wxFAIL_MSG(wxT("unexpected radiobox selection"));
420 case StaticEllipsize_Start
:
421 flagsDummyText
|= wxST_ELLIPSIZE_START
;
424 case StaticEllipsize_Middle
:
425 flagsDummyText
|= wxST_ELLIPSIZE_MIDDLE
;
428 case StaticEllipsize_End
:
429 flagsDummyText
|= wxST_ELLIPSIZE_END
;
434 flagsDummyText
|= align
;
438 wxStaticBox
*staticBox
= new wxStaticBox(this, wxID_ANY
,
439 m_textBox
->GetValue(),
440 wxDefaultPosition
, wxDefaultSize
,
442 m_sizerStatBox
= new wxStaticBoxSizer(staticBox
, isVert
? wxHORIZONTAL
445 if ( m_chkGeneric
->GetValue() )
447 m_statText
= new wxGenericStaticText(this, wxID_ANY
,
448 m_textLabel
->GetValue(),
449 wxDefaultPosition
, wxDefaultSize
,
451 m_statMarkup
= new wxGenericStaticText(this, wxID_ANY
,
453 wxDefaultPosition
, wxDefaultSize
,
456 else // use native versions
458 m_statText
= new wxStaticText(this, wxID_ANY
,
459 m_textLabel
->GetValue(),
460 wxDefaultPosition
, wxDefaultSize
,
462 m_statMarkup
= new wxStaticText(this, wxID_ANY
,
464 wxDefaultPosition
, wxDefaultSize
,
468 m_statMarkup
->SetLabelMarkup(m_textLabelWithMarkup
->GetValue());
470 if ( m_chkGreen
->GetValue() )
471 m_statMarkup
->SetBackgroundColour(*wxGREEN
);
473 m_statLine
= new wxStaticLine(this, wxID_ANY
,
474 wxDefaultPosition
, wxDefaultSize
,
475 isVert
? wxLI_VERTICAL
: wxLI_HORIZONTAL
);
476 #endif // wxUSE_STATLINE
478 m_sizerStatBox
->Add(m_statText
, 1, wxGROW
| wxALL
, 5);
480 m_sizerStatBox
->Add(m_statLine
, 0, wxGROW
| wxALL
, 5);
481 #endif // wxUSE_STATLINE
482 m_sizerStatBox
->Add(m_statMarkup
, 1, wxGROW
| wxALL
, 5);
484 m_sizerStatic
->Add(m_sizerStatBox
, 1, wxGROW
);
486 m_sizerStatic
->Layout();
488 m_statText
->Connect(wxEVT_LEFT_UP
,
489 wxMouseEventHandler(StaticWidgetsPage::OnMouseEvent
),
491 staticBox
->Connect(wxEVT_LEFT_UP
,
492 wxMouseEventHandler(StaticWidgetsPage::OnMouseEvent
),
496 // ----------------------------------------------------------------------------
498 // ----------------------------------------------------------------------------
500 void StaticWidgetsPage::OnButtonReset(wxCommandEvent
& WXUNUSED(event
))
507 void StaticWidgetsPage::OnCheckOrRadioBox(wxCommandEvent
& event
)
509 if (event
.GetEventObject() == static_cast<wxObject
*>(m_chkEllipsize
))
511 m_radioEllipsize
->Enable(event
.IsChecked());
517 void StaticWidgetsPage::OnButtonBoxText(wxCommandEvent
& WXUNUSED(event
))
519 m_sizerStatBox
->GetStaticBox()->SetLabel(m_textBox
->GetValue());
522 void StaticWidgetsPage::OnButtonLabelText(wxCommandEvent
& WXUNUSED(event
))
524 m_statText
->SetLabel(m_textLabel
->GetValue());
526 // test GetLabel() and GetLabelText(); the first should return the
527 // label as it is written in the relative text control; the second should
528 // return the label as it's shown in the wxStaticText
529 wxLogMessage(wxT("The original label should be '%s'"),
530 m_statText
->GetLabel());
531 wxLogMessage(wxT("The label text is '%s'"),
532 m_statText
->GetLabelText());
535 void StaticWidgetsPage::OnButtonLabelWithMarkupText(wxCommandEvent
& WXUNUSED(event
))
537 m_statMarkup
->SetLabelMarkup(m_textLabelWithMarkup
->GetValue());
539 // test GetLabel() and GetLabelText(); the first should return the
540 // label as it is written in the relative text control; the second should
541 // return the label as it's shown in the wxStaticText
542 wxLogMessage(wxT("The original label should be '%s'"),
543 m_statMarkup
->GetLabel());
544 wxLogMessage(wxT("The label text is '%s'"),
545 m_statMarkup
->GetLabelText());
548 void StaticWidgetsPage::OnMouseEvent(wxMouseEvent
& event
)
550 if ( event
.GetEventObject() == m_statText
)
552 wxLogMessage("Clicked on static text");
556 wxLogMessage("Clicked on static box");