1 ///////////////////////////////////////////////////////////////////////////////
2 // Name:        wx/univ/checkbox.h
3 // Purpose:     wxCheckBox declaration
4 // Author:      Vadim Zeitlin
5 // Modified by:
6 // Created:     07.09.00
7 // Copyright:   (c) 2000 SciTech Software, Inc. (www.scitechsoft.com)
8 // Licence:     wxWindows licence
9 ///////////////////////////////////////////////////////////////////////////////
10 
11 #ifndef _WX_UNIV_CHECKBOX_H_
12 #define _WX_UNIV_CHECKBOX_H_
13 
14 #include "wx/button.h" // for wxStdButtonInputHandler
15 
16 // ----------------------------------------------------------------------------
17 // the actions supported by wxCheckBox
18 // ----------------------------------------------------------------------------
19 
20 #define wxACTION_CHECKBOX_CHECK   wxT("check")   // SetValue(true)
21 #define wxACTION_CHECKBOX_CLEAR   wxT("clear")   // SetValue(false)
22 #define wxACTION_CHECKBOX_TOGGLE  wxT("toggle")  // toggle the check state
23 
24 // additionally it accepts wxACTION_BUTTON_PRESS and RELEASE
25 
26 // ----------------------------------------------------------------------------
27 // wxCheckBox
28 // ----------------------------------------------------------------------------
29 
30 class WXDLLIMPEXP_CORE wxCheckBox : public wxCheckBoxBase
31 {
32 public:
33     // checkbox constants
34     enum State
35     {
36         State_Normal,
37         State_Pressed,
38         State_Disabled,
39         State_Current,
40         State_Max
41     };
42 
43     enum Status
44     {
45         Status_Checked,
46         Status_Unchecked,
47         Status_3rdState,
48         Status_Max
49     };
50 
51     // constructors
wxCheckBox()52     wxCheckBox() { Init(); }
53 
54     wxCheckBox(wxWindow *parent,
55                wxWindowID id,
56                const wxString& label,
57                const wxPoint& pos = wxDefaultPosition,
58                const wxSize& size = wxDefaultSize,
59                long style = 0,
60                const wxValidator& validator = wxDefaultValidator,
61                const wxString& name = wxCheckBoxNameStr)
62     {
63         Init();
64 
65         Create(parent, id, label, pos, size, style, validator, name);
66     }
67 
68     bool Create(wxWindow *parent,
69                 wxWindowID id,
70                 const wxString& label,
71                 const wxPoint& pos = wxDefaultPosition,
72                 const wxSize& size = wxDefaultSize,
73                 long style = 0,
74                 const wxValidator& validator = wxDefaultValidator,
75                 const wxString& name = wxCheckBoxNameStr);
76 
77     // implement the checkbox interface
78     virtual void SetValue(bool value);
79     virtual bool GetValue() const;
80 
81     // set/get the bitmaps to use for the checkbox indicator
82     void SetBitmap(const wxBitmap& bmp, State state, Status status);
83     virtual wxBitmap GetBitmap(State state, Status status) const;
84 
85     // wxCheckBox actions
86     void Toggle();
87     virtual void Press();
88     virtual void Release();
89     virtual void ChangeValue(bool value);
90 
91     // overridden base class virtuals
IsPressed()92     virtual bool IsPressed() const { return m_isPressed; }
93 
94     virtual bool PerformAction(const wxControlAction& action,
95                                long numArg = -1,
96                                const wxString& strArg = wxEmptyString);
97 
CanBeHighlighted()98     virtual bool CanBeHighlighted() const { return true; }
99     virtual wxInputHandler *CreateStdInputHandler(wxInputHandler *handlerDef);
DoGetStdInputHandler(wxInputHandler * handlerDef)100     virtual wxInputHandler *DoGetStdInputHandler(wxInputHandler *handlerDef)
101     {
102         return CreateStdInputHandler(handlerDef);
103     }
104 
105 protected:
106     virtual void DoSet3StateValue(wxCheckBoxState WXUNUSED(state));
107     virtual wxCheckBoxState DoGet3StateValue() const;
108 
109     virtual void DoDraw(wxControlRenderer *renderer);
110     virtual wxSize DoGetBestClientSize() const;
111 
112     // get the size of the bitmap using either the current one or the default
113     // one (query renderer then)
114     virtual wxSize GetBitmapSize() const;
115 
116     // common part of all ctors
117     void Init();
118 
119     // send command event notifying about the checkbox state change
120     virtual void SendEvent();
121 
122     // called when the checkbox becomes checked - radio button hook
123     virtual void OnCheck();
124 
125     // get the state corresponding to the flags (combination of wxCONTROL_XXX)
126     wxCheckBox::State GetState(int flags) const;
127 
128     // directly access the bitmaps array without trying to find a valid bitmap
129     // to use as GetBitmap() does
DoGetBitmap(State state,Status status)130     wxBitmap DoGetBitmap(State state, Status status) const
131         { return m_bitmaps[state][status]; }
132 
133     // get the current status
GetStatus()134     Status GetStatus() const { return m_status; }
135 
136 private:
137     // the current check status
138     Status m_status;
139 
140     // the bitmaps to use for the different states
141     wxBitmap m_bitmaps[State_Max][Status_Max];
142 
143     // is the checkbox currently pressed?
144     bool m_isPressed;
145 
146     DECLARE_DYNAMIC_CLASS(wxCheckBox)
147 };
148 
149 #endif // _WX_UNIV_CHECKBOX_H_
150