1 /////////////////////////////////////////////////////////////////////////////
2 // Program: wxWindows 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"
43 #include "icons/button.xpm"
45 // ----------------------------------------------------------------------------
47 // ----------------------------------------------------------------------------
52 ButtonPage_Reset
= 100,
53 ButtonPage_ChangeLabel
,
72 // ----------------------------------------------------------------------------
74 // ----------------------------------------------------------------------------
76 class ButtonWidgetsPage
: public WidgetsPage
79 ButtonWidgetsPage(wxNotebook
*notebook
, wxImageList
*imaglist
);
80 virtual ~ButtonWidgetsPage();
84 void OnCheckOrRadioBox(wxCommandEvent
& event
);
86 void OnButton(wxCommandEvent
& event
);
87 void OnButtonReset(wxCommandEvent
& event
);
88 void OnButtonChangeLabel(wxCommandEvent
& event
);
90 // reset the wxButton parameters
93 // (re)create the wxButton
99 // the check/radio boxes for styles
100 wxCheckBox
*m_chkImage
,
104 wxRadioBox
*m_radioHAlign
,
107 // the gauge itself and the sizer it is in
109 wxSizer
*m_sizerButton
;
111 // the text entries for command parameters
112 wxTextCtrl
*m_textLabel
;
115 DECLARE_EVENT_TABLE()
116 DECLARE_WIDGETS_PAGE(ButtonWidgetsPage
)
119 // ----------------------------------------------------------------------------
121 // ----------------------------------------------------------------------------
123 BEGIN_EVENT_TABLE(ButtonWidgetsPage
, WidgetsPage
)
124 EVT_BUTTON(ButtonPage_Button
, ButtonWidgetsPage::OnButton
)
126 EVT_BUTTON(ButtonPage_Reset
, ButtonWidgetsPage::OnButtonReset
)
127 EVT_BUTTON(ButtonPage_ChangeLabel
, ButtonWidgetsPage::OnButtonChangeLabel
)
129 EVT_CHECKBOX(-1, ButtonWidgetsPage::OnCheckOrRadioBox
)
130 EVT_RADIOBOX(-1, ButtonWidgetsPage::OnCheckOrRadioBox
)
133 // ============================================================================
135 // ============================================================================
137 IMPLEMENT_WIDGETS_PAGE(ButtonWidgetsPage
, _T("Button"));
139 ButtonWidgetsPage::ButtonWidgetsPage(wxNotebook
*notebook
,
140 wxImageList
*imaglist
)
141 : WidgetsPage(notebook
)
143 imaglist
->Add(wxBitmap(button_xpm
));
148 m_chkDefault
= (wxCheckBox
*)NULL
;
151 m_radioVAlign
= (wxRadioBox
*)NULL
;
153 m_textLabel
= (wxTextCtrl
*)NULL
;
155 m_button
= (wxButton
*)NULL
;
156 m_sizerButton
= (wxSizer
*)NULL
;
158 wxSizer
*sizerTop
= new wxBoxSizer(wxHORIZONTAL
);
161 wxStaticBox
*box
= new wxStaticBox(this, -1, _T("&Set style"));
163 wxSizer
*sizerLeft
= new wxStaticBoxSizer(box
, wxVERTICAL
);
165 m_chkImage
= CreateCheckBoxAndAddToSizer(sizerLeft
, _T("With &image"));
166 m_chkFit
= CreateCheckBoxAndAddToSizer(sizerLeft
, _T("&Fit exactly"));
167 m_chkDefault
= CreateCheckBoxAndAddToSizer(sizerLeft
, _T("&Default"));
169 #ifndef __WXUNIVERSAL__
170 // only wxUniv currently supoprts buttons with images
171 m_chkImage
->Disable();
174 sizerLeft
->Add(5, 5, 0, wxGROW
| wxALL
, 5); // spacer
176 // should be in sync with enums Button[HV]Align!
177 static const wxString halign
[] =
184 static const wxString valign
[] =
191 m_radioHAlign
= new wxRadioBox(this, -1, _T("&Horz alignment"),
192 wxDefaultPosition
, wxDefaultSize
,
193 WXSIZEOF(halign
), halign
);
194 m_radioVAlign
= new wxRadioBox(this, -1, _T("&Vert alignment"),
195 wxDefaultPosition
, wxDefaultSize
,
196 WXSIZEOF(valign
), valign
);
198 sizerLeft
->Add(m_radioHAlign
, 0, wxGROW
| wxALL
, 5);
199 sizerLeft
->Add(m_radioVAlign
, 0, wxGROW
| wxALL
, 5);
201 sizerLeft
->Add(5, 5, 0, wxGROW
| wxALL
, 5); // spacer
203 wxButton
*btn
= new wxButton(this, ButtonPage_Reset
, _T("&Reset"));
204 sizerLeft
->Add(btn
, 0, wxALIGN_CENTRE_HORIZONTAL
| wxALL
, 15);
207 wxStaticBox
*box2
= new wxStaticBox(this, -1, _T("&Operations"));
208 wxSizer
*sizerMiddle
= new wxStaticBoxSizer(box2
, wxVERTICAL
);
210 wxSizer
*sizerRow
= CreateSizerWithTextAndButton(ButtonPage_ChangeLabel
,
215 sizerMiddle
->Add(sizerRow
, 0, wxALL
| wxGROW
, 5);
218 wxSizer
*sizerRight
= new wxBoxSizer(wxHORIZONTAL
);
219 m_button
= new wxButton(this, ButtonPage_Button
, _T("&Press me!"));
220 sizerRight
->Add(0, 0, 1, wxCENTRE
);
221 sizerRight
->Add(m_button
, 1, wxCENTRE
);
222 sizerRight
->Add(0, 0, 1, wxCENTRE
);
223 sizerRight
->SetMinSize(250, 0);
224 m_sizerButton
= sizerRight
; // save it to modify it later
226 // the 3 panes panes compose the window
227 sizerTop
->Add(sizerLeft
, 0, wxGROW
| (wxALL
& ~wxLEFT
), 10);
228 sizerTop
->Add(sizerMiddle
, 1, wxGROW
| wxALL
, 10);
229 sizerTop
->Add(sizerRight
, 1, wxGROW
| (wxALL
& ~wxRIGHT
), 10);
231 // 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
:
282 flags
|= wxALIGN_LEFT
;
286 wxFAIL_MSG(_T("unexpected radiobox selection"));
289 case ButtonHAlign_Centre
:
290 flags
|= wxALIGN_CENTRE_HORIZONTAL
;
293 case ButtonHAlign_Right
:
294 flags
|= wxALIGN_RIGHT
;
298 switch ( m_radioVAlign
->GetSelection() )
300 case ButtonVAlign_Top
:
301 flags
|= wxALIGN_TOP
;
305 wxFAIL_MSG(_T("unexpected radiobox selection"));
308 case ButtonVAlign_Centre
:
309 flags
|= wxALIGN_CENTRE_VERTICAL
;
312 case ButtonVAlign_Bottom
:
313 flags
|= wxALIGN_BOTTOM
;
317 m_button
= new wxButton(this, ButtonPage_Button
, label
,
318 wxDefaultPosition
, wxDefaultSize
,
321 #ifdef __WXUNIVERSAL__
322 if ( m_chkImage
->GetValue() )
324 m_button
->SetImageLabel(wxTheApp
->GetStdIcon(wxICON_INFORMATION
));
328 if ( m_chkDefault
->GetValue() )
330 m_button
->SetDefault();
333 if ( m_chkFit
->GetValue() )
335 m_sizerButton
->Add(0, 0, 1, wxCENTRE
);
336 m_sizerButton
->Add(m_button
, 1, wxCENTRE
);
337 m_sizerButton
->Add(0, 0, 1, wxCENTRE
);
341 m_sizerButton
->Add(m_button
, 1, wxGROW
| wxALL
, 5);
344 m_sizerButton
->Layout();
347 // ----------------------------------------------------------------------------
349 // ----------------------------------------------------------------------------
351 void ButtonWidgetsPage::OnButtonReset(wxCommandEvent
& WXUNUSED(event
))
358 void ButtonWidgetsPage::OnCheckOrRadioBox(wxCommandEvent
& event
)
363 void ButtonWidgetsPage::OnButtonChangeLabel(wxCommandEvent
& WXUNUSED(event
))
365 m_button
->SetLabel(m_textLabel
->GetValue());
368 void ButtonWidgetsPage::OnButton(wxCommandEvent
& event
)
370 wxLogMessage(_T("Test button clicked."));