X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/0d57be459406c2830f6abc9d99ae99166c6d133b..031bc97f4629f95d445f9716a9d4d61665a19dc9:/src/motif/radiobox.cpp diff --git a/src/motif/radiobox.cpp b/src/motif/radiobox.cpp index 152e1d3888..7fdab898f2 100644 --- a/src/motif/radiobox.cpp +++ b/src/motif/radiobox.cpp @@ -22,6 +22,7 @@ #include #include #include +#include #include @@ -41,6 +42,7 @@ wxRadioBox::wxRadioBox() m_majorDim = 0 ; m_formWidget = (WXWidget) 0; + m_frameWidget = (WXWidget) 0; m_labelWidget = (WXWidget) 0; m_radioButtons = (WXWidget*) NULL; m_radioButtonLabels = (wxString*) NULL; @@ -54,11 +56,14 @@ bool wxRadioBox::Create(wxWindow *parent, wxWindowID id, const wxString& title, { m_selectedButton = -1; m_noItems = n; + m_formWidget = (WXWidget) 0; + m_frameWidget = (WXWidget) 0; m_labelWidget = (WXWidget) 0; m_radioButtons = (WXWidget*) NULL; m_radioButtonLabels = (wxString*) NULL; m_backgroundColour = parent->GetBackgroundColour(); m_foregroundColour = parent->GetForegroundColour(); + m_windowFont = parent->GetFont(); SetName(name); SetValidator(val); @@ -93,6 +98,7 @@ bool wxRadioBox::Create(wxWindow *parent, wxWindowID id, const wxString& title, m_formWidget = (WXWidget) formWidget; + XmFontList fontList = (XmFontList) m_windowFont.GetFontList(1.0, XtDisplay(parentWidget)); if (label1 != "") { text = XmStringCreateSimple ((char*) (const char*) label1); @@ -104,19 +110,22 @@ bool wxRadioBox::Create(wxWindow *parent, wxWindowID id, const wxString& title, #else xmLabelWidgetClass, formWidget, #endif + XmNfontList, fontList, XmNlabelString, text, NULL); -/* TODO: change label font - if (labelFont) - XtVaSetValues (labelWidget, - XmNfontList, labelFont->GetInternalFont (XtDisplay(formWidget)), - NULL); -*/ - XmStringFree (text); } + Widget frameWidget = XtVaCreateManagedWidget ("frame", + xmFrameWidgetClass, formWidget, + XmNshadowType, XmSHADOW_IN, +// XmNmarginHeight, 0, +// XmNmarginWidth, 0, + NULL); + + m_frameWidget = (WXWidget) frameWidget; + Arg args[3]; majorDim = (n + majorDim - 1) / majorDim; @@ -125,7 +134,7 @@ bool wxRadioBox::Create(wxWindow *parent, wxWindowID id, const wxString& title, XmHORIZONTAL : XmVERTICAL)); XtSetArg (args[1], XmNnumColumns, majorDim); - Widget radioBoxWidget = XmCreateRadioBox (formWidget, "radioBoxWidget", args, 2); + Widget radioBoxWidget = XmCreateRadioBox (frameWidget, "radioBoxWidget", args, 2); m_mainWidget = (WXWidget) radioBoxWidget; @@ -141,6 +150,7 @@ bool wxRadioBox::Create(wxWindow *parent, wxWindowID id, const wxString& title, XmNtopWidget, m_labelWidget ? (Widget) m_labelWidget : formWidget, XmNbottomAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, + XmNrightAttachment, XmATTACH_FORM, NULL); // if (style & wxFLAT) @@ -159,25 +169,23 @@ bool wxRadioBox::Create(wxWindow *parent, wxWindowID id, const wxString& title, #else xmToggleButtonWidgetClass, radioBoxWidget, #endif + XmNfontList, fontList, NULL); XtAddCallback ((Widget) m_radioButtons[i], XmNvalueChangedCallback, (XtCallbackProc) wxRadioBoxCallback, (XtCallbackProc) this); -/* TODO: set font - if (buttonFont) - XtVaSetValues ((Widget) m_radioButtons[i], - XmNfontList, buttonFont->GetInternalFont (XtDisplay(formWidget)), - NULL); -*/ } SetSelection (0); + m_windowFont = parent->GetFont(); + ChangeFont(FALSE); + + // XtManageChild((Widget) m_formWidget); XtManageChild (radioBoxWidget); SetCanAddEventHandler(TRUE); AttachWidget (parent, m_mainWidget, m_formWidget, pos.x, pos.y, size.x, size.y); - SetFont(* parent->GetFont()); ChangeBackgroundColour(); return TRUE; @@ -188,6 +196,18 @@ wxRadioBox::~wxRadioBox() { delete[] m_radioButtonLabels; delete[] m_radioButtons; + + DetachWidget(m_formWidget); + DetachWidget(m_mainWidget); + + if (m_labelWidget) + XtDestroyWidget((Widget) m_labelWidget); + XtDestroyWidget((Widget) m_mainWidget); + XtDestroyWidget((Widget) m_formWidget); + + m_mainWidget = (WXWidget) 0; + m_formWidget = (WXWidget) 0; + m_labelWidget = (WXWidget) 0; } wxString wxRadioBox::GetLabel(int item) const @@ -277,7 +297,7 @@ wxString wxRadioBox::GetString(int n) const return m_radioButtonLabels[n]; } -void wxRadioBox::SetSize(int x, int y, int width, int height, int sizeFlags) +void wxRadioBox::DoSetSize(int x, int y, int width, int height, int sizeFlags) { bool managed = XtIsManaged((Widget) m_formWidget); @@ -334,6 +354,12 @@ void wxRadioBox::Enable(bool enable) XtSetSensitive ((Widget) m_radioButtons[i], (Boolean) enable); } +bool wxRadioBox::Show(bool show) +{ + // TODO: show/hide all children + return wxControl::Show(show); +} + // Show a specific button void wxRadioBox::Show(int n, bool show) { @@ -391,19 +417,56 @@ void wxRadioBox::Command (wxCommandEvent & event) ProcessCommand (event); } -void wxRadioBox::ChangeFont() +void wxRadioBox::ChangeFont(bool keepOriginalSize) { - // TODO + wxWindow::ChangeFont(keepOriginalSize); + + XmFontList fontList = (XmFontList) m_windowFont.GetFontList(1.0, XtDisplay((Widget) GetTopWidget())); + + int i; + for (i = 0; i < m_noItems; i++) + { + WXWidget radioButton = m_radioButtons[i]; + + XtVaSetValues ((Widget) radioButton, + XmNfontList, fontList, + XmNtopAttachment, XmATTACH_FORM, + NULL); + } } void wxRadioBox::ChangeBackgroundColour() { - // TODO + wxWindow::ChangeBackgroundColour(); + + DoChangeBackgroundColour((Widget) m_frameWidget, m_backgroundColour); + + int selectPixel = wxBLACK->AllocColour(wxGetDisplay()); + + int i; + for (i = 0; i < m_noItems; i++) + { + WXWidget radioButton = m_radioButtons[i]; + + DoChangeBackgroundColour(radioButton, m_backgroundColour, TRUE); + + XtVaSetValues ((Widget) radioButton, + XmNselectColor, selectPixel, + NULL); + } } void wxRadioBox::ChangeForegroundColour() { - // TODO + wxWindow::ChangeForegroundColour(); + + int i; + for (i = 0; i < m_noItems; i++) + { + WXWidget radioButton = m_radioButtons[i]; + + DoChangeForegroundColour(radioButton, m_foregroundColour); + } } void wxRadioBoxCallback (Widget w, XtPointer clientData,