1 /////////////////////////////////////////////////////////////////////////////
2 // Program: wxWidgets Widgets Sample
4 // Purpose: Part of the widgets sample showing wxButton
5 // Author: Vadim Zeitlin
8 // Copyright: (c) 2001 Vadim Zeitlin
9 // License: wxWindows license
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
32 #include "wx/button.h"
33 #include "wx/checkbox.h"
34 #include "wx/radiobox.h"
35 #include "wx/statbox.h"
36 #include "wx/textctrl.h"
39 #include "wx/artprov.h"
44 #include "icons/button.xpm"
46 // ----------------------------------------------------------------------------
48 // ----------------------------------------------------------------------------
53 ButtonPage_Reset
= 100,
54 ButtonPage_ChangeLabel
,
73 // ----------------------------------------------------------------------------
75 // ----------------------------------------------------------------------------
77 class ButtonWidgetsPage
: public WidgetsPage
80 ButtonWidgetsPage(wxNotebook
*notebook
, wxImageList
*imaglist
);
81 virtual ~ButtonWidgetsPage();
85 void OnCheckOrRadioBox(wxCommandEvent
& event
);
87 void OnButton(wxCommandEvent
& event
);
88 void OnButtonReset(wxCommandEvent
& event
);
89 void OnButtonChangeLabel(wxCommandEvent
& event
);
91 // reset the wxButton parameters
94 // (re)create the wxButton
100 // the check/radio boxes for styles
101 wxCheckBox
*m_chkImage
,
105 wxRadioBox
*m_radioHAlign
,
108 // the button itself and the sizer it is in
110 wxSizer
*m_sizerButton
;
112 // the text entries for command parameters
113 wxTextCtrl
*m_textLabel
;
116 DECLARE_EVENT_TABLE()
117 DECLARE_WIDGETS_PAGE(ButtonWidgetsPage
)
120 // ----------------------------------------------------------------------------
122 // ----------------------------------------------------------------------------
124 BEGIN_EVENT_TABLE(ButtonWidgetsPage
, WidgetsPage
)
125 EVT_BUTTON(ButtonPage_Button
, ButtonWidgetsPage::OnButton
)
127 EVT_BUTTON(ButtonPage_Reset
, ButtonWidgetsPage::OnButtonReset
)
128 EVT_BUTTON(ButtonPage_ChangeLabel
, ButtonWidgetsPage::OnButtonChangeLabel
)
130 EVT_CHECKBOX(wxID_ANY
, ButtonWidgetsPage::OnCheckOrRadioBox
)
131 EVT_RADIOBOX(wxID_ANY
, ButtonWidgetsPage::OnCheckOrRadioBox
)
134 // ============================================================================
136 // ============================================================================
138 IMPLEMENT_WIDGETS_PAGE(ButtonWidgetsPage
, _T("Button"));
140 ButtonWidgetsPage::ButtonWidgetsPage(wxNotebook
*notebook
,
141 wxImageList
*imaglist
)
142 : WidgetsPage(notebook
)
144 imaglist
->Add(wxBitmap(button_xpm
));
149 m_chkDefault
= (wxCheckBox
*)NULL
;
152 m_radioVAlign
= (wxRadioBox
*)NULL
;
154 m_textLabel
= (wxTextCtrl
*)NULL
;
156 m_button
= (wxButton
*)NULL
;
157 m_sizerButton
= (wxSizer
*)NULL
;
159 wxSizer
*sizerTop
= new wxBoxSizer(wxHORIZONTAL
);
162 wxStaticBox
*box
= new wxStaticBox(this, wxID_ANY
, _T("&Set style"));
164 wxSizer
*sizerLeft
= new wxStaticBoxSizer(box
, wxVERTICAL
);
166 m_chkImage
= CreateCheckBoxAndAddToSizer(sizerLeft
, _T("With &image"));
167 m_chkFit
= CreateCheckBoxAndAddToSizer(sizerLeft
, _T("&Fit exactly"));
168 m_chkDefault
= CreateCheckBoxAndAddToSizer(sizerLeft
, _T("&Default"));
170 #ifndef __WXUNIVERSAL__
171 // only wxUniv currently supports buttons with images
172 m_chkImage
->Disable();
175 sizerLeft
->Add(5, 5, 0, wxGROW
| wxALL
, 5); // spacer
177 // should be in sync with enums Button[HV]Align!
178 static const wxString halign
[] =
185 static const wxString valign
[] =
192 m_radioHAlign
= new wxRadioBox(this, wxID_ANY
, _T("&Horz alignment"),
193 wxDefaultPosition
, wxDefaultSize
,
194 WXSIZEOF(halign
), halign
);
195 m_radioVAlign
= new wxRadioBox(this, wxID_ANY
, _T("&Vert alignment"),
196 wxDefaultPosition
, wxDefaultSize
,
197 WXSIZEOF(valign
), valign
);
199 sizerLeft
->Add(m_radioHAlign
, 0, wxGROW
| wxALL
, 5);
200 sizerLeft
->Add(m_radioVAlign
, 0, wxGROW
| wxALL
, 5);
202 sizerLeft
->Add(5, 5, 0, wxGROW
| wxALL
, 5); // spacer
204 wxButton
*btn
= new wxButton(this, ButtonPage_Reset
, _T("&Reset"));
205 sizerLeft
->Add(btn
, 0, wxALIGN_CENTRE_HORIZONTAL
| wxALL
, 15);
208 wxStaticBox
*box2
= new wxStaticBox(this, wxID_ANY
, _T("&Operations"));
209 wxSizer
*sizerMiddle
= new wxStaticBoxSizer(box2
, wxVERTICAL
);
211 wxSizer
*sizerRow
= CreateSizerWithTextAndButton(ButtonPage_ChangeLabel
,
216 sizerMiddle
->Add(sizerRow
, 0, wxALL
| wxGROW
, 5);
219 wxSizer
*sizerRight
= new wxBoxSizer(wxHORIZONTAL
);
220 m_button
= new wxButton(this, ButtonPage_Button
, _T("&Press me!"));
221 sizerRight
->Add(0, 0, 1, wxCENTRE
);
222 sizerRight
->Add(m_button
, 1, wxCENTRE
);
223 sizerRight
->Add(0, 0, 1, wxCENTRE
);
224 sizerRight
->SetMinSize(150, 0);
225 m_sizerButton
= sizerRight
; // save it to modify it later
227 // the 3 panes panes compose the window
228 sizerTop
->Add(sizerLeft
, 0, wxGROW
| (wxALL
& ~wxLEFT
), 10);
229 sizerTop
->Add(sizerMiddle
, 1, wxGROW
| wxALL
, 10);
230 sizerTop
->Add(sizerRight
, 1, wxGROW
| (wxALL
& ~wxRIGHT
), 10);
232 // final initializations
240 ButtonWidgetsPage::~ButtonWidgetsPage()
244 // ----------------------------------------------------------------------------
246 // ----------------------------------------------------------------------------
248 void ButtonWidgetsPage::Reset()
250 m_chkFit
->SetValue(true);
251 m_chkImage
->SetValue(false);
252 m_chkDefault
->SetValue(false);
254 m_radioHAlign
->SetSelection(ButtonHAlign_Centre
);
255 m_radioVAlign
->SetSelection(ButtonVAlign_Centre
);
258 void ButtonWidgetsPage::CreateButton()
263 label
= m_button
->GetLabel();
265 size_t count
= m_sizerButton
->GetChildren().GetCount();
266 for ( size_t n
= 0; n
< count
; n
++ )
268 m_sizerButton
->Remove( 0 );
275 label
= _T("&Press me!");
279 switch ( m_radioHAlign
->GetSelection() )
281 case ButtonHAlign_Left
:
286 wxFAIL_MSG(_T("unexpected radiobox selection"));
289 case ButtonHAlign_Centre
:
292 case ButtonHAlign_Right
:
297 switch ( m_radioVAlign
->GetSelection() )
299 case ButtonVAlign_Top
:
304 wxFAIL_MSG(_T("unexpected radiobox selection"));
307 case ButtonVAlign_Centre
:
308 flags
|= wxALIGN_CENTRE_VERTICAL
;
311 case ButtonVAlign_Bottom
:
312 flags
|= wxBU_BOTTOM
;
316 m_button
= new wxButton(this, ButtonPage_Button
, label
,
317 wxDefaultPosition
, wxDefaultSize
,
320 #ifdef __WXUNIVERSAL__
321 if ( m_chkImage
->GetValue() )
323 m_button
->SetImageLabel(wxArtProvider::GetIcon(wxART_INFORMATION
));
327 if ( m_chkDefault
->GetValue() )
329 m_button
->SetDefault();
332 if ( m_chkFit
->GetValue() )
334 m_sizerButton
->Add(0, 0, 1, wxCENTRE
);
335 m_sizerButton
->Add(m_button
, 1, wxCENTRE
);
336 m_sizerButton
->Add(0, 0, 1, wxCENTRE
);
340 m_sizerButton
->Add(m_button
, 1, wxGROW
| wxALL
, 5);
343 m_sizerButton
->Layout();
346 // ----------------------------------------------------------------------------
348 // ----------------------------------------------------------------------------
350 void ButtonWidgetsPage::OnButtonReset(wxCommandEvent
& WXUNUSED(event
))
357 void ButtonWidgetsPage::OnCheckOrRadioBox(wxCommandEvent
& WXUNUSED(event
))
362 void ButtonWidgetsPage::OnButtonChangeLabel(wxCommandEvent
& WXUNUSED(event
))
364 m_button
->SetLabel(m_textLabel
->GetValue());
367 void ButtonWidgetsPage::OnButton(wxCommandEvent
& WXUNUSED(event
))
369 wxLogMessage(_T("Test button clicked."));