home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / wxos2240.zip / wxWindows-2.4.0 / include / wx / generic / spinctlg.h < prev    next >
C/C++ Source or Header  |  2002-09-01  |  6KB  |  187 lines

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