X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/b412f9be504e07559a98ae234f30bb1bd0b2aa1f..cc4d5638c66a409e421420ed7110917755a66788:/src/motif/statbox.cpp?ds=sidebyside diff --git a/src/motif/statbox.cpp b/src/motif/statbox.cpp index 5d8bf67b59..be5679b748 100644 --- a/src/motif/statbox.cpp +++ b/src/motif/statbox.cpp @@ -1,44 +1,78 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: statbox.cpp +// Name: src/motif/statbox.cpp // Purpose: wxStaticBox // Author: Julian Smart // Modified by: // Created: 17/09/98 -// RCS-ID: $Id$ // Copyright: (c) Julian Smart -// Licence: wxWindows licence +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#ifdef __GNUG__ -#pragma implementation "statbox.h" -#endif +// For compilers that support precompilation, includes "wx.h". +#include "wx/wxprec.h" #include "wx/statbox.h" -#include "wx/utils.h" +#ifndef WX_PRECOMP + #include "wx/utils.h" +#endif + +#ifdef __VMS__ +#pragma message disable nosimpint +#endif #include -#include #include -#include - -#include +#ifdef __VMS__ +#pragma message enable nosimpint +#endif -#if !USE_SHARED_LIBRARY -IMPLEMENT_DYNAMIC_CLASS(wxStaticBox, wxControl) +#include "wx/motif/private.h" BEGIN_EVENT_TABLE(wxStaticBox, wxControl) - EVT_ERASE_BACKGROUND(wxStaticBox::OnEraseBackground) +//EVT_ERASE_BACKGROUND(wxStaticBox::OnEraseBackground) END_EVENT_TABLE() -#endif +// ---------------------------------------------------------------------------- +// wxXmSizeKeeper +// ---------------------------------------------------------------------------- + +// helper class to reduce code duplication +class wxXmSizeKeeper +{ + Dimension m_x, m_y; + Widget m_widget; +public: + wxXmSizeKeeper( Widget w ) + : m_widget( w ) + { + XtVaGetValues( m_widget, + XmNwidth, &m_x, + XmNheight, &m_y, + NULL ); + } + + void Restore() + { + int x, y; + + XtVaGetValues( m_widget, + XmNwidth, &x, + XmNheight, &y, + NULL ); + if( x != m_x || y != m_y ) + XtVaSetValues( m_widget, + XmNwidth, m_x, + XmNheight, m_y, + NULL ); + } +}; /* * Static box */ - + wxStaticBox::wxStaticBox() { - m_formWidget = (WXWidget) 0; m_labelWidget = (WXWidget) 0; } @@ -49,164 +83,82 @@ bool wxStaticBox::Create(wxWindow *parent, wxWindowID id, long style, const wxString& name) { - m_formWidget = (WXWidget) 0; + if( !CreateControl( parent, id, pos, size, style, + wxDefaultValidator, name ) ) + return false; m_labelWidget = (WXWidget) 0; - m_backgroundColour = parent->GetBackgroundColour(); - m_foregroundColour = parent->GetForegroundColour(); - m_windowFont = parent->GetFont(); - - SetName(name); - - if (parent) parent->AddChild(this); - - if ( id == -1 ) - m_windowId = (int)NewControlId(); - else - m_windowId = id; - - m_windowStyle = style; - - bool hasLabel = (!label.IsNull() && !label.IsEmpty()) ; + PreCreation(); Widget parentWidget = (Widget) parent->GetClientWidget(); - Widget formWidget = XtVaCreateManagedWidget ((char*) (const char*) name, - xmFormWidgetClass, parentWidget, - XmNmarginHeight, 0, - XmNmarginWidth, 0, - NULL); + m_mainWidget = XtVaCreateManagedWidget ("staticboxframe", + xmFrameWidgetClass, parentWidget, + // MBN: why override default? + // XmNshadowType, XmSHADOW_IN, + NULL); - - if (hasLabel) + if (!label.empty()) { - 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); + wxString label1(GetLabelText(label)); + wxXmString text(label1); + Display* dpy = XtDisplay( parentWidget ); + + m_labelWidget = (WXWidget) XtVaCreateManagedWidget ("staticboxlabel", + xmLabelWidgetClass, (Widget)m_mainWidget, + wxFont::GetFontTag(), m_font.GetFontTypeC(dpy), + XmNlabelString, text(), +#if wxCHECK_MOTIF_VERSION( 2, 0 ) + XmNframeChildType, XmFRAME_TITLE_CHILD, +#else + XmNchildType, XmFRAME_TITLE_CHILD, +#endif + NULL); } - 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; + PostCreation(); + AttachWidget (parent, m_mainWidget, NULL, pos.x, pos.y, size.x, size.y); + + return true; } wxStaticBox::~wxStaticBox() { - DetachWidget(m_formWidget); + DetachWidget(m_mainWidget); + XtDestroyWidget((Widget) m_mainWidget); + + m_mainWidget = (WXWidget) 0; + m_labelWidget = (WXWidget) 0; } -void wxStaticBox::SetLabel(const wxString& label) +void wxStaticBox::SetLabel( const wxString& label ) { - if (!m_labelWidget) - return; + wxXmSizeKeeper sk( (Widget)GetMainWidget() ); - 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); - } + wxStaticBoxBase::SetLabel( label ); + + sk.Restore(); } -wxString wxStaticBox::GetLabel() const +void wxStaticBox::GetBordersForSizer(int *borderTop, int *borderOther) const { - if (!m_labelWidget) - return wxEmptyString; + Dimension shadow, border; - XmString text = 0; - char *s; - XtVaGetValues ((Widget) m_labelWidget, - XmNlabelString, &text, - NULL); + XtVaGetValues( (Widget) GetMainWidget(), + XmNshadowThickness, &shadow, + XmNborderWidth, &border, + NULL); - if (!text) - return wxEmptyString; + *borderOther = shadow + border; - if (XmStringGetLtoR (text, XmSTRING_DEFAULT_CHARSET, &s)) + if( GetLabelWidget() ) { - wxString str(s); - XtFree (s); - return str; + XtWidgetGeometry preferred; + XtQueryGeometry( (Widget) GetLabelWidget(), NULL, &preferred ); + + *borderTop = preferred.height; } else { - return wxEmptyString; - } -} - -void wxStaticBox::SetSize(int x, int y, int width, int height, int sizeFlags) -{ - 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); + *borderTop = shadow; } } - -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); -} -