1 ///////////////////////////////////////////////////////////////////////////// 
   2 // Name:        wx/osx/spinctrl.h 
   3 // Purpose:     generic wxSpinCtrl class 
   4 // Author:      Vadim Zeitlin 
   8 // Copyright:   (c) Vadim Zeitlin 
   9 // Licence:     wxWindows licence 
  10 ///////////////////////////////////////////////////////////////////////////// 
  12 #ifndef _WX_MAC_SPINCTRL_H_ 
  13 #define _WX_MAC_SPINCTRL_H_ 
  15 // ---------------------------------------------------------------------------- 
  16 // wxSpinCtrl is a combination of wxSpinButton and wxTextCtrl, so if 
  17 // wxSpinButton is available, this is what we do - but if it isn't, we still 
  18 // define wxSpinCtrl class which then has the same appearance as wxTextCtrl but 
  19 // the different interface. This allows to write programs using wxSpinCtrl 
  20 // without tons of #ifdefs. 
  21 // ---------------------------------------------------------------------------- 
  25 #include "wx/containr.h" 
  27 class WXDLLIMPEXP_FWD_CORE wxSpinButton
; 
  28 class WXDLLIMPEXP_FWD_CORE wxTextCtrl
; 
  29 class WXDLLIMPEXP_FWD_CORE wxSpinCtrlText
; 
  30 class WXDLLIMPEXP_FWD_CORE wxSpinCtrlButton
; 
  32 // ---------------------------------------------------------------------------- 
  33 // wxSpinCtrl is a combination of wxTextCtrl and wxSpinButton 
  34 // ---------------------------------------------------------------------------- 
  36 class WXDLLIMPEXP_CORE wxSpinCtrl 
: public wxNavigationEnabled
<wxControl
> 
  39     wxSpinCtrl() { Init(); } 
  41     wxSpinCtrl(wxWindow 
*parent
, 
  43                const wxString
& value 
= wxEmptyString
, 
  44                const wxPoint
& pos 
= wxDefaultPosition
, 
  45                const wxSize
& size 
= wxDefaultSize
, 
  46                long style 
= wxSP_ARROW_KEYS 
| wxALIGN_RIGHT
, 
  47                int min 
= 0, int max 
= 100, int initial 
= 0, 
  48                const wxString
& name 
= wxT("wxSpinCtrl")) 
  51         Create(parent
, id
, value
, pos
, size
, style
, min
, max
, initial
, name
); 
  54     bool Create(wxWindow 
*parent
, 
  56                 const wxString
& value 
= wxEmptyString
, 
  57                 const wxPoint
& pos 
= wxDefaultPosition
, 
  58                 const wxSize
& size 
= wxDefaultSize
, 
  59                 long style 
= wxSP_ARROW_KEYS 
| wxALIGN_RIGHT
, 
  60                 int min 
= 0, int max 
= 100, int initial 
= 0, 
  61                 const wxString
& name 
= wxT("wxSpinCtrl")); 
  63     // wxTextCtrl-like method 
  64     void SetSelection(long from
, long to
); 
  66     virtual ~wxSpinCtrl(); 
  69     void SetValue(int val
); 
  70     void SetValue(const wxString
& text
); 
  71     void SetRange(int min
, int max
); 
  78     // implementation from now on 
  80     // forward these functions to all subcontrols 
  81     virtual bool Enable(bool enable 
= true); 
  82     virtual bool Show(bool show 
= true); 
  84     // get the subcontrols 
  85     wxTextCtrl 
*GetText() const { return m_text
; } 
  86     wxSpinButton 
*GetSpinButton() const { return m_btn
; } 
  88     // set the value of the text (only) 
  89     void SetTextValue(int val
); 
  91     // put the numeric value of the string in the text ctrl into val and return 
  92     // TRUE or return FALSE if the text ctrl doesn't contain a number or if the 
  93     // number is out of range 
  94     bool GetTextValue(int *val
) const; 
  97     // override the base class virtuals involved into geometry calculations 
  98     virtual wxSize 
DoGetBestSize() const; 
  99     virtual void DoMoveWindow(int x
, int y
, int width
, int height
); 
 101     // common part of all ctors 
 109     friend class wxSpinCtrlText
; 
 110     friend class wxSpinCtrlButton
; 
 114     DECLARE_DYNAMIC_CLASS(wxSpinCtrl
) 
 117 #else // !wxUSE_SPINBTN 
 119 // ---------------------------------------------------------------------------- 
 120 // wxSpinCtrl is just a text control 
 121 // ---------------------------------------------------------------------------- 
 123 #include "wx/textctrl.h" 
 125 class WXDLLIMPEXP_CORE wxSpinCtrl 
: public wxTextCtrl
 
 128     wxSpinCtrl() { Init(); } 
 130     wxSpinCtrl(wxWindow 
*parent
, 
 132                const wxString
& value 
= wxEmptyString
, 
 133                const wxPoint
& pos 
= wxDefaultPosition
, 
 134                const wxSize
& size 
= wxDefaultSize
, 
 135                long style 
= wxSP_ARROW_KEYS 
| wxALIGN_RIGHT
, 
 136                int min 
= 0, int max 
= 100, int initial 
= 0, 
 137                const wxString
& name 
= wxT("wxSpinCtrl")) 
 139         Create(parent
, id
, value
, pos
, size
, style
, min
, max
, initial
, name
); 
 142     bool Create(wxWindow 
*parent
, 
 144                 const wxString
& value 
= wxEmptyString
, 
 145                 const wxPoint
& pos 
= wxDefaultPosition
, 
 146                 const wxSize
& size 
= wxDefaultSize
, 
 147                 long style 
= wxSP_ARROW_KEYS 
| wxALIGN_RIGHT
, 
 148                 int min 
= 0, int max 
= 100, int initial 
= 0, 
 149                 const wxString
& name 
= wxT("wxSpinCtrl")) 
 153         bool ok 
= wxTextCtrl::Create(parent
, id
, value
, pos
, size
, style
, 
 154                                      wxDefaultValidator
, name
); 
 161     int GetValue(int WXUNUSED(dummy
) = 1) const 
 164         if ( (wxSscanf(wxTextCtrl::GetValue(), wxT("%d"), &n
) != 1) ) 
 170     int GetMin() const { return m_min
; } 
 171     int GetMax() const { return m_max
; } 
 174     void SetValue(const wxString
& value
) { wxTextCtrl::SetValue(value
); } 
 175     void SetValue(int val
) { wxString s
; s 
<< val
; wxTextCtrl::SetValue(s
); } 
 176     void SetRange(int min
, int max
) { m_min 
= min
; m_max 
= max
; } 
 179     // initialize m_min/max with the default values 
 180     void Init() { SetRange(0, 100); } 
 186     DECLARE_DYNAMIC_CLASS(wxSpinCtrl
) 
 189 #endif // wxUSE_SPINBTN/!wxUSE_SPINBTN 
 191 #endif // _WX_MAC_SPINCTRL_H_