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