+void wxSpinButton::MacHandleValueChanged( int inc )
+{
+ wxEventType scrollEvent = wxEVT_NULL;
+ int oldValue = m_value;
+
+ m_value = oldValue + inc;
+
+ if (m_value < m_min)
+ {
+ if ( m_windowStyle & wxSP_WRAP )
+ m_value = m_max;
+ else
+ m_value = m_min;
+ }
+
+ if (m_value > m_max)
+ {
+ if ( m_windowStyle & wxSP_WRAP )
+ m_value = m_min;
+ else
+ m_value = m_max;
+ }
+
+ if ( m_value - oldValue == -1 )
+ scrollEvent = wxEVT_SCROLL_LINEDOWN;
+ else if ( m_value - oldValue == 1 )
+ scrollEvent = wxEVT_SCROLL_LINEUP;
+ else
+ scrollEvent = wxEVT_SCROLL_THUMBTRACK;
+
+ wxSpinEvent event( scrollEvent, m_windowId );
+
+ event.SetPosition( m_value );
+ event.SetEventObject( this );
+ if ((GetEventHandler()->ProcessEvent( event )) && !event.IsAllowed())
+ m_value = oldValue;
+
+ m_peer->SetValue( m_value );
+
+ // always send a thumbtrack event
+ if (scrollEvent != wxEVT_SCROLL_THUMBTRACK)
+ {
+ scrollEvent = wxEVT_SCROLL_THUMBTRACK;
+ wxSpinEvent event2( scrollEvent, GetId() );
+ event2.SetPosition( m_value );
+ event2.SetEventObject( this );
+ GetEventHandler()->ProcessEvent( event2 );
+ }
+}
+
+void wxSpinButton::MacHandleControlClick( WXWidget control, wxInt16 controlpart, bool mouseStillDown )
+{
+ int nScrollInc = 0;
+
+ switch ( controlpart )
+ {
+ case kControlUpButtonPart :
+ nScrollInc = 1;
+ break;
+
+ case kControlDownButtonPart :
+ nScrollInc = -1;
+ break;
+
+ default:
+ break;
+ }
+
+ MacHandleValueChanged( nScrollInc ) ;
+}
+
+wxInt32 wxSpinButton::MacControlHit(WXEVENTHANDLERREF WXUNUSED(handler) , WXEVENTREF event )
+{
+#if 0
+ // these have been handled by the live action proc already
+ int nScrollInc = 0;
+ wxMacCarbonEvent cEvent( (EventRef)event );
+
+ switch ( cEvent.GetParameter<ControlPartCode>(kEventParamControlPart, typeControlPartCode) )
+ {
+ case kControlUpButtonPart :
+ nScrollInc = 1;
+ break;
+
+ case kControlDownButtonPart :
+ nScrollInc = -1;
+ break;
+
+ default :
+ break;
+ }
+
+ MacHandleValueChanged( nScrollInc ) ;
+#endif
+
+ return noErr;
+}