1 /////////////////////////////////////////////////////////////////////////////
 
   2 // Name:        src/osx/cocoa/spinbutt.mm
 
   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/osx/private.h"
 
  19 @interface wxNSStepper : NSStepper
 
  24 @implementation wxNSStepper
 
  28     static BOOL initialized = NO;
 
  32         wxOSXCocoaClassAddWXMethods(self);
 
  38 class wxSpinButtonCocoaImpl : public wxWidgetCocoaImpl
 
  41     wxSpinButtonCocoaImpl(wxWindowMac* peer , WXWidget w) :
 
  42         wxWidgetCocoaImpl(peer, w)
 
  47     ~wxSpinButtonCocoaImpl()
 
  51     virtual void controlAction(WXWidget slf, void* _cmd, void *sender);
 
  52     virtual void mouseEvent(WX_NSEvent event, WXWidget slf, void* _cmd);
 
  57 void wxSpinButtonCocoaImpl::mouseEvent(WX_NSEvent event, WXWidget slf, void *_cmd)
 
  60     // send a release event in case we've been tracking the thumb
 
  61     if ( strcmp( sel_getName((SEL) _cmd) , "mouseDown:") == 0 )
 
  63         m_formerValue = [(NSStepper*)m_osxView intValue];
 
  66     wxWidgetCocoaImpl::mouseEvent(event, slf, _cmd);
 
  69 void wxSpinButtonCocoaImpl::controlAction( WXWidget WXUNUSED(slf), void *WXUNUSED(_cmd), void *WXUNUSED(sender))
 
  71     wxWindow* wxpeer = (wxWindow*) GetWXPeer();
 
  74         // because wx expects to be able to veto
 
  75         // a change we must revert the value change
 
  77         int currentValue = [(NSStepper*)m_osxView intValue];
 
  78         [(NSStepper*)m_osxView setIntValue:m_formerValue];
 
  79         int inc = currentValue-m_formerValue;
 
  81         // adjust for wrap arounds
 
  88             wxpeer->TriggerScrollEvent(wxEVT_SCROLL_LINEUP);
 
  90             wxpeer->TriggerScrollEvent(wxEVT_SCROLL_LINEDOWN);
 
  92         m_formerValue = [(NSStepper*)m_osxView intValue];
 
  96 wxWidgetImplType* wxWidgetImpl::CreateSpinButton( wxWindowMac* wxpeer,
 
  97                                     wxWindowMac* WXUNUSED(parent),
 
  98                                     wxWindowID WXUNUSED(id),
 
 105                                     long WXUNUSED(extraStyle))
 
 107     NSRect r = wxOSXGetFrameForControl( wxpeer, pos , size ) ;
 
 108     wxNSStepper* v = [[wxNSStepper alloc] initWithFrame:r];
 
 110     [v setMinValue: minimum];
 
 111     [v setMaxValue: maximum];
 
 112     [v setIntValue: value];
 
 114     if ( style & wxSP_WRAP )
 
 115         [v setValueWraps:YES];
 
 117     wxWidgetCocoaImpl* c = new wxSpinButtonCocoaImpl( wxpeer, v );
 
 121 #endif // wxUSE_SPINBTN