]> git.saurik.com Git - wxWidgets.git/commitdiff
Controls will readjust their size and minsize when SetLabel or SetFont
authorRobin Dunn <robin@alldunn.com>
Sat, 19 Jun 2004 01:35:10 +0000 (01:35 +0000)
committerRobin Dunn <robin@alldunn.com>
Sat, 19 Jun 2004 01:35:10 +0000 (01:35 +0000)
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

43 files changed:
docs/latex/wx/control.tex
docs/latex/wx/window.tex
include/wx/control.h
include/wx/gtk/control.h
include/wx/gtk/stattext.h
include/wx/gtk1/control.h
include/wx/gtk1/stattext.h
include/wx/mac/carbon/stattext.h
include/wx/mac/classic/stattext.h
include/wx/msw/checkbox.h
include/wx/msw/stattext.h
include/wx/msw/tglbtn.h
include/wx/stattext.h
include/wx/window.h
src/common/ctrlcmn.cpp
src/common/wincmn.cpp
src/gtk/bmpbuttn.cpp
src/gtk/button.cpp
src/gtk/checkbox.cpp
src/gtk/control.cpp
src/gtk/radiobox.cpp
src/gtk/radiobut.cpp
src/gtk/statbox.cpp
src/gtk/stattext.cpp
src/gtk/tglbtn.cpp
src/gtk/window.cpp
src/gtk1/bmpbuttn.cpp
src/gtk1/button.cpp
src/gtk1/checkbox.cpp
src/gtk1/control.cpp
src/gtk1/radiobox.cpp
src/gtk1/radiobut.cpp
src/gtk1/statbox.cpp
src/gtk1/stattext.cpp
src/gtk1/tglbtn.cpp
src/gtk1/window.cpp
src/mac/carbon/stattext.cpp
src/mac/classic/stattext.cpp
src/msw/checkbox.cpp
src/msw/stattext.cpp
src/msw/tglbtn.cpp
wxPython/src/_control.i
wxPython/src/_window.i

index 75c4e5f975a89c46d702a879641381f429b89a4b..52ecc060f25fd4a54c151a8375fc7ee30096c79b 100644 (file)
@@ -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}.
 
 
 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}
 \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.
 
 
 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}}
 \membersection{wxControl::SetLabel}\label{wxcontrolsetlabel}
 
 \func{void}{SetLabel}{\param{const wxString\& }{label}}
index d3e214b8cc68eeffca53ce8aa96ce368de8caf86..4386be9e9ba4634b931abf0e00c6201f29371b3d 100644 (file)
@@ -2390,6 +2390,20 @@ applications on the system.
 \helpref{wxWindow::Refresh}{wxwindowrefresh},\rtfsp
 \helpref{wxEraseEvent}{wxeraseevent}
 
 \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}
 
 
 \membersection{wxWindow::SetCaret}\label{wxwindowsetcaret}
 
index 6552443ecdedfa08aa515d78e6686feb16555483..5fd882ce0c3210a246fd2da3fd23769f0c602726 100644 (file)
@@ -32,10 +32,11 @@ WXDLLEXPORT_DATA(extern const wxChar*) wxControlNameStr;
 // wxControl is the base class for all controls
 // ----------------------------------------------------------------------------
 
 // wxControl is the base class for all controls
 // ----------------------------------------------------------------------------
 
+
 class WXDLLEXPORT wxControlBase : public wxWindow
 {
 public:
 class WXDLLEXPORT wxControlBase : public wxWindow
 {
 public:
-    wxControlBase() { }
+    wxControlBase() { Init(); }
 
     virtual ~wxControlBase();
 
 
     virtual ~wxControlBase();
 
@@ -63,7 +64,16 @@ public:
     // if the button was clicked)
     virtual void Command(wxCommandEvent &event);
 
     // 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:
 protected:
+    void Init();
+    
     // creates the control (calls wxWindowBase::CreateBase inside) and adds it
     // to the list of parents children
     bool CreateControl(wxWindowBase *parent,
     // 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);
     }
 
         SetBestSize(size);
     }
 
+    // should minsize and size be adjusted when font or label change?
+    bool        m_adjustMinSize;  
+    
     DECLARE_NO_COPY_CLASS(wxControlBase)
 };
 
     DECLARE_NO_COPY_CLASS(wxControlBase)
 };
 
index 553f94f7c1d0205c37d74ff37e7debbee6a8786c..c7954c415e2b2c3b2a9adbdd2c20b5ac207f93a7 100644 (file)
@@ -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;
     // 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:
     virtual wxVisualAttributes GetDefaultAttributes() const;
 
 protected:
@@ -63,6 +63,7 @@ protected:
 
     virtual wxSize DoGetBestSize() const;
     void PostCreation(const wxSize& size);
 
     virtual wxSize DoGetBestSize() const;
     void PostCreation(const wxSize& size);
+    void PostSetLabel();
 
 #ifdef __WXGTK20__
     wxString PrepareLabelMnemonics( const wxString &label ) const;
 
 #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
 
     wxString   m_label;
     char       m_chAccel;  // enabled to avoid breaking binary compatibility later on
+    bool       m_createComplete;
 
 private:
     DECLARE_DYNAMIC_CLASS(wxControl)
 
 private:
     DECLARE_DYNAMIC_CLASS(wxControl)
index 6686c96982fd80da969685882386aaf5925a2a6f..dd4d499883b259bd680fd4d353cd84b0093f862b 100644 (file)
@@ -57,7 +57,8 @@ public:
     wxString GetLabel() const;
     void SetLabel( const wxString &label );
 
     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
     bool SetForegroundColour( const wxColour& colour );
 
     static wxVisualAttributes
index 553f94f7c1d0205c37d74ff37e7debbee6a8786c..c7954c415e2b2c3b2a9adbdd2c20b5ac207f93a7 100644 (file)
@@ -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;
     // 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:
     virtual wxVisualAttributes GetDefaultAttributes() const;
 
 protected:
@@ -63,6 +63,7 @@ protected:
 
     virtual wxSize DoGetBestSize() const;
     void PostCreation(const wxSize& size);
 
     virtual wxSize DoGetBestSize() const;
     void PostCreation(const wxSize& size);
+    void PostSetLabel();
 
 #ifdef __WXGTK20__
     wxString PrepareLabelMnemonics( const wxString &label ) const;
 
 #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
 
     wxString   m_label;
     char       m_chAccel;  // enabled to avoid breaking binary compatibility later on
+    bool       m_createComplete;
 
 private:
     DECLARE_DYNAMIC_CLASS(wxControl)
 
 private:
     DECLARE_DYNAMIC_CLASS(wxControl)
index 6686c96982fd80da969685882386aaf5925a2a6f..dd4d499883b259bd680fd4d353cd84b0093f862b 100644 (file)
@@ -57,7 +57,8 @@ public:
     wxString GetLabel() const;
     void SetLabel( const wxString &label );
 
     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
     bool SetForegroundColour( const wxColour& colour );
 
     static wxVisualAttributes
index c5f41c02c41b6e220eabcc3cb61f0ec47538b266..95c32a82b9c905f252f475d3923278e1a3140024 100644 (file)
@@ -40,7 +40,6 @@ public:
 
   // accessors
   void SetLabel( const wxString &str ) ;
 
   // accessors
   void SetLabel( const wxString &str ) ;
-  bool SetFont( const wxFont &font );
 
 protected :
 
 
 protected :
 
index 17ecf98ad00e8b032ce4ee43e8dedbee174dcde7..15eae66671ee96c789c7ac66216c56d8e5d59325 100644 (file)
@@ -41,7 +41,6 @@ class WXDLLEXPORT wxStaticText: public wxStaticTextBase
 
   // accessors
   void SetLabel( const wxString &str ) ;
 
   // accessors
   void SetLabel( const wxString &str ) ;
-  bool SetFont( const wxFont &font );
 
   // operations
   virtual void Command(wxCommandEvent& WXUNUSED(event)) {};
 
   // operations
   virtual void Command(wxCommandEvent& WXUNUSED(event)) {};
index 64dedbf487c036c514f4cc029b0e6a699edf187e..da3df7f80a47b39ff948a16d9b8f187cb63f9b86 100644 (file)
@@ -45,8 +45,6 @@ public:
     virtual void SetValue(bool value);
     virtual bool GetValue() const;
 
     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);
 
     virtual bool MSWCommand(WXUINT param, WXWORD id);
     virtual void Command(wxCommandEvent& event);
 
index 0ceef4c977a417ba06fc1e6a90e8e7ddb1b1b7b6..c42f65552c131fc9d6205516cb596bdd9d50952a 100644 (file)
@@ -40,10 +40,6 @@ public:
                 long style = 0,
                 const wxString& name = wxStaticTextNameStr);
 
                 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;
 protected:
     // implement/override some base class virtuals
     virtual wxBorder GetDefaultBorder() const;
index 11367023977f96f3bd118c6f4eef39e5408fa66f..b6ab08a2b8db9fee1bddf84db1ec3d1b160be252 100644 (file)
@@ -45,7 +45,6 @@ public:
     virtual bool GetValue() const ;
 
     virtual bool MSWCommand(WXUINT param, WXWORD id);
     virtual bool GetValue() const ;
 
     virtual bool MSWCommand(WXUINT param, WXWORD id);
-    virtual void SetLabel(const wxString& label);
     virtual void Command(wxCommandEvent& event);
 
 protected:
     virtual void Command(wxCommandEvent& event);
 
 protected:
index 8590052f74938221b45eccb6218c4ffaed5ff1ef..c210383e5c63001abfa0c5f90b57442c78138ed3 100644 (file)
@@ -17,6 +17,8 @@ public:
     virtual void ApplyParentThemeBackground(const wxColour& bg)
         { SetBackgroundColour(bg); }
 
     virtual void ApplyParentThemeBackground(const wxColour& bg)
         { SetBackgroundColour(bg); }
 
+    bool GetAdjustMinSizeFlag() const { return !HasFlag(wxST_NO_AUTORESIZE); }
+    
 private:
     DECLARE_NO_COPY_CLASS(wxStaticTextBase)
 };
 private:
     DECLARE_NO_COPY_CLASS(wxStaticTextBase)
 };
index 87dc4cc69168862d6514fea2cfbcd6869ba9c412..40ad7b237cd17743d02949ed080d85146cd4b5c5 100644 (file)
@@ -230,6 +230,9 @@ public:
     void Move(const wxPoint& pt, int flags = wxSIZE_USE_EXISTING)
         { Move(pt.x, pt.y, flags); }
 
     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;
         // 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; }
 
     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)
 
     // 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)
index 242efdca1f1c05ec55bcd4904cf0cc9bfe1bb29e..eab0f889f12ae35443944932851c14336ae00c77 100644 (file)
@@ -68,6 +68,13 @@ bool wxControlBase::Create(wxWindow *parent,
     return ret;
 }
 
     return ret;
 }
 
+
+void wxControlBase::Init()
+{
+    m_adjustMinSize = true;
+}
+
+
 bool wxControlBase::CreateControl(wxWindowBase *parent,
                                   wxWindowID id,
                                   const wxPoint& pos,
 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
 // ----------------------------------------------------------------------------
 // ----------------------------------------------------------------------------
 // wxStaticBitmap
 // ----------------------------------------------------------------------------
index e7d8c7768aa46f80c1ae5fdb79e0212cd35780b6..e6dd55946e65ed236165c7534a38d8d97ec555ff 100644 (file)
@@ -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;
 {
     // If the given size is incomplete then merge with the best size.
     wxSize sizeBest;
index db117650134db117c4d6c76b80e2058b8df09813..8be33e83f7de06ef90ce59e4eab8892a1759f024 100644 (file)
@@ -184,6 +184,7 @@ void wxBitmapButton::SetLabel( const wxString &label )
     wxCHECK_RET( m_widget != NULL, wxT("invalid button") );
 
     wxControl::SetLabel( label );
     wxCHECK_RET( m_widget != NULL, wxT("invalid button") );
 
     wxControl::SetLabel( label );
+    PostSetLabel();
 }
 
 wxString wxBitmapButton::GetLabel() const
 }
 
 wxString wxBitmapButton::GetLabel() const
index d64273b78006e960f02070aa9024b0b13a1ada40..330b5d0e1278fc024172679f2760fde5f311325b 100644 (file)
@@ -175,6 +175,8 @@ void wxButton::SetLabel( const wxString &label )
 #else
     gtk_label_set( GTK_LABEL( BUTTON_CHILD(m_widget) ), wxGTK_CONV( GetLabel() ) );
 #endif
 #else
     gtk_label_set( GTK_LABEL( BUTTON_CHILD(m_widget) ), wxGTK_CONV( GetLabel() ) );
 #endif
+
+    PostSetLabel();
 }
 
 bool wxButton::Enable( bool enable )
 }
 
 bool wxButton::Enable( bool enable )
index 1c64e26ba1c5156da9fd5d2b8fc51b0a8459f0e3..33f8a565b79d5cebb1fbaf3aa15dde039be7f09f 100644 (file)
@@ -158,6 +158,8 @@ void wxCheckBox::SetLabel( const wxString& label )
 #else
     gtk_label_set( GTK_LABEL(m_widgetLabel), wxGTK_CONV( GetLabel() ) );
 #endif
 #else
     gtk_label_set( GTK_LABEL(m_widgetLabel), wxGTK_CONV( GetLabel() ) );
 #endif
+
+    PostSetLabel();
 }
 
 bool wxCheckBox::Enable( bool enable )
 }
 
 bool wxCheckBox::Enable( bool enable )
index 053f18f1ead1921260ac31c15907c58a72e78cb4..ed8b2147e84540abf8e75c377a131aeae5eecb02 100644 (file)
@@ -33,6 +33,7 @@ IMPLEMENT_DYNAMIC_CLASS(wxControl, wxWindow)
 wxControl::wxControl()
 {
     m_needParent = TRUE;
 wxControl::wxControl()
 {
     m_needParent = TRUE;
+    m_createComplete = false;
 }
 
 bool wxControl::Create( wxWindow *parent,
 }
 
 bool wxControl::Create( wxWindow *parent,
@@ -43,6 +44,7 @@ bool wxControl::Create( wxWindow *parent,
                       const wxValidator& validator,
                       const wxString &name )
 {
                       const wxValidator& validator,
                       const wxString &name )
 {
+    m_createComplete = false;
     bool ret = wxWindow::Create(parent, id, pos, size, style, name);
     
 #if wxUSE_VALIDATORS
     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;
 wxString wxControl::GetLabel() const
 {
     return m_label;
@@ -103,6 +113,7 @@ void wxControl::PostCreation(const wxSize& size)
     InheritAttributes();
     ApplyWidgetStyle();
     SetInitialBestSize(size);
     InheritAttributes();
     ApplyWidgetStyle();
     SetInitialBestSize(size);
+    m_createComplete = true;
 }
 
 
 }
 
 
index ea1eee523009f2267e4b1d760e14cecc3b71a6bd..f0af2b64a5dddcd6add84faa4dcad4e297bfaf1e 100644 (file)
@@ -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() ) );
     wxControl::SetLabel( label );
 
     gtk_frame_set_label( GTK_FRAME(m_widget), wxGTK_CONV( wxControl::GetLabel() ) );
+
+    PostSetLabel();
 }
 
 void wxRadioBox::SetString( int item, const wxString& label )
 }
 
 void wxRadioBox::SetString( int item, const wxString& label )
index 2c3e1c0d107c9d0f53c74df9c2e45fa47f2b63ca..837cd33058432b82c0a58d73e4c65e4ff2907e76 100644 (file)
@@ -145,6 +145,8 @@ void wxRadioButton::SetLabel( const wxString& label )
 #else
     gtk_label_set( g_label, wxGTK_CONV( GetLabel() ) );
 #endif
 #else
     gtk_label_set( g_label, wxGTK_CONV( GetLabel() ) );
 #endif
+
+    PostSetLabel();
 }
 
 void wxRadioButton::SetValue( bool val )
 }
 
 void wxRadioButton::SetValue( bool val )
index 7c3eb9678ee91cdea241dfb38a7121f90fe2cd64..9d489265d8f5fb291d620add559eb12d6473af5d 100644 (file)
@@ -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 ) );
 
     gtk_frame_set_label( GTK_FRAME( m_widget ),
                          m_label.empty() ? (char *)NULL : (const char*) wxGTK_CONV( m_label ) );
+    PostSetLabel();
 }
 
 // static
 }
 
 // static
index d659e8cc167cbb7ab1acc629beabdbe2226d5a48..f3c40c1226586bec271e23f85e1f4b3af3d1269c 100644 (file)
@@ -146,27 +146,10 @@ void wxStaticText::SetLabel( const wxString &label )
 #else
     gtk_label_set( GTK_LABEL(m_widget), wxGTK_CONV( m_label ) );
 #endif
 #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
 {
 
 wxSize wxStaticText::DoGetBestSize() const
 {
index 8ac7ec5a3c6364728ce0f8ed57194b0976e3f193..7bccf53080fb67ad46a0bf5b2313c654c80ee2f8 100644 (file)
@@ -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() ) );
     wxControl::SetLabel(label);
 
     gtk_label_set(GTK_LABEL(BUTTON_CHILD(m_widget)), wxGTK_CONV( GetLabel() ) );
+
+    PostSetLabel();
 }
 
 bool wxToggleButton::Enable(bool enable /*=TRUE*/)
 }
 
 bool wxToggleButton::Enable(bool enable /*=TRUE*/)
index 045dbfc9fa6c868f7664e7a8beed83242fa52bd3..8e5f4bdd3b1400386a08e040eb32fc9cd1206748 100644 (file)
@@ -4043,7 +4043,7 @@ GtkRcStyle *wxWindowGTK::CreateWidgetStyle(bool forceStyle)
 #endif
     }
 
 #endif
     }
 
-    if ( m_hasFgCol )
+    if ( m_foregroundColour.Ok() )
     {
         GdkColor *fg = m_foregroundColour.GetColor();
         
     {
         GdkColor *fg = m_foregroundColour.GetColor();
         
@@ -4057,7 +4057,7 @@ GtkRcStyle *wxWindowGTK::CreateWidgetStyle(bool forceStyle)
         style->color_flags[GTK_STATE_ACTIVE] = GTK_RC_FG;
     }
 
         style->color_flags[GTK_STATE_ACTIVE] = GTK_RC_FG;
     }
 
-    if ( m_hasBgCol )
+    if ( m_backgroundColour.Ok() )
     {
         GdkColor *bg = m_backgroundColour.GetColor();
 
     {
         GdkColor *bg = m_backgroundColour.GetColor();
 
index db117650134db117c4d6c76b80e2058b8df09813..8be33e83f7de06ef90ce59e4eab8892a1759f024 100644 (file)
@@ -184,6 +184,7 @@ void wxBitmapButton::SetLabel( const wxString &label )
     wxCHECK_RET( m_widget != NULL, wxT("invalid button") );
 
     wxControl::SetLabel( label );
     wxCHECK_RET( m_widget != NULL, wxT("invalid button") );
 
     wxControl::SetLabel( label );
+    PostSetLabel();
 }
 
 wxString wxBitmapButton::GetLabel() const
 }
 
 wxString wxBitmapButton::GetLabel() const
index d64273b78006e960f02070aa9024b0b13a1ada40..330b5d0e1278fc024172679f2760fde5f311325b 100644 (file)
@@ -175,6 +175,8 @@ void wxButton::SetLabel( const wxString &label )
 #else
     gtk_label_set( GTK_LABEL( BUTTON_CHILD(m_widget) ), wxGTK_CONV( GetLabel() ) );
 #endif
 #else
     gtk_label_set( GTK_LABEL( BUTTON_CHILD(m_widget) ), wxGTK_CONV( GetLabel() ) );
 #endif
+
+    PostSetLabel();
 }
 
 bool wxButton::Enable( bool enable )
 }
 
 bool wxButton::Enable( bool enable )
index 1c64e26ba1c5156da9fd5d2b8fc51b0a8459f0e3..33f8a565b79d5cebb1fbaf3aa15dde039be7f09f 100644 (file)
@@ -158,6 +158,8 @@ void wxCheckBox::SetLabel( const wxString& label )
 #else
     gtk_label_set( GTK_LABEL(m_widgetLabel), wxGTK_CONV( GetLabel() ) );
 #endif
 #else
     gtk_label_set( GTK_LABEL(m_widgetLabel), wxGTK_CONV( GetLabel() ) );
 #endif
+
+    PostSetLabel();
 }
 
 bool wxCheckBox::Enable( bool enable )
 }
 
 bool wxCheckBox::Enable( bool enable )
index 053f18f1ead1921260ac31c15907c58a72e78cb4..ed8b2147e84540abf8e75c377a131aeae5eecb02 100644 (file)
@@ -33,6 +33,7 @@ IMPLEMENT_DYNAMIC_CLASS(wxControl, wxWindow)
 wxControl::wxControl()
 {
     m_needParent = TRUE;
 wxControl::wxControl()
 {
     m_needParent = TRUE;
+    m_createComplete = false;
 }
 
 bool wxControl::Create( wxWindow *parent,
 }
 
 bool wxControl::Create( wxWindow *parent,
@@ -43,6 +44,7 @@ bool wxControl::Create( wxWindow *parent,
                       const wxValidator& validator,
                       const wxString &name )
 {
                       const wxValidator& validator,
                       const wxString &name )
 {
+    m_createComplete = false;
     bool ret = wxWindow::Create(parent, id, pos, size, style, name);
     
 #if wxUSE_VALIDATORS
     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;
 wxString wxControl::GetLabel() const
 {
     return m_label;
@@ -103,6 +113,7 @@ void wxControl::PostCreation(const wxSize& size)
     InheritAttributes();
     ApplyWidgetStyle();
     SetInitialBestSize(size);
     InheritAttributes();
     ApplyWidgetStyle();
     SetInitialBestSize(size);
+    m_createComplete = true;
 }
 
 
 }
 
 
index ea1eee523009f2267e4b1d760e14cecc3b71a6bd..f0af2b64a5dddcd6add84faa4dcad4e297bfaf1e 100644 (file)
@@ -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() ) );
     wxControl::SetLabel( label );
 
     gtk_frame_set_label( GTK_FRAME(m_widget), wxGTK_CONV( wxControl::GetLabel() ) );
+
+    PostSetLabel();
 }
 
 void wxRadioBox::SetString( int item, const wxString& label )
 }
 
 void wxRadioBox::SetString( int item, const wxString& label )
index 2c3e1c0d107c9d0f53c74df9c2e45fa47f2b63ca..837cd33058432b82c0a58d73e4c65e4ff2907e76 100644 (file)
@@ -145,6 +145,8 @@ void wxRadioButton::SetLabel( const wxString& label )
 #else
     gtk_label_set( g_label, wxGTK_CONV( GetLabel() ) );
 #endif
 #else
     gtk_label_set( g_label, wxGTK_CONV( GetLabel() ) );
 #endif
+
+    PostSetLabel();
 }
 
 void wxRadioButton::SetValue( bool val )
 }
 
 void wxRadioButton::SetValue( bool val )
index 7c3eb9678ee91cdea241dfb38a7121f90fe2cd64..9d489265d8f5fb291d620add559eb12d6473af5d 100644 (file)
@@ -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 ) );
 
     gtk_frame_set_label( GTK_FRAME( m_widget ),
                          m_label.empty() ? (char *)NULL : (const char*) wxGTK_CONV( m_label ) );
+    PostSetLabel();
 }
 
 // static
 }
 
 // static
index d659e8cc167cbb7ab1acc629beabdbe2226d5a48..f3c40c1226586bec271e23f85e1f4b3af3d1269c 100644 (file)
@@ -146,27 +146,10 @@ void wxStaticText::SetLabel( const wxString &label )
 #else
     gtk_label_set( GTK_LABEL(m_widget), wxGTK_CONV( m_label ) );
 #endif
 #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
 {
 
 wxSize wxStaticText::DoGetBestSize() const
 {
index 8ac7ec5a3c6364728ce0f8ed57194b0976e3f193..7bccf53080fb67ad46a0bf5b2313c654c80ee2f8 100644 (file)
@@ -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() ) );
     wxControl::SetLabel(label);
 
     gtk_label_set(GTK_LABEL(BUTTON_CHILD(m_widget)), wxGTK_CONV( GetLabel() ) );
+
+    PostSetLabel();
 }
 
 bool wxToggleButton::Enable(bool enable /*=TRUE*/)
 }
 
 bool wxToggleButton::Enable(bool enable /*=TRUE*/)
index 045dbfc9fa6c868f7664e7a8beed83242fa52bd3..8e5f4bdd3b1400386a08e040eb32fc9cd1206748 100644 (file)
@@ -4043,7 +4043,7 @@ GtkRcStyle *wxWindowGTK::CreateWidgetStyle(bool forceStyle)
 #endif
     }
 
 #endif
     }
 
-    if ( m_hasFgCol )
+    if ( m_foregroundColour.Ok() )
     {
         GdkColor *fg = m_foregroundColour.GetColor();
         
     {
         GdkColor *fg = m_foregroundColour.GetColor();
         
@@ -4057,7 +4057,7 @@ GtkRcStyle *wxWindowGTK::CreateWidgetStyle(bool forceStyle)
         style->color_flags[GTK_STATE_ACTIVE] = GTK_RC_FG;
     }
 
         style->color_flags[GTK_STATE_ACTIVE] = GTK_RC_FG;
     }
 
-    if ( m_hasBgCol )
+    if ( m_backgroundColour.Ok() )
     {
         GdkColor *bg = m_backgroundColour.GetColor();
 
     {
         GdkColor *bg = m_backgroundColour.GetColor();
 
index f4757d19d7c223c2b853c4ac0779efdf3f3f55f1..761b0598b5194dba245ec6a8de86eb5403b3fa22 100644 (file)
@@ -92,27 +92,9 @@ void wxStaticText::SetLabel(const wxString& st )
     SetControlData( *m_peer, kControlEntireControl , kControlStaticTextCFStringTag, sizeof( CFStringRef ),
                &ref );
 
     SetControlData( *m_peer, kControlEntireControl , kControlStaticTextCFStringTag, sizeof( CFStringRef ),
                &ref );
 
-    if ( !(GetWindowStyle() & wxST_NO_AUTORESIZE) )
-    {
-        SetSize( GetBestSize() ) ;
-        SetSizeHints(GetSize());
-    }
+    if (GetAdjustMinSizeFlag())
+        SetBestSize(wxDefaultSize);
 
     Update() ;
 }
 
 
     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;
-}
index 1c0facdbf70d86610846d12989813d7cef848fd9..8bc3ee927248f7bc9342fa53584e0008552b97ba 100644 (file)
@@ -232,31 +232,11 @@ void wxStaticText::SetLabel(const wxString& st )
 {
     SetTitle( st ) ;
     m_label = 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() ;
 }
 
     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;
-}
index f596c6a408782e5e0ec97dbba3bd0df5cd5166dc..fe6b02506759716349e1db9261553c67ae08c303 100644 (file)
@@ -165,10 +165,6 @@ bool wxCheckBox::Create(wxWindow *parent,
     return MSWCreateControl(wxT("BUTTON"), msStyle, pos, size, label, 0);
 }
 
     return MSWCreateControl(wxT("BUTTON"), msStyle, pos, size, label, 0);
 }
 
-void wxCheckBox::SetLabel(const wxString& label)
-{
-    SetWindowText(GetHwnd(), label);
-}
 
 wxSize wxCheckBox::DoGetBestSize() const
 {
 
 wxSize wxCheckBox::DoGetBestSize() const
 {
index 12b740301880e7a625246ba2184a47363b9bfa0a..02d4e44b50d9504304ac40b654273d0835ef8b02 100644 (file)
@@ -207,33 +207,5 @@ void wxStaticText::DoSetSize(int x, int y, int w, int h, int sizeFlags)
     Refresh();
 }
 
     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
 
 #endif // wxUSE_STATTEXT
index 9b6d07128d7e3f7118f16705d05de37f4c2f38f3..02f1fc0f425d364493813da59dcb6d809696516d 100644 (file)
@@ -110,11 +110,6 @@ WXDWORD wxToggleButton::MSWGetStyle(long style, WXDWORD *exstyle) const
     return msStyle;
 }
 
     return msStyle;
 }
 
-void wxToggleButton::SetLabel(const wxString& label)
-{
-    SetWindowText(GetHwnd(), label);
-}
-
 wxSize wxToggleButton::DoGetBestSize() const
 {
    wxString label = wxGetWindowText(GetHWND());
 wxSize wxToggleButton::DoGetBestSize() const
 {
    wxString label = wxGetWindowText(GetHWND());
index 966b3950a677338d6c51921b31d99ca8a8c54f72..8860f56552d91b99a9cecd4cdff2a6bf777d7666 100644 (file)
@@ -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.", "");
 
         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);
     
     static wxVisualAttributes
     GetClassDefaultAttributes(wxWindowVariant variant = wxWINDOW_VARIANT_NORMAL);
index 3c8958510126f3f2945bdbe5f824011d2e1059c7..cb217eea1a0f96a6d3d892280f7942eb8361bb23 100644 (file)
@@ -415,8 +415,13 @@ default values.", "",
         "Moves the window to the given position.", "",
         MoveXY);
     
         "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
     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
         "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
 
 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.
 
 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),
 
     DocDeclStr(
         void , SetDefaultBackgroundColour(const wxColour& colour),