X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/2b5f62a0b2db198609b45dec622a018dae37008e..de9a407728e5f47ed416365da9c07798ad0b0b26:/src/motif/statbox.cpp?ds=sidebyside diff --git a/src/motif/statbox.cpp b/src/motif/statbox.cpp index 46f69f1189..76f381afc6 100644 --- a/src/motif/statbox.cpp +++ b/src/motif/statbox.cpp @@ -9,10 +9,13 @@ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#ifdef __GNUG__ +#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) #pragma implementation "statbox.h" #endif +// For compilers that support precompilation, includes "wx.h". +#include "wx/wxprec.h" + #ifdef __VMS #define XtDisplay XTDISPLAY #endif @@ -26,9 +29,7 @@ #pragma message disable nosimpint #endif #include -#include #include -#include #ifdef __VMS__ #pragma message enable nosimpint #endif @@ -41,6 +42,40 @@ BEGIN_EVENT_TABLE(wxStaticBox, wxControl) //EVT_ERASE_BACKGROUND(wxStaticBox::OnEraseBackground) END_EVENT_TABLE() +// ---------------------------------------------------------------------------- +// 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 @@ -58,41 +93,30 @@ bool wxStaticBox::Create(wxWindow *parent, wxWindowID id, long style, const wxString& name) { - m_backgroundColour = parent->GetBackgroundColour(); - m_foregroundColour = parent->GetForegroundColour(); - m_font = parent->GetFont(); - - SetName(name); - - if (parent) parent->AddChild(this); - - if ( id == -1 ) - m_windowId = (int)NewControlId(); - else - m_windowId = id; - - m_windowStyle = style; + if( !CreateControl( parent, id, pos, size, style, + wxDefaultValidator, name ) ) + return false; Widget parentWidget = (Widget) parent->GetClientWidget(); m_mainWidget = XtVaCreateManagedWidget ("staticboxframe", xmFrameWidgetClass, parentWidget, - XmNshadowType, XmSHADOW_IN, - //XmNmarginHeight, 0, - //XmNmarginWidth, 0, + // MBN: why override default? + // XmNshadowType, XmSHADOW_IN, NULL); bool hasLabel = (!label.IsNull() && !label.IsEmpty()) ; if (hasLabel) { - XmFontList fontList = (XmFontList) m_font.GetFontList(1.0, XtDisplay(parentWidget)); wxString label1(wxStripMenuCodes(label)); wxXmString text(label1); - m_labelWidget = (WXWidget) XtVaCreateManagedWidget (label1.c_str(), + Display* dpy = XtDisplay( parentWidget ); + + m_labelWidget = (WXWidget) XtVaCreateManagedWidget ("staticboxlabel", xmLabelWidgetClass, (Widget)m_mainWidget, - XmNfontList, fontList, + wxFont::GetFontTag(), m_font.GetFontTypeC(dpy), XmNlabelString, text(), -#if (XmVersion > 1200) +#if wxCHECK_MOTIF_VERSION( 2, 0 ) XmNframeChildType, XmFRAME_TITLE_CHILD, #else XmNchildType, XmFRAME_TITLE_CHILD, @@ -100,11 +124,10 @@ bool wxStaticBox::Create(wxWindow *parent, wxWindowID id, NULL); } - SetCanAddEventHandler(TRUE); AttachWidget (parent, m_mainWidget, NULL, pos.x, pos.y, size.x, size.y); ChangeBackgroundColour(); - return TRUE; + return true; } wxStaticBox::~wxStaticBox() @@ -116,52 +139,35 @@ wxStaticBox::~wxStaticBox() 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)); + wxStaticBoxBase::SetLabel( label ); - wxXmString text(label1); - XtVaSetValues ((Widget) m_labelWidget, - XmNlabelString, text(), - XmNlabelType, XmSTRING, - NULL); - } + 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; + *borderTop = shadow; } } - -void wxStaticBox::ChangeFont(bool keepOriginalSize) -{ - wxWindow::ChangeFont(keepOriginalSize); -} - -