1///////////////////////////////////////////////////////////////////////////// 2// Name: wx/generic/spinctlg.h 3// Purpose: generic wxSpinCtrl class 4// Author: Vadim Zeitlin 5// Modified by: 6// Created: 28.10.99 7// RCS-ID: $Id: spinctrl.h 35650 2005-09-23 12:56:45Z MR $ 8// Copyright: (c) Vadim Zeitlin 9// Licence: wxWindows licence 10///////////////////////////////////////////////////////////////////////////// 11 12#ifndef _WX_MAC_SPINCTRL_H_ 13#define _WX_MAC_SPINCTRL_H_ 14 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// ---------------------------------------------------------------------------- 22 23#if wxUSE_SPINBTN 24 25class WXDLLEXPORT wxSpinButton; 26class WXDLLEXPORT wxTextCtrl; 27 28// ---------------------------------------------------------------------------- 29// wxSpinCtrl is a combination of wxTextCtrl and wxSpinButton 30// ---------------------------------------------------------------------------- 31 32class WXDLLEXPORT wxSpinCtrl : public wxControl 33{ 34public: 35 wxSpinCtrl() { Init(); } 36 37 wxSpinCtrl(wxWindow *parent, 38 wxWindowID id = -1, 39 const wxString& value = wxEmptyString, 40 const wxPoint& pos = wxDefaultPosition, 41 const wxSize& size = wxDefaultSize, 42 long style = wxSP_ARROW_KEYS, 43 int min = 0, int max = 100, int initial = 0, 44 const wxString& name = _T("wxSpinCtrl")) 45 { 46 Init(); 47 Create(parent, id, value, pos, size, style, min, max, initial, name); 48 } 49 50 bool Create(wxWindow *parent, 51 wxWindowID id = -1, 52 const wxString& value = wxEmptyString, 53 const wxPoint& pos = wxDefaultPosition, 54 const wxSize& size = wxDefaultSize, 55 long style = wxSP_ARROW_KEYS, 56 int min = 0, int max = 100, int initial = 0, 57 const wxString& name = _T("wxSpinCtrl")); 58 59 // wxTextCtrl-like method 60 void SetSelection(long from, long to); 61 62 virtual ~wxSpinCtrl(); 63 64 // operations 65 void SetValue(int val); 66 void SetValue(const wxString& text); 67 void SetRange(int min, int max); 68 69 // accessors 70 int GetValue() const; 71 int GetMin() const; 72 int GetMax() const; 73 74 // implementation from now on 75 76 // forward these functions to all subcontrols 77 virtual bool Enable(bool enable = TRUE); 78 virtual bool Show(bool show = TRUE); 79 80 // get the subcontrols 81 wxTextCtrl *GetText() const { return m_text; } 82 wxSpinButton *GetSpinButton() const { return m_btn; } 83 84 // set the value of the text (only) 85 void SetTextValue(int val); 86 87 // put the numeric value of the string in the text ctrl into val and return 88 // TRUE or return FALSE if the text ctrl doesn't contain a number or if the 89 // number is out of range 90 bool GetTextValue(int *val) const; 91 92protected: 93 // override the base class virtuals involved into geometry calculations 94 virtual wxSize DoGetBestSize() const; 95 virtual void DoMoveWindow(int x, int y, int width, int height); 96 97 // common part of all ctors 98 void Init(); 99 100private: 101 // the subcontrols 102 wxTextCtrl *m_text; 103 wxSpinButton *m_btn; 104 105private: 106 DECLARE_DYNAMIC_CLASS(wxSpinCtrl) 107}; 108 109#else // !wxUSE_SPINBTN 110 111// ---------------------------------------------------------------------------- 112// wxSpinCtrl is just a text control 113// ---------------------------------------------------------------------------- 114 115#include "wx/textctrl.h" 116 117class WXDLLEXPORT wxSpinCtrl : public wxTextCtrl 118{ 119public: 120 wxSpinCtrl() { Init(); } 121 122 wxSpinCtrl(wxWindow *parent, 123 wxWindowID id = -1, 124 const wxString& value = wxEmptyString, 125 const wxPoint& pos = wxDefaultPosition, 126 const wxSize& size = wxDefaultSize, 127 long style = wxSP_ARROW_KEYS, 128 int min = 0, int max = 100, int initial = 0, 129 const wxString& name = _T("wxSpinCtrl")) 130 { 131 Create(parent, id, value, pos, size, style, min, max, initial, name); 132 } 133 134 bool Create(wxWindow *parent, 135 wxWindowID id = -1, 136 const wxString& value = wxEmptyString, 137 const wxPoint& pos = wxDefaultPosition, 138 const wxSize& size = wxDefaultSize, 139 long style = wxSP_ARROW_KEYS, 140 int min = 0, int max = 100, int initial = 0, 141 const wxString& name = _T("wxSpinCtrl")) 142 { 143 SetRange(min, max); 144 145 bool ok = wxTextCtrl::Create(parent, id, value, pos, size, style, 146 wxDefaultValidator, name); 147 SetValue(initial); 148 149 return ok; 150 } 151 152 // accessors 153 int GetValue(int WXUNUSED(dummy) = 1) const 154 { 155 int n; 156 if ( (wxSscanf(wxTextCtrl::GetValue(), wxT("%d"), &n) != 1) ) 157 n = INT_MIN; 158 159 return n; 160 } 161 162 int GetMin() const { return m_min; } 163 int GetMax() const { return m_max; } 164 165 // operations 166 void SetValue(const wxString& value) { wxTextCtrl::SetValue(value); } 167 void SetValue(int val) { wxString s; s << val; wxTextCtrl::SetValue(s); } 168 void SetRange(int min, int max) { m_min = min; m_max = max; } 169 170protected: 171 // initialize m_min/max with the default values 172 void Init() { SetRange(0, 100); } 173 174 int m_min; 175 int m_max; 176 177private: 178 DECLARE_DYNAMIC_CLASS(wxSpinCtrl) 179}; 180 181#endif // wxUSE_SPINBTN/!wxUSE_SPINBTN 182 183#endif // _WX_MAC_SPINCTRL_H_ 184 185