1 /////////////////////////////////////////////////////////////////////////////
2 // Name: src/osx/checkbox_osx.cpp
3 // Purpose: wxCheckBox
4 // Author: Stefan Csomor
5 // Modified by:
6 // Created: 04/01/98
7 // Copyright: (c) Stefan Csomor
8 // Licence: wxWindows licence
9 /////////////////////////////////////////////////////////////////////////////
10
11 #include "wx/wxprec.h"
12
13 #if wxUSE_CHECKBOX
14
15 #include "wx/checkbox.h"
16 #include "wx/osx/private.h"
17
IMPLEMENT_DYNAMIC_CLASS(wxBitmapCheckBox,wxCheckBox)18 IMPLEMENT_DYNAMIC_CLASS(wxBitmapCheckBox, wxCheckBox)
19
20 // Single check box item
21 bool wxCheckBox::Create(wxWindow *parent,
22 wxWindowID id,
23 const wxString& label,
24 const wxPoint& pos,
25 const wxSize& size,
26 long style,
27 const wxValidator& validator,
28 const wxString& name)
29 {
30 DontCreatePeer();
31
32 if ( !wxCheckBoxBase::Create(parent, id, pos, size, style, validator, name) )
33 return false;
34
35 m_labelOrig = m_label = label ;
36
37 WXValidateStyle( &style );
38 SetPeer(wxWidgetImpl::CreateCheckBox( this, parent, id, label, pos, size, style, GetExtraStyle() )) ;
39
40 MacPostControlCreate(pos, size) ;
41
42 return true;
43 }
44
45
SetValue(bool val)46 void wxCheckBox::SetValue(bool val)
47 {
48 if (val)
49 Set3StateValue(wxCHK_CHECKED);
50 else
51 Set3StateValue(wxCHK_UNCHECKED);
52 }
53
GetValue() const54 bool wxCheckBox::GetValue() const
55 {
56 return (DoGet3StateValue() != 0);
57 }
58
Command(wxCommandEvent & event)59 void wxCheckBox::Command(wxCommandEvent & event)
60 {
61 int state = event.GetInt();
62
63 wxCHECK_RET( (state == wxCHK_UNCHECKED) || (state == wxCHK_CHECKED)
64 || (state == wxCHK_UNDETERMINED),
65 wxT("event.GetInt() returned an invalid checkbox state") );
66
67 Set3StateValue((wxCheckBoxState)state);
68
69 ProcessCommand(event);
70 }
71
DoGet3StateValue() const72 wxCheckBoxState wxCheckBox::DoGet3StateValue() const
73 {
74 return (wxCheckBoxState)GetPeer()->GetValue() ;
75 }
76
DoSet3StateValue(wxCheckBoxState val)77 void wxCheckBox::DoSet3StateValue(wxCheckBoxState val)
78 {
79 GetPeer()->SetValue( val ) ;
80 }
81
OSXHandleClicked(double WXUNUSED (timestampsec))82 bool wxCheckBox::OSXHandleClicked( double WXUNUSED(timestampsec) )
83 {
84 bool sendEvent = true;
85 wxCheckBoxState newState = Get3StateValue();
86
87 if ( !GetPeer()->ButtonClickDidStateChange() )
88 {
89 wxCheckBoxState origState ;
90
91 origState = Get3StateValue();
92
93 switch (origState)
94 {
95 case wxCHK_UNCHECKED:
96 newState = wxCHK_CHECKED;
97 break;
98
99 case wxCHK_CHECKED:
100 // If the style flag to allow the user setting the undetermined state is set,
101 // then set the state to undetermined; otherwise set state to unchecked.
102 newState = Is3rdStateAllowedForUser() ? wxCHK_UNDETERMINED : wxCHK_UNCHECKED;
103 break;
104
105 case wxCHK_UNDETERMINED:
106 newState = wxCHK_UNCHECKED;
107 break;
108
109 default:
110 break;
111 }
112
113 if (newState == origState)
114 sendEvent = false;
115 else
116 Set3StateValue( newState );
117 }
118 else
119 {
120 // in case we cannot avoid this user state change natively (eg cocoa) we intercept it here
121 if ( newState == wxCHK_UNDETERMINED && !Is3rdStateAllowedForUser() )
122 {
123 newState = wxCHK_CHECKED;
124 Set3StateValue( newState );
125 }
126 }
127
128 if (sendEvent)
129 {
130 wxCommandEvent event( wxEVT_CHECKBOX, m_windowId );
131 event.SetInt( newState );
132 event.SetEventObject( this );
133 ProcessCommand( event );
134 }
135
136 return true;
137 }
138
139 // Bitmap checkbox
Create(wxWindow * parent,wxWindowID id,const wxBitmap * WXUNUSED (label),const wxPoint & WXUNUSED (pos),const wxSize & WXUNUSED (size),long style,const wxValidator & wxVALIDATOR_PARAM (validator),const wxString & name)140 bool wxBitmapCheckBox::Create(wxWindow *parent,
141 wxWindowID id,
142 const wxBitmap *WXUNUSED(label),
143 const wxPoint& WXUNUSED(pos),
144 const wxSize& WXUNUSED(size),
145 long style,
146 const wxValidator& wxVALIDATOR_PARAM(validator),
147 const wxString& name)
148 {
149 SetName(name);
150 #if wxUSE_VALIDATORS
151 SetValidator(validator);
152 #endif
153 m_windowStyle = style;
154
155 if (parent)
156 parent->AddChild(this);
157
158 if ( id == -1 )
159 m_windowId = NewControlId();
160 else
161 m_windowId = id;
162
163 // TODO: Create the bitmap checkbox
164
165 return false;
166 }
167
SetLabel(const wxBitmap * WXUNUSED (bitmap))168 void wxBitmapCheckBox::SetLabel(const wxBitmap *WXUNUSED(bitmap))
169 {
170 // TODO
171 wxFAIL_MSG(wxT("wxBitmapCheckBox::SetLabel() not yet implemented"));
172 }
173
SetSize(int x,int y,int width,int height,int sizeFlags)174 void wxBitmapCheckBox::SetSize(int x, int y, int width, int height, int sizeFlags)
175 {
176 wxControl::SetSize( x , y , width , height , sizeFlags ) ;
177 }
178
SetValue(bool WXUNUSED (val))179 void wxBitmapCheckBox::SetValue(bool WXUNUSED(val))
180 {
181 // TODO
182 wxFAIL_MSG(wxT("wxBitmapCheckBox::SetValue() not yet implemented"));
183 }
184
GetValue() const185 bool wxBitmapCheckBox::GetValue() const
186 {
187 // TODO
188 wxFAIL_MSG(wxT("wxBitmapCheckBox::GetValue() not yet implemented"));
189
190 return false;
191 }
192
193 #endif
194