X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/4bb6408c2631988fab9925014c6619358bf867de..8704bf74fba8523e2e174bd5a8195b5202009cd0:/src/motif/radiobut.cpp?ds=sidebyside diff --git a/src/motif/radiobut.cpp b/src/motif/radiobut.cpp index 31c7504715..29223c6d9a 100644 --- a/src/motif/radiobut.cpp +++ b/src/motif/radiobut.cpp @@ -14,11 +14,30 @@ #endif #include "wx/radiobut.h" +#include "wx/utils.h" + +#include +#include +#include +#include +#include +#include + +#include + +void wxRadioButtonCallback (Widget w, XtPointer clientData, + XmToggleButtonCallbackStruct * cbs); #if !USE_SHARED_LIBRARY IMPLEMENT_DYNAMIC_CLASS(wxRadioButton, wxControl) #endif +wxRadioButton::wxRadioButton() +{ + m_labelWidget = (WXWidget) 0; + m_formWidget = (WXWidget) 0; +} + bool wxRadioButton::Create(wxWindow *parent, wxWindowID id, const wxString& label, const wxPoint& pos, @@ -38,25 +57,95 @@ bool wxRadioButton::Create(wxWindow *parent, wxWindowID id, m_windowStyle = style ; - // TODO create radiobutton - return FALSE; -} + Widget parentWidget = (Widget) parent->GetClientWidget(); -void wxRadioButton::SetLabel(const wxString& label) -{ - // TODO + wxString label1(wxStripMenuCodes(label)); + + XmString text = XmStringCreateSimple ((char*) (const char*) label1); + + Widget formWidget = XtVaCreateManagedWidget ((char*) (const char*) name, + xmFormWidgetClass, parentWidget, + XmNmarginHeight, 0, + XmNmarginWidth, 0, + NULL); + + m_formWidget = (WXWidget) formWidget; + + Widget labelWidget = XtVaCreateManagedWidget ((char*) (const char*) label1, +#if wxUSE_GADGETS + xmLabelGadgetClass, + formWidget, +#else + xmLabelWidgetClass, formWidget, +#endif + XmNlabelString, text, + NULL); + m_labelWidget = (WXWidget) labelWidget; +/* TODO + if (labelFont) + XtVaSetValues (labelWidget, + XmNfontList, labelFont->GetInternalFont (XtDisplay(formWidget)), + NULL); +*/ + + XmStringFree (text); + + Widget radioButtonWidget = XtVaCreateManagedWidget ("toggle", +#if wxUSE_GADGETS + xmToggleButtonGadgetClass, formWidget, +#else + xmToggleButtonWidgetClass, formWidget, +#endif + NULL); + XtAddCallback (radioButtonWidget, XmNvalueChangedCallback, (XtCallbackProc) wxRadioButtonCallback, + (XtCallbackProc) this); + + m_mainWidget = (WXWidget) radioButtonWidget; + +/* TODO + if (labelFont) + XtVaSetValues (radioButtonWidget, + XmNfontList, labelFont->GetInternalFont (XtDisplay(formWidget)), + NULL); +*/ + + if (labelWidget) + XtVaSetValues (labelWidget, + XmNtopAttachment, XmATTACH_FORM, + XmNleftAttachment, XmATTACH_FORM, + XmNbottomAttachment, XmATTACH_FORM, + XmNalignment, XmALIGNMENT_BEGINNING, + NULL); + XtVaSetValues (radioButtonWidget, + XmNleftOffset, 4, + XmNtopAttachment, XmATTACH_FORM, + XmNbottomAttachment, XmATTACH_FORM, + XmNleftAttachment, (Widget) m_labelWidget ? XmATTACH_WIDGET : XmATTACH_FORM, + XmNleftWidget, (Widget) m_labelWidget ? (Widget) m_labelWidget : formWidget, + NULL); + + XtManageChild (radioButtonWidget); + + SetCanAddEventHandler(TRUE); + AttachWidget (parent, m_mainWidget, m_formWidget, pos.x, pos.y, size.x, size.y); + + SetFont(* parent->GetFont()); + ChangeColour(m_mainWidget); + + return TRUE; } void wxRadioButton::SetValue(bool value) { - // TODO + m_inSetValue = TRUE; + XmToggleButtonSetState ((Widget) m_mainWidget, (Boolean) value, FALSE); + m_inSetValue = FALSE; } // Get single selection, for single choice list items bool wxRadioButton::GetValue() const { - // TODO - return FALSE; + return (XmToggleButtonGetState ((Widget) m_mainWidget) != 0); } void wxRadioButton::Command (wxCommandEvent & event) @@ -65,4 +154,19 @@ void wxRadioButton::Command (wxCommandEvent & event) ProcessCommand (event); } +void wxRadioButtonCallback (Widget w, XtPointer clientData, + XmToggleButtonCallbackStruct * cbs) +{ + if (!cbs->set) + return; + + wxRadioButton *item = (wxRadioButton *) clientData; + if (item->InSetValue()) + return; + + wxCommandEvent event (wxEVT_COMMAND_RADIOBUTTON_SELECTED, item->GetId()); + event.SetEventObject(item); + + item->ProcessCommand (event); +}