X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/4bb6408c2631988fab9925014c6619358bf867de..8aa4edd248534c4c1879c93d363d1b7fb8e8c5c6:/src/motif/statbox.cpp diff --git a/src/motif/statbox.cpp b/src/motif/statbox.cpp index 9b46697f96..5d8bf67b59 100644 --- a/src/motif/statbox.cpp +++ b/src/motif/statbox.cpp @@ -14,6 +14,14 @@ #endif #include "wx/statbox.h" +#include "wx/utils.h" + +#include +#include +#include +#include + +#include #if !USE_SHARED_LIBRARY IMPLEMENT_DYNAMIC_CLASS(wxStaticBox, wxControl) @@ -28,6 +36,12 @@ END_EVENT_TABLE() * Static box */ +wxStaticBox::wxStaticBox() +{ + m_formWidget = (WXWidget) 0; + m_labelWidget = (WXWidget) 0; +} + bool wxStaticBox::Create(wxWindow *parent, wxWindowID id, const wxString& label, const wxPoint& pos, @@ -35,6 +49,12 @@ bool wxStaticBox::Create(wxWindow *parent, wxWindowID id, long style, const wxString& name) { + m_formWidget = (WXWidget) 0; + m_labelWidget = (WXWidget) 0; + m_backgroundColour = parent->GetBackgroundColour(); + m_foregroundColour = parent->GetForegroundColour(); + m_windowFont = parent->GetFont(); + SetName(name); if (parent) parent->AddChild(this); @@ -46,17 +66,147 @@ bool wxStaticBox::Create(wxWindow *parent, wxWindowID id, m_windowStyle = style; - // TODO: create static box - return FALSE; + bool hasLabel = (!label.IsNull() && !label.IsEmpty()) ; + + Widget parentWidget = (Widget) parent->GetClientWidget(); + + Widget formWidget = XtVaCreateManagedWidget ((char*) (const char*) name, + xmFormWidgetClass, parentWidget, + XmNmarginHeight, 0, + XmNmarginWidth, 0, + NULL); + + + if (hasLabel) + { + XmFontList fontList = (XmFontList) m_windowFont.GetFontList(1.0, XtDisplay(parentWidget)); + + wxString label1(wxStripMenuCodes(label)); + XmString text = XmStringCreateSimple ((char*) (const char*) label1); + m_labelWidget = (WXWidget) XtVaCreateManagedWidget ((char*) (const char*) label1, + xmLabelWidgetClass, formWidget, + XmNfontList, fontList, + XmNlabelString, text, + NULL); + XmStringFree (text); + } + + Widget frameWidget = XtVaCreateManagedWidget ("frame", + xmFrameWidgetClass, formWidget, + XmNshadowType, XmSHADOW_IN, +// XmNmarginHeight, 0, +// XmNmarginWidth, 0, + NULL); + + if (hasLabel) + XtVaSetValues ((Widget) m_labelWidget, + XmNtopAttachment, XmATTACH_FORM, + XmNleftAttachment, XmATTACH_FORM, + XmNrightAttachment, XmATTACH_FORM, + XmNalignment, XmALIGNMENT_BEGINNING, + NULL); + + XtVaSetValues (frameWidget, + XmNtopAttachment, hasLabel ? XmATTACH_WIDGET : XmATTACH_FORM, + XmNtopWidget, hasLabel ? (Widget) m_labelWidget : formWidget, + XmNbottomAttachment, XmATTACH_FORM, + XmNleftAttachment, XmATTACH_FORM, + XmNrightAttachment, XmATTACH_FORM, + NULL); + + m_mainWidget = (WXWidget) frameWidget; + m_formWidget = (WXWidget) formWidget; + + SetCanAddEventHandler(TRUE); + AttachWidget (parent, (WXWidget) frameWidget, (WXWidget) formWidget, pos.x, pos.y, size.x, size.y); + ChangeBackgroundColour(); + + return TRUE; +} + +wxStaticBox::~wxStaticBox() +{ + DetachWidget(m_formWidget); } void wxStaticBox::SetLabel(const wxString& label) { - // TODO + if (!m_labelWidget) + return; + + if (!label.IsNull()) + { + wxString label1(wxStripMenuCodes(label)); + + XmString text = XmStringCreateSimple ((char*) (const char*) label1); + XtVaSetValues ((Widget) m_labelWidget, + XmNlabelString, text, + XmNlabelType, XmSTRING, + NULL); + XmStringFree (text); + } +} + +wxString wxStaticBox::GetLabel() const +{ + if (!m_labelWidget) + return wxEmptyString; + + XmString text = 0; + char *s; + XtVaGetValues ((Widget) m_labelWidget, + XmNlabelString, &text, + NULL); + + if (!text) + return wxEmptyString; + + if (XmStringGetLtoR (text, XmSTRING_DEFAULT_CHARSET, &s)) + { + wxString str(s); + XtFree (s); + return str; + } + else + { + return wxEmptyString; + } } void wxStaticBox::SetSize(int x, int y, int width, int height, int sizeFlags) { - // TODO + wxControl::SetSize (x, y, width, height, sizeFlags); + + if (m_labelWidget) + { + Dimension xx, yy; + XtVaGetValues ((Widget) m_labelWidget, XmNwidth, &xx, XmNheight, &yy, NULL); + + if (width > -1) + XtVaSetValues ((Widget) m_mainWidget, XmNwidth, width, + NULL); + if (height > -1) + XtVaSetValues ((Widget) m_mainWidget, XmNheight, height - yy, + NULL); + } +} + +void wxStaticBox::ChangeFont(bool keepOriginalSize) +{ + wxWindow::ChangeFont(keepOriginalSize); +} + +void wxStaticBox::ChangeBackgroundColour() +{ + wxWindow::ChangeBackgroundColour(); + if (m_labelWidget) + DoChangeBackgroundColour(m_labelWidget, m_backgroundColour); +} + +void wxStaticBox::ChangeForegroundColour() +{ + wxWindow::ChangeForegroundColour(); + if (m_labelWidget) + DoChangeForegroundColour(m_labelWidget, m_foregroundColour); }