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_chkMarkup
= CreateCheckBoxAndAddToSizer(sizerLeft
, "Support &markup");
220 m_chkVert
= CreateCheckBoxAndAddToSizer(sizerLeft
, "&Vertical line");
221 m_chkAutoResize
= CreateCheckBoxAndAddToSizer(sizerLeft
, "&Fit to text");
222 sizerLeft
->Add(5, 5, 0, wxGROW
| wxALL
, 5); // spacer
224 static const wxString halign
[] =
231 static const wxString valign
[] =
238 m_radioHAlign
= new wxRadioBox(this, wxID_ANY
, wxT("&Horz alignment"),
239 wxDefaultPosition
, wxDefaultSize
,
240 WXSIZEOF(halign
), halign
, 3);
241 m_radioVAlign
= new wxRadioBox(this, wxID_ANY
, wxT("&Vert alignment"),
242 wxDefaultPosition
, wxDefaultSize
,
243 WXSIZEOF(valign
), valign
, 3);
245 sizerLeft
->Add(m_radioHAlign
, 0, wxGROW
| wxALL
, 5);
246 sizerLeft
->Add(m_radioVAlign
, 0, wxGROW
| wxALL
, 5);
249 sizerLeft
->Add(5, 5, 0, wxGROW
| wxALL
, 5); // spacer
251 m_chkEllipsize
= CreateCheckBoxAndAddToSizer(sizerLeft
, wxT("&Ellipsize"));
253 static const wxString ellipsizeMode
[] =
260 m_radioEllipsize
= new wxRadioBox(this, wxID_ANY
, wxT("&Ellipsize mode"),
261 wxDefaultPosition
, wxDefaultSize
,
262 WXSIZEOF(ellipsizeMode
), ellipsizeMode
,
265 sizerLeft
->Add(m_radioEllipsize
, 0, wxGROW
| wxALL
, 5);
267 wxButton
*btn
= new wxButton(this, StaticPage_Reset
, wxT("&Reset"));
268 sizerLeft
->Add(btn
, 0, wxALIGN_CENTRE_HORIZONTAL
| wxALL
, 15);
271 wxSizer
*sizerMiddle
= new wxStaticBoxSizer(wxVERTICAL
, this,
274 m_textBox
= new wxTextCtrl(this, wxID_ANY
, wxEmptyString
);
275 wxButton
*b1
= new wxButton(this, wxID_ANY
, "Change &box label");
276 b1
->Connect(wxEVT_COMMAND_BUTTON_CLICKED
,
277 wxCommandEventHandler(StaticWidgetsPage::OnButtonBoxText
),
279 sizerMiddle
->Add(m_textBox
, 0, wxEXPAND
|wxALL
, 5);
280 sizerMiddle
->Add(b1
, 0, wxLEFT
|wxBOTTOM
, 5);
282 m_textLabel
= new wxTextCtrl(this, wxID_ANY
, wxEmptyString
,
283 wxDefaultPosition
, wxDefaultSize
,
284 wxTE_MULTILINE
|wxHSCROLL
);
285 wxButton
*b2
= new wxButton(this, wxID_ANY
, "Change &text label");
286 b2
->Connect(wxEVT_COMMAND_BUTTON_CLICKED
,
287 wxCommandEventHandler(StaticWidgetsPage::OnButtonLabelText
),
289 sizerMiddle
->Add(m_textLabel
, 0, wxEXPAND
|wxALL
, 5);
290 sizerMiddle
->Add(b2
, 0, wxLEFT
|wxBOTTOM
, 5);
292 m_textLabelWithMarkup
= new wxTextCtrl(this, wxID_ANY
, wxEmptyString
,
293 wxDefaultPosition
, wxDefaultSize
,
294 wxTE_MULTILINE
|wxHSCROLL
);
296 wxButton
*b3
= new wxButton(this, wxID_ANY
, "Change decorated text label");
297 b3
->Connect(wxEVT_COMMAND_BUTTON_CLICKED
,
298 wxCommandEventHandler(StaticWidgetsPage::OnButtonLabelWithMarkupText
),
300 sizerMiddle
->Add(m_textLabelWithMarkup
, 0, wxEXPAND
|wxALL
, 5);
301 sizerMiddle
->Add(b3
, 0, wxLEFT
|wxBOTTOM
, 5);
303 m_chkGreen
= CreateCheckBoxAndAddToSizer(sizerLeft
,
304 "Decorated label on g&reen");
305 sizerMiddle
->Add(m_chkGreen
, 0, wxALL
, 5);
307 // final initializations
308 // NB: must be done _before_ calling CreateStatic()
311 m_textBox
->SetValue(wxT("This is a &box"));
312 m_textLabel
->SetValue(wxT("And this is a\n\tlabel inside the box with a &mnemonic.\n")
313 wxT("Only this text is affected by the ellipsize settings."));
314 m_textLabelWithMarkup
->SetValue(wxT("Another label, this time <b>decorated</b> ")
315 wxT("with <u>markup</u>; here you need entities ")
316 wxT("for the symbols: < > & ' " ")
317 wxT(" but you can still place &mnemonics..."));
320 wxSizer
*sizerRight
= new wxBoxSizer(wxHORIZONTAL
);
321 sizerRight
->SetMinSize(150, 0);
322 m_sizerStatic
= sizerRight
;
326 // the 3 panes panes compose the window
327 sizerTop
->Add(sizerLeft
, 0, wxGROW
| (wxALL
& ~wxLEFT
), 10);
328 sizerTop
->Add(sizerMiddle
, 0, wxGROW
| wxALL
, 10);
329 sizerTop
->Add(sizerRight
, 1, wxGROW
| (wxALL
& ~wxRIGHT
), 10);
334 // ----------------------------------------------------------------------------
336 // ----------------------------------------------------------------------------
338 void StaticWidgetsPage::Reset()
340 m_chkGeneric
->SetValue(false);
341 m_chkVert
->SetValue(false);
342 m_chkAutoResize
->SetValue(true);
343 m_chkEllipsize
->SetValue(true);
344 m_chkMarkup
->SetValue(true);
346 m_radioHAlign
->SetSelection(StaticHAlign_Left
);
347 m_radioVAlign
->SetSelection(StaticVAlign_Top
);
350 void StaticWidgetsPage::CreateStatic()
352 bool isVert
= m_chkVert
->GetValue();
354 if ( m_sizerStatBox
)
356 // delete m_sizerStatBox; -- deleted by Remove()
357 m_sizerStatic
->Remove(m_sizerStatBox
);
362 #endif // wxUSE_STATLINE
366 flagsText
= ms_defaultFlags
,
367 flagsDummyText
= ms_defaultFlags
;
369 if ( !m_chkAutoResize
->GetValue() )
371 flagsText
|= wxST_NO_AUTORESIZE
;
372 flagsDummyText
|= wxST_NO_AUTORESIZE
;
375 if ( m_chkMarkup
->GetValue() )
377 flagsText
|= wxST_MARKUP
;
378 flagsDummyText
|= wxST_MARKUP
;
382 switch ( m_radioHAlign
->GetSelection() )
385 wxFAIL_MSG(wxT("unexpected radiobox selection"));
388 case StaticHAlign_Left
:
389 align
|= wxALIGN_LEFT
;
392 case StaticHAlign_Centre
:
393 align
|= wxALIGN_CENTRE_HORIZONTAL
;
396 case StaticHAlign_Right
:
397 align
|= wxALIGN_RIGHT
;
401 switch ( m_radioVAlign
->GetSelection() )
404 wxFAIL_MSG(wxT("unexpected radiobox selection"));
407 case StaticVAlign_Top
:
408 align
|= wxALIGN_TOP
;
411 case StaticVAlign_Centre
:
412 align
|= wxALIGN_CENTRE_VERTICAL
;
415 case StaticVAlign_Bottom
:
416 align
|= wxALIGN_BOTTOM
;
420 if ( m_chkEllipsize
->GetValue() )
422 switch ( m_radioEllipsize
->GetSelection() )
425 wxFAIL_MSG(wxT("unexpected radiobox selection"));
428 case StaticEllipsize_Start
:
429 flagsDummyText
|= wxST_ELLIPSIZE_START
;
432 case StaticEllipsize_Middle
:
433 flagsDummyText
|= wxST_ELLIPSIZE_MIDDLE
;
436 case StaticEllipsize_End
:
437 flagsDummyText
|= wxST_ELLIPSIZE_END
;
442 flagsDummyText
|= align
;
446 wxStaticBox
*staticBox
= new wxStaticBox(this, wxID_ANY
,
447 m_textBox
->GetValue(),
448 wxDefaultPosition
, wxDefaultSize
,
450 m_sizerStatBox
= new wxStaticBoxSizer(staticBox
, isVert
? wxHORIZONTAL
453 if ( m_chkGeneric
->GetValue() )
455 m_statText
= new wxGenericStaticText(this, wxID_ANY
,
456 m_textLabel
->GetValue(),
457 wxDefaultPosition
, wxDefaultSize
,
459 m_statMarkup
= new wxGenericStaticText(this, wxID_ANY
,
460 m_textLabelWithMarkup
->GetValue(),
461 wxDefaultPosition
, wxDefaultSize
,
464 else // use native versions
466 m_statText
= new wxStaticText(this, wxID_ANY
,
467 m_textLabel
->GetValue(),
468 wxDefaultPosition
, wxDefaultSize
,
470 m_statMarkup
= new wxStaticText(this, wxID_ANY
,
471 m_textLabelWithMarkup
->GetValue(),
472 wxDefaultPosition
, wxDefaultSize
,
475 if ( m_chkGreen
->GetValue() )
476 m_statMarkup
->SetBackgroundColour(*wxGREEN
);
478 m_statLine
= new wxStaticLine(this, wxID_ANY
,
479 wxDefaultPosition
, wxDefaultSize
,
480 isVert
? wxLI_VERTICAL
: wxLI_HORIZONTAL
);
481 #endif // wxUSE_STATLINE
483 m_sizerStatBox
->Add(m_statText
, 1, wxGROW
| wxALL
, 5);
485 m_sizerStatBox
->Add(m_statLine
, 0, wxGROW
| wxALL
, 5);
486 #endif // wxUSE_STATLINE
487 m_sizerStatBox
->Add(m_statMarkup
, 1, wxGROW
| wxALL
, 5);
489 m_sizerStatic
->Add(m_sizerStatBox
, 1, wxGROW
);
491 m_sizerStatic
->Layout();
493 m_statText
->Connect(wxEVT_LEFT_UP
,
494 wxMouseEventHandler(StaticWidgetsPage::OnMouseEvent
),
496 staticBox
->Connect(wxEVT_LEFT_UP
,
497 wxMouseEventHandler(StaticWidgetsPage::OnMouseEvent
),
501 // ----------------------------------------------------------------------------
503 // ----------------------------------------------------------------------------
505 void StaticWidgetsPage::OnButtonReset(wxCommandEvent
& WXUNUSED(event
))
512 void StaticWidgetsPage::OnCheckOrRadioBox(wxCommandEvent
& event
)
514 if (event
.GetEventObject() == static_cast<wxObject
*>(m_chkEllipsize
))
516 m_radioEllipsize
->Enable(event
.IsChecked());
522 void StaticWidgetsPage::OnButtonBoxText(wxCommandEvent
& WXUNUSED(event
))
524 m_sizerStatBox
->GetStaticBox()->SetLabel(m_textBox
->GetValue());
527 void StaticWidgetsPage::OnButtonLabelText(wxCommandEvent
& WXUNUSED(event
))
529 m_statText
->SetLabel(m_textLabel
->GetValue());
531 // test GetLabel() and GetLabelText(); the first should return the
532 // label as it is written in the relative text control; the second should
533 // return the label as it's shown in the wxStaticText
534 wxLogMessage(wxT("The original label should be '%s'"),
535 m_statText
->GetLabel());
536 wxLogMessage(wxT("The label text is '%s'"),
537 m_statText
->GetLabelText());
540 void StaticWidgetsPage::OnButtonLabelWithMarkupText(wxCommandEvent
& WXUNUSED(event
))
542 m_statMarkup
->SetLabel(m_textLabelWithMarkup
->GetValue());
544 // test GetLabel() and GetLabelText(); the first should return the
545 // label as it is written in the relative text control; the second should
546 // return the label as it's shown in the wxStaticText
547 wxLogMessage(wxT("The original label should be '%s'"),
548 m_statMarkup
->GetLabel());
549 wxLogMessage(wxT("The label text is '%s'"),
550 m_statMarkup
->GetLabelText());
553 void StaticWidgetsPage::OnMouseEvent(wxMouseEvent
& event
)
555 if ( event
.GetEventObject() == m_statText
)
557 wxLogMessage("Clicked on static text");
561 wxLogMessage("Clicked on static box");