From: Mattia Barbon Date: Sun, 2 Mar 2003 20:08:45 +0000 (+0000) Subject: Refactored wxStaticBox, and changed wxStaticBox and wxRadioBox border X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/483561c5684e0c21a0112dec59c9ca5c38718906 Refactored wxStaticBox, and changed wxStaticBox and wxRadioBox border style from sunken to the default Motif style. Added some convenience macros for checking Motif/Lesstif version. Fixed the bug that caused wxStaticBox size to change when label text was changed. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@19427 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/docs/changes.txt b/docs/changes.txt index 9160ed94f6..443e730a1c 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -96,7 +96,8 @@ wxMotif: with Motif 1.x compatibility - implemented wxToggleButton - made wxButton a bit smaller by default - +- wxRadioBox and wxStaticBox now use the default shadow (border) style + instead of wxUniv: - Controls in toolbars now supported. diff --git a/include/wx/motif/private.h b/include/wx/motif/private.h index da2bc7f308..b58c0ed7f7 100644 --- a/include/wx/motif/private.h +++ b/include/wx/motif/private.h @@ -20,6 +20,18 @@ // Put any private declarations here: native Motif types may be used because // this header is included after Xm/Xm.h +// ---------------------------------------------------------------------------- +// convenience macros +// ---------------------------------------------------------------------------- + +#define wxCHECK_MOTIF_VERSION( major, minor ) \ + ( XmVersion >= (major) * 1000 + (minor) ) + +#define wxCHECK_LESSTIF_VERSION( major, minor ) \ + ( LesstifVersion >= (major) * 1000 + (minor) ) + +#define wxCHECK_LESSTIF() ( defined(LesstifVersion) && LesstifVersion > 0 ) + // ---------------------------------------------------------------------------- // common callbacks // ---------------------------------------------------------------------------- diff --git a/include/wx/motif/statbox.h b/include/wx/motif/statbox.h index 38a5e89ebd..6325e267a3 100644 --- a/include/wx/motif/statbox.h +++ b/include/wx/motif/statbox.h @@ -16,12 +16,10 @@ #pragma interface "statbox.h" #endif -#include "wx/control.h" - WXDLLEXPORT_DATA(extern const char*) wxStaticBoxNameStr; // Group box -class WXDLLEXPORT wxStaticBox: public wxControl +class WXDLLEXPORT wxStaticBox: public wxStaticBoxBase { DECLARE_DYNAMIC_CLASS(wxStaticBox) @@ -36,6 +34,7 @@ public: { Create(parent, id, label, pos, size, style, name); } + ~wxStaticBox(); bool Create(wxWindow *parent, wxWindowID id, @@ -49,15 +48,12 @@ public: { return FALSE; } - - void SetLabel(const wxString& label); - wxString GetLabel() const; - - // Implementation - virtual void ChangeFont(bool keepOriginalSize = TRUE); - -protected: - // Motif-specific + + virtual WXWidget GetLabelWidget() const { return m_labelWidget; } + + virtual void SetLabel(const wxString& label); + +private: WXWidget m_labelWidget; private: diff --git a/src/motif/radiobox.cpp b/src/motif/radiobox.cpp index 9076292ca0..d6f4078216 100644 --- a/src/motif/radiobox.cpp +++ b/src/motif/radiobox.cpp @@ -30,7 +30,6 @@ #include #include #include -#include #include #ifdef __VMS__ #pragma message enable nosimpint @@ -92,7 +91,6 @@ bool wxRadioBox::Create(wxWindow *parent, wxWindowID id, const wxString& title, m_mainWidget = XtVaCreateWidget ("radioboxframe", xmFrameWidgetClass, parentWidget, - XmNshadowType, XmSHADOW_IN, XmNresizeHeight, True, XmNresizeWidth, True, NULL); diff --git a/src/motif/statbox.cpp b/src/motif/statbox.cpp index 46f69f1189..c7c8dd099a 100644 --- a/src/motif/statbox.cpp +++ b/src/motif/statbox.cpp @@ -26,9 +26,7 @@ #pragma message disable nosimpint #endif #include -#include #include -#include #ifdef __VMS__ #pragma message enable nosimpint #endif @@ -41,6 +39,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 +90,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)); + XmFontList fontList = (XmFontList) m_font.GetFontList(1.0, XtDisplay( parentWidget ) ); wxString label1(wxStripMenuCodes(label)); wxXmString text(label1); - m_labelWidget = (WXWidget) XtVaCreateManagedWidget (label1.c_str(), + + m_labelWidget = (WXWidget) XtVaCreateManagedWidget ("staticboxlabel", xmLabelWidgetClass, (Widget)m_mainWidget, XmNfontList, fontList, XmNlabelString, text(), -#if (XmVersion > 1200) +#if wxCHECK_MOTIF_VERSION( 2, 0 ) XmNframeChildType, XmFRAME_TITLE_CHILD, #else XmNchildType, XmFRAME_TITLE_CHILD, @@ -116,52 +137,11 @@ wxStaticBox::~wxStaticBox() m_labelWidget = (WXWidget) 0; } -void wxStaticBox::SetLabel(const wxString& label) -{ - if (!m_labelWidget) - return; - - if (!label.IsNull()) - { - wxString label1(wxStripMenuCodes(label)); - - wxXmString text(label1); - XtVaSetValues ((Widget) m_labelWidget, - XmNlabelString, text(), - XmNlabelType, XmSTRING, - NULL); - } -} - -wxString wxStaticBox::GetLabel() const +void wxStaticBox::SetLabel( const wxString& label ) { - if (!m_labelWidget) - return wxEmptyString; - - XmString text = 0; - char *s; - XtVaGetValues ((Widget) m_labelWidget, - XmNlabelString, &text, - NULL); + wxXmSizeKeeper sk( (Widget)GetMainWidget() ); - if (!text) - return wxEmptyString; + wxStaticBoxBase::SetLabel( label ); - if (XmStringGetLtoR (text, XmSTRING_DEFAULT_CHARSET, &s)) - { - wxString str(s); - XtFree (s); - return str; - } - else - { - return wxEmptyString; - } -} - -void wxStaticBox::ChangeFont(bool keepOriginalSize) -{ - wxWindow::ChangeFont(keepOriginalSize); + sk.Restore(); } - -