Motif additions

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@868 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Julian Smart
1998-10-18 22:31:48 +00:00
parent 02847e5984
commit a4294b7832
61 changed files with 1919 additions and 650 deletions

View File

@@ -14,11 +14,30 @@
#endif
#include "wx/radiobut.h"
#include "wx/utils.h"
#include <Xm/Label.h>
#include <Xm/LabelG.h>
#include <Xm/ToggleB.h>
#include <Xm/ToggleBG.h>
#include <Xm/RowColumn.h>
#include <Xm/Form.h>
#include <wx/motif/private.h>
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);
}