]> git.saurik.com Git - wxWidgets.git/blobdiff - src/osx/spinbutt_osx.cpp
support for file types in save panel
[wxWidgets.git] / src / osx / spinbutt_osx.cpp
index 340678c27371623965c710c9b8810b6bdd493656..5e3408d5193c62b6fdf37f2c2d808fd9873acaa8 100644 (file)
@@ -4,7 +4,7 @@
 // Author:      Stefan Csomor
 // Modified by:
 // Created:     1998-01-01
-// RCS-ID:      $Id: spinbutt.cpp 54129 2008-06-11 19:30:52Z SC $
+// RCS-ID:      $Id$
 // Copyright:   (c) Stefan Csomor
 // Licence:       wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 #include "wx/osx/private.h"
 
 
-IMPLEMENT_DYNAMIC_CLASS(wxSpinButton, wxControl)
-IMPLEMENT_DYNAMIC_CLASS(wxSpinEvent, wxScrollEvent)
-
-
 wxSpinButton::wxSpinButton()
    : wxSpinButtonBase()
 {
@@ -40,10 +36,10 @@ bool wxSpinButton::Create( wxWindow *parent,
 
     if (!parent)
         return false;
-    
+
     m_peer = wxWidgetImpl::CreateSpinButton( this , parent, id, 0, m_min, m_max, pos, size,
         style, GetExtraStyle() );
-        
+
     MacPostControlCreate( pos, size );
 
     return true;
@@ -69,9 +65,9 @@ void wxSpinButton::SetRange(int minVal, int maxVal)
     m_max = maxVal;
     m_peer->SetMaximum( maxVal );
     m_peer->SetMinimum( minVal );
-}   
-    
-void wxSpinButton::SendThumbTrackEvent() 
+}
+
+void wxSpinButton::SendThumbTrackEvent()
 {
     wxSpinEvent event( wxEVT_SCROLL_THUMBTRACK, GetId() );
     event.SetPosition( GetValue() );
@@ -79,14 +75,9 @@ void wxSpinButton::SendThumbTrackEvent()
     HandleWindowEvent( event );
 }
 
-bool wxSpinButton::HandleClicked( double timestampsec )
+bool wxSpinButton::OSXHandleClicked( double WXUNUSED(timestampsec) )
 {
-#if wxOSX_USE_CARBON
-    // these have been handled by the live action proc already
-#else
-    SendThumbTrackEvent() ;
-#endif
-
+    // all events have already been processed
     return true;
 }
 
@@ -95,4 +86,67 @@ wxSize wxSpinButton::DoGetBestSize() const
     return wxSize( 16, 24 );
 }
 
+void wxSpinButton::TriggerScrollEvent(wxEventType scrollEvent)
+{
+    int inc = 0;
+
+    if ( scrollEvent == wxEVT_SCROLL_LINEUP )
+    {
+        inc = 1;
+    }
+    else if ( scrollEvent == wxEVT_SCROLL_LINEDOWN )
+    {
+        inc = -1;
+    }
+
+    // trigger scroll events
+
+    int oldValue = GetValue() ;
+
+    int newValue = oldValue + inc;
+
+    if (newValue < m_min)
+    {
+        if ( m_windowStyle & wxSP_WRAP )
+            newValue = m_max;
+        else
+            newValue = m_min;
+    }
+
+    if (newValue > m_max)
+    {
+        if ( m_windowStyle & wxSP_WRAP )
+            newValue = m_min;
+        else
+            newValue = m_max;
+    }
+
+    if ( newValue - oldValue == -1 )
+        scrollEvent = wxEVT_SCROLL_LINEDOWN;
+    else if ( newValue - oldValue == 1 )
+        scrollEvent = wxEVT_SCROLL_LINEUP;
+    else
+        scrollEvent = wxEVT_SCROLL_THUMBTRACK;
+
+    // Do not send an event if the value has not actually changed
+    // (Also works for wxSpinCtrl)
+    if ( newValue == oldValue )
+        return;
+
+    if ( scrollEvent != wxEVT_SCROLL_THUMBTRACK )
+    {
+        wxSpinEvent event( scrollEvent, m_windowId );
+
+        event.SetPosition( newValue );
+        event.SetEventObject( this );
+        if ((HandleWindowEvent( event )) && !event.IsAllowed())
+            newValue = oldValue;
+    }
+
+    m_peer->SetValue( newValue );
+
+    // always send a thumbtrack event
+    SendThumbTrackEvent() ;
+}
+
 #endif // wxUSE_SPINBTN