From 1a2df6a75b3d96b35e29b1cf392758cbeeef93e0 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Tue, 15 Sep 2009 17:05:32 +0000 Subject: [PATCH] Change wxBoxSizer::AddSpacer() to only add space in sizer direction. It used to add a spacer with the given size in both directions but this was counter-intuitive and wasn't expected even by the original author of this code so change it to behave more reasonably. Closes #11197. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@61939 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- docs/changes.txt | 5 +++++ include/wx/sizer.h | 4 +++- interface/wx/sizer.h | 22 ++++++++++++++++++++-- src/common/sizer.cpp | 5 +++++ 4 files changed, 33 insertions(+), 3 deletions(-) diff --git a/docs/changes.txt b/docs/changes.txt index 9862a02889..9657620a73 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -149,6 +149,11 @@ Changes in behaviour not resulting in compilation errors, please read this! new constructors taking wxSize for the gap argument is preferred. The same applies to wxFlexGridSizer as well. +- wxBoxSizer::AddSpacer(x) now adds space in the direction of the sizer only + and not in both this and the orthogonal directions. This behaviour is what + most of the people expect but if you really relied on this overload adding + space in both directions you should change your code to use AddSpacer(x, x). + Changes in behaviour which may result in compilation errors ----------------------------------------------------------- diff --git a/include/wx/sizer.h b/include/wx/sizer.h index 289b765d80..f4b0b4ba8a 100644 --- a/include/wx/sizer.h +++ b/include/wx/sizer.h @@ -510,7 +510,7 @@ public: wxSizerItem* Add( int width, int height, const wxSizerFlags& flags); wxSizerItem* Add( wxSizerItem *item); - wxSizerItem* AddSpacer(int size); + virtual wxSizerItem *AddSpacer(int size); wxSizerItem* AddStretchSpacer(int prop = 1); wxSizerItem* Insert(size_t index, @@ -913,6 +913,8 @@ public: wxT("invalid value for wxBoxSizer orientation") ); } + virtual wxSizerItem *AddSpacer(int size); + int GetOrientation() const { return m_orient; } bool IsVertical() const { return m_orient == wxVERTICAL; } diff --git a/interface/wx/sizer.h b/interface/wx/sizer.h index 1423c6d485..cfd1dd841c 100644 --- a/interface/wx/sizer.h +++ b/interface/wx/sizer.h @@ -291,13 +291,15 @@ public: wxObject* userData = NULL); /** - Adds non-stretchable space to the sizer. + This base function adds non-stretchable space to both the horizontal + and vertical orientation of the sizer. More readable way of calling: @code wxSizer::Add(size, size, 0). @endcode + @see wxBoxSizer::AddSpacer() */ - wxSizerItem* AddSpacer(int size); + virtual wxSizerItem *AddSpacer(int size); /** Adds stretchable space to the sizer. @@ -1747,6 +1749,22 @@ public: */ wxBoxSizer(int orient); + /** + Adds non-stretchable space to the main orientation of the sizer only. + More readable way of calling: + @code + if ( wxBoxSizer::IsVertical() ) + { + wxBoxSizer::Add(0, size, 0). + } + else + { + wxBoxSizer::Add(size, 0, 0). + } + @endcode + */ + virtual wxSizerItem *AddSpacer(int size); + /** Implements the calculation of a box sizer's minimal. diff --git a/src/common/sizer.cpp b/src/common/sizer.cpp index 01180b5374..1325015a26 100644 --- a/src/common/sizer.cpp +++ b/src/common/sizer.cpp @@ -1982,6 +1982,11 @@ void wxFlexGridSizer::RemoveGrowableRow( size_t idx ) // wxBoxSizer //--------------------------------------------------------------------------- +wxSizerItem *wxBoxSizer::AddSpacer(int size) +{ + return IsVertical() ? Add(0, size) : Add(size, 0); +} + void wxBoxSizer::RecalcSizes() { if ( m_children.empty() ) -- 2.45.2