1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: wxRadioButton
4 // Author: Julian Smart
8 // Copyright: (c) Julian Smart
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
13 #pragma implementation "radiobut.h"
16 #include "wx/radiobut.h"
20 #include <Xm/LabelG.h>
21 #include <Xm/ToggleB.h>
22 #include <Xm/ToggleBG.h>
23 #include <Xm/RowColumn.h>
26 #include <wx/motif/private.h>
28 void wxRadioButtonCallback (Widget w
, XtPointer clientData
,
29 XmToggleButtonCallbackStruct
* cbs
);
31 #if !USE_SHARED_LIBRARY
32 IMPLEMENT_DYNAMIC_CLASS(wxRadioButton
, wxControl
)
35 wxRadioButton::wxRadioButton()
37 m_labelWidget
= (WXWidget
) 0;
38 m_formWidget
= (WXWidget
) 0;
41 bool wxRadioButton::Create(wxWindow
*parent
, wxWindowID id
,
42 const wxString
& label
,
44 const wxSize
& size
, long style
,
45 const wxValidator
& validator
,
49 SetValidator(validator
);
51 if (parent
) parent
->AddChild(this);
54 m_windowId
= (int)NewControlId();
58 m_windowStyle
= style
;
60 Widget parentWidget
= (Widget
) parent
->GetClientWidget();
62 wxString
label1(wxStripMenuCodes(label
));
64 XmString text
= XmStringCreateSimple ((char*) (const char*) label1
);
66 Widget formWidget
= XtVaCreateManagedWidget ((char*) (const char*) name
,
67 xmFormWidgetClass
, parentWidget
,
72 m_formWidget
= (WXWidget
) formWidget
;
74 Widget labelWidget
= XtVaCreateManagedWidget ((char*) (const char*) label1
,
79 xmLabelWidgetClass
, formWidget
,
83 m_labelWidget
= (WXWidget
) labelWidget
;
86 XtVaSetValues (labelWidget,
87 XmNfontList, labelFont->GetInternalFont (XtDisplay(formWidget)),
93 Widget radioButtonWidget
= XtVaCreateManagedWidget ("toggle",
95 xmToggleButtonGadgetClass
, formWidget
,
97 xmToggleButtonWidgetClass
, formWidget
,
100 XtAddCallback (radioButtonWidget
, XmNvalueChangedCallback
, (XtCallbackProc
) wxRadioButtonCallback
,
101 (XtCallbackProc
) this);
103 m_mainWidget
= (WXWidget
) radioButtonWidget
;
107 XtVaSetValues (radioButtonWidget,
108 XmNfontList, labelFont->GetInternalFont (XtDisplay(formWidget)),
113 XtVaSetValues (labelWidget
,
114 XmNtopAttachment
, XmATTACH_FORM
,
115 XmNleftAttachment
, XmATTACH_FORM
,
116 XmNbottomAttachment
, XmATTACH_FORM
,
117 XmNalignment
, XmALIGNMENT_BEGINNING
,
119 XtVaSetValues (radioButtonWidget
,
121 XmNtopAttachment
, XmATTACH_FORM
,
122 XmNbottomAttachment
, XmATTACH_FORM
,
123 XmNleftAttachment
, (Widget
) m_labelWidget
? XmATTACH_WIDGET
: XmATTACH_FORM
,
124 XmNleftWidget
, (Widget
) m_labelWidget
? (Widget
) m_labelWidget
: formWidget
,
127 XtManageChild (radioButtonWidget
);
129 SetCanAddEventHandler(TRUE
);
130 AttachWidget (parent
, m_mainWidget
, m_formWidget
, pos
.x
, pos
.y
, size
.x
, size
.y
);
132 SetFont(* parent
->GetFont());
133 ChangeColour(m_mainWidget
);
138 void wxRadioButton::SetValue(bool value
)
141 XmToggleButtonSetState ((Widget
) m_mainWidget
, (Boolean
) value
, FALSE
);
142 m_inSetValue
= FALSE
;
145 // Get single selection, for single choice list items
146 bool wxRadioButton::GetValue() const
148 return (XmToggleButtonGetState ((Widget
) m_mainWidget
) != 0);
151 void wxRadioButton::Command (wxCommandEvent
& event
)
153 SetValue ( (event
.m_commandInt
!= 0) );
154 ProcessCommand (event
);
157 void wxRadioButtonCallback (Widget w
, XtPointer clientData
,
158 XmToggleButtonCallbackStruct
* cbs
)
163 wxRadioButton
*item
= (wxRadioButton
*) clientData
;
164 if (item
->InSetValue())
167 wxCommandEvent
event (wxEVT_COMMAND_RADIOBUTTON_SELECTED
, item
->GetId());
168 event
.SetEventObject(item
);
170 item
->ProcessCommand (event
);