]>
git.saurik.com Git - wxWidgets.git/blob - src/mac/carbon/spinbutt.cpp
   1 ///////////////////////////////////////////////////////////////////////////// 
   3 // Purpose:     wxSpinButton 
   4 // Author:      Stefan Csomor 
   8 // Copyright:   (c) Stefan Csomor 
   9 // Licence:       wxWindows licence 
  10 ///////////////////////////////////////////////////////////////////////////// 
  12 #include "wx/wxprec.h" 
  16 #include "wx/spinbutt.h" 
  17 #include "wx/mac/uma.h" 
  20 IMPLEMENT_DYNAMIC_CLASS(wxSpinButton
, wxControl
) 
  21 IMPLEMENT_DYNAMIC_CLASS(wxSpinEvent
, wxScrollEvent
) 
  24 wxSpinButton::wxSpinButton() 
  29 bool wxSpinButton::Create( wxWindow 
*parent
, 
  30     wxWindowID id
, const wxPoint
& pos
, const wxSize
& size
, 
  31     long style
, const wxString
& name 
) 
  33     m_macIsUserPane 
= false; 
  35     if ( !wxSpinButtonBase::Create( parent
, id
, pos
, size
, style
, wxDefaultValidator
, name 
) ) 
  44     Rect bounds 
= wxMacGetBoundsForControl( this , pos 
, size 
); 
  46     m_peer 
= new wxMacControl( this ); 
  47     OSStatus err 
= CreateLittleArrowsControl( 
  48         MAC_WXHWND(parent
->MacGetTopLevelWindowRef()), &bounds
, 0, m_min
, m_max
, 1, 
  49         m_peer
->GetControlRefAddr() ); 
  52     m_peer
->SetActionProc( GetwxMacLiveScrollbarActionProc() ); 
  53     MacPostControlCreate( pos
, size 
); 
  58 wxSpinButton::~wxSpinButton() 
  62 int wxSpinButton::GetMin() const 
  67 int wxSpinButton::GetMax() const 
  72 int wxSpinButton::GetValue() const 
  84 void wxSpinButton::SetValue(int val
) 
  89 void wxSpinButton::SetRange(int minVal
, int maxVal
) 
  93     m_peer
->SetMaximum( maxVal 
); 
  94     m_peer
->SetMinimum( minVal 
); 
  97 void wxSpinButton::MacHandleValueChanged( int inc 
) 
  99     wxEventType scrollEvent 
= wxEVT_NULL
; 
 100     int oldValue 
= m_value
; 
 102     m_value 
= oldValue 
+ inc
; 
 106         if ( m_windowStyle 
& wxSP_WRAP 
) 
 114         if ( m_windowStyle 
& wxSP_WRAP 
) 
 120     if ( m_value 
- oldValue 
== -1 ) 
 121         scrollEvent 
= wxEVT_SCROLL_LINEDOWN
; 
 122     else if ( m_value 
- oldValue 
== 1 ) 
 123         scrollEvent 
= wxEVT_SCROLL_LINEUP
; 
 125         scrollEvent 
= wxEVT_SCROLL_THUMBTRACK
; 
 127     // Do not send an event if the value has not actually changed 
 128     // (Also works for wxSpinCtrl) 
 129     if ( m_value 
== oldValue 
) 
 132     wxSpinEvent 
event( scrollEvent
, m_windowId 
); 
 134     event
.SetPosition( m_value 
); 
 135     event
.SetEventObject( this ); 
 136     if ((GetEventHandler()->ProcessEvent( event 
)) && !event
.IsAllowed()) 
 139     m_peer
->SetValue( m_value 
); 
 141     // always send a thumbtrack event 
 142     if (scrollEvent 
!= wxEVT_SCROLL_THUMBTRACK
) 
 144         scrollEvent 
= wxEVT_SCROLL_THUMBTRACK
; 
 145         wxSpinEvent 
event2( scrollEvent
, GetId() ); 
 146         event2
.SetPosition( m_value 
); 
 147         event2
.SetEventObject( this ); 
 148         GetEventHandler()->ProcessEvent( event2 
); 
 152 void wxSpinButton::MacHandleControlClick( WXWidget control
, wxInt16 controlpart
, bool mouseStillDown 
) 
 156     switch ( controlpart 
) 
 158     case kControlUpButtonPart 
: 
 162     case kControlDownButtonPart 
: 
 170     MacHandleValueChanged( nScrollInc 
) ; 
 173 wxInt32 
wxSpinButton::MacControlHit(WXEVENTHANDLERREF 
WXUNUSED(handler
) , WXEVENTREF event 
) 
 176     // these have been handled by the live action proc already 
 178     wxMacCarbonEvent 
cEvent( (EventRef
)event 
); 
 180     switch ( cEvent
.GetParameter
<ControlPartCode
>(kEventParamControlPart
, typeControlPartCode
) ) 
 182     case kControlUpButtonPart 
: 
 186     case kControlDownButtonPart 
: 
 194     MacHandleValueChanged( nScrollInc 
) ; 
 200 wxSize 
wxSpinButton::DoGetBestSize() const 
 202     return wxSize( 16, 24 ); 
 205 #endif // wxUSE_SPINBTN