From fe161a2685012cf90bb5bfe95f2260aee71d8ad7 Mon Sep 17 00:00:00 2001 From: Robin Dunn Date: Sat, 19 Jun 2004 01:35:10 +0000 Subject: [PATCH 1/1] Controls will readjust their size and minsize when SetLabel or SetFont are called. Fixed up wxStaticText to blend the wxST_NO_AUTOSIZE with this new functionality. Made SetBestSize public under the SetBestFittingSize name. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@27890 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- docs/latex/wx/control.tex | 16 ++++++++++++++++ docs/latex/wx/window.tex | 14 ++++++++++++++ include/wx/control.h | 15 ++++++++++++++- include/wx/gtk/control.h | 4 +++- include/wx/gtk/stattext.h | 3 ++- include/wx/gtk1/control.h | 4 +++- include/wx/gtk1/stattext.h | 3 ++- include/wx/mac/carbon/stattext.h | 1 - include/wx/mac/classic/stattext.h | 1 - include/wx/msw/checkbox.h | 2 -- include/wx/msw/stattext.h | 4 ---- include/wx/msw/tglbtn.h | 1 - include/wx/stattext.h | 2 ++ include/wx/window.h | 16 +++++++--------- src/common/ctrlcmn.cpp | 25 +++++++++++++++++++++++++ src/common/wincmn.cpp | 2 +- src/gtk/bmpbuttn.cpp | 1 + src/gtk/button.cpp | 2 ++ src/gtk/checkbox.cpp | 2 ++ src/gtk/control.cpp | 11 +++++++++++ src/gtk/radiobox.cpp | 2 ++ src/gtk/radiobut.cpp | 2 ++ src/gtk/statbox.cpp | 1 + src/gtk/stattext.cpp | 21 ++------------------- src/gtk/tglbtn.cpp | 2 ++ src/gtk/window.cpp | 4 ++-- src/gtk1/bmpbuttn.cpp | 1 + src/gtk1/button.cpp | 2 ++ src/gtk1/checkbox.cpp | 2 ++ src/gtk1/control.cpp | 11 +++++++++++ src/gtk1/radiobox.cpp | 2 ++ src/gtk1/radiobut.cpp | 2 ++ src/gtk1/statbox.cpp | 1 + src/gtk1/stattext.cpp | 21 ++------------------- src/gtk1/tglbtn.cpp | 2 ++ src/gtk1/window.cpp | 4 ++-- src/mac/carbon/stattext.cpp | 22 ++-------------------- src/mac/classic/stattext.cpp | 28 ++++------------------------ src/msw/checkbox.cpp | 4 ---- src/msw/stattext.cpp | 28 ---------------------------- src/msw/tglbtn.cpp | 5 ----- wxPython/src/_control.i | 14 ++++++++++++++ wxPython/src/_window.i | 20 +++++++++++++------- 43 files changed, 176 insertions(+), 154 deletions(-) diff --git a/docs/latex/wx/control.tex b/docs/latex/wx/control.tex index 75c4e5f975..52ecc060f2 100644 --- a/docs/latex/wx/control.tex +++ b/docs/latex/wx/control.tex @@ -29,6 +29,14 @@ displays one or more item of data. Simulates the effect of the user issuing a command to the item. See \helpref{wxCommandEvent}{wxcommandevent}. +\membersection{wxControl::GetAdjustMinSizeFlag}\label{wxcontrolgetadjustminsizeflag} + +\func{bool}{GetAdjustMinSizeFlag}{} + +Returns whether the minsize should be adjusted for this control when +SetLabel or SetFont are called. + + \membersection{wxControl::GetLabel}\label{wxcontrolgetlabel} \func{wxString\&}{GetLabel}{\void} @@ -36,6 +44,14 @@ Simulates the effect of the user issuing a command to the item. See \helpref{wxC Returns the control's text. +\membersection{wxControl::SetAdjustMinSizeFlag}\label{wxcontrolsetadjustminsizeflag} + +\func{void}{SetAdjustMinSizeFlag}{\param{bool }{adjust}} + +By default controls will readjust their size and minsize when +SetLabel or SetFont are called. This flag will allow you to +control this behavior. + \membersection{wxControl::SetLabel}\label{wxcontrolsetlabel} \func{void}{SetLabel}{\param{const wxString\& }{label}} diff --git a/docs/latex/wx/window.tex b/docs/latex/wx/window.tex index d3e214b8cc..4386be9e9b 100644 --- a/docs/latex/wx/window.tex +++ b/docs/latex/wx/window.tex @@ -2390,6 +2390,20 @@ applications on the system. \helpref{wxWindow::Refresh}{wxwindowrefresh},\rtfsp \helpref{wxEraseEvent}{wxeraseevent} +\membersection{wxWindow::SetBestFittingSize}\label{wxwindowsetbestfittingsize} + +\func{void}{SetBestFittingSize}{\param{const wxSize& }{size = wxDefaultSize}} + +A {\it smart} SetSize that will fill in default size components with the +window's {\it best} size values. Also set's the minsize for use with +sizers. + +\wxheading{See also} + +\helpref{wxWindow::SetSize}{wxwindowsetsize} +\helpref{wxWindow::GetBestSize}{wxwindowgetbestsize} +\helpref{wxWindow::SetSizeHints}{wxwindowsetsizehints} + \membersection{wxWindow::SetCaret}\label{wxwindowsetcaret} diff --git a/include/wx/control.h b/include/wx/control.h index 6552443ecd..5fd882ce0c 100644 --- a/include/wx/control.h +++ b/include/wx/control.h @@ -32,10 +32,11 @@ WXDLLEXPORT_DATA(extern const wxChar*) wxControlNameStr; // wxControl is the base class for all controls // ---------------------------------------------------------------------------- + class WXDLLEXPORT wxControlBase : public wxWindow { public: - wxControlBase() { } + wxControlBase() { Init(); } virtual ~wxControlBase(); @@ -63,7 +64,16 @@ public: // if the button was clicked) virtual void Command(wxCommandEvent &event); + + virtual void SetLabel(const wxString& label); + virtual bool SetFont(const wxFont& font); + virtual bool GetAdjustMinSizeFlag() const { return m_adjustMinSize; } + void SetAdjustMinSizeFlag(bool adjust) { m_adjustMinSize = adjust; } + + protected: + void Init(); + // creates the control (calls wxWindowBase::CreateBase inside) and adds it // to the list of parents children bool CreateControl(wxWindowBase *parent, @@ -88,6 +98,9 @@ protected: SetBestSize(size); } + // should minsize and size be adjusted when font or label change? + bool m_adjustMinSize; + DECLARE_NO_COPY_CLASS(wxControlBase) }; diff --git a/include/wx/gtk/control.h b/include/wx/gtk/control.h index 553f94f7c1..c7954c415e 100644 --- a/include/wx/gtk/control.h +++ b/include/wx/gtk/control.h @@ -52,7 +52,7 @@ public: // char (the one immediately after '&') into m_chAccel (TODO not yet) virtual void SetLabel( const wxString &label ); virtual wxString GetLabel() const; - + virtual wxVisualAttributes GetDefaultAttributes() const; protected: @@ -63,6 +63,7 @@ protected: virtual wxSize DoGetBestSize() const; void PostCreation(const wxSize& size); + void PostSetLabel(); #ifdef __WXGTK20__ wxString PrepareLabelMnemonics( const wxString &label ) const; @@ -93,6 +94,7 @@ protected: wxString m_label; char m_chAccel; // enabled to avoid breaking binary compatibility later on + bool m_createComplete; private: DECLARE_DYNAMIC_CLASS(wxControl) diff --git a/include/wx/gtk/stattext.h b/include/wx/gtk/stattext.h index 6686c96982..dd4d499883 100644 --- a/include/wx/gtk/stattext.h +++ b/include/wx/gtk/stattext.h @@ -57,7 +57,8 @@ public: wxString GetLabel() const; void SetLabel( const wxString &label ); - bool SetFont( const wxFont &font ); + bool GetAdjustMinSizeFlag() const { return !HasFlag(wxST_NO_AUTORESIZE); } + bool SetForegroundColour( const wxColour& colour ); static wxVisualAttributes diff --git a/include/wx/gtk1/control.h b/include/wx/gtk1/control.h index 553f94f7c1..c7954c415e 100644 --- a/include/wx/gtk1/control.h +++ b/include/wx/gtk1/control.h @@ -52,7 +52,7 @@ public: // char (the one immediately after '&') into m_chAccel (TODO not yet) virtual void SetLabel( const wxString &label ); virtual wxString GetLabel() const; - + virtual wxVisualAttributes GetDefaultAttributes() const; protected: @@ -63,6 +63,7 @@ protected: virtual wxSize DoGetBestSize() const; void PostCreation(const wxSize& size); + void PostSetLabel(); #ifdef __WXGTK20__ wxString PrepareLabelMnemonics( const wxString &label ) const; @@ -93,6 +94,7 @@ protected: wxString m_label; char m_chAccel; // enabled to avoid breaking binary compatibility later on + bool m_createComplete; private: DECLARE_DYNAMIC_CLASS(wxControl) diff --git a/include/wx/gtk1/stattext.h b/include/wx/gtk1/stattext.h index 6686c96982..dd4d499883 100644 --- a/include/wx/gtk1/stattext.h +++ b/include/wx/gtk1/stattext.h @@ -57,7 +57,8 @@ public: wxString GetLabel() const; void SetLabel( const wxString &label ); - bool SetFont( const wxFont &font ); + bool GetAdjustMinSizeFlag() const { return !HasFlag(wxST_NO_AUTORESIZE); } + bool SetForegroundColour( const wxColour& colour ); static wxVisualAttributes diff --git a/include/wx/mac/carbon/stattext.h b/include/wx/mac/carbon/stattext.h index c5f41c02c4..95c32a82b9 100644 --- a/include/wx/mac/carbon/stattext.h +++ b/include/wx/mac/carbon/stattext.h @@ -40,7 +40,6 @@ public: // accessors void SetLabel( const wxString &str ) ; - bool SetFont( const wxFont &font ); protected : diff --git a/include/wx/mac/classic/stattext.h b/include/wx/mac/classic/stattext.h index 17ecf98ad0..15eae66671 100644 --- a/include/wx/mac/classic/stattext.h +++ b/include/wx/mac/classic/stattext.h @@ -41,7 +41,6 @@ class WXDLLEXPORT wxStaticText: public wxStaticTextBase // accessors void SetLabel( const wxString &str ) ; - bool SetFont( const wxFont &font ); // operations virtual void Command(wxCommandEvent& WXUNUSED(event)) {}; diff --git a/include/wx/msw/checkbox.h b/include/wx/msw/checkbox.h index 64dedbf487..da3df7f80a 100644 --- a/include/wx/msw/checkbox.h +++ b/include/wx/msw/checkbox.h @@ -45,8 +45,6 @@ public: virtual void SetValue(bool value); virtual bool GetValue() const; - virtual void SetLabel(const wxString& label); - virtual bool MSWCommand(WXUINT param, WXWORD id); virtual void Command(wxCommandEvent& event); diff --git a/include/wx/msw/stattext.h b/include/wx/msw/stattext.h index 0ceef4c977..c42f65552c 100644 --- a/include/wx/msw/stattext.h +++ b/include/wx/msw/stattext.h @@ -40,10 +40,6 @@ public: long style = 0, const wxString& name = wxStaticTextNameStr); - // override some methods to resize the window properly - virtual void SetLabel(const wxString& label); - virtual bool SetFont( const wxFont &font ); - protected: // implement/override some base class virtuals virtual wxBorder GetDefaultBorder() const; diff --git a/include/wx/msw/tglbtn.h b/include/wx/msw/tglbtn.h index 1136702397..b6ab08a2b8 100644 --- a/include/wx/msw/tglbtn.h +++ b/include/wx/msw/tglbtn.h @@ -45,7 +45,6 @@ public: virtual bool GetValue() const ; virtual bool MSWCommand(WXUINT param, WXWORD id); - virtual void SetLabel(const wxString& label); virtual void Command(wxCommandEvent& event); protected: diff --git a/include/wx/stattext.h b/include/wx/stattext.h index 8590052f74..c210383e5c 100644 --- a/include/wx/stattext.h +++ b/include/wx/stattext.h @@ -17,6 +17,8 @@ public: virtual void ApplyParentThemeBackground(const wxColour& bg) { SetBackgroundColour(bg); } + bool GetAdjustMinSizeFlag() const { return !HasFlag(wxST_NO_AUTORESIZE); } + private: DECLARE_NO_COPY_CLASS(wxStaticTextBase) }; diff --git a/include/wx/window.h b/include/wx/window.h index 87dc4cc691..40ad7b237c 100644 --- a/include/wx/window.h +++ b/include/wx/window.h @@ -230,6 +230,9 @@ public: void Move(const wxPoint& pt, int flags = wxSIZE_USE_EXISTING) { Move(pt.x, pt.y, flags); } + // A 'Smart' SetSize that will fill in default size values with 'best' size + void SetBestFittingSize(const wxSize& size=wxDefaultSize); + // Z-order virtual void Raise() = 0; virtual void Lower() = 0; @@ -1136,15 +1139,10 @@ protected: static int WidthDefault(int w) { return w == -1 ? 20 : w; } static int HeightDefault(int h) { return h == -1 ? 20 : h; } - // set the best size for the control if the default size was given: - // replaces the fields of size == -1 with the best values for them and - // calls SetSize() if needed - // - // This function is rather unfortunately named.. it's really just a - // smarter SetSize / convenience function for expanding wxDefaultSize. - // Note that it does not influence the value returned by GetBestSize - // at all. - void SetBestSize(const wxSize& size); + // keep the old name for compatibility, at least until all the internal + // usages of it are changed to SetBestFittingSize + void SetBestSize(const wxSize& size) { SetBestFittingSize(size); } + // set the initial window size if none is given (i.e. at least one of the // components of the size passed to ctor/Create() is -1) diff --git a/src/common/ctrlcmn.cpp b/src/common/ctrlcmn.cpp index 242efdca1f..eab0f889f1 100644 --- a/src/common/ctrlcmn.cpp +++ b/src/common/ctrlcmn.cpp @@ -68,6 +68,13 @@ bool wxControlBase::Create(wxWindow *parent, return ret; } + +void wxControlBase::Init() +{ + m_adjustMinSize = true; +} + + bool wxControlBase::CreateControl(wxWindowBase *parent, wxWindowID id, const wxPoint& pos, @@ -116,6 +123,24 @@ void wxControlBase::InitCommandEvent(wxCommandEvent& event) const } } +void wxControlBase::SetLabel(const wxString& label) +{ + wxWindow::SetLabel(label); + if (GetAdjustMinSizeFlag()) + SetBestSize(wxDefaultSize); +} + + +bool wxControlBase::SetFont(const wxFont& font) +{ + bool ret = wxWindow::SetFont(font); + + if (GetAdjustMinSizeFlag()) + SetBestSize(wxDefaultSize); + + return ret; +} + // ---------------------------------------------------------------------------- // wxStaticBitmap // ---------------------------------------------------------------------------- diff --git a/src/common/wincmn.cpp b/src/common/wincmn.cpp index e7d8c7768a..e6dd55946e 100644 --- a/src/common/wincmn.cpp +++ b/src/common/wincmn.cpp @@ -620,7 +620,7 @@ wxSize wxWindowBase::DoGetBestSize() const } } -void wxWindowBase::SetBestSize(const wxSize& size) +void wxWindowBase::SetBestFittingSize(const wxSize& size) { // If the given size is incomplete then merge with the best size. wxSize sizeBest; diff --git a/src/gtk/bmpbuttn.cpp b/src/gtk/bmpbuttn.cpp index db11765013..8be33e83f7 100644 --- a/src/gtk/bmpbuttn.cpp +++ b/src/gtk/bmpbuttn.cpp @@ -184,6 +184,7 @@ void wxBitmapButton::SetLabel( const wxString &label ) wxCHECK_RET( m_widget != NULL, wxT("invalid button") ); wxControl::SetLabel( label ); + PostSetLabel(); } wxString wxBitmapButton::GetLabel() const diff --git a/src/gtk/button.cpp b/src/gtk/button.cpp index d64273b780..330b5d0e12 100644 --- a/src/gtk/button.cpp +++ b/src/gtk/button.cpp @@ -175,6 +175,8 @@ void wxButton::SetLabel( const wxString &label ) #else gtk_label_set( GTK_LABEL( BUTTON_CHILD(m_widget) ), wxGTK_CONV( GetLabel() ) ); #endif + + PostSetLabel(); } bool wxButton::Enable( bool enable ) diff --git a/src/gtk/checkbox.cpp b/src/gtk/checkbox.cpp index 1c64e26ba1..33f8a565b7 100644 --- a/src/gtk/checkbox.cpp +++ b/src/gtk/checkbox.cpp @@ -158,6 +158,8 @@ void wxCheckBox::SetLabel( const wxString& label ) #else gtk_label_set( GTK_LABEL(m_widgetLabel), wxGTK_CONV( GetLabel() ) ); #endif + + PostSetLabel(); } bool wxCheckBox::Enable( bool enable ) diff --git a/src/gtk/control.cpp b/src/gtk/control.cpp index 053f18f1ea..ed8b2147e8 100644 --- a/src/gtk/control.cpp +++ b/src/gtk/control.cpp @@ -33,6 +33,7 @@ IMPLEMENT_DYNAMIC_CLASS(wxControl, wxWindow) wxControl::wxControl() { m_needParent = TRUE; + m_createComplete = false; } bool wxControl::Create( wxWindow *parent, @@ -43,6 +44,7 @@ bool wxControl::Create( wxWindow *parent, const wxValidator& validator, const wxString &name ) { + m_createComplete = false; bool ret = wxWindow::Create(parent, id, pos, size, style, name); #if wxUSE_VALIDATORS @@ -68,6 +70,14 @@ void wxControl::SetLabel( const wxString &label ) } } +void wxControl::PostSetLabel() +{ + // make sure the widget has been created, and that PostCreate has already + // been called + if (m_widget && m_createComplete && GetAdjustMinSizeFlag()) + SetBestSize(wxDefaultSize); +} + wxString wxControl::GetLabel() const { return m_label; @@ -103,6 +113,7 @@ void wxControl::PostCreation(const wxSize& size) InheritAttributes(); ApplyWidgetStyle(); SetInitialBestSize(size); + m_createComplete = true; } diff --git a/src/gtk/radiobox.cpp b/src/gtk/radiobox.cpp index ea1eee5230..f0af2b64a5 100644 --- a/src/gtk/radiobox.cpp +++ b/src/gtk/radiobox.cpp @@ -540,6 +540,8 @@ void wxRadioBox::SetLabel( const wxString& label ) wxControl::SetLabel( label ); gtk_frame_set_label( GTK_FRAME(m_widget), wxGTK_CONV( wxControl::GetLabel() ) ); + + PostSetLabel(); } void wxRadioBox::SetString( int item, const wxString& label ) diff --git a/src/gtk/radiobut.cpp b/src/gtk/radiobut.cpp index 2c3e1c0d10..837cd33058 100644 --- a/src/gtk/radiobut.cpp +++ b/src/gtk/radiobut.cpp @@ -145,6 +145,8 @@ void wxRadioButton::SetLabel( const wxString& label ) #else gtk_label_set( g_label, wxGTK_CONV( GetLabel() ) ); #endif + + PostSetLabel(); } void wxRadioButton::SetValue( bool val ) diff --git a/src/gtk/statbox.cpp b/src/gtk/statbox.cpp index 7c3eb9678e..9d489265d8 100644 --- a/src/gtk/statbox.cpp +++ b/src/gtk/statbox.cpp @@ -89,6 +89,7 @@ void wxStaticBox::SetLabel( const wxString &label ) gtk_frame_set_label( GTK_FRAME( m_widget ), m_label.empty() ? (char *)NULL : (const char*) wxGTK_CONV( m_label ) ); + PostSetLabel(); } // static diff --git a/src/gtk/stattext.cpp b/src/gtk/stattext.cpp index d659e8cc16..f3c40c1226 100644 --- a/src/gtk/stattext.cpp +++ b/src/gtk/stattext.cpp @@ -146,27 +146,10 @@ void wxStaticText::SetLabel( const wxString &label ) #else gtk_label_set( GTK_LABEL(m_widget), wxGTK_CONV( m_label ) ); #endif - - // adjust the label size to the new label unless disabled - if (!HasFlag(wxST_NO_AUTORESIZE)) - { - SetSize( GetBestSize() ); - SetSizeHints(GetSize()); - } + + PostSetLabel(); } -bool wxStaticText::SetFont( const wxFont &font ) -{ - bool ret = wxControl::SetFont(font); - - // adjust the label size to the new label unless disabled - if (!HasFlag(wxST_NO_AUTORESIZE)) - { - SetSize( GetBestSize() ); - SetSizeHints(GetSize()); - } - return ret; -} wxSize wxStaticText::DoGetBestSize() const { diff --git a/src/gtk/tglbtn.cpp b/src/gtk/tglbtn.cpp index 8ac7ec5a3c..7bccf53080 100644 --- a/src/gtk/tglbtn.cpp +++ b/src/gtk/tglbtn.cpp @@ -287,6 +287,8 @@ void wxToggleButton::SetLabel(const wxString& label) wxControl::SetLabel(label); gtk_label_set(GTK_LABEL(BUTTON_CHILD(m_widget)), wxGTK_CONV( GetLabel() ) ); + + PostSetLabel(); } bool wxToggleButton::Enable(bool enable /*=TRUE*/) diff --git a/src/gtk/window.cpp b/src/gtk/window.cpp index 045dbfc9fa..8e5f4bdd3b 100644 --- a/src/gtk/window.cpp +++ b/src/gtk/window.cpp @@ -4043,7 +4043,7 @@ GtkRcStyle *wxWindowGTK::CreateWidgetStyle(bool forceStyle) #endif } - if ( m_hasFgCol ) + if ( m_foregroundColour.Ok() ) { GdkColor *fg = m_foregroundColour.GetColor(); @@ -4057,7 +4057,7 @@ GtkRcStyle *wxWindowGTK::CreateWidgetStyle(bool forceStyle) style->color_flags[GTK_STATE_ACTIVE] = GTK_RC_FG; } - if ( m_hasBgCol ) + if ( m_backgroundColour.Ok() ) { GdkColor *bg = m_backgroundColour.GetColor(); diff --git a/src/gtk1/bmpbuttn.cpp b/src/gtk1/bmpbuttn.cpp index db11765013..8be33e83f7 100644 --- a/src/gtk1/bmpbuttn.cpp +++ b/src/gtk1/bmpbuttn.cpp @@ -184,6 +184,7 @@ void wxBitmapButton::SetLabel( const wxString &label ) wxCHECK_RET( m_widget != NULL, wxT("invalid button") ); wxControl::SetLabel( label ); + PostSetLabel(); } wxString wxBitmapButton::GetLabel() const diff --git a/src/gtk1/button.cpp b/src/gtk1/button.cpp index d64273b780..330b5d0e12 100644 --- a/src/gtk1/button.cpp +++ b/src/gtk1/button.cpp @@ -175,6 +175,8 @@ void wxButton::SetLabel( const wxString &label ) #else gtk_label_set( GTK_LABEL( BUTTON_CHILD(m_widget) ), wxGTK_CONV( GetLabel() ) ); #endif + + PostSetLabel(); } bool wxButton::Enable( bool enable ) diff --git a/src/gtk1/checkbox.cpp b/src/gtk1/checkbox.cpp index 1c64e26ba1..33f8a565b7 100644 --- a/src/gtk1/checkbox.cpp +++ b/src/gtk1/checkbox.cpp @@ -158,6 +158,8 @@ void wxCheckBox::SetLabel( const wxString& label ) #else gtk_label_set( GTK_LABEL(m_widgetLabel), wxGTK_CONV( GetLabel() ) ); #endif + + PostSetLabel(); } bool wxCheckBox::Enable( bool enable ) diff --git a/src/gtk1/control.cpp b/src/gtk1/control.cpp index 053f18f1ea..ed8b2147e8 100644 --- a/src/gtk1/control.cpp +++ b/src/gtk1/control.cpp @@ -33,6 +33,7 @@ IMPLEMENT_DYNAMIC_CLASS(wxControl, wxWindow) wxControl::wxControl() { m_needParent = TRUE; + m_createComplete = false; } bool wxControl::Create( wxWindow *parent, @@ -43,6 +44,7 @@ bool wxControl::Create( wxWindow *parent, const wxValidator& validator, const wxString &name ) { + m_createComplete = false; bool ret = wxWindow::Create(parent, id, pos, size, style, name); #if wxUSE_VALIDATORS @@ -68,6 +70,14 @@ void wxControl::SetLabel( const wxString &label ) } } +void wxControl::PostSetLabel() +{ + // make sure the widget has been created, and that PostCreate has already + // been called + if (m_widget && m_createComplete && GetAdjustMinSizeFlag()) + SetBestSize(wxDefaultSize); +} + wxString wxControl::GetLabel() const { return m_label; @@ -103,6 +113,7 @@ void wxControl::PostCreation(const wxSize& size) InheritAttributes(); ApplyWidgetStyle(); SetInitialBestSize(size); + m_createComplete = true; } diff --git a/src/gtk1/radiobox.cpp b/src/gtk1/radiobox.cpp index ea1eee5230..f0af2b64a5 100644 --- a/src/gtk1/radiobox.cpp +++ b/src/gtk1/radiobox.cpp @@ -540,6 +540,8 @@ void wxRadioBox::SetLabel( const wxString& label ) wxControl::SetLabel( label ); gtk_frame_set_label( GTK_FRAME(m_widget), wxGTK_CONV( wxControl::GetLabel() ) ); + + PostSetLabel(); } void wxRadioBox::SetString( int item, const wxString& label ) diff --git a/src/gtk1/radiobut.cpp b/src/gtk1/radiobut.cpp index 2c3e1c0d10..837cd33058 100644 --- a/src/gtk1/radiobut.cpp +++ b/src/gtk1/radiobut.cpp @@ -145,6 +145,8 @@ void wxRadioButton::SetLabel( const wxString& label ) #else gtk_label_set( g_label, wxGTK_CONV( GetLabel() ) ); #endif + + PostSetLabel(); } void wxRadioButton::SetValue( bool val ) diff --git a/src/gtk1/statbox.cpp b/src/gtk1/statbox.cpp index 7c3eb9678e..9d489265d8 100644 --- a/src/gtk1/statbox.cpp +++ b/src/gtk1/statbox.cpp @@ -89,6 +89,7 @@ void wxStaticBox::SetLabel( const wxString &label ) gtk_frame_set_label( GTK_FRAME( m_widget ), m_label.empty() ? (char *)NULL : (const char*) wxGTK_CONV( m_label ) ); + PostSetLabel(); } // static diff --git a/src/gtk1/stattext.cpp b/src/gtk1/stattext.cpp index d659e8cc16..f3c40c1226 100644 --- a/src/gtk1/stattext.cpp +++ b/src/gtk1/stattext.cpp @@ -146,27 +146,10 @@ void wxStaticText::SetLabel( const wxString &label ) #else gtk_label_set( GTK_LABEL(m_widget), wxGTK_CONV( m_label ) ); #endif - - // adjust the label size to the new label unless disabled - if (!HasFlag(wxST_NO_AUTORESIZE)) - { - SetSize( GetBestSize() ); - SetSizeHints(GetSize()); - } + + PostSetLabel(); } -bool wxStaticText::SetFont( const wxFont &font ) -{ - bool ret = wxControl::SetFont(font); - - // adjust the label size to the new label unless disabled - if (!HasFlag(wxST_NO_AUTORESIZE)) - { - SetSize( GetBestSize() ); - SetSizeHints(GetSize()); - } - return ret; -} wxSize wxStaticText::DoGetBestSize() const { diff --git a/src/gtk1/tglbtn.cpp b/src/gtk1/tglbtn.cpp index 8ac7ec5a3c..7bccf53080 100644 --- a/src/gtk1/tglbtn.cpp +++ b/src/gtk1/tglbtn.cpp @@ -287,6 +287,8 @@ void wxToggleButton::SetLabel(const wxString& label) wxControl::SetLabel(label); gtk_label_set(GTK_LABEL(BUTTON_CHILD(m_widget)), wxGTK_CONV( GetLabel() ) ); + + PostSetLabel(); } bool wxToggleButton::Enable(bool enable /*=TRUE*/) diff --git a/src/gtk1/window.cpp b/src/gtk1/window.cpp index 045dbfc9fa..8e5f4bdd3b 100644 --- a/src/gtk1/window.cpp +++ b/src/gtk1/window.cpp @@ -4043,7 +4043,7 @@ GtkRcStyle *wxWindowGTK::CreateWidgetStyle(bool forceStyle) #endif } - if ( m_hasFgCol ) + if ( m_foregroundColour.Ok() ) { GdkColor *fg = m_foregroundColour.GetColor(); @@ -4057,7 +4057,7 @@ GtkRcStyle *wxWindowGTK::CreateWidgetStyle(bool forceStyle) style->color_flags[GTK_STATE_ACTIVE] = GTK_RC_FG; } - if ( m_hasBgCol ) + if ( m_backgroundColour.Ok() ) { GdkColor *bg = m_backgroundColour.GetColor(); diff --git a/src/mac/carbon/stattext.cpp b/src/mac/carbon/stattext.cpp index f4757d19d7..761b0598b5 100644 --- a/src/mac/carbon/stattext.cpp +++ b/src/mac/carbon/stattext.cpp @@ -92,27 +92,9 @@ void wxStaticText::SetLabel(const wxString& st ) SetControlData( *m_peer, kControlEntireControl , kControlStaticTextCFStringTag, sizeof( CFStringRef ), &ref ); - if ( !(GetWindowStyle() & wxST_NO_AUTORESIZE) ) - { - SetSize( GetBestSize() ) ; - SetSizeHints(GetSize()); - } + if (GetAdjustMinSizeFlag()) + SetBestSize(wxDefaultSize); Update() ; } -bool wxStaticText::SetFont(const wxFont& font) -{ - bool ret = wxControl::SetFont(font); - - if ( ret ) - { - if ( !(GetWindowStyle() & wxST_NO_AUTORESIZE) ) - { - SetSize( GetBestSize() ); - SetSizeHints(GetSize()); - } - } - - return ret; -} diff --git a/src/mac/classic/stattext.cpp b/src/mac/classic/stattext.cpp index 1c0facdbf7..8bc3ee9272 100644 --- a/src/mac/classic/stattext.cpp +++ b/src/mac/classic/stattext.cpp @@ -232,31 +232,11 @@ void wxStaticText::SetLabel(const wxString& st ) { SetTitle( st ) ; m_label = st ; - if ( !(GetWindowStyle() & wxST_NO_AUTORESIZE) ) - { - // temporary fix until layout measurement and drawing are in synch again - Refresh() ; - SetSize( GetBestSize() ) ; - } + + if (GetAdjustMinSizeFlag()) + SetBestSize(wxDefaultSize); + Refresh() ; Update() ; } -bool wxStaticText::SetFont(const wxFont& font) -{ - bool ret = wxControl::SetFont(font); - - if ( ret ) - { - // adjust the size of the window to fit to the label unless autoresizing is - // disabled - if ( !(GetWindowStyle() & wxST_NO_AUTORESIZE) ) - { - // temporary fix until layout measurement and drawing are in synch again - Refresh() ; - SetSize( GetBestSize() ); - } - } - - return ret; -} diff --git a/src/msw/checkbox.cpp b/src/msw/checkbox.cpp index f596c6a408..fe6b025067 100644 --- a/src/msw/checkbox.cpp +++ b/src/msw/checkbox.cpp @@ -165,10 +165,6 @@ bool wxCheckBox::Create(wxWindow *parent, return MSWCreateControl(wxT("BUTTON"), msStyle, pos, size, label, 0); } -void wxCheckBox::SetLabel(const wxString& label) -{ - SetWindowText(GetHwnd(), label); -} wxSize wxCheckBox::DoGetBestSize() const { diff --git a/src/msw/stattext.cpp b/src/msw/stattext.cpp index 12b7403018..02d4e44b50 100644 --- a/src/msw/stattext.cpp +++ b/src/msw/stattext.cpp @@ -207,33 +207,5 @@ void wxStaticText::DoSetSize(int x, int y, int w, int h, int sizeFlags) Refresh(); } -void wxStaticText::SetLabel(const wxString& label) -{ - wxStaticTextBase::SetLabel(label); - - // adjust the size of the window to fit to the label unless autoresizing is - // disabled - if ( !(GetWindowStyle() & wxST_NO_AUTORESIZE) ) - { - DoSetSize(-1, -1, -1, -1, wxSIZE_AUTO_WIDTH | wxSIZE_AUTO_HEIGHT); - SetSizeHints(GetSize()); - } -} - - -bool wxStaticText::SetFont(const wxFont& font) -{ - bool ret = wxControl::SetFont(font); - - // adjust the size of the window to fit to the label unless autoresizing is - // disabled - if ( !(GetWindowStyle() & wxST_NO_AUTORESIZE) ) - { - DoSetSize(-1, -1, -1, -1, wxSIZE_AUTO_WIDTH | wxSIZE_AUTO_HEIGHT); - SetSizeHints(GetSize()); - } - - return ret; -} #endif // wxUSE_STATTEXT diff --git a/src/msw/tglbtn.cpp b/src/msw/tglbtn.cpp index 9b6d07128d..02f1fc0f42 100644 --- a/src/msw/tglbtn.cpp +++ b/src/msw/tglbtn.cpp @@ -110,11 +110,6 @@ WXDWORD wxToggleButton::MSWGetStyle(long style, WXDWORD *exstyle) const return msStyle; } -void wxToggleButton::SetLabel(const wxString& label) -{ - SetWindowText(GetHwnd(), label); -} - wxSize wxToggleButton::DoGetBestSize() const { wxString label = wxGetWindowText(GetHWND()); diff --git a/wxPython/src/_control.i b/wxPython/src/_control.i index 966b3950a6..8860f56552 100644 --- a/wxPython/src/_control.i +++ b/wxPython/src/_control.i @@ -77,6 +77,20 @@ __init__ as a plain old wx.Control is not very useful.", ""); void , SetLabel(const wxString& label), "Sets the item's text.", ""); + + DocDeclStr( + bool , GetAdjustMinSizeFlag(), + "Returns whether the minsize should be adjusted for this control when +`SetLabel` or `SetFont` are called.", ""); + + DocDeclStr( + void , SetAdjustMinSizeFlag(bool adjust), + "By default controls will readjust their size and minsize when +`SetLabel` or `SetFont` are called. This flag will allow you to +control this behavior.", " + +:see: `GetAdjustMinSizeFlag` +"); static wxVisualAttributes GetClassDefaultAttributes(wxWindowVariant variant = wxWINDOW_VARIANT_NORMAL); diff --git a/wxPython/src/_window.i b/wxPython/src/_window.i index 3c89585101..cb217eea1a 100644 --- a/wxPython/src/_window.i +++ b/wxPython/src/_window.i @@ -415,8 +415,13 @@ default values.", "", "Moves the window to the given position.", "", MoveXY); + DocDeclStr( + void , SetBestFittingSize(const wxSize& size=wxDefaultSize), + "A 'Smart' SetSize that will fill in default size components with the +window's *best size* values. Also set's the minsize for use with sizers.", ""); + - + DocDeclStr( virtual void , Raise(), "Raises the window to the top of the window hierarchy if it is a @@ -1267,16 +1272,17 @@ this.", ""); "Sets the background colour of the window. Returns True if the colour was changed. The background colour is usually painted by the default EVT_ERASE_BACKGROUND event handler function under Windows and -automatically under GTK. +automatically under GTK. Using `wx.NullColour` will reset the window +to the default background colour. Note that setting the background colour may not cause an immediate -refresh, so you may wish to call ClearBackground or Refresh after +refresh, so you may wish to call `ClearBackground` or `Refresh` after calling this function. -Use this function with care under GTK+ as the new appearance of the -window might not look equally well when used with themes, i.e GTK+'s -ability to change its look as the user wishes with run-time loadable -modules.", ""); +Using this function will disable attempts to use themes for this +window, if the system supports them. Use with care since usually the +themes represent the appearance chosen by the user to be used for all +applications on the system.", ""); DocDeclStr( void , SetDefaultBackgroundColour(const wxColour& colour), -- 2.45.2