X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/489468feaa08b8f504735eecca522fb8d0f825d2..fad92e2f367f5c37ba4d80c9b57a4453e86c6ac2:/src/osx/carbon/spinbutt.cpp?ds=inline diff --git a/src/osx/carbon/spinbutt.cpp b/src/osx/carbon/spinbutt.cpp index 02ed2e9423..2f6fc34266 100644 --- a/src/osx/carbon/spinbutt.cpp +++ b/src/osx/carbon/spinbutt.cpp @@ -14,195 +14,101 @@ #if wxUSE_SPINBTN #include "wx/spinbutt.h" -#include "wx/mac/uma.h" - - -IMPLEMENT_DYNAMIC_CLASS(wxSpinButton, wxControl) -IMPLEMENT_DYNAMIC_CLASS(wxSpinEvent, wxScrollEvent) - - -wxSpinButton::wxSpinButton() - : wxSpinButtonBase() +#include "wx/osx/private.h" + + +wxWidgetImplType* wxWidgetImpl::CreateSpinButton( wxWindowMac* wxpeer, + wxWindowMac* parent, + wxWindowID id, + wxInt32 value, + wxInt32 minimum, + wxInt32 maximum, + const wxPoint& pos, + const wxSize& size, + long style, + long extraStyle) { -} - -bool wxSpinButton::Create( wxWindow *parent, - wxWindowID id, const wxPoint& pos, const wxSize& size, - long style, const wxString& name ) -{ - m_macIsUserPane = false; - - if ( !wxSpinButtonBase::Create( parent, id, pos, size, style, wxDefaultValidator, name ) ) - return false; - - m_min = 0; - m_max = 100; - - if (!parent) - return false; - - Rect bounds = wxMacGetBoundsForControl( this , pos , size ); + Rect bounds = wxMacGetBoundsForControl( wxpeer , pos , size ); - m_peer = new wxMacControl( this ); + wxMacControl* peer = new wxMacControl( wxpeer ); OSStatus err = CreateLittleArrowsControl( - MAC_WXHWND(parent->MacGetTopLevelWindowRef()), &bounds, 0, m_min, m_max, 1, - m_peer->GetControlRefAddr() ); + MAC_WXHWND(parent->MacGetTopLevelWindowRef()), &bounds, value, + minimum, maximum, 1, peer->GetControlRefAddr() ); verify_noerr( err ); - m_peer->SetActionProc( GetwxMacLiveScrollbarActionProc() ); - MacPostControlCreate( pos, size ); - - return true; -} - -wxSpinButton::~wxSpinButton() -{ -} - -int wxSpinButton::GetMin() const -{ - return m_min; -} - -int wxSpinButton::GetMax() const -{ - return m_max; + peer->SetActionProc( GetwxMacLiveScrollbarActionProc() ); + return peer ; } -int wxSpinButton::GetValue() const +void wxSpinButton::MacHandleControlClick(WXWidget WXUNUSED(control), + wxInt16 controlpart, + bool WXUNUSED(mouseStillDown)) { - int n = m_value; - - if (n < m_min) - n = m_min; - else if (n > m_max) - n = m_max; - - return n; -} + int inc = 0; -void wxSpinButton::SetValue(int val) -{ - m_value = val; -} + switch ( controlpart ) + { + case kControlUpButtonPart : + inc = 1; + break; -void wxSpinButton::SetRange(int minVal, int maxVal) -{ - m_min = minVal; - m_max = maxVal; - m_peer->SetMaximum( maxVal ); - m_peer->SetMinimum( minVal ); -} + case kControlDownButtonPart : + inc = -1; + break; -void wxSpinButton::MacHandleValueChanged( int inc ) -{ + default: + break; + } + + // trigger scroll events + wxEventType scrollEvent = wxEVT_NULL; - int oldValue = m_value; + int oldValue = GetValue() ; - m_value = oldValue + inc; + int newValue = oldValue + inc; - if (m_value < m_min) + if (newValue < m_min) { if ( m_windowStyle & wxSP_WRAP ) - m_value = m_max; + newValue = m_max; else - m_value = m_min; + newValue = m_min; } - if (m_value > m_max) + if (newValue > m_max) { if ( m_windowStyle & wxSP_WRAP ) - m_value = m_min; + newValue = m_min; else - m_value = m_max; + newValue = m_max; } - if ( m_value - oldValue == -1 ) + if ( newValue - oldValue == -1 ) scrollEvent = wxEVT_SCROLL_LINEDOWN; - else if ( m_value - oldValue == 1 ) + 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 ( m_value == oldValue ) + if ( newValue == oldValue ) return; - wxSpinEvent event( scrollEvent, m_windowId ); - - event.SetPosition( m_value ); - event.SetEventObject( this ); - if ((HandleWindowEvent( 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 ); - HandleWindowEvent( event2 ); - } -} - -void wxSpinButton::MacHandleControlClick(WXWidget WXUNUSED(control), - wxInt16 controlpart, - bool WXUNUSED(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 WXUNUSED(event)) -{ -#if 0 - // these have been handled by the live action proc already - int nScrollInc = 0; - wxMacCarbonEvent cEvent( (EventRef)event ); - - switch ( cEvent.GetParameter(kEventParamControlPart, typeControlPartCode) ) + if ( scrollEvent != wxEVT_SCROLL_THUMBTRACK ) { - case kControlUpButtonPart : - nScrollInc = 1; - break; - - case kControlDownButtonPart : - nScrollInc = -1; - break; + wxSpinEvent event( scrollEvent, m_windowId ); - default : - break; + event.SetPosition( newValue ); + event.SetEventObject( this ); + if ((HandleWindowEvent( event )) && !event.IsAllowed()) + newValue = oldValue; } - MacHandleValueChanged( nScrollInc ) ; -#endif - - return noErr; -} + m_peer->SetValue( newValue ); -wxSize wxSpinButton::DoGetBestSize() const -{ - return wxSize( 16, 24 ); + // always send a thumbtrack event + SendThumbTrackEvent() ; } #endif // wxUSE_SPINBTN