1 /////////////////////////////////////////////////////////////////////////////
4 // Author: Julian Smart
8 // Copyright: (c) Julian Smart
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
12 #if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
13 #pragma implementation "checkbox.h"
17 #define XtDisplay XTDISPLAY
22 #include "wx/checkbox.h"
23 #include "wx/tglbtn.h"
27 #pragma message disable nosimpint
30 #include <Xm/LabelG.h>
31 #include <Xm/ToggleB.h>
32 #include <Xm/ToggleBG.h>
34 #pragma message enable nosimpint
37 #include "wx/motif/private.h"
39 void wxCheckBoxCallback (Widget w
, XtPointer clientData
,
42 IMPLEMENT_DYNAMIC_CLASS(wxCheckBox
, wxControl
)
44 wxCheckBoxBase::wxCheckBoxBase()
48 // Single check box item
49 bool wxCheckBox::Create(wxWindow
*parent
, wxWindowID id
, const wxString
& label
,
51 const wxSize
& size
, long style
,
52 const wxValidator
& validator
,
55 if( !wxControl::CreateControl( parent
, id
, pos
, size
, style
, validator
,
59 wxString
label1(wxStripMenuCodes(label
));
60 wxXmString
text( label1
);
62 Widget parentWidget
= (Widget
) parent
->GetClientWidget();
64 m_mainWidget
= (WXWidget
) XtVaCreateManagedWidget ("toggle",
65 xmToggleButtonWidgetClass
, parentWidget
,
66 wxFont::GetFontTag(), m_font
.GetFontType(XtDisplay(parentWidget
)),
67 XmNlabelString
, text(),
68 XmNrecomputeSize
, False
,
71 XtAddCallback( (Widget
)m_mainWidget
,
72 XmNvalueChangedCallback
, (XtCallbackProc
)wxCheckBoxCallback
,
75 XmToggleButtonSetState ((Widget
) m_mainWidget
, FALSE
, TRUE
);
77 AttachWidget( parent
, m_mainWidget
, (WXWidget
)NULL
,
78 pos
.x
, pos
.y
, size
.x
, size
.y
);
80 ChangeBackgroundColour();
84 void wxCheckBox::SetValue(bool val
)
87 XmToggleButtonSetState ((Widget
) m_mainWidget
, (Boolean
) val
, TRUE
);
91 bool wxCheckBox::GetValue() const
93 return (XmToggleButtonGetState ((Widget
) m_mainWidget
) != 0);
96 void wxCheckBox::Command (wxCommandEvent
& event
)
98 SetValue ((event
.GetInt() != 0));
99 ProcessCommand (event
);
102 void wxCheckBoxCallback (Widget
WXUNUSED(w
), XtPointer clientData
,
103 XtPointer
WXUNUSED(ptr
))
105 wxCheckBox
*item
= (wxCheckBox
*) clientData
;
107 if (item
->InSetValue())
110 wxCommandEvent
event (item
->m_evtType
, item
->GetId());
111 event
.SetInt((int) item
->GetValue ());
112 event
.SetEventObject(item
);
113 item
->ProcessCommand (event
);
116 void wxCheckBox::ChangeBackgroundColour()
118 wxComputeColours (XtDisplay((Widget
) m_mainWidget
), & m_backgroundColour
,
121 XtVaSetValues ((Widget
) m_mainWidget
,
122 XmNbackground
, g_itemColors
[wxBACK_INDEX
].pixel
,
123 XmNtopShadowColor
, g_itemColors
[wxTOPS_INDEX
].pixel
,
124 XmNbottomShadowColor
, g_itemColors
[wxBOTS_INDEX
].pixel
,
125 XmNforeground
, g_itemColors
[wxFORE_INDEX
].pixel
,
128 int selectPixel
= wxBLACK
->AllocColour(XtDisplay((Widget
)m_mainWidget
));
130 // Better to have the checkbox selection in black, or it's
131 // hard to determine what state it is in.
132 XtVaSetValues ((Widget
) m_mainWidget
,
133 XmNselectColor
, selectPixel
,
137 ///////////////////////////////////////////////////////////////////////////////
139 ///////////////////////////////////////////////////////////////////////////////
143 DEFINE_EVENT_TYPE(wxEVT_COMMAND_TOGGLEBUTTON_CLICKED
)
144 IMPLEMENT_DYNAMIC_CLASS(wxToggleButton
, wxControl
)
146 bool wxToggleButton::Create( wxWindow
* parent
, wxWindowID id
,
147 const wxString
& label
,
151 const wxValidator
& val
,
152 const wxString
&name
)
154 if( !wxCheckBox::Create( parent
, id
, label
, pos
, size
, style
, val
, name
) )
157 XtVaSetValues( (Widget
)m_mainWidget
,
159 #if XmVersion >= 2000
160 XmNindicatorOn
, XmINDICATOR_NONE
,
162 XmNindicatorOn
, False
,
164 XmNfillOnSelect
, False
,
165 XmNshadowThickness
, 2,
166 XmNalignment
, XmALIGNMENT_CENTER
,
171 // set it again, because the XtVaSetValue above resets it
172 if( size
.x
!= -1 || size
.y
!= -1 )
178 #endif // wxUSE_TOGGLEBUTTON