X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/7b1279006496ba3251a755bcef91301ad107bb78..728ddc45e0377352434e752ede07311e00252399:/samples/widgets/radiobox.cpp diff --git a/samples/widgets/radiobox.cpp b/samples/widgets/radiobox.cpp index 4e08f4b937..d0729c6f10 100644 --- a/samples/widgets/radiobox.cpp +++ b/samples/widgets/radiobox.cpp @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Program: wxWindows Widgets Sample +// Program: wxWidgets Widgets Sample // Name: radiobox.cpp // Purpose: Part of the widgets sample showing wxRadioBox // Author: Vadim Zeitlin @@ -24,10 +24,13 @@ #pragma hdrstop #endif +#if wxUSE_RADIOBOX + // for all others, include the necessary headers #ifndef WX_PRECOMP #include "wx/log.h" + #include "wx/bitmap.h" #include "wx/button.h" #include "wx/checkbox.h" #include "wx/radiobox.h" @@ -38,7 +41,7 @@ #include "wx/sizer.h" #include "widgets.h" -#if 1 + #include "icons/radiobox.xpm" // ---------------------------------------------------------------------------- @@ -48,11 +51,13 @@ // control ids enum { - RadioPage_Reset = 100, + RadioPage_Reset = wxID_HIGHEST, RadioPage_Update, RadioPage_Selection, RadioPage_Label, RadioPage_LabelBtn, + RadioPage_EnableItem, + RadioPage_ShowItem, RadioPage_Radio }; @@ -65,8 +70,11 @@ enum }; // default values for the number of radiobox items -static const size_t DEFAULT_NUM_ENTRIES = 12; -static const size_t DEFAULT_MAJOR_DIM = 3; +static const unsigned int DEFAULT_NUM_ENTRIES = 12; +static const unsigned int DEFAULT_MAJOR_DIM = 3; + +// this item is enabled/disabled shown/hidden by the test checkboxes +static const int TEST_BUTTON = 1; // ---------------------------------------------------------------------------- // RadioWidgetsPage @@ -75,8 +83,14 @@ static const size_t DEFAULT_MAJOR_DIM = 3; class RadioWidgetsPage : public WidgetsPage { public: - RadioWidgetsPage(wxNotebook *notebook, wxImageList *imaglist); - virtual ~RadioWidgetsPage(); + RadioWidgetsPage(WidgetsBookCtrl *book, wxImageList *imaglist); + virtual ~RadioWidgetsPage(){}; + + virtual wxControl *GetWidget() const { return m_radio; } + virtual void RecreateWidget() { CreateRadio(); } + + // lazy creation of the content + virtual void CreateContent(); protected: // event handlers @@ -89,9 +103,14 @@ protected: void OnButtonSelection(wxCommandEvent& event); void OnButtonSetLabel(wxCommandEvent& event); + void OnEnableItem(wxCommandEvent& event); + void OnShowItem(wxCommandEvent& event); + void OnUpdateUIReset(wxUpdateUIEvent& event); void OnUpdateUIUpdate(wxUpdateUIEvent& event); void OnUpdateUISelection(wxUpdateUIEvent& event); + void OnUpdateUIEnableItem(wxUpdateUIEvent& event); + void OnUpdateUIShowItem(wxUpdateUIEvent& event); // reset the wxRadioBox parameters void Reset(); @@ -104,6 +123,8 @@ protected: // the check/radio boxes for styles wxCheckBox *m_chkVert; + wxCheckBox *m_chkEnableItem; + wxCheckBox *m_chkShowItem; wxRadioBox *m_radioDir; // the gauge itself and the sizer it is in @@ -141,24 +162,38 @@ BEGIN_EVENT_TABLE(RadioWidgetsPage, WidgetsPage) EVT_RADIOBOX(RadioPage_Radio, RadioWidgetsPage::OnRadioBox) - EVT_CHECKBOX(-1, RadioWidgetsPage::OnCheckOrRadioBox) - EVT_RADIOBOX(-1, RadioWidgetsPage::OnCheckOrRadioBox) + EVT_CHECKBOX(RadioPage_EnableItem, RadioWidgetsPage::OnEnableItem) + EVT_CHECKBOX(RadioPage_ShowItem, RadioWidgetsPage::OnShowItem) + + EVT_UPDATE_UI(RadioPage_EnableItem, RadioWidgetsPage::OnUpdateUIEnableItem) + EVT_UPDATE_UI(RadioPage_ShowItem, RadioWidgetsPage::OnUpdateUIShowItem) + + EVT_CHECKBOX(wxID_ANY, RadioWidgetsPage::OnCheckOrRadioBox) + EVT_RADIOBOX(wxID_ANY, RadioWidgetsPage::OnCheckOrRadioBox) END_EVENT_TABLE() // ============================================================================ // implementation // ============================================================================ -IMPLEMENT_WIDGETS_PAGE(RadioWidgetsPage, _T("Radio")); +#if defined(__WXUNIVERSAL__) + #define FAMILY_CTRLS UNIVERSAL_CTRLS +#else + #define FAMILY_CTRLS NATIVE_CTRLS +#endif -RadioWidgetsPage::RadioWidgetsPage(wxNotebook *notebook, - wxImageList *imaglist) - : WidgetsPage(notebook) -{ - imaglist->Add(wxBitmap(radio_xpm)); +IMPLEMENT_WIDGETS_PAGE(RadioWidgetsPage, _T("Radio"), + FAMILY_CTRLS | WITH_ITEMS_CTRLS + ); +RadioWidgetsPage::RadioWidgetsPage(WidgetsBookCtrl *book, + wxImageList *imaglist) + : WidgetsPage(book, imaglist, radio_xpm) +{ // init everything m_chkVert = (wxCheckBox *)NULL; + m_chkEnableItem = (wxCheckBox *)NULL; + m_chkShowItem = (wxCheckBox *)NULL; m_textNumBtns = m_textLabelBtns = @@ -167,11 +202,14 @@ RadioWidgetsPage::RadioWidgetsPage(wxNotebook *notebook, m_radio = m_radioDir = (wxRadioBox *)NULL; m_sizerRadio = (wxSizer *)NULL; +} +void RadioWidgetsPage::CreateContent() +{ wxSizer *sizerTop = new wxBoxSizer(wxHORIZONTAL); // left pane - wxStaticBox *box = new wxStaticBox(this, -1, _T("&Set style")); + wxStaticBox *box = new wxStaticBox(this, wxID_ANY, _T("&Set style")); wxSizer *sizerLeft = new wxStaticBoxSizer(box, wxVERTICAL); @@ -184,7 +222,7 @@ RadioWidgetsPage::RadioWidgetsPage(wxNotebook *notebook, _T("top to bottom") }; - m_radioDir = new wxRadioBox(this, -1, _T("Numbering:"), + m_radioDir = new wxRadioBox(this, wxID_ANY, _T("Numbering:"), wxDefaultPosition, wxDefaultSize, WXSIZEOF(layoutDir), layoutDir, 1, wxRA_SPECIFY_COLS); @@ -197,12 +235,12 @@ RadioWidgetsPage::RadioWidgetsPage(wxNotebook *notebook, wxSizer *sizerRow; sizerRow = CreateSizerWithTextAndLabel(_T("&Major dimension:"), - -1, + wxID_ANY, &m_textMajorDim); sizerLeft->Add(sizerRow, 0, wxGROW | wxALL, 5); sizerRow = CreateSizerWithTextAndLabel(_T("&Number of buttons:"), - -1, + wxID_ANY, &m_textNumBtns); sizerLeft->Add(sizerRow, 0, wxGROW | wxALL, 5); @@ -216,32 +254,39 @@ RadioWidgetsPage::RadioWidgetsPage(wxNotebook *notebook, sizerLeft->Add(btn, 0, wxALIGN_CENTRE_HORIZONTAL | wxALL, 15); // middle pane - wxStaticBox *box2 = new wxStaticBox(this, -1, _T("&Change parameters")); + wxStaticBox *box2 = new wxStaticBox(this, wxID_ANY, _T("&Change parameters")); wxSizer *sizerMiddle = new wxStaticBoxSizer(box2, wxVERTICAL); sizerRow = CreateSizerWithTextAndLabel(_T("Current selection:"), - -1, + wxID_ANY, &m_textCurSel); sizerMiddle->Add(sizerRow, 0, wxGROW | wxALL, 5); sizerRow = CreateSizerWithTextAndButton(RadioPage_Selection, _T("&Change selection:"), - -1, + wxID_ANY, &m_textSel); sizerMiddle->Add(sizerRow, 0, wxGROW | wxALL, 5); sizerRow = CreateSizerWithTextAndButton(RadioPage_Label, _T("&Label for box:"), - -1, + wxID_ANY, &m_textLabel); sizerMiddle->Add(sizerRow, 0, wxGROW | wxALL, 5); sizerRow = CreateSizerWithTextAndButton(RadioPage_LabelBtn, _T("&Label for buttons:"), - -1, + wxID_ANY, &m_textLabelBtns); sizerMiddle->Add(sizerRow, 0, wxGROW | wxALL, 5); + m_chkEnableItem = CreateCheckBoxAndAddToSizer(sizerMiddle, + _T("Disable &2nd item"), + RadioPage_EnableItem); + m_chkShowItem = CreateCheckBoxAndAddToSizer(sizerMiddle, + _T("Hide 2nd &item"), + RadioPage_ShowItem); + // right pane wxSizer *sizerRight = new wxBoxSizer(wxHORIZONTAL); sizerRight->SetMinSize(150, 0); @@ -256,14 +301,7 @@ RadioWidgetsPage::RadioWidgetsPage(wxNotebook *notebook, sizerTop->Add(sizerRight, 0, wxGROW | (wxALL & ~wxRIGHT), 10); // final initializations - SetAutoLayout(TRUE); SetSizer(sizerTop); - - sizerTop->Fit(this); -} - -RadioWidgetsPage::~RadioWidgetsPage() -{ } // ---------------------------------------------------------------------------- @@ -272,12 +310,14 @@ RadioWidgetsPage::~RadioWidgetsPage() void RadioWidgetsPage::Reset() { - m_textMajorDim->SetValue(wxString::Format(_T("%d"), DEFAULT_MAJOR_DIM)); - m_textNumBtns->SetValue(wxString::Format(_T("%d"), DEFAULT_NUM_ENTRIES)); + m_textMajorDim->SetValue(wxString::Format(_T("%u"), DEFAULT_MAJOR_DIM)); + m_textNumBtns->SetValue(wxString::Format(_T("%u"), DEFAULT_NUM_ENTRIES)); m_textLabel->SetValue(_T("I'm a radiobox")); m_textLabelBtns->SetValue(_T("item")); - m_chkVert->SetValue(FALSE); + m_chkVert->SetValue(false); + m_chkEnableItem->SetValue(true); + m_chkShowItem->SetValue(true); m_radioDir->SetSelection(RadioDir_Default); } @@ -288,7 +328,7 @@ void RadioWidgetsPage::CreateRadio() { sel = m_radio->GetSelection(); - m_sizerRadio->Remove(m_radio); + m_sizerRadio->Detach( m_radio ); delete m_radio; } @@ -320,12 +360,15 @@ void RadioWidgetsPage::CreateRadio() wxString labelBtn = m_textLabelBtns->GetValue(); for ( size_t n = 0; n < count; n++ ) { - items[n] = wxString::Format(_T("%s %u"), labelBtn.c_str(), n + 1); + items[n] = wxString::Format(_T("%s %lu"), + labelBtn.c_str(), (unsigned long)n + 1); } int flags = m_chkVert->GetValue() ? wxRA_VERTICAL : wxRA_HORIZONTAL; + flags |= ms_defaultFlags; + #ifdef wxRA_LEFTTORIGHT switch ( m_radioDir->GetSelection() ) { @@ -362,6 +405,9 @@ void RadioWidgetsPage::CreateRadio() m_sizerRadio->Add(m_radio, 1, wxGROW); m_sizerRadio->Layout(); + + m_chkEnableItem->SetValue(true); + m_chkEnableItem->SetValue(true); } // ---------------------------------------------------------------------------- @@ -375,7 +421,7 @@ void RadioWidgetsPage::OnButtonReset(wxCommandEvent& WXUNUSED(event)) CreateRadio(); } -void RadioWidgetsPage::OnCheckOrRadioBox(wxCommandEvent& event) +void RadioWidgetsPage::OnCheckOrRadioBox(wxCommandEvent& WXUNUSED(event)) { CreateRadio(); } @@ -383,10 +429,12 @@ void RadioWidgetsPage::OnCheckOrRadioBox(wxCommandEvent& event) void RadioWidgetsPage::OnRadioBox(wxCommandEvent& event) { int sel = m_radio->GetSelection(); + int event_sel = event.GetSelection(); + wxUnusedVar(event_sel); wxLogMessage(_T("Radiobox selection changed, now %d"), sel); - wxASSERT_MSG( sel == event.GetSelection(), + wxASSERT_MSG( sel == event_sel, _T("selection should be the same in event and radiobox") ); m_textCurSel->SetValue(wxString::Format(_T("%d"), sel)); @@ -416,6 +464,16 @@ void RadioWidgetsPage::OnButtonSelection(wxCommandEvent& WXUNUSED(event)) } } +void RadioWidgetsPage::OnEnableItem(wxCommandEvent& event) +{ + m_radio->Enable(TEST_BUTTON, event.IsChecked()); +} + +void RadioWidgetsPage::OnShowItem(wxCommandEvent& event) +{ + m_radio->Show(TEST_BUTTON, event.IsChecked()); +} + void RadioWidgetsPage::OnUpdateUIUpdate(wxUpdateUIEvent& event) { unsigned long n; @@ -454,4 +512,16 @@ void RadioWidgetsPage::OnUpdateUIReset(wxUpdateUIEvent& event) event.Enable(enable); } -#endif \ No newline at end of file +void RadioWidgetsPage::OnUpdateUIEnableItem(wxUpdateUIEvent& event) +{ + event.SetText(m_radio->IsItemEnabled(TEST_BUTTON) ? _T("Disable &2nd item") + : _T("Enable &2nd item")); +} + +void RadioWidgetsPage::OnUpdateUIShowItem(wxUpdateUIEvent& event) +{ + event.SetText(m_radio->IsItemShown(TEST_BUTTON) ? _T("Hide 2nd &item") + : _T("Show 2nd &item")); +} + +#endif // wxUSE_RADIOBOX