]> git.saurik.com Git - wxWidgets.git/commitdiff
Implement support for wxSL_<DIR> in wxGTK, show them better in the sample.
authorVadim Zeitlin <vadim@wxwidgets.org>
Sat, 14 Nov 2009 23:15:27 +0000 (23:15 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sat, 14 Nov 2009 23:15:27 +0000 (23:15 +0000)
Support wxSL_{LEFT,TOP,RIGHT,BOTTOM} in wxGTL version of wxSlider.

Make the display of the orientations in the slider page of the widgets sample
more clear.

Also document wxSL_<DIR> meaning better.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@62655 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

interface/wx/slider.h
samples/widgets/slider.cpp
src/gtk/slider.cpp

index f45c5918044b7790766aebed4c5f2f9442148806..86db24b6a2cea8060151d0d1874151b219f9ebc9 100644 (file)
            compatible with wxSL_SELRANGE.
     @endStyleTable
 
+    Notice that @c wxSL_LEFT, @c wxSL_TOP, @c wxSL_RIGHT and @c wxSL_BOTTOM
+    specify the position of the slider ticks in MSW implementation and that the
+    slider labels, if any, are positioned on the opposite side. So, to have a
+    label on the left side of a vertical slider, @b wxSL_RIGHT must be used (or
+    none of these styles at all should be specified as left and top are default
+    positions for the vertical and horizontal sliders respectively).
+
     @beginEventEmissionTable{wxScrollEvent}
     You can use EVT_COMMAND_SCROLL... macros with window IDs for when intercepting
     scroll events from controls, or EVT_SCROLL... macros without window IDs for
index c7ee3f142528c85d5a4569ceb2f6cfb67ce2c75c..1af0138b60d88d2f2127ee9d69a5f0631cb4d5a8 100644 (file)
@@ -80,6 +80,7 @@ enum
 // sides radiobox values
 enum
 {
+    SliderTicks_None,
     SliderTicks_Top,
     SliderTicks_Bottom,
     SliderTicks_Left,
@@ -263,12 +264,13 @@ void SliderWidgetsPage::CreateContent()
     m_chkValueLabel = CreateCheckBoxAndAddToSizer(sizerLeft, wxT("Show &value label"));
     static const wxString sides[] =
     {
+        wxT("default"),
         wxT("top"),
         wxT("bottom"),
         wxT("left"),
         wxT("right"),
     };
-    m_radioSides = new wxRadioBox(this, SliderPage_RadioSides, wxT("&Ticks/Labels"),
+    m_radioSides = new wxRadioBox(this, SliderPage_RadioSides, wxT("&Label position"),
                                  wxDefaultPosition, wxDefaultSize,
                                  WXSIZEOF(sides), sides,
                                  1, wxRA_SPECIFY_COLS);
@@ -377,7 +379,7 @@ void SliderWidgetsPage::Reset()
     m_chkMinMaxLabels->SetValue(true);
     m_chkBothSides->SetValue(false);
 
-    m_radioSides->SetSelection(SliderTicks_Top);
+    m_radioSides->SetSelection(SliderTicks_None);
 }
 
 void SliderWidgetsPage::CreateSlider()
@@ -404,22 +406,28 @@ void SliderWidgetsPage::CreateSlider()
         flags |= wxSL_AUTOTICKS;
     }
 
+    // notice that the style names refer to the _ticks_ positions while we want
+    // to allow the user to select the label(s) positions and the labels are on
+    // the opposite side from the ticks, hence the apparent reversal below
     switch ( m_radioSides->GetSelection() )
     {
+        case SliderTicks_None:
+            break;
+
         case SliderTicks_Top:
-            flags |= wxSL_TOP;
+            flags |= wxSL_BOTTOM;
             break;
 
         case SliderTicks_Left:
-            flags |= wxSL_LEFT | wxSL_VERTICAL;
+            flags |= wxSL_RIGHT | wxSL_VERTICAL;
             break;
 
         case SliderTicks_Bottom:
-            flags |= wxSL_BOTTOM;
+            flags |= wxSL_TOP;
             break;
 
         case SliderTicks_Right:
-            flags |= wxSL_RIGHT | wxSL_VERTICAL;
+            flags |= wxSL_LEFT | wxSL_VERTICAL;
             break;
 
         default:
@@ -657,7 +665,7 @@ void SliderWidgetsPage::OnUpdateUIResetButton(wxUpdateUIEvent& event)
                   !m_chkValueLabel->GetValue() ||
                   !m_chkMinMaxLabels->GetValue() ||
                   m_chkBothSides->GetValue() ||
-                  m_radioSides->GetSelection() != SliderTicks_Top );
+                  m_radioSides->GetSelection() != SliderTicks_None );
 }
 
 void SliderWidgetsPage::OnCheckOrRadioBox(wxCommandEvent& WXUNUSED(event))
index cf394a8dcc66fb4ef2339efc5443985201eed9ac..83deaec5f310f56f656a2fc1a17619e8958d4141 100644 (file)
@@ -357,16 +357,30 @@ bool wxSlider::Create(wxWindow *parent,
         m_minLabel = NULL;
     }
 
-    if (style & wxSL_VALUE_LABEL)
+    const bool showValueLabel = (style & wxSL_VALUE_LABEL) != 0;
+    gtk_scale_set_draw_value(GTK_SCALE (m_scale), showValueLabel );
+    if ( showValueLabel )
     {
-        gtk_scale_set_draw_value(GTK_SCALE (m_scale), TRUE );
+        // position the label appropriately: notice that wxSL_DIRECTION flags
+        // specify the position of the ticks, not label, under MSW and so the
+        // label is on the opposite side
+        GtkPositionType posLabel;
+        if ( style & wxSL_VERTICAL )
+        {
+            if ( style & wxSL_LEFT )
+                posLabel = GTK_POS_RIGHT;
+            else // if ( style & wxSL_RIGHT ) -- this is also the default
+                posLabel = GTK_POS_LEFT;
+        }
+        else // horizontal slider
+        {
+            if ( style & wxSL_TOP )
+                posLabel = GTK_POS_BOTTOM;
+            else // if ( style & wxSL_BOTTOM) -- this is again the default
+                posLabel = GTK_POS_TOP;
+        }
 
-        if (style & wxSL_VERTICAL)
-            gtk_scale_set_value_pos( GTK_SCALE(m_scale), GTK_POS_LEFT );
-    }
-    else
-    {
-        gtk_scale_set_draw_value(GTK_SCALE (m_scale), FALSE );
+        gtk_scale_set_value_pos( GTK_SCALE(m_scale), posLabel );
     }
 
     // Keep full precision in position value