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}
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}}
\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}
// wxControl is the base class for all controls
// ----------------------------------------------------------------------------
+
class WXDLLEXPORT wxControlBase : public wxWindow
{
public:
- wxControlBase() { }
+ wxControlBase() { Init(); }
virtual ~wxControlBase();
// 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,
SetBestSize(size);
}
+ // should minsize and size be adjusted when font or label change?
+ bool m_adjustMinSize;
+
DECLARE_NO_COPY_CLASS(wxControlBase)
};
// 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 wxSize DoGetBestSize() const;
void PostCreation(const wxSize& size);
+ void PostSetLabel();
#ifdef __WXGTK20__
wxString PrepareLabelMnemonics( const wxString &label ) const;
wxString m_label;
char m_chAccel; // enabled to avoid breaking binary compatibility later on
+ bool m_createComplete;
private:
DECLARE_DYNAMIC_CLASS(wxControl)
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
// 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 wxSize DoGetBestSize() const;
void PostCreation(const wxSize& size);
+ void PostSetLabel();
#ifdef __WXGTK20__
wxString PrepareLabelMnemonics( const wxString &label ) const;
wxString m_label;
char m_chAccel; // enabled to avoid breaking binary compatibility later on
+ bool m_createComplete;
private:
DECLARE_DYNAMIC_CLASS(wxControl)
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
// accessors
void SetLabel( const wxString &str ) ;
- bool SetFont( const wxFont &font );
protected :
// accessors
void SetLabel( const wxString &str ) ;
- bool SetFont( const wxFont &font );
// operations
virtual void Command(wxCommandEvent& WXUNUSED(event)) {};
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);
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;
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 ApplyParentThemeBackground(const wxColour& bg)
{ SetBackgroundColour(bg); }
+ bool GetAdjustMinSizeFlag() const { return !HasFlag(wxST_NO_AUTORESIZE); }
+
private:
DECLARE_NO_COPY_CLASS(wxStaticTextBase)
};
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;
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)
return ret;
}
+
+void wxControlBase::Init()
+{
+ m_adjustMinSize = true;
+}
+
+
bool wxControlBase::CreateControl(wxWindowBase *parent,
wxWindowID id,
const wxPoint& pos,
}
}
+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
// ----------------------------------------------------------------------------
}
}
-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;
wxCHECK_RET( m_widget != NULL, wxT("invalid button") );
wxControl::SetLabel( label );
+ PostSetLabel();
}
wxString wxBitmapButton::GetLabel() const
#else
gtk_label_set( GTK_LABEL( BUTTON_CHILD(m_widget) ), wxGTK_CONV( GetLabel() ) );
#endif
+
+ PostSetLabel();
}
bool wxButton::Enable( bool enable )
#else
gtk_label_set( GTK_LABEL(m_widgetLabel), wxGTK_CONV( GetLabel() ) );
#endif
+
+ PostSetLabel();
}
bool wxCheckBox::Enable( bool enable )
wxControl::wxControl()
{
m_needParent = TRUE;
+ m_createComplete = false;
}
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
}
}
+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;
InheritAttributes();
ApplyWidgetStyle();
SetInitialBestSize(size);
+ m_createComplete = true;
}
wxControl::SetLabel( label );
gtk_frame_set_label( GTK_FRAME(m_widget), wxGTK_CONV( wxControl::GetLabel() ) );
+
+ PostSetLabel();
}
void wxRadioBox::SetString( int item, const wxString& label )
#else
gtk_label_set( g_label, wxGTK_CONV( GetLabel() ) );
#endif
+
+ PostSetLabel();
}
void wxRadioButton::SetValue( bool val )
gtk_frame_set_label( GTK_FRAME( m_widget ),
m_label.empty() ? (char *)NULL : (const char*) wxGTK_CONV( m_label ) );
+ PostSetLabel();
}
// static
#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
{
wxControl::SetLabel(label);
gtk_label_set(GTK_LABEL(BUTTON_CHILD(m_widget)), wxGTK_CONV( GetLabel() ) );
+
+ PostSetLabel();
}
bool wxToggleButton::Enable(bool enable /*=TRUE*/)
#endif
}
- if ( m_hasFgCol )
+ if ( m_foregroundColour.Ok() )
{
GdkColor *fg = m_foregroundColour.GetColor();
style->color_flags[GTK_STATE_ACTIVE] = GTK_RC_FG;
}
- if ( m_hasBgCol )
+ if ( m_backgroundColour.Ok() )
{
GdkColor *bg = m_backgroundColour.GetColor();
wxCHECK_RET( m_widget != NULL, wxT("invalid button") );
wxControl::SetLabel( label );
+ PostSetLabel();
}
wxString wxBitmapButton::GetLabel() const
#else
gtk_label_set( GTK_LABEL( BUTTON_CHILD(m_widget) ), wxGTK_CONV( GetLabel() ) );
#endif
+
+ PostSetLabel();
}
bool wxButton::Enable( bool enable )
#else
gtk_label_set( GTK_LABEL(m_widgetLabel), wxGTK_CONV( GetLabel() ) );
#endif
+
+ PostSetLabel();
}
bool wxCheckBox::Enable( bool enable )
wxControl::wxControl()
{
m_needParent = TRUE;
+ m_createComplete = false;
}
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
}
}
+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;
InheritAttributes();
ApplyWidgetStyle();
SetInitialBestSize(size);
+ m_createComplete = true;
}
wxControl::SetLabel( label );
gtk_frame_set_label( GTK_FRAME(m_widget), wxGTK_CONV( wxControl::GetLabel() ) );
+
+ PostSetLabel();
}
void wxRadioBox::SetString( int item, const wxString& label )
#else
gtk_label_set( g_label, wxGTK_CONV( GetLabel() ) );
#endif
+
+ PostSetLabel();
}
void wxRadioButton::SetValue( bool val )
gtk_frame_set_label( GTK_FRAME( m_widget ),
m_label.empty() ? (char *)NULL : (const char*) wxGTK_CONV( m_label ) );
+ PostSetLabel();
}
// static
#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
{
wxControl::SetLabel(label);
gtk_label_set(GTK_LABEL(BUTTON_CHILD(m_widget)), wxGTK_CONV( GetLabel() ) );
+
+ PostSetLabel();
}
bool wxToggleButton::Enable(bool enable /*=TRUE*/)
#endif
}
- if ( m_hasFgCol )
+ if ( m_foregroundColour.Ok() )
{
GdkColor *fg = m_foregroundColour.GetColor();
style->color_flags[GTK_STATE_ACTIVE] = GTK_RC_FG;
}
- if ( m_hasBgCol )
+ if ( m_backgroundColour.Ok() )
{
GdkColor *bg = m_backgroundColour.GetColor();
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;
-}
{
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;
-}
return MSWCreateControl(wxT("BUTTON"), msStyle, pos, size, label, 0);
}
-void wxCheckBox::SetLabel(const wxString& label)
-{
- SetWindowText(GetHwnd(), label);
-}
wxSize wxCheckBox::DoGetBestSize() const
{
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
return msStyle;
}
-void wxToggleButton::SetLabel(const wxString& label)
-{
- SetWindowText(GetHwnd(), label);
-}
-
wxSize wxToggleButton::DoGetBestSize() const
{
wxString label = wxGetWindowText(GetHWND());
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);
"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
"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),