]> git.saurik.com Git - wxWidgets.git/blame - include/wx/checkbox.h
Simplify and correct MSW selection of background brush for children painting.
[wxWidgets.git] / include / wx / checkbox.h
CommitLineData
1e6feb95
VZ
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$
77ffb593 8// Copyright: (c) wxWidgets team
65571936 9// Licence: wxWindows licence
1e6feb95
VZ
10///////////////////////////////////////////////////////////////////////////////
11
34138703
JS
12#ifndef _WX_CHECKBOX_H_BASE_
13#define _WX_CHECKBOX_H_BASE_
c801d85f 14
997176a3
VZ
15#include "wx/defs.h"
16
1e6feb95
VZ
17#if wxUSE_CHECKBOX
18
19#include "wx/control.h"
20
8941fa88
VZ
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 */
44enum wxCheckBoxState
45{
46 wxCHK_UNCHECKED,
47 wxCHK_CHECKED,
48 wxCHK_UNDETERMINED /* 3-state checkbox only */
49};
50
51
53a2db12 52extern WXDLLIMPEXP_DATA_CORE(const char) wxCheckBoxNameStr[];
1e6feb95
VZ
53
54// ----------------------------------------------------------------------------
55// wxCheckBox: a control which shows a label and a box which may be checked
56// ----------------------------------------------------------------------------
57
53a2db12 58class WXDLLIMPEXP_CORE wxCheckBoxBase : public wxControl
1e6feb95
VZ
59{
60public:
6463b9f5 61 wxCheckBoxBase() { }
fc7a2a60 62
1e6feb95 63 // set/get the checked status of the listbox
2b2a5a8c 64 virtual void SetValue(bool value) = 0;
1e6feb95
VZ
65 virtual bool GetValue() const = 0;
66
8941fa88
VZ
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
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
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
f4992e37 102 bool Is3State() const { return HasFlag(wxCHK_3STATE); }
8941fa88
VZ
103
104 bool Is3rdStateAllowedForUser() const
105 {
f4992e37 106 return HasFlag(wxCHK_ALLOW_3RD_STATE_FOR_USER);
8941fa88
VZ
107 }
108
7c7a653b 109 virtual bool HasTransparentBackground() { return true; }
bd507486 110
a3a4105d
VZ
111 // wxCheckBox-specific processing after processing the update event
112 virtual void DoUpdateWindowUI(wxUpdateUIEvent& event)
113 {
84b2e376
VS
114 wxControl::DoUpdateWindowUI(event);
115
a3a4105d
VZ
116 if ( event.GetSetChecked() )
117 SetValue(event.GetChecked());
118 }
119
8941fa88 120protected:
dc797d8e
JS
121 // choose the default border for this window
122 virtual wxBorder GetDefaultBorder() const { return wxBORDER_NONE; }
123
8941fa88
VZ
124 virtual void DoSet3StateValue(wxCheckBoxState WXUNUSED(state)) { wxFAIL; }
125
126 virtual wxCheckBoxState DoGet3StateValue() const
127 {
128 wxFAIL;
129 return wxCHK_UNCHECKED;
130 }
fc7a2a60
VZ
131
132private:
c0c133e1 133 wxDECLARE_NO_COPY_CLASS(wxCheckBoxBase);
1e6feb95
VZ
134};
135
136#if defined(__WXUNIVERSAL__)
137 #include "wx/univ/checkbox.h"
138#elif defined(__WXMSW__)
139 #include "wx/msw/checkbox.h"
2049ba38 140#elif defined(__WXMOTIF__)
1e6feb95 141 #include "wx/motif/checkbox.h"
1be7a35c 142#elif defined(__WXGTK20__)
1e6feb95 143 #include "wx/gtk/checkbox.h"
1be7a35c
MR
144#elif defined(__WXGTK__)
145 #include "wx/gtk1/checkbox.h"
34138703 146#elif defined(__WXMAC__)
ef0e9220 147 #include "wx/osx/checkbox.h"
e64df9bc
DE
148#elif defined(__WXCOCOA__)
149 #include "wx/cocoa/checkbox.h"
1777b9bb 150#elif defined(__WXPM__)
1e6feb95 151 #include "wx/os2/checkbox.h"
bdb54365
WS
152#elif defined(__WXPALMOS__)
153 #include "wx/palmos/checkbox.h"
c801d85f
KB
154#endif
155
1e6feb95
VZ
156#endif // wxUSE_CHECKBOX
157
c801d85f 158#endif
34138703 159 // _WX_CHECKBOX_H_BASE_