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
This commit is contained in:
Robin Dunn
2004-06-19 01:35:10 +00:00
parent 8de5b24e54
commit fe161a2685
43 changed files with 176 additions and 154 deletions

View 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} \membersection{wxControl::GetLabel}\label{wxcontrolgetlabel}
\func{wxString\&}{GetLabel}{\void} \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} \membersection{wxControl::SetLabel}\label{wxcontrolsetlabel}
\func{void}{SetLabel}{\param{const wxString\& }{label}} \func{void}{SetLabel}{\param{const wxString\& }{label}}

View File

@@ -2390,6 +2390,20 @@ applications on the system.
\helpref{wxWindow::Refresh}{wxwindowrefresh},\rtfsp \helpref{wxWindow::Refresh}{wxwindowrefresh},\rtfsp
\helpref{wxEraseEvent}{wxeraseevent} \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}

View 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 class WXDLLEXPORT wxControlBase : public wxWindow
{ {
public: public:
wxControlBase() { } wxControlBase() { Init(); }
virtual ~wxControlBase(); virtual ~wxControlBase();
@@ -63,7 +64,16 @@ public:
// if the button was clicked) // if the button was clicked)
virtual void Command(wxCommandEvent &event); 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 // creates the control (calls wxWindowBase::CreateBase inside) and adds it
// to the list of parents children // to the list of parents children
bool CreateControl(wxWindowBase *parent, 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)
}; };

View File

@@ -52,7 +52,7 @@ public:
// char (the one immediately after '&') into m_chAccel (TODO not yet) // char (the one immediately after '&') into m_chAccel (TODO not yet)
virtual void SetLabel( const wxString &label ); virtual void SetLabel( const wxString &label );
virtual wxString GetLabel() const; virtual wxString GetLabel() const;
virtual wxVisualAttributes GetDefaultAttributes() const; virtual wxVisualAttributes GetDefaultAttributes() const;
protected: protected:
@@ -63,6 +63,7 @@ protected:
virtual wxSize DoGetBestSize() const; virtual wxSize DoGetBestSize() const;
void PostCreation(const wxSize& size); void PostCreation(const wxSize& size);
void PostSetLabel();
#ifdef __WXGTK20__ #ifdef __WXGTK20__
wxString PrepareLabelMnemonics( const wxString &label ) const; wxString PrepareLabelMnemonics( const wxString &label ) const;
@@ -93,6 +94,7 @@ protected:
wxString m_label; wxString m_label;
char m_chAccel; // enabled to avoid breaking binary compatibility later on char m_chAccel; // enabled to avoid breaking binary compatibility later on
bool m_createComplete;
private: private:
DECLARE_DYNAMIC_CLASS(wxControl) DECLARE_DYNAMIC_CLASS(wxControl)

View File

@@ -57,7 +57,8 @@ public:
wxString GetLabel() const; wxString GetLabel() const;
void SetLabel( const wxString &label ); void SetLabel( const wxString &label );
bool SetFont( const wxFont &font ); bool GetAdjustMinSizeFlag() const { return !HasFlag(wxST_NO_AUTORESIZE); }
bool SetForegroundColour( const wxColour& colour ); bool SetForegroundColour( const wxColour& colour );
static wxVisualAttributes static wxVisualAttributes

View File

@@ -52,7 +52,7 @@ public:
// char (the one immediately after '&') into m_chAccel (TODO not yet) // char (the one immediately after '&') into m_chAccel (TODO not yet)
virtual void SetLabel( const wxString &label ); virtual void SetLabel( const wxString &label );
virtual wxString GetLabel() const; virtual wxString GetLabel() const;
virtual wxVisualAttributes GetDefaultAttributes() const; virtual wxVisualAttributes GetDefaultAttributes() const;
protected: protected:
@@ -63,6 +63,7 @@ protected:
virtual wxSize DoGetBestSize() const; virtual wxSize DoGetBestSize() const;
void PostCreation(const wxSize& size); void PostCreation(const wxSize& size);
void PostSetLabel();
#ifdef __WXGTK20__ #ifdef __WXGTK20__
wxString PrepareLabelMnemonics( const wxString &label ) const; wxString PrepareLabelMnemonics( const wxString &label ) const;
@@ -93,6 +94,7 @@ protected:
wxString m_label; wxString m_label;
char m_chAccel; // enabled to avoid breaking binary compatibility later on char m_chAccel; // enabled to avoid breaking binary compatibility later on
bool m_createComplete;
private: private:
DECLARE_DYNAMIC_CLASS(wxControl) DECLARE_DYNAMIC_CLASS(wxControl)

View File

@@ -57,7 +57,8 @@ public:
wxString GetLabel() const; wxString GetLabel() const;
void SetLabel( const wxString &label ); void SetLabel( const wxString &label );
bool SetFont( const wxFont &font ); bool GetAdjustMinSizeFlag() const { return !HasFlag(wxST_NO_AUTORESIZE); }
bool SetForegroundColour( const wxColour& colour ); bool SetForegroundColour( const wxColour& colour );
static wxVisualAttributes static wxVisualAttributes

View File

@@ -40,7 +40,6 @@ public:
// accessors // accessors
void SetLabel( const wxString &str ) ; void SetLabel( const wxString &str ) ;
bool SetFont( const wxFont &font );
protected : protected :

View File

@@ -41,7 +41,6 @@ class WXDLLEXPORT wxStaticText: public wxStaticTextBase
// accessors // accessors
void SetLabel( const wxString &str ) ; void SetLabel( const wxString &str ) ;
bool SetFont( const wxFont &font );
// operations // operations
virtual void Command(wxCommandEvent& WXUNUSED(event)) {}; virtual void Command(wxCommandEvent& WXUNUSED(event)) {};

View File

@@ -45,8 +45,6 @@ public:
virtual void SetValue(bool value); virtual void SetValue(bool value);
virtual bool GetValue() const; virtual bool GetValue() const;
virtual void SetLabel(const wxString& label);
virtual bool MSWCommand(WXUINT param, WXWORD id); virtual bool MSWCommand(WXUINT param, WXWORD id);
virtual void Command(wxCommandEvent& event); virtual void Command(wxCommandEvent& event);

View File

@@ -40,10 +40,6 @@ public:
long style = 0, long style = 0,
const wxString& name = wxStaticTextNameStr); 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: protected:
// implement/override some base class virtuals // implement/override some base class virtuals
virtual wxBorder GetDefaultBorder() const; virtual wxBorder GetDefaultBorder() const;

View File

@@ -45,7 +45,6 @@ public:
virtual bool GetValue() const ; virtual bool GetValue() const ;
virtual bool MSWCommand(WXUINT param, WXWORD id); virtual bool MSWCommand(WXUINT param, WXWORD id);
virtual void SetLabel(const wxString& label);
virtual void Command(wxCommandEvent& event); virtual void Command(wxCommandEvent& event);
protected: protected:

View File

@@ -17,6 +17,8 @@ public:
virtual void ApplyParentThemeBackground(const wxColour& bg) virtual void ApplyParentThemeBackground(const wxColour& bg)
{ SetBackgroundColour(bg); } { SetBackgroundColour(bg); }
bool GetAdjustMinSizeFlag() const { return !HasFlag(wxST_NO_AUTORESIZE); }
private: private:
DECLARE_NO_COPY_CLASS(wxStaticTextBase) DECLARE_NO_COPY_CLASS(wxStaticTextBase)
}; };

View File

@@ -230,6 +230,9 @@ public:
void Move(const wxPoint& pt, int flags = wxSIZE_USE_EXISTING) void Move(const wxPoint& pt, int flags = wxSIZE_USE_EXISTING)
{ Move(pt.x, pt.y, flags); } { 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 // Z-order
virtual void Raise() = 0; virtual void Raise() = 0;
virtual void Lower() = 0; virtual void Lower() = 0;
@@ -1136,15 +1139,10 @@ protected:
static int WidthDefault(int w) { return w == -1 ? 20 : w; } static int WidthDefault(int w) { return w == -1 ? 20 : w; }
static int HeightDefault(int h) { return h == -1 ? 20 : h; } static int HeightDefault(int h) { return h == -1 ? 20 : h; }
// set the best size for the control if the default size was given: // keep the old name for compatibility, at least until all the internal
// replaces the fields of size == -1 with the best values for them and // usages of it are changed to SetBestFittingSize
// calls SetSize() if needed void SetBestSize(const wxSize& size) { SetBestFittingSize(size); }
//
// 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);
// set the initial window size if none is given (i.e. at least one of the // 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) // components of the size passed to ctor/Create() is -1)

View 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, bool wxControlBase::CreateControl(wxWindowBase *parent,
wxWindowID id, wxWindowID id,
const wxPoint& pos, 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
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------

View 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. // If the given size is incomplete then merge with the best size.
wxSize sizeBest; wxSize sizeBest;

View File

@@ -184,6 +184,7 @@ void wxBitmapButton::SetLabel( const wxString &label )
wxCHECK_RET( m_widget != NULL, wxT("invalid button") ); wxCHECK_RET( m_widget != NULL, wxT("invalid button") );
wxControl::SetLabel( label ); wxControl::SetLabel( label );
PostSetLabel();
} }
wxString wxBitmapButton::GetLabel() const wxString wxBitmapButton::GetLabel() const

View File

@@ -175,6 +175,8 @@ void wxButton::SetLabel( const wxString &label )
#else #else
gtk_label_set( GTK_LABEL( BUTTON_CHILD(m_widget) ), wxGTK_CONV( GetLabel() ) ); gtk_label_set( GTK_LABEL( BUTTON_CHILD(m_widget) ), wxGTK_CONV( GetLabel() ) );
#endif #endif
PostSetLabel();
} }
bool wxButton::Enable( bool enable ) bool wxButton::Enable( bool enable )

View File

@@ -158,6 +158,8 @@ void wxCheckBox::SetLabel( const wxString& label )
#else #else
gtk_label_set( GTK_LABEL(m_widgetLabel), wxGTK_CONV( GetLabel() ) ); gtk_label_set( GTK_LABEL(m_widgetLabel), wxGTK_CONV( GetLabel() ) );
#endif #endif
PostSetLabel();
} }
bool wxCheckBox::Enable( bool enable ) bool wxCheckBox::Enable( bool enable )

View File

@@ -33,6 +33,7 @@ IMPLEMENT_DYNAMIC_CLASS(wxControl, wxWindow)
wxControl::wxControl() wxControl::wxControl()
{ {
m_needParent = TRUE; 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 wxValidator& validator,
const wxString &name ) const wxString &name )
{ {
m_createComplete = false;
bool ret = wxWindow::Create(parent, id, pos, size, style, name); bool ret = wxWindow::Create(parent, id, pos, size, style, name);
#if wxUSE_VALIDATORS #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 wxString wxControl::GetLabel() const
{ {
return m_label; return m_label;
@@ -103,6 +113,7 @@ void wxControl::PostCreation(const wxSize& size)
InheritAttributes(); InheritAttributes();
ApplyWidgetStyle(); ApplyWidgetStyle();
SetInitialBestSize(size); SetInitialBestSize(size);
m_createComplete = true;
} }

View File

@@ -540,6 +540,8 @@ void wxRadioBox::SetLabel( const wxString& label )
wxControl::SetLabel( label ); wxControl::SetLabel( label );
gtk_frame_set_label( GTK_FRAME(m_widget), wxGTK_CONV( wxControl::GetLabel() ) ); 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 )

View File

@@ -145,6 +145,8 @@ void wxRadioButton::SetLabel( const wxString& label )
#else #else
gtk_label_set( g_label, wxGTK_CONV( GetLabel() ) ); gtk_label_set( g_label, wxGTK_CONV( GetLabel() ) );
#endif #endif
PostSetLabel();
} }
void wxRadioButton::SetValue( bool val ) void wxRadioButton::SetValue( bool val )

View File

@@ -89,6 +89,7 @@ void wxStaticBox::SetLabel( const wxString &label )
gtk_frame_set_label( GTK_FRAME( m_widget ), gtk_frame_set_label( GTK_FRAME( m_widget ),
m_label.empty() ? (char *)NULL : (const char*) wxGTK_CONV( m_label ) ); m_label.empty() ? (char *)NULL : (const char*) wxGTK_CONV( m_label ) );
PostSetLabel();
} }
// static // static

View File

@@ -146,27 +146,10 @@ void wxStaticText::SetLabel( const wxString &label )
#else #else
gtk_label_set( GTK_LABEL(m_widget), wxGTK_CONV( m_label ) ); gtk_label_set( GTK_LABEL(m_widget), wxGTK_CONV( m_label ) );
#endif #endif
// adjust the label size to the new label unless disabled PostSetLabel();
if (!HasFlag(wxST_NO_AUTORESIZE))
{
SetSize( GetBestSize() );
SetSizeHints(GetSize());
}
} }
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
{ {

View File

@@ -287,6 +287,8 @@ void wxToggleButton::SetLabel(const wxString& label)
wxControl::SetLabel(label); wxControl::SetLabel(label);
gtk_label_set(GTK_LABEL(BUTTON_CHILD(m_widget)), wxGTK_CONV( GetLabel() ) ); 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*/)

View 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();

View File

@@ -184,6 +184,7 @@ void wxBitmapButton::SetLabel( const wxString &label )
wxCHECK_RET( m_widget != NULL, wxT("invalid button") ); wxCHECK_RET( m_widget != NULL, wxT("invalid button") );
wxControl::SetLabel( label ); wxControl::SetLabel( label );
PostSetLabel();
} }
wxString wxBitmapButton::GetLabel() const wxString wxBitmapButton::GetLabel() const

View File

@@ -175,6 +175,8 @@ void wxButton::SetLabel( const wxString &label )
#else #else
gtk_label_set( GTK_LABEL( BUTTON_CHILD(m_widget) ), wxGTK_CONV( GetLabel() ) ); gtk_label_set( GTK_LABEL( BUTTON_CHILD(m_widget) ), wxGTK_CONV( GetLabel() ) );
#endif #endif
PostSetLabel();
} }
bool wxButton::Enable( bool enable ) bool wxButton::Enable( bool enable )

View File

@@ -158,6 +158,8 @@ void wxCheckBox::SetLabel( const wxString& label )
#else #else
gtk_label_set( GTK_LABEL(m_widgetLabel), wxGTK_CONV( GetLabel() ) ); gtk_label_set( GTK_LABEL(m_widgetLabel), wxGTK_CONV( GetLabel() ) );
#endif #endif
PostSetLabel();
} }
bool wxCheckBox::Enable( bool enable ) bool wxCheckBox::Enable( bool enable )

View File

@@ -33,6 +33,7 @@ IMPLEMENT_DYNAMIC_CLASS(wxControl, wxWindow)
wxControl::wxControl() wxControl::wxControl()
{ {
m_needParent = TRUE; 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 wxValidator& validator,
const wxString &name ) const wxString &name )
{ {
m_createComplete = false;
bool ret = wxWindow::Create(parent, id, pos, size, style, name); bool ret = wxWindow::Create(parent, id, pos, size, style, name);
#if wxUSE_VALIDATORS #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 wxString wxControl::GetLabel() const
{ {
return m_label; return m_label;
@@ -103,6 +113,7 @@ void wxControl::PostCreation(const wxSize& size)
InheritAttributes(); InheritAttributes();
ApplyWidgetStyle(); ApplyWidgetStyle();
SetInitialBestSize(size); SetInitialBestSize(size);
m_createComplete = true;
} }

View File

@@ -540,6 +540,8 @@ void wxRadioBox::SetLabel( const wxString& label )
wxControl::SetLabel( label ); wxControl::SetLabel( label );
gtk_frame_set_label( GTK_FRAME(m_widget), wxGTK_CONV( wxControl::GetLabel() ) ); 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 )

View File

@@ -145,6 +145,8 @@ void wxRadioButton::SetLabel( const wxString& label )
#else #else
gtk_label_set( g_label, wxGTK_CONV( GetLabel() ) ); gtk_label_set( g_label, wxGTK_CONV( GetLabel() ) );
#endif #endif
PostSetLabel();
} }
void wxRadioButton::SetValue( bool val ) void wxRadioButton::SetValue( bool val )

View File

@@ -89,6 +89,7 @@ void wxStaticBox::SetLabel( const wxString &label )
gtk_frame_set_label( GTK_FRAME( m_widget ), gtk_frame_set_label( GTK_FRAME( m_widget ),
m_label.empty() ? (char *)NULL : (const char*) wxGTK_CONV( m_label ) ); m_label.empty() ? (char *)NULL : (const char*) wxGTK_CONV( m_label ) );
PostSetLabel();
} }
// static // static

View File

@@ -146,27 +146,10 @@ void wxStaticText::SetLabel( const wxString &label )
#else #else
gtk_label_set( GTK_LABEL(m_widget), wxGTK_CONV( m_label ) ); gtk_label_set( GTK_LABEL(m_widget), wxGTK_CONV( m_label ) );
#endif #endif
// adjust the label size to the new label unless disabled PostSetLabel();
if (!HasFlag(wxST_NO_AUTORESIZE))
{
SetSize( GetBestSize() );
SetSizeHints(GetSize());
}
} }
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
{ {

View File

@@ -287,6 +287,8 @@ void wxToggleButton::SetLabel(const wxString& label)
wxControl::SetLabel(label); wxControl::SetLabel(label);
gtk_label_set(GTK_LABEL(BUTTON_CHILD(m_widget)), wxGTK_CONV( GetLabel() ) ); 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*/)

View 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();

View File

@@ -92,27 +92,9 @@ void wxStaticText::SetLabel(const wxString& st )
SetControlData( *m_peer, kControlEntireControl , kControlStaticTextCFStringTag, sizeof( CFStringRef ), SetControlData( *m_peer, kControlEntireControl , kControlStaticTextCFStringTag, sizeof( CFStringRef ),
&ref ); &ref );
if ( !(GetWindowStyle() & wxST_NO_AUTORESIZE) ) if (GetAdjustMinSizeFlag())
{ SetBestSize(wxDefaultSize);
SetSize( GetBestSize() ) ;
SetSizeHints(GetSize());
}
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;
}

View File

@@ -232,31 +232,11 @@ void wxStaticText::SetLabel(const wxString& st )
{ {
SetTitle( st ) ; SetTitle( st ) ;
m_label = st ; m_label = st ;
if ( !(GetWindowStyle() & wxST_NO_AUTORESIZE) )
{ if (GetAdjustMinSizeFlag())
// temporary fix until layout measurement and drawing are in synch again SetBestSize(wxDefaultSize);
Refresh() ;
SetSize( GetBestSize() ) ;
}
Refresh() ; Refresh() ;
Update() ; 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;
}

View 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
{ {

View 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

View 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 wxSize wxToggleButton::DoGetBestSize() const
{ {
wxString label = wxGetWindowText(GetHWND()); wxString label = wxGetWindowText(GetHWND());

View File

@@ -77,6 +77,20 @@ __init__ as a plain old wx.Control is not very useful.", "");
void , SetLabel(const wxString& label), void , SetLabel(const wxString& label),
"Sets the item's text.", ""); "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 static wxVisualAttributes
GetClassDefaultAttributes(wxWindowVariant variant = wxWINDOW_VARIANT_NORMAL); GetClassDefaultAttributes(wxWindowVariant variant = wxWINDOW_VARIANT_NORMAL);

View File

@@ -415,8 +415,13 @@ default values.", "",
"Moves the window to the given position.", "", "Moves the window to the given position.", "",
MoveXY); 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( DocDeclStr(
virtual void , Raise(), virtual void , Raise(),
"Raises the window to the top of the window hierarchy if it is a "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 "Sets the background colour of the window. Returns True if the colour
was changed. The background colour is usually painted by the default was changed. The background colour is usually painted by the default
EVT_ERASE_BACKGROUND event handler function under Windows and 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 Using this function will disable attempts to use themes for this
window might not look equally well when used with themes, i.e GTK+'s window, if the system supports them. Use with care since usually the
ability to change its look as the user wishes with run-time loadable themes represent the appearance chosen by the user to be used for all
modules.", ""); applications on the system.", "");
DocDeclStr( DocDeclStr(
void , SetDefaultBackgroundColour(const wxColour& colour), void , SetDefaultBackgroundColour(const wxColour& colour),