]> git.saurik.com Git - wxWidgets.git/blob - include/wx/univ/spinbutt.h
Steps towards implementing native-style, non-top-level toolbars on Mac
[wxWidgets.git] / include / wx / univ / spinbutt.h
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 // RCS-ID: $Id$
8 // Copyright: (c) 2001 SciTech Software, Inc. (www.scitechsoft.com)
9 // Licence: wxWindows licence
10 ///////////////////////////////////////////////////////////////////////////////
11
12 #ifndef _WX_UNIV_SPINBUTT_H_
13 #define _WX_UNIV_SPINBUTT_H_
14
15 #include "wx/univ/scrarrow.h"
16
17 // ----------------------------------------------------------------------------
18 // wxSpinButton
19 // ----------------------------------------------------------------------------
20
21 // actions supported by this control
22 #define wxACTION_SPIN_INC _T("inc")
23 #define wxACTION_SPIN_DEC _T("dec")
24
25 class WXDLLEXPORT wxSpinButton : public wxSpinButtonBase,
26 public wxControlWithArrows
27 {
28 public:
29 wxSpinButton();
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);
36
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);
43
44 // implement wxSpinButtonBase methods
45 virtual int GetValue() const;
46 virtual void SetValue(int val);
47 virtual void SetRange(int minVal, int maxVal);
48
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 HitTest(const wxPoint& pt) const;
57
58 // for wxStdSpinButtonInputHandler
59 const wxScrollArrows& GetArrows() { return m_arrows; }
60
61 virtual bool PerformAction(const wxControlAction& action,
62 long numArg = 0,
63 const wxString& strArg = wxEmptyString);
64
65 protected:
66 virtual wxSize DoGetBestClientSize() const;
67 virtual void DoDraw(wxControlRenderer *renderer);
68 virtual wxBorder GetDefaultBorder() const { return wxBORDER_NONE; }
69
70 // the common part of all ctors
71 void Init();
72
73 // normalize the value to fit into min..max range
74 int NormalizeValue(int value) const;
75
76 // change the value by +1/-1 and send the event, return true if value was
77 // changed
78 bool ChangeValue(int inc);
79
80 // get the rectangles for our 2 arrows
81 void CalcArrowRects(wxRect *rect1, wxRect *rect2) const;
82
83 // the current controls value
84 int m_value;
85
86 private:
87 // the object which manages our arrows
88 wxScrollArrows m_arrows;
89
90 // the state (combination of wxCONTROL_XXX flags) of the arrows
91 int m_arrowsState[wxScrollArrows::Arrow_Max];
92
93 DECLARE_DYNAMIC_CLASS(wxSpinButton)
94 };
95
96 // ----------------------------------------------------------------------------
97 // wxStdSpinButtonInputHandler: manages clicks on them (use arrows like
98 // wxStdScrollBarInputHandler) and processes keyboard events too
99 // ----------------------------------------------------------------------------
100
101 class WXDLLEXPORT wxStdSpinButtonInputHandler : public wxStdInputHandler
102 {
103 public:
104 wxStdSpinButtonInputHandler(wxInputHandler *inphand);
105
106 virtual bool HandleKey(wxInputConsumer *consumer,
107 const wxKeyEvent& event,
108 bool pressed);
109 virtual bool HandleMouse(wxInputConsumer *consumer,
110 const wxMouseEvent& event);
111 virtual bool HandleMouseMove(wxInputConsumer *consumer,
112 const wxMouseEvent& event);
113 };
114
115 #endif // _WX_UNIV_SPINBUTT_H_
116