1 /////////////////////////////////////////////////////////////////////////////// 2 // Name: wx/univ/spinbutt.h 3 // Purpose: universal version of wxSpinButton 4 // Author: Vadim Zeitlin 5 // Modified by: 6 // Created: 21.01.01 7 // Copyright: (c) 2001 SciTech Software, Inc. (www.scitechsoft.com) 8 // Licence: wxWindows licence 9 /////////////////////////////////////////////////////////////////////////////// 10 11 #ifndef _WX_UNIV_SPINBUTT_H_ 12 #define _WX_UNIV_SPINBUTT_H_ 13 14 #include "wx/univ/scrarrow.h" 15 16 // ---------------------------------------------------------------------------- 17 // wxSpinButton 18 // ---------------------------------------------------------------------------- 19 20 // actions supported by this control 21 #define wxACTION_SPIN_INC wxT("inc") 22 #define wxACTION_SPIN_DEC wxT("dec") 23 24 class WXDLLIMPEXP_CORE wxSpinButton : public wxSpinButtonBase, 25 public wxControlWithArrows 26 { 27 public: 28 wxSpinButton(); 29 wxSpinButton(wxWindow *parent, 30 wxWindowID id = wxID_ANY, 31 const wxPoint& pos = wxDefaultPosition, 32 const wxSize& size = wxDefaultSize, 33 long style = wxSP_VERTICAL | wxSP_ARROW_KEYS, 34 const wxString& name = wxSPIN_BUTTON_NAME); 35 36 bool Create(wxWindow *parent, 37 wxWindowID id = wxID_ANY, 38 const wxPoint& pos = wxDefaultPosition, 39 const wxSize& size = wxDefaultSize, 40 long style = wxSP_VERTICAL | wxSP_ARROW_KEYS, 41 const wxString& name = wxSPIN_BUTTON_NAME); 42 43 // implement wxSpinButtonBase methods 44 virtual int GetValue() const; 45 virtual void SetValue(int val); 46 virtual void SetRange(int minVal, int maxVal); 47 48 // implement wxControlWithArrows methods GetRenderer()49 virtual wxRenderer *GetRenderer() const { return m_renderer; } GetWindow()50 virtual wxWindow *GetWindow() { return this; } IsVertical()51 virtual bool IsVertical() const { return wxSpinButtonBase::IsVertical(); } 52 virtual int GetArrowState(wxScrollArrows::Arrow arrow) const; 53 virtual void SetArrowFlag(wxScrollArrows::Arrow arrow, int flag, bool set); 54 virtual bool OnArrow(wxScrollArrows::Arrow arrow); 55 virtual wxScrollArrows::Arrow HitTestArrow(const wxPoint& pt) const; 56 57 // for wxStdSpinButtonInputHandler GetArrows()58 const wxScrollArrows& GetArrows() { return m_arrows; } 59 60 virtual bool PerformAction(const wxControlAction& action, 61 long numArg = 0, 62 const wxString& strArg = wxEmptyString); 63 64 static wxInputHandler *GetStdInputHandler(wxInputHandler *handlerDef); DoGetStdInputHandler(wxInputHandler * handlerDef)65 virtual wxInputHandler *DoGetStdInputHandler(wxInputHandler *handlerDef) 66 { 67 return GetStdInputHandler(handlerDef); 68 } 69 70 protected: 71 virtual wxSize DoGetBestClientSize() const; 72 virtual void DoDraw(wxControlRenderer *renderer); GetDefaultBorder()73 virtual wxBorder GetDefaultBorder() const { return wxBORDER_NONE; } 74 75 // the common part of all ctors 76 void Init(); 77 78 // normalize the value to fit into min..max range 79 int NormalizeValue(int value) const; 80 81 // change the value by +1/-1 and send the event, return true if value was 82 // changed 83 bool ChangeValue(int inc); 84 85 // get the rectangles for our 2 arrows 86 void CalcArrowRects(wxRect *rect1, wxRect *rect2) const; 87 88 // the current controls value 89 int m_value; 90 91 private: 92 // the object which manages our arrows 93 wxScrollArrows m_arrows; 94 95 // the state (combination of wxCONTROL_XXX flags) of the arrows 96 int m_arrowsState[wxScrollArrows::Arrow_Max]; 97 98 DECLARE_DYNAMIC_CLASS(wxSpinButton) 99 }; 100 101 // ---------------------------------------------------------------------------- 102 // wxStdSpinButtonInputHandler: manages clicks on them (use arrows like 103 // wxStdScrollBarInputHandler) and processes keyboard events too 104 // ---------------------------------------------------------------------------- 105 106 class WXDLLIMPEXP_CORE wxStdSpinButtonInputHandler : public wxStdInputHandler 107 { 108 public: 109 wxStdSpinButtonInputHandler(wxInputHandler *inphand); 110 111 virtual bool HandleKey(wxInputConsumer *consumer, 112 const wxKeyEvent& event, 113 bool pressed); 114 virtual bool HandleMouse(wxInputConsumer *consumer, 115 const wxMouseEvent& event); 116 virtual bool HandleMouseMove(wxInputConsumer *consumer, 117 const wxMouseEvent& event); 118 }; 119 120 #endif // _WX_UNIV_SPINBUTT_H_ 121 122