]> git.saurik.com Git - wxWidgets.git/blobdiff - samples/widgets/slider.cpp
use wxDC::GetMultiLineTextExtent() instead of duplicating its code in wxButton::DoGet...
[wxWidgets.git] / samples / widgets / slider.cpp
index e2c586cbc428c16d704f4a23c42ab65aa945132f..9fc211cc6309a75fb76ce0b11ca001ec107e752c 100644 (file)
@@ -1,5 +1,5 @@
 /////////////////////////////////////////////////////////////////////////////
-// Program:     wxWindows Widgets Sample
+// Program:     wxWidgets Widgets Sample
 // Name:        slider.cpp
 // Purpose:     Part of the widgets sample showing wxSlider
 // Author:      Vadim Zeitlin
     #pragma hdrstop
 #endif
 
+#if wxUSE_SLIDER
+
 // 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"
@@ -43,6 +46,7 @@
 #include "wx/sizer.h"
 
 #include "widgets.h"
+
 #include "icons/slider.xpm"
 
 // ----------------------------------------------------------------------------
@@ -85,8 +89,10 @@ enum
 class SliderWidgetsPage : public WidgetsPage
 {
 public:
-    SliderWidgetsPage(wxNotebook *notebook, wxImageList *imaglist);
-    virtual ~SliderWidgetsPage();
+    SliderWidgetsPage(wxBookCtrl *book, wxImageList *imaglist);
+    virtual ~SliderWidgetsPage(){};
+
+    virtual wxControl *GetWidget() const { return m_slider; }
 
 protected:
     // event handlers
@@ -137,6 +143,7 @@ protected:
     // the check/radio boxes for styles
     wxCheckBox *m_chkLabels,
                *m_chkVert,
+               *m_chkInverse,
                *m_chkTicks,
                *m_chkBothSides;
 
@@ -183,8 +190,8 @@ BEGIN_EVENT_TABLE(SliderWidgetsPage, WidgetsPage)
 
     EVT_COMMAND_SCROLL(SliderPage_Slider, SliderWidgetsPage::OnSlider)
 
-    EVT_CHECKBOX(-1, SliderWidgetsPage::OnCheckOrRadioBox)
-    EVT_RADIOBOX(-1, SliderWidgetsPage::OnCheckOrRadioBox)
+    EVT_CHECKBOX(wxID_ANY, SliderWidgetsPage::OnCheckOrRadioBox)
+    EVT_RADIOBOX(wxID_ANY, SliderWidgetsPage::OnCheckOrRadioBox)
 END_EVENT_TABLE()
 
 // ============================================================================
@@ -193,9 +200,9 @@ END_EVENT_TABLE()
 
 IMPLEMENT_WIDGETS_PAGE(SliderWidgetsPage, _T("Slider"));
 
-SliderWidgetsPage::SliderWidgetsPage(wxNotebook *notebook,
-                                       wxImageList *imaglist)
-                  : WidgetsPage(notebook)
+SliderWidgetsPage::SliderWidgetsPage(wxBookCtrl *book,
+                                     wxImageList *imaglist)
+                  : WidgetsPage(book)
 {
     imaglist->Add(wxBitmap(slider_xpm));
 
@@ -204,6 +211,7 @@ SliderWidgetsPage::SliderWidgetsPage(wxNotebook *notebook,
     m_max = 100;
 
     m_chkVert =
+    m_chkInverse =
     m_chkTicks =
     m_chkLabels =
     m_chkBothSides = (wxCheckBox *)NULL;
@@ -216,10 +224,11 @@ SliderWidgetsPage::SliderWidgetsPage(wxNotebook *notebook,
     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);
 
     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[] =
@@ -246,14 +255,14 @@ SliderWidgetsPage::SliderWidgetsPage(wxNotebook *notebook,
     sizerLeft->Add(btn, 0, wxALIGN_CENTRE_HORIZONTAL | wxALL, 15);
 
     // middle pane
-    wxStaticBox *box2 = new wxStaticBox(this, -1, _T("&Change slider value"));
+    wxStaticBox *box2 = new wxStaticBox(this, wxID_ANY, _T("&Change slider value"));
     wxSizer *sizerMiddle = new wxStaticBoxSizer(box2, wxVERTICAL);
 
     wxTextCtrl *text;
     wxSizer *sizerRow = CreateSizerWithTextAndLabel(_T("Current value"),
                                                     SliderPage_CurValueText,
                                                     &text);
-    text->SetEditable(FALSE);
+    text->SetEditable(false);
 
     sizerMiddle->Add(sizerRow, 0, wxALL | wxGROW, 5);
 
@@ -268,7 +277,7 @@ SliderWidgetsPage::SliderWidgetsPage(wxNotebook *notebook,
                                             SliderPage_MinText,
                                             &m_textMin);
 
-    m_textMax = new wxTextCtrl(this, SliderPage_MaxText, _T(""));
+    m_textMax = new wxTextCtrl(this, SliderPage_MaxText, wxEmptyString);
     sizerRow->Add(m_textMax, 1, wxLEFT | wxALIGN_CENTRE_VERTICAL, 5);
 
     m_textMin->SetValue( wxString::Format(_T("%d"), m_min) );
@@ -286,7 +295,7 @@ SliderWidgetsPage::SliderWidgetsPage(wxNotebook *notebook,
     sizerMiddle->Add(sizerRow, 0, wxALL | wxGROW, 5);
 
     sizerRow = CreateSizerWithTextAndButton(SliderPage_SetThumbLen,
-                                            _T("Thumb &lenght"),
+                                            _T("Thumb &length"),
                                             SliderPage_ThumbLenText,
                                             &m_textThumbLen);
 
@@ -306,26 +315,22 @@ SliderWidgetsPage::SliderWidgetsPage(wxNotebook *notebook,
     sizerTop->Add(sizerRight, 1, wxGROW | (wxALL & ~wxRIGHT), 10);
 
     // final initializations
-    SetAutoLayout(TRUE);
     SetSizer(sizerTop);
 
     sizerTop->Fit(this);
 }
 
-SliderWidgetsPage::~SliderWidgetsPage()
-{
-}
-
 // ----------------------------------------------------------------------------
 // operations
 // ----------------------------------------------------------------------------
 
 void SliderWidgetsPage::Reset()
 {
-    m_chkVert->SetValue(FALSE);
-    m_chkTicks->SetValue(TRUE);
-    m_chkLabels->SetValue(TRUE);
-    m_chkBothSides->SetValue(FALSE);
+    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);
 }
@@ -340,6 +345,11 @@ void SliderWidgetsPage::CreateSlider()
     else
         flags |= wxSL_HORIZONTAL;
 
+    if ( m_chkInverse->GetValue() )
+    {
+        flags |= wxSL_INVERSE;
+    }
+
     if ( m_chkLabels->GetValue() )
     {
         flags |= wxSL_LABELS;
@@ -437,7 +447,7 @@ void SliderWidgetsPage::DoSetThumbLen()
     long len;
     if ( !m_textThumbLen->GetValue().ToLong(&len) )
     {
-        wxLogWarning(_T("Invalid slider thumb lenght"));
+        wxLogWarning(_T("Invalid slider thumb length"));
 
         return;
     }
@@ -529,12 +539,13 @@ void SliderWidgetsPage::OnUpdateUIMinMaxButton(wxUpdateUIEvent& event)
 void SliderWidgetsPage::OnUpdateUIResetButton(wxUpdateUIEvent& event)
 {
     event.Enable( m_chkVert->GetValue() ||
+                  m_chkInverse->GetValue() ||
                   !m_chkTicks->GetValue() ||
                   !m_chkLabels->GetValue() ||
                   m_chkBothSides->GetValue() );
 }
 
-void SliderWidgetsPage::OnCheckOrRadioBox(wxCommandEvent& event)
+void SliderWidgetsPage::OnCheckOrRadioBox(wxCommandEvent& WXUNUSED(event))
 {
     CreateSlider();
 }
@@ -554,7 +565,7 @@ void SliderWidgetsPage::OnUpdateUIBothSides(wxUpdateUIEvent& event)
 #if defined(__WIN95__) || defined(__WXUNIVERSAL__)
     event.Enable( m_chkTicks->GetValue() );
 #else
-    event.Enable( FALSE );
+    event.Enable( false );
 #endif // defined(__WIN95__) || defined(__WXUNIVERSAL__)
 }
 
@@ -595,9 +606,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 = %ld)"),
                  s_numSliderEvents++,
                  eventNames[index],
-                 event.GetPosition());
+                 event.GetPosition(),
+                 event.GetInt());
 }
 
+#endif // wxUSE_SLIDER