git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@60335
c3d73ce0-8a6f-49c7-b76d-
6d57e0e08775
documented TryBefore/After() methods if you used to override these ones.
- wxGetMultipleChoices() is deprecated, use wxGetSelectedChoices() which has
the same signature but returns -1 and not 0 if the dialog was cancelled.
documented TryBefore/After() methods if you used to override these ones.
- wxGetMultipleChoices() is deprecated, use wxGetSelectedChoices() which has
the same signature but returns -1 and not 0 if the dialog was cancelled.
+- building the windows which are placed inside wxStaticBoxes as siblings of the
+ wxStaticBox is still allowed but it's deprecated as it gives some problems
+ on some ports (e.g. wxGTK).
+ You should now create windows placed inside a wxStaticBox as children of
+ the static box itself.
Major new features in this release
----------------------------------
Major new features in this release
----------------------------------
virtual void GetBordersForSizer(int *borderTop, int *borderOther) const;
virtual void GetBordersForSizer(int *borderTop, int *borderOther) const;
+ virtual void AddChild( wxWindowBase *child );
+
protected:
virtual bool GTKWidgetNeedsMnemonic() const;
virtual void GTKWidgetDoSetMnemonic(GtkWidget* w);
protected:
virtual bool GTKWidgetNeedsMnemonic() const;
virtual void GTKWidgetDoSetMnemonic(GtkWidget* w);
The static box may be either created independently or the sizer may create it
itself as a convenience. In any case, the sizer owns the wxStaticBox control
and will delete it in the wxStaticBoxSizer destructor.
The static box may be either created independently or the sizer may create it
itself as a convenience. In any case, the sizer owns the wxStaticBox control
and will delete it in the wxStaticBoxSizer destructor.
+
+ Note that since wxWidgets 2.9.0 you are encouraged to build the windows which are
+ placed inside wxStaticBoxes as children of the wxStaticBox itself:
+ @code
+ ...
+ wxStaticBoxSizer *sz = new wxStaticBoxSizer(wxVERTICAL, parentWindow, "StaticBox");
+ sz->Add(new wxStaticText(sz->GetStaticBox(), "This window is a child of the staticbox"));
+ ...
+ @endcode
+
+ Creating the windows which are placed inside wxStaticBoxes as siblings of the
+ wxStaticBox is still allowed but it's deprecated as it gives some problems
+ (e.g. relative to tooltips) on some ports.
@library{wxcore}
@category{winlayout}
@library{wxcore}
@category{winlayout}
A static box is a rectangle drawn around other windows to denote
a logical grouping of items.
A static box is a rectangle drawn around other windows to denote
a logical grouping of items.
- Please note that a static box should @b not be used as the parent for the
- controls it contains, instead they should be @b siblings of each other.
- Although using a static box as a parent might work in some ports of wxWidgets,
- it would result in a crash under, for example, wxGTK, and thus it's explicitely
- disallowed (an assertion will fail if you try to add children to a wxStaticBox).
+ Note that since wxWidgets 2.9.0 you are encouraged to build the windows which are
+ placed inside wxStaticBoxes as children of the wxStaticBox itself:
+ @code
+ ...
+ wxStaticBox *stbox = new wxStaticBox(parentWindow, wxID_ANY, "StaticBox");
- Also, please note that because of this, the order in which you create new
- controls is important. Create your wxStaticBox control @b before any
- siblings that are to appear inside the wxStaticBox in order to preserve the
- correct Z-order of controls.
+ new wxStaticText(stbox, "This window is a child of the staticbox");
+ ...
+ @endcode
- You may want to use wxStaticBoxSizer instead of wxStaticBox to avoid this problem.
+ Creating the windows which are placed inside wxStaticBoxes as siblings of the
+ wxStaticBox is still allowed but it's deprecated as it gives some problems
+ (e.g. relative to tooltips) on some ports.
+
+ Also note that there is a specialized wxSizer class (wxStaticBoxSizer) which can
+ be used as an easier way to pack items into a static box.
@library{wxcore}
@category{ctrl}
@library{wxcore}
@category{ctrl}
const wxValidator& wxVALIDATOR_PARAM(validator),
const wxString& name)
{
const wxValidator& wxVALIDATOR_PARAM(validator),
const wxString& name)
{
-#if wxUSE_STATBOX
- // wxGTK doesn't allow to create controls with static box as the parent so
- // this will result in a crash when the program is ported to wxGTK so warn
- // the user about it
-
- // if you get this assert, the correct solution is to create the controls
- // as siblings of the static box
- wxASSERT_MSG( !parent || !wxDynamicCast(parent, wxStaticBox),
- _T("wxStaticBox can't be used as a window parent!") );
-#endif // wxUSE_STATBOX
-
// ids are limited to 16 bits under MSW so if you care about portability,
// it's not a good idea to use ids out of this range (and negative ids are
// reserved for wxWidgets own usage)
// ids are limited to 16 bits under MSW so if you care about portability,
// it's not a good idea to use ids out of this range (and negative ids are
// reserved for wxWidgets own usage)
#if wxUSE_STATBOX
#include "wx/statbox.h"
#if wxUSE_STATBOX
#include "wx/statbox.h"
+#include "wx/gtk/private/win_gtk.h" // for wxPizza
GtkWidget* label_widget = gtk_frame_get_label_widget(GTK_FRAME(widget));
int w = alloc->width -
2 * widget->style->xthickness - 2 * LABEL_PAD - 2 * LABEL_SIDE_PAD;
GtkWidget* label_widget = gtk_frame_get_label_widget(GTK_FRAME(widget));
int w = alloc->width -
2 * widget->style->xthickness - 2 * LABEL_PAD - 2 * LABEL_SIDE_PAD;
if (label_widget->allocation.width > w)
{
GtkAllocation alloc2 = label_widget->allocation;
if (label_widget->allocation.width > w)
{
GtkAllocation alloc2 = label_widget->allocation;
m_widget = GTKCreateFrame(label);
g_object_ref(m_widget);
m_widget = GTKCreateFrame(label);
g_object_ref(m_widget);
// only base SetLabel needs to be called after GTKCreateFrame
wxControl::SetLabel(label);
// only base SetLabel needs to be called after GTKCreateFrame
wxControl::SetLabel(label);
if (gtk_check_version(2, 12, 0))
{
if (gtk_check_version(2, 12, 0))
{
- // for clipping label as GTK >= 2.12 does
- g_signal_connect(m_widget, "size_allocate",
- G_CALLBACK(size_allocate), NULL);
+ // we connect this signal to perform label-clipping as GTK >= 2.12 does
+ g_signal_connect(m_widget, "size_allocate", G_CALLBACK(size_allocate), NULL);
+void wxStaticBox::AddChild( wxWindowBase *child )
+{
+ if (!m_wxwindow)
+ {
+ // make this window a container of other wxWindows by instancing a wxPizza
+ // and packing it into the GtkFrame:
+ m_wxwindow = wxPizza::New( 0, this );
+ gtk_widget_show( m_wxwindow );
+ gtk_container_add( GTK_CONTAINER (m_widget), m_wxwindow );
+ }
+
+ wxWindow::AddChild( child );
+}
+
void wxStaticBox::SetLabel( const wxString& label )
{
wxCHECK_RET( m_widget != NULL, wxT("invalid staticbox") );
void wxStaticBox::SetLabel( const wxString& label )
{
wxCHECK_RET( m_widget != NULL, wxT("invalid staticbox") );