X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/8f6eaec925f03f243cbf35072290f9b303f61186..a0ef88bde8e4e0b9f6268b9b0001eb6b6beca708:/samples/widgets/slider.cpp?ds=sidebyside diff --git a/samples/widgets/slider.cpp b/samples/widgets/slider.cpp index 87b03c1f9b..ec7b0bf604 100644 --- a/samples/widgets/slider.cpp +++ b/samples/widgets/slider.cpp @@ -24,6 +24,8 @@ #pragma hdrstop #endif +#if wxUSE_SLIDER + // for all others, include the necessary headers #ifndef WX_PRECOMP #include "wx/log.h" @@ -44,7 +46,7 @@ #include "wx/sizer.h" #include "widgets.h" -#if wxUSE_SLIDER + #include "icons/slider.xpm" // ---------------------------------------------------------------------------- @@ -74,10 +76,10 @@ enum // sides radiobox values enum { - StaticSides_Top, - StaticSides_Bottom, - StaticSides_Left, - StaticSides_Right + SliderTicks_Top, + SliderTicks_Bottom, + SliderTicks_Left, + SliderTicks_Right }; // ---------------------------------------------------------------------------- @@ -87,9 +89,15 @@ enum class SliderWidgetsPage : public WidgetsPage { public: - SliderWidgetsPage(wxNotebook *notebook, wxImageList *imaglist); + SliderWidgetsPage(WidgetsBookCtrl *book, wxImageList *imaglist); virtual ~SliderWidgetsPage(){}; + virtual wxControl *GetWidget() const { return m_slider; } + virtual void RecreateWidget() { CreateSlider(); } + + // lazy creation of the content + virtual void CreateContent(); + protected: // event handlers void OnButtonReset(wxCommandEvent& event); @@ -138,7 +146,7 @@ protected: // the check/radio boxes for styles wxCheckBox *m_chkLabels, - *m_chkVert, + *m_chkInverse, *m_chkTicks, *m_chkBothSides; @@ -193,19 +201,23 @@ END_EVENT_TABLE() // implementation // ============================================================================ -IMPLEMENT_WIDGETS_PAGE(SliderWidgetsPage, _T("Slider")); +#if defined(__WXUNIVERSAL__) + #define FAMILY_CTRLS UNIVERSAL_CTRLS +#else + #define FAMILY_CTRLS NATIVE_CTRLS +#endif -SliderWidgetsPage::SliderWidgetsPage(wxNotebook *notebook, - wxImageList *imaglist) - : WidgetsPage(notebook) -{ - imaglist->Add(wxBitmap(slider_xpm)); +IMPLEMENT_WIDGETS_PAGE(SliderWidgetsPage, _T("Slider"), FAMILY_CTRLS ); +SliderWidgetsPage::SliderWidgetsPage(WidgetsBookCtrl *book, + wxImageList *imaglist) + : WidgetsPage(book, imaglist, slider_xpm) +{ // init everything m_min = 0; m_max = 100; - m_chkVert = + m_chkInverse = m_chkTicks = m_chkLabels = m_chkBothSides = (wxCheckBox *)NULL; @@ -214,14 +226,17 @@ SliderWidgetsPage::SliderWidgetsPage(wxNotebook *notebook, m_slider = (wxSlider *)NULL; m_sizerSlider = (wxSizer *)NULL; +} +void SliderWidgetsPage::CreateContent() +{ wxSizer *sizerTop = new wxBoxSizer(wxHORIZONTAL); // left pane wxStaticBox *box = new wxStaticBox(this, wxID_ANY, _T("&Set style")); wxSizer *sizerLeft = new wxStaticBoxSizer(box, wxVERTICAL); - m_chkVert = CreateCheckBoxAndAddToSizer(sizerLeft, _T("&Vertical")); + m_chkInverse = CreateCheckBoxAndAddToSizer(sizerLeft, _T("&Inverse")); m_chkTicks = CreateCheckBoxAndAddToSizer(sizerLeft, _T("Show &ticks")); m_chkLabels = CreateCheckBoxAndAddToSizer(sizerLeft, _T("Show &labels")); static const wxString sides[] = @@ -319,23 +334,22 @@ SliderWidgetsPage::SliderWidgetsPage(wxNotebook *notebook, void SliderWidgetsPage::Reset() { - m_chkVert->SetValue(false); + m_chkInverse->SetValue(false); m_chkTicks->SetValue(true); m_chkLabels->SetValue(true); m_chkBothSides->SetValue(false); - m_radioSides->SetSelection(StaticSides_Top); + m_radioSides->SetSelection(SliderTicks_Top); } void SliderWidgetsPage::CreateSlider() { - int flags = 0; + int flags = ms_defaultFlags; - bool isVert = m_chkVert->GetValue(); - if ( isVert ) - flags |= wxSL_VERTICAL; - else - flags |= wxSL_HORIZONTAL; + if ( m_chkInverse->GetValue() ) + { + flags |= wxSL_INVERSE; + } if ( m_chkLabels->GetValue() ) { @@ -349,18 +363,22 @@ void SliderWidgetsPage::CreateSlider() switch ( m_radioSides->GetSelection() ) { - case StaticSides_Top: + case SliderTicks_Top: flags |= wxSL_TOP; break; - case StaticSides_Left: + + case SliderTicks_Left: flags |= wxSL_LEFT; break; - case StaticSides_Bottom: + + case SliderTicks_Bottom: flags |= wxSL_BOTTOM; break; - case StaticSides_Right: + + case SliderTicks_Right: flags |= wxSL_RIGHT; break; + default: wxFAIL_MSG(_T("unexpected radiobox selection")); // fall through @@ -397,7 +415,7 @@ void SliderWidgetsPage::CreateSlider() wxDefaultPosition, wxDefaultSize, flags); - if ( isVert ) + if ( m_slider->HasFlag(wxSL_VERTICAL) ) { m_sizerSlider->Add(0, 0, 1); m_sizerSlider->Add(m_slider, 0, wxGROW | wxALL, 5); @@ -480,6 +498,12 @@ void SliderWidgetsPage::OnButtonSetMinAndMax(wxCommandEvent& WXUNUSED(event)) m_max = maxNew; m_slider->SetRange(minNew, maxNew); + + if ( m_slider->GetMin() != m_min || + m_slider->GetMax() != m_max ) + { + wxLogWarning(_T("Invalid range in slider.")); + } } void SliderWidgetsPage::OnButtonSetValue(wxCommandEvent& WXUNUSED(event)) @@ -525,10 +549,11 @@ void SliderWidgetsPage::OnUpdateUIMinMaxButton(wxUpdateUIEvent& event) void SliderWidgetsPage::OnUpdateUIResetButton(wxUpdateUIEvent& event) { - event.Enable( m_chkVert->GetValue() || + event.Enable( m_chkInverse->GetValue() || !m_chkTicks->GetValue() || !m_chkLabels->GetValue() || - m_chkBothSides->GetValue() ); + m_chkBothSides->GetValue() || + m_radioSides->GetSelection() != SliderTicks_Top ); } void SliderWidgetsPage::OnCheckOrRadioBox(wxCommandEvent& WXUNUSED(event)) @@ -548,11 +573,11 @@ void SliderWidgetsPage::OnUpdateUIRadioSides(wxUpdateUIEvent& event) void SliderWidgetsPage::OnUpdateUIBothSides(wxUpdateUIEvent& event) { -#if defined(__WIN95__) || defined(__WXUNIVERSAL__) +#if defined(__WXMSW__) || defined(__WXUNIVERSAL__) event.Enable( m_chkTicks->GetValue() ); #else event.Enable( false ); -#endif // defined(__WIN95__) || defined(__WXUNIVERSAL__) +#endif // defined(__WXMSW__) || defined(__WXUNIVERSAL__) } void SliderWidgetsPage::OnSlider(wxScrollEvent& event) @@ -577,7 +602,7 @@ void SliderWidgetsPage::OnSlider(wxScrollEvent& event) wxT("wxEVT_SCROLL_PAGEDOWN"), wxT("wxEVT_SCROLL_THUMBTRACK"), wxT("wxEVT_SCROLL_THUMBRELEASE"), - wxT("wxEVT_SCROLL_ENDSCROLL") + wxT("wxEVT_SCROLL_CHANGED") }; int index = eventType - wxEVT_SCROLL_TOP; @@ -592,11 +617,11 @@ void SliderWidgetsPage::OnSlider(wxScrollEvent& event) static int s_numSliderEvents = 0; - wxLogMessage(wxT("Slider event #%d: %s (pos = %d)"), + wxLogMessage(wxT("Slider event #%d: %s (pos = %d, int value = %d)"), s_numSliderEvents++, eventNames[index], - event.GetPosition()); + event.GetPosition(), + event.GetInt()); } -#endif - // wxUSE_SLIDER +#endif // wxUSE_SLIDER