]> git.saurik.com Git - wxWidgets.git/commitdiff
added generation of wxEVT_SCROLL_XXX (patch 1424698)
authorVadim Zeitlin <vadim@wxwidgets.org>
Fri, 10 Feb 2006 21:03:35 +0000 (21:03 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Fri, 10 Feb 2006 21:03:35 +0000 (21:03 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@37470 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

docs/changes.txt
src/univ/slider.cpp

index 25fa83820a0292123708d190921054c0fb6b72f5..824dbde2688b890106b8080318f0ba702e1e4ae9 100644 (file)
@@ -202,6 +202,10 @@ wxWinCE:
   is reccommended that you use wxMEDIABACKEND_WMP10 on this platform
   directly, however.
 
+wxUniv:
+
+- Send wxEVT_SCROLL_XXX events from wxSlider (Danny Raynor)
+
 wxX11:
 
 - Invisible text problem fixed.
index 50147c8c2e466c6d856fbda4f465ee61bce01aae..d8fdc3acf3da648c805ee20cbbb3a93da7146f45 100644 (file)
@@ -180,7 +180,8 @@ bool wxSlider::ChangeValueBy(int inc)
 bool wxSlider::ChangeValueTo(int value)
 {
     // check if the value is going to change at all
-    if (value == m_value) return false;
+    if (value == m_value)
+        return false;
 
     // this method is protected and we should only call it with normalized
     // value!
@@ -190,11 +191,15 @@ bool wxSlider::ChangeValueTo(int value)
 
     Refresh();
 
-    // generate the event
+    // generate the events: both a specific scroll event and a command event
+    wxScrollEvent eventScroll(wxEVT_SCROLL_CHANGED, GetId());
+    eventScroll.SetPosition(m_value);
+    eventScroll.SetEventObject( this );
+    (void)GetEventHandler()->ProcessEvent(eventScroll);
+
     wxCommandEvent event(wxEVT_COMMAND_SLIDER_UPDATED, GetId());
     event.SetInt(m_value);
     event.SetEventObject(this);
-
     (void)GetEventHandler()->ProcessEvent(event);
 
     return true;
@@ -739,49 +744,80 @@ bool wxSlider::PerformAction(const wxControlAction& action,
                              long numArg,
                              const wxString& strArg)
 {
+    wxEventType scrollEvent = wxEVT_NULL;
+    int value;
+    bool valueChanged = true;
+
     if ( action == wxACTION_SLIDER_START )
     {
-        ChangeValueTo(m_min);
+        scrollEvent = wxEVT_SCROLL_TOP;
+        value = m_min;
     }
     else if ( action == wxACTION_SLIDER_END )
     {
-        ChangeValueTo(m_max);
+        scrollEvent = wxEVT_SCROLL_BOTTOM;
+        value = m_max;
     }
     else if ( action == wxACTION_SLIDER_PAGE_CHANGE )
     {
-        ChangeValueBy(numArg * GetPageSize());
+        value = NormalizeValue(m_value + numArg * GetPageSize());
     }
     else if ( action == wxACTION_SLIDER_LINE_UP )
     {
-        ChangeValueBy(+GetLineSize());
+        scrollEvent = wxEVT_SCROLL_LINEUP;
+        value = NormalizeValue(m_value + +GetLineSize());
     }
     else if ( action == wxACTION_SLIDER_LINE_DOWN )
     {
-        ChangeValueBy(-GetLineSize());
+        scrollEvent = wxEVT_SCROLL_LINEDOWN;
+        value = NormalizeValue(m_value + -GetLineSize());
     }
     else if ( action == wxACTION_SLIDER_PAGE_UP )
     {
-        ChangeValueBy(+GetPageSize());
+        scrollEvent = wxEVT_SCROLL_PAGEUP;
+        value = NormalizeValue(m_value + +GetPageSize());
     }
     else if ( action == wxACTION_SLIDER_PAGE_DOWN )
     {
-        ChangeValueBy(-GetPageSize());
+        scrollEvent = wxEVT_SCROLL_PAGEDOWN;
+        value = NormalizeValue(m_value + -GetPageSize());
     }
-    else if ( action == wxACTION_SLIDER_THUMB_DRAG )
+    else if ( action == wxACTION_SLIDER_THUMB_DRAG ||
+                action == wxACTION_SLIDER_THUMB_MOVE )
     {
-        // no special processing for it
-        return true;
+        scrollEvent = wxEVT_SCROLL_THUMBTRACK;
+
+        // we shouldn't generate a command event about this change but we still
+        // should update our value and the slider appearance
+        valueChanged = false;
+        m_value =
+        value = (int)numArg;
+        Refresh();
     }
-    else if ( action == wxACTION_SLIDER_THUMB_MOVE ||
-              action == wxACTION_SLIDER_THUMB_RELEASE )
+    else if ( action == wxACTION_SLIDER_THUMB_RELEASE )
     {
-        ChangeValueTo((int)numArg);
+        scrollEvent = wxEVT_SCROLL_THUMBRELEASE;
+        value = (int)numArg;
     }
     else
     {
         return wxControl::PerformAction(action, numArg, strArg);
     }
 
+    // update wxSlider current value and generate wxCommandEvent, except while
+    // dragging the thumb
+    if ( valueChanged )
+        ChangeValueTo(value);
+
+    // also generate more precise wxScrollEvent if applicable
+    if ( scrollEvent != wxEVT_NULL )
+    {
+        wxScrollEvent event(scrollEvent, GetId());
+        event.SetPosition(value);
+        event.SetEventObject( this );
+        GetEventHandler()->ProcessEvent(event);
+    }
+
     return true;
 }