1 ///////////////////////////////////////////////////////////////////////////////
2 // Name:        wx/checkbox.h
3 // Purpose:     wxCheckBox class interface
4 // Author:      Vadim Zeitlin
5 // Modified by:
6 // Created:     07.09.00
7 // RCS-ID:      $Id: checkbox.h 39901 2006-06-30 10:51:44Z VS $
8 // Copyright:   (c) wxWidgets team
9 // Licence:     wxWindows licence
10 ///////////////////////////////////////////////////////////////////////////////
11 
12 #ifndef _WX_CHECKBOX_H_BASE_
13 #define _WX_CHECKBOX_H_BASE_
14 
15 #include "wx/defs.h"
16 
17 #if wxUSE_CHECKBOX
18 
19 #include "wx/control.h"
20 
21 
22 /*
23  * wxCheckBox style flags
24  * (Using wxCHK_* because wxCB_* is used by wxComboBox).
25  * Determine whether to use a 3-state or 2-state
26  * checkbox. 3-state enables to differentiate
27  * between 'unchecked', 'checked' and 'undetermined'.
28  */
29 #define wxCHK_2STATE           0x0000
30 #define wxCHK_3STATE           0x1000
31 
32 /*
33  * If this style is set the user can set the checkbox to the
34  * undetermined state. If not set the undetermined set can only
35  * be set programmatically.
36  * This style can only be used with 3 state checkboxes.
37  */
38 #define wxCHK_ALLOW_3RD_STATE_FOR_USER 0x2000
39 
40 /*
41  * The possible states of a 3-state checkbox (Compatible
42  * with the 2-state checkbox).
43  */
44 enum wxCheckBoxState
45 {
46     wxCHK_UNCHECKED,
47     wxCHK_CHECKED,
48     wxCHK_UNDETERMINED /* 3-state checkbox only */
49 };
50 
51 
52 extern WXDLLEXPORT_DATA(const wxChar) wxCheckBoxNameStr[];
53 
54 // ----------------------------------------------------------------------------
55 // wxCheckBox: a control which shows a label and a box which may be checked
56 // ----------------------------------------------------------------------------
57 
58 class WXDLLEXPORT wxCheckBoxBase : public wxControl
59 {
60 public:
wxCheckBoxBase()61     wxCheckBoxBase() { }
62 
63     // set/get the checked status of the listbox
64     virtual void SetValue(bool value) = 0;
65     virtual bool GetValue() const = 0;
66 
IsChecked()67     bool IsChecked() const
68     {
69         wxASSERT_MSG( !Is3State(), wxT("Calling IsChecked() doesn't make sense for")
70             wxT(" a three state checkbox, Use Get3StateValue() instead") );
71 
72         return GetValue();
73     }
74 
Get3StateValue()75     wxCheckBoxState Get3StateValue() const
76     {
77         wxCheckBoxState state = DoGet3StateValue();
78 
79         if ( state == wxCHK_UNDETERMINED && !Is3State() )
80         {
81             // Undetermined state with a 2-state checkbox??
82             wxFAIL_MSG( wxT("DoGet3StateValue() says the 2-state checkbox is ")
83                 wxT("in an undetermined/third state") );
84 
85             state = wxCHK_UNCHECKED;
86         }
87 
88         return state;
89     }
90 
Set3StateValue(wxCheckBoxState state)91     void Set3StateValue(wxCheckBoxState state)
92     {
93         if ( state == wxCHK_UNDETERMINED && !Is3State() )
94         {
95             wxFAIL_MSG(wxT("Setting a 2-state checkbox to undetermined state"));
96             state = wxCHK_UNCHECKED;
97         }
98 
99         DoSet3StateValue(state);
100     }
101 
Is3State()102     bool Is3State() const { return HasFlag(wxCHK_3STATE); }
103 
Is3rdStateAllowedForUser()104     bool Is3rdStateAllowedForUser() const
105     {
106         return HasFlag(wxCHK_ALLOW_3RD_STATE_FOR_USER);
107     }
108 
HasTransparentBackground()109     virtual bool HasTransparentBackground() { return true; }
110 
111     // wxCheckBox-specific processing after processing the update event
DoUpdateWindowUI(wxUpdateUIEvent & event)112     virtual void DoUpdateWindowUI(wxUpdateUIEvent& event)
113     {
114         wxControl::DoUpdateWindowUI(event);
115 
116         if ( event.GetSetChecked() )
117             SetValue(event.GetChecked());
118     }
119 
120 protected:
DoSet3StateValue(wxCheckBoxState WXUNUSED (state))121     virtual void DoSet3StateValue(wxCheckBoxState WXUNUSED(state)) { wxFAIL; }
122 
DoGet3StateValue()123     virtual wxCheckBoxState DoGet3StateValue() const
124     {
125         wxFAIL;
126         return wxCHK_UNCHECKED;
127     }
128 
129 private:
130     DECLARE_NO_COPY_CLASS(wxCheckBoxBase)
131 };
132 
133 #if defined(__WXUNIVERSAL__)
134     #include "wx/univ/checkbox.h"
135 #elif defined(__WXMSW__)
136     #include "wx/msw/checkbox.h"
137 #elif defined(__WXMOTIF__)
138     #include "wx/motif/checkbox.h"
139 #elif defined(__WXGTK20__)
140     #include "wx/gtk/checkbox.h"
141 #elif defined(__WXGTK__)
142     #include "wx/gtk1/checkbox.h"
143 #elif defined(__WXMAC__)
144     #include "wx/mac/checkbox.h"
145 #elif defined(__WXCOCOA__)
146     #include "wx/cocoa/checkbox.h"
147 #elif defined(__WXPM__)
148     #include "wx/os2/checkbox.h"
149 #elif defined(__WXPALMOS__)
150     #include "wx/palmos/checkbox.h"
151 #endif
152 
153 #endif // wxUSE_CHECKBOX
154 
155 #endif
156     // _WX_CHECKBOX_H_BASE_
157