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."));