From d13d8d4e5f03c0f54af4589bc285fd3e4af48b3b Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Wed, 14 Feb 2001 14:13:38 +0000 Subject: [PATCH] added wxADJUST_MINSIZE sizer flag git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@9369 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- docs/changes.txt | 1 + docs/latex/wx/sizer.tex | 36 ++++++++++++++++++++++-------------- src/common/sizer.cpp | 29 ++++++++++++++++++----------- 3 files changed, 41 insertions(+), 25 deletions(-) diff --git a/docs/changes.txt b/docs/changes.txt index 665ee2b71f..5a882d41f9 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -18,6 +18,7 @@ All (GUI): - new wxToggleButton class (John Norris, Axel Schlueter) - wxCalendarCtrl now highlighting the date with time part bug fixed +- wxADJUST_MINSIZE sizer flag added wxMSW: diff --git a/docs/latex/wx/sizer.tex b/docs/latex/wx/sizer.tex index 7c83d6edc9..07173e7725 100644 --- a/docs/latex/wx/sizer.tex +++ b/docs/latex/wx/sizer.tex @@ -80,20 +80,28 @@ children of the same wxBoxSizer. For example, you might have a horizontal wxBoxS of which are supposed to change their size with the sizer. Then the two stretchable windows would get a value of 1 each to make them grow and shrink equally with the sizer's horizontal dimension.} -\docparam{flag}{This parameter can be used to set a number of flags which can be combined using -the binary OR operator |. Two main behaviours are defined using these flags. One is the border -around a window: the {\it border} parameter determines the border width whereas the flags given here -determine where the border may be (wxTOP, wxBOTTOM, wxLEFT, wxRIGHT or wxALL). The other flags -determine the child window's behaviour if the size of the sizer changes. However this is not - in contrast to -the {\it option} flag - in the main orientation, but in the respectively other orientation. So -if you created a wxBoxSizer with the wxVERTICAL option, these flags will be relevant if the -sizer changes its horizontal size. A child may get resized to completely fill out the new size (using -either wxGROW or wxEXPAND), it may get proportionally resized (wxSHAPED), it may get centered (wxALIGN\_CENTER -or wxALIGN\_CENTRE) or it may get aligned to either side (wxALIGN\_LEFT and wxALIGN\_TOP are set to 0 -and thus represent the default, wxALIGN\_RIGHT and wxALIGN\_BOTTOM have their obvious meaning). -With proportional resize, a child may also be centered in the main orientation using -wxALIGN\_CENTER\_VERTICAL (same as wxALIGN\_CENTRE\_VERTICAL) and wxALIGN\_CENTER\_HORIZONTAL -(same as wxALIGN\_CENTRE\_HORIZONTAL) flags.} +\docparam{flag}{This parameter can be used to set a number of flags which can +be combined using the binary OR operator |. Two main behaviours are defined +using these flags. One is the border around a window: the {\it border} +parameter determines the border width whereas the flags given here determine +where the border may be (wxTOP, wxBOTTOM, wxLEFT, wxRIGHT or wxALL). The other +flags determine the child window's behaviour if the size of the sizer changes. +However this is not - in contrast to the {\it option} flag - in the main +orientation, but in the respectively other orientation. So if you created a +wxBoxSizer with the wxVERTICAL option, these flags will be relevant if the +sizer changes its horizontal size. A child may get resized to completely fill +out the new size (using either wxGROW or wxEXPAND), it may get proportionally +resized (wxSHAPED), it may get centered (wxALIGN\_CENTER or wxALIGN\_CENTRE) +or it may get aligned to either side (wxALIGN\_LEFT and wxALIGN\_TOP are set +to 0 and thus represent the default, wxALIGN\_RIGHT and wxALIGN\_BOTTOM have +their obvious meaning). With proportional resize, a child may also be centered +in the main orientation using wxALIGN\_CENTER\_VERTICAL (same as +wxALIGN\_CENTRE\_VERTICAL) and wxALIGN\_CENTER\_HORIZONTAL (same as +wxALIGN\_CENTRE\_HORIZONTAL) flags. Finally, you can also specify +wxAGJUST\_MIN flag to make the minimal size of the control dynamically adjust +to the value returned by its \helpref{GetBestSize()}{wxwindowgetbestsize} +method - this allows, for example, for correct relayouting of a static text +control even if its text is changed during run-time.} \docparam{border}{Determines the border width, if the {\it flag} parameter is set to any border.} diff --git a/src/common/sizer.cpp b/src/common/sizer.cpp index 0a92ab0569..c49530577e 100644 --- a/src/common/sizer.cpp +++ b/src/common/sizer.cpp @@ -133,21 +133,28 @@ wxSize wxSizerItem::CalcMin() if (IsSizer()) { ret = m_sizer->GetMinSize(); + // if we have to preserve aspect ratio _AND_ this is // the first-time calculation, consider ret to be initial size - if ((m_flag & wxSHAPED) && !m_ratio) SetRatio(ret); + if ((m_flag & wxSHAPED) && !m_ratio) + SetRatio(ret); } - -/* - The minimum size of a window should be the - initial size, as saved in m_minSize, not the - current size. - else - if (IsWindow()) - ret = m_window->GetSize(); -*/ - else ret = m_minSize; + { + if ( IsWindow() && (m_flag & wxADJUST_MINSIZE) ) + { + // check if the best (minimal, in fact) window size hadn't changed + // by chance: this may happen for, e.g. static text if its label + // changed + wxSize size = m_window->GetBestSize(); + if ( size.x > m_minSize.x ) + m_minSize.x = size.x; + if ( size.y > m_minSize.y ) + m_minSize.y = size.y; + } + + ret = m_minSize; + } if (m_flag & wxWEST) ret.x += m_border; -- 2.45.2