X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/261357eb0ad855b642fe68a84c9ad2b727a926cb..05e0b047d879cdbfade7f2ab346c0acdf3e29f96:/samples/widgets/spinbtn.cpp diff --git a/samples/widgets/spinbtn.cpp b/samples/widgets/spinbtn.cpp index 125d533bf3..722b024027 100644 --- a/samples/widgets/spinbtn.cpp +++ b/samples/widgets/spinbtn.cpp @@ -42,7 +42,7 @@ #include "wx/spinctrl.h" #include "wx/sizer.h" - +#include "wx/stattext.h" #include "widgets.h" #include "icons/spinbtn.xpm" @@ -63,7 +63,8 @@ enum SpinBtnPage_MinText, SpinBtnPage_MaxText, SpinBtnPage_SpinBtn, - SpinBtnPage_SpinCtrl + SpinBtnPage_SpinCtrl, + SpinBtnPage_SpinCtrlDouble }; // ---------------------------------------------------------------------------- @@ -78,8 +79,12 @@ public: virtual wxControl *GetWidget() const { return m_spinbtn; } virtual wxControl *GetWidget2() const { return m_spinctrl; } + virtual wxControl *GetWidget3() const { return m_spinctrldbl; } virtual void RecreateWidget() { CreateSpin(); } + // lazy creation of the content + virtual void CreateContent(); + protected: // event handlers void OnButtonReset(wxCommandEvent& event); @@ -93,6 +98,9 @@ protected: void OnSpinBtnUp(wxSpinEvent& event); void OnSpinBtnDown(wxSpinEvent& event); void OnSpinCtrl(wxSpinEvent& event); + void OnSpinCtrlDouble(wxSpinDoubleEvent& event); + void OnSpinText(wxCommandEvent& event); + void OnSpinTextEnter(wxCommandEvent& event); void OnUpdateUIValueButton(wxUpdateUIEvent& event); void OnUpdateUIMinMaxButton(wxUpdateUIEvent& event); @@ -124,6 +132,7 @@ protected: // the spinbtn and the spinctrl and the sizer containing them wxSpinButton *m_spinbtn; wxSpinCtrl *m_spinctrl; + wxSpinCtrlDouble *m_spinctrldbl; wxSizer *m_sizerSpin; @@ -157,6 +166,10 @@ BEGIN_EVENT_TABLE(SpinBtnWidgetsPage, WidgetsPage) EVT_SPIN_UP(SpinBtnPage_SpinBtn, SpinBtnWidgetsPage::OnSpinBtnUp) EVT_SPIN_DOWN(SpinBtnPage_SpinBtn, SpinBtnWidgetsPage::OnSpinBtnDown) EVT_SPINCTRL(SpinBtnPage_SpinCtrl, SpinBtnWidgetsPage::OnSpinCtrl) + EVT_SPINCTRLDOUBLE(SpinBtnPage_SpinCtrlDouble, SpinBtnWidgetsPage::OnSpinCtrlDouble) + EVT_TEXT(SpinBtnPage_SpinCtrl, SpinBtnWidgetsPage::OnSpinText) + EVT_TEXT_ENTER(SpinBtnPage_SpinCtrl, SpinBtnWidgetsPage::OnSpinTextEnter) + EVT_TEXT(SpinBtnPage_SpinCtrlDouble, SpinBtnWidgetsPage::OnSpinText) EVT_CHECKBOX(wxID_ANY, SpinBtnWidgetsPage::OnCheckOrRadioBox) EVT_RADIOBOX(wxID_ANY, SpinBtnWidgetsPage::OnCheckOrRadioBox) @@ -184,6 +197,7 @@ SpinBtnWidgetsPage::SpinBtnWidgetsPage(WidgetsBookCtrl *book, m_chkWrap = NULL; m_spinbtn = NULL; m_spinctrl = NULL; + m_spinctrldbl = NULL; m_textValue = NULL; m_textMin = NULL; m_textMax = NULL; @@ -197,7 +211,10 @@ SpinBtnWidgetsPage::SpinBtnWidgetsPage(WidgetsBookCtrl *book, m_spinbtn = (wxSpinButton *)NULL; m_sizerSpin = (wxSizer *)NULL; +} +void SpinBtnWidgetsPage::CreateContent() +{ wxSizer *sizerTop = new wxBoxSizer(wxHORIZONTAL); // left pane @@ -260,8 +277,6 @@ SpinBtnWidgetsPage::SpinBtnWidgetsPage(WidgetsBookCtrl *book, // final initializations SetSizer(sizerTop); - - sizerTop->Fit(this); } // ---------------------------------------------------------------------------- @@ -298,14 +313,17 @@ void SpinBtnWidgetsPage::CreateSpin() m_sizerSpin->Detach( m_spinbtn ); m_sizerSpin->Detach( m_spinctrl ); + m_sizerSpin->Detach( m_spinctrldbl ); - // there are 3 spacers left + // there are 4 spacers left + m_sizerSpin->Remove( 0 ); m_sizerSpin->Remove( 0 ); m_sizerSpin->Remove( 0 ); m_sizerSpin->Remove( 0 ); delete m_spinbtn; delete m_spinctrl; + delete m_spinctrldbl; } m_spinbtn = new wxSpinButton(this, SpinBtnPage_SpinBtn, @@ -321,11 +339,26 @@ void SpinBtnWidgetsPage::CreateSpin() flags, m_min, m_max, val); + m_spinctrldbl = new wxSpinCtrlDouble(this, SpinBtnPage_SpinCtrlDouble, + wxString::Format(_T("%d"), val), + wxDefaultPosition, wxDefaultSize, + flags, + m_min, m_max, val, 0.1); + + // Add spacers, labels and spin controls to the sizer. m_sizerSpin->Add(0, 0, 1); + m_sizerSpin->Add(new wxStaticText(this, wxID_ANY, wxT("wxSpinButton")), + 0, wxALIGN_CENTRE | wxALL, 5); m_sizerSpin->Add(m_spinbtn, 0, wxALIGN_CENTRE | wxALL, 5); m_sizerSpin->Add(0, 0, 1); + m_sizerSpin->Add(new wxStaticText(this, wxID_ANY, wxT("wxSpinCtrl")), + 0, wxALIGN_CENTRE | wxALL, 5); m_sizerSpin->Add(m_spinctrl, 0, wxALIGN_CENTRE | wxALL, 5); m_sizerSpin->Add(0, 0, 1); + m_sizerSpin->Add(new wxStaticText(this, wxID_ANY, wxT("wxSpinCtrlDouble")), + 0, wxALIGN_CENTRE | wxALL, 5); + m_sizerSpin->Add(m_spinctrldbl, 0, wxALIGN_CENTRE | wxALL, 5); + m_sizerSpin->Add(0, 0, 1); m_sizerSpin->Layout(); } @@ -347,7 +380,7 @@ void SpinBtnWidgetsPage::OnButtonSetMinAndMax(wxCommandEvent& WXUNUSED(event)) maxNew = 0; // init to suppress compiler warning if ( !m_textMin->GetValue().ToLong(&minNew) || !m_textMax->GetValue().ToLong(&maxNew) || - minNew >= maxNew ) + minNew > maxNew ) { wxLogWarning(_T("Invalid min/max values for the spinbtn.")); @@ -359,6 +392,7 @@ void SpinBtnWidgetsPage::OnButtonSetMinAndMax(wxCommandEvent& WXUNUSED(event)) m_spinbtn->SetRange(minNew, maxNew); m_spinctrl->SetRange(minNew, maxNew); + m_spinctrldbl->SetRange(minNew, maxNew); } void SpinBtnWidgetsPage::OnButtonSetValue(wxCommandEvent& WXUNUSED(event)) @@ -373,6 +407,7 @@ void SpinBtnWidgetsPage::OnButtonSetValue(wxCommandEvent& WXUNUSED(event)) m_spinbtn->SetValue(val); m_spinctrl->SetValue(val); + m_spinctrldbl->SetValue(val); } void SpinBtnWidgetsPage::OnUpdateUIValueButton(wxUpdateUIEvent& event) @@ -386,7 +421,7 @@ void SpinBtnWidgetsPage::OnUpdateUIMinMaxButton(wxUpdateUIEvent& event) long mn, mx; event.Enable( m_textMin->GetValue().ToLong(&mn) && m_textMax->GetValue().ToLong(&mx) && - mn < mx); + mn <= mx); } void SpinBtnWidgetsPage::OnUpdateUIResetButton(wxUpdateUIEvent& event) @@ -428,8 +463,6 @@ void SpinBtnWidgetsPage::OnSpinBtnDown(wxSpinEvent& event) void SpinBtnWidgetsPage::OnSpinCtrl(wxSpinEvent& event) { - if (!m_spinctrl) - return; int value = event.GetInt(); wxASSERT_MSG( value == m_spinctrl->GetValue(), @@ -437,5 +470,24 @@ void SpinBtnWidgetsPage::OnSpinCtrl(wxSpinEvent& event) wxLogMessage(_T("Spin control value changed, now %d"), value); } -#endif - // wxUSE_SPINBTN + +void SpinBtnWidgetsPage::OnSpinCtrlDouble(wxSpinDoubleEvent& event) +{ + double value = event.GetValue(); + + wxLogMessage(_T("Spin control value changed, now %g"), value); +} + +void SpinBtnWidgetsPage::OnSpinText(wxCommandEvent& event) +{ + wxLogMessage(_T("Text changed in spin control, now \"%s\""), + event.GetString().c_str()); +} + +void SpinBtnWidgetsPage::OnSpinTextEnter(wxCommandEvent& event) +{ + wxLogMessage("\"Enter\" pressed in spin control, text is \"%s\"", + event.GetString()); +} + +#endif // wxUSE_SPINBTN