X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/1fdc16adf72fbd051d1f4ffdbc8d35d00b3e2837..bb650010c8200174ce824aaadac44e8e5ead194d:/samples/widgets/button.cpp diff --git a/samples/widgets/button.cpp b/samples/widgets/button.cpp index fe5afc0abf..914fa1a08b 100644 --- a/samples/widgets/button.cpp +++ b/samples/widgets/button.cpp @@ -52,7 +52,7 @@ // control ids enum { - ButtonPage_Reset = 100, + ButtonPage_Reset = wxID_HIGHEST, ButtonPage_ChangeLabel, ButtonPage_Button }; @@ -79,10 +79,14 @@ enum class ButtonWidgetsPage : public WidgetsPage { public: - ButtonWidgetsPage(wxBookCtrlBase *book, wxImageList *imaglist); + ButtonWidgetsPage(WidgetsBookCtrl *book, wxImageList *imaglist); virtual ~ButtonWidgetsPage(){}; virtual wxControl *GetWidget() const { return m_button; } + virtual void RecreateWidget() { CreateButton(); } + + // lazy creation of the content + virtual void CreateContent(); protected: // event handlers @@ -114,6 +118,12 @@ protected: *m_chkFit, *m_chkDefault; + // more checkboxes for wxBitmapButton only + wxCheckBox *m_chkUseSelected, + *m_chkUseFocused, + *m_chkUseHover, + *m_chkUseDisabled; + wxRadioBox *m_radioHAlign, *m_radioVAlign; @@ -147,19 +157,27 @@ END_EVENT_TABLE() // implementation // ============================================================================ -IMPLEMENT_WIDGETS_PAGE(ButtonWidgetsPage, _T("Button")); +#if defined(__WXUNIVERSAL__) + #define FAMILY_CTRLS UNIVERSAL_CTRLS +#else + #define FAMILY_CTRLS NATIVE_CTRLS +#endif + +IMPLEMENT_WIDGETS_PAGE(ButtonWidgetsPage, _T("Button"), FAMILY_CTRLS ); -ButtonWidgetsPage::ButtonWidgetsPage(wxBookCtrlBase *book, +ButtonWidgetsPage::ButtonWidgetsPage(WidgetsBookCtrl *book, wxImageList *imaglist) - : WidgetsPage(book) + : WidgetsPage(book, imaglist, button_xpm) { - imaglist->Add(wxBitmap(button_xpm)); - // init everything m_chkBitmap = m_chkImage = m_chkFit = - m_chkDefault = (wxCheckBox *)NULL; + m_chkDefault = + m_chkUseSelected = + m_chkUseFocused = + m_chkUseHover = + m_chkUseDisabled = (wxCheckBox *)NULL; m_radioHAlign = m_radioVAlign = (wxRadioBox *)NULL; @@ -168,7 +186,10 @@ ButtonWidgetsPage::ButtonWidgetsPage(wxBookCtrlBase *book, m_button = (wxButton *)NULL; m_sizerButton = (wxSizer *)NULL; +} +void ButtonWidgetsPage::CreateContent() +{ wxSizer *sizerTop = new wxBoxSizer(wxHORIZONTAL); // left pane @@ -186,7 +207,17 @@ ButtonWidgetsPage::ButtonWidgetsPage(wxBookCtrlBase *book, m_chkImage->Disable(); #endif // !wxUniv - sizerLeft->Add(5, 5, 0, wxGROW | wxALL, 5); // spacer + sizerLeft->AddSpacer(5); + + wxSizer *sizerUseLabels = + new wxStaticBoxSizer(wxVERTICAL, this, _T("&Use the following labels?")); + m_chkUseSelected = CreateCheckBoxAndAddToSizer(sizerUseLabels, _T("&Pushed")); + m_chkUseFocused = CreateCheckBoxAndAddToSizer(sizerUseLabels, _T("&Focused")); + m_chkUseHover = CreateCheckBoxAndAddToSizer(sizerUseLabels, _T("&Hover")); + m_chkUseDisabled = CreateCheckBoxAndAddToSizer(sizerUseLabels, _T("&Disabled")); + sizerLeft->Add(sizerUseLabels, wxSizerFlags().Expand().Border()); + + sizerLeft->AddSpacer(15); // should be in sync with enums Button[HV]Align! static const wxString halign[] = @@ -239,15 +270,11 @@ ButtonWidgetsPage::ButtonWidgetsPage(wxBookCtrlBase *book, sizerTop->Add(sizerMiddle, 1, wxGROW | wxALL, 10); sizerTop->Add(m_sizerButton, 1, wxGROW | (wxALL & ~wxRIGHT), 10); - // final initializations + // do create the main control Reset(); - - m_button = new wxButton(this, ButtonPage_Button, _T("&Press me!")); - AddButtonToSizer(); + CreateButton(); SetSizer(sizerTop); - - sizerTop->Fit(this); } // ---------------------------------------------------------------------------- @@ -261,6 +288,11 @@ void ButtonWidgetsPage::Reset() m_chkImage->SetValue(false); m_chkDefault->SetValue(false); + m_chkUseSelected->SetValue(true); + m_chkUseFocused->SetValue(true); + m_chkUseHover->SetValue(true); + m_chkUseDisabled->SetValue(true); + m_radioHAlign->SetSelection(ButtonHAlign_Centre); m_radioVAlign->SetSelection(ButtonVAlign_Centre); } @@ -288,7 +320,7 @@ void ButtonWidgetsPage::CreateButton() label = m_textLabel->GetValue(); } - int flags = 0; + int flags = ms_defaultFlags; switch ( m_radioHAlign->GetSelection() ) { case ButtonHAlign_Left: @@ -318,7 +350,7 @@ void ButtonWidgetsPage::CreateButton() // fall through case ButtonVAlign_Centre: - flags |= wxALIGN_CENTRE_VERTICAL; + // centre vertical alignment is the default (no style) break; case ButtonVAlign_Bottom: @@ -326,14 +358,19 @@ void ButtonWidgetsPage::CreateButton() break; } - if ( m_chkBitmap->GetValue() ) + const bool isBitmapButton = m_chkBitmap->GetValue(); + if ( isBitmapButton ) { wxBitmapButton *bbtn = new wxBitmapButton(this, ButtonPage_Button, CreateBitmap(_T("normal"))); - bbtn->SetBitmapSelected(CreateBitmap(_T("pushed"))); - bbtn->SetBitmapFocus(CreateBitmap(_T("focused"))); - bbtn->SetBitmapDisabled(CreateBitmap(_T("disabled"))); - bbtn->SetBitmapHover(CreateBitmap(_T("hover"))); + if ( m_chkUseSelected->GetValue() ) + bbtn->SetBitmapSelected(CreateBitmap(_T("pushed"))); + if ( m_chkUseFocused->GetValue() ) + bbtn->SetBitmapFocus(CreateBitmap(_T("focused"))); + if ( m_chkUseHover->GetValue() ) + bbtn->SetBitmapHover(CreateBitmap(_T("hover"))); + if ( m_chkUseDisabled->GetValue() ) + bbtn->SetBitmapDisabled(CreateBitmap(_T("disabled"))); m_button = bbtn; } else // normal button @@ -343,6 +380,11 @@ void ButtonWidgetsPage::CreateButton() flags); } + m_chkUseSelected->Enable(isBitmapButton); + m_chkUseFocused->Enable(isBitmapButton); + m_chkUseHover->Enable(isBitmapButton); + m_chkUseDisabled->Enable(isBitmapButton); + #ifdef __WXUNIVERSAL__ if ( m_chkImage->GetValue() ) { @@ -412,7 +454,7 @@ wxBitmap ButtonWidgetsPage::CreateBitmap(const wxString& label) dc.SetBackground(wxBrush(*wxWHITE)); dc.Clear(); dc.SetTextForeground(*wxBLUE); - dc.DrawLabel(wxStripMenuCodes(m_textLabel->GetLabel()) + _T("\n") + dc.DrawLabel(wxStripMenuCodes(m_textLabel->GetValue()) + _T("\n") _T("(") + label + _T(" state)"), wxArtProvider::GetBitmap(wxART_INFORMATION), wxRect(10, 10, bmp.GetWidth() - 20, bmp.GetHeight() - 20),