added wxADJUST_MINSIZE sizer flag

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@9369 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2001-02-14 14:13:38 +00:00
parent f41cb81efc
commit d13d8d4e5f
3 changed files with 41 additions and 25 deletions

View File

@@ -18,6 +18,7 @@ All (GUI):
- new wxToggleButton class (John Norris, Axel Schlueter) - new wxToggleButton class (John Norris, Axel Schlueter)
- wxCalendarCtrl now highlighting the date with time part bug fixed - wxCalendarCtrl now highlighting the date with time part bug fixed
- wxADJUST_MINSIZE sizer flag added
wxMSW: wxMSW:

View File

@@ -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 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.} 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 \docparam{flag}{This parameter can be used to set a number of flags which can
the binary OR operator |. Two main behaviours are defined using these flags. One is the border be combined using the binary OR operator |. Two main behaviours are defined
around a window: the {\it border} parameter determines the border width whereas the flags given here using these flags. One is the border around a window: the {\it border}
determine where the border may be (wxTOP, wxBOTTOM, wxLEFT, wxRIGHT or wxALL). The other flags parameter determines the border width whereas the flags given here determine
determine the child window's behaviour if the size of the sizer changes. However this is not - in contrast to where the border may be (wxTOP, wxBOTTOM, wxLEFT, wxRIGHT or wxALL). The other
the {\it option} flag - in the main orientation, but in the respectively other orientation. So flags determine the child window's behaviour if the size of the sizer changes.
if you created a wxBoxSizer with the wxVERTICAL option, these flags will be relevant if the However this is not - in contrast to the {\it option} flag - in the main
sizer changes its horizontal size. A child may get resized to completely fill out the new size (using orientation, but in the respectively other orientation. So if you created a
either wxGROW or wxEXPAND), it may get proportionally resized (wxSHAPED), it may get centered (wxALIGN\_CENTER wxBoxSizer with the wxVERTICAL option, these flags will be relevant if the
or wxALIGN\_CENTRE) or it may get aligned to either side (wxALIGN\_LEFT and wxALIGN\_TOP are set to 0 sizer changes its horizontal size. A child may get resized to completely fill
and thus represent the default, wxALIGN\_RIGHT and wxALIGN\_BOTTOM have their obvious meaning). out the new size (using either wxGROW or wxEXPAND), it may get proportionally
With proportional resize, a child may also be centered in the main orientation using resized (wxSHAPED), it may get centered (wxALIGN\_CENTER or wxALIGN\_CENTRE)
wxALIGN\_CENTER\_VERTICAL (same as wxALIGN\_CENTRE\_VERTICAL) and wxALIGN\_CENTER\_HORIZONTAL or it may get aligned to either side (wxALIGN\_LEFT and wxALIGN\_TOP are set
(same as wxALIGN\_CENTRE\_HORIZONTAL) flags.} 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.} \docparam{border}{Determines the border width, if the {\it flag} parameter is set to any border.}

View File

@@ -133,21 +133,28 @@ wxSize wxSizerItem::CalcMin()
if (IsSizer()) if (IsSizer())
{ {
ret = m_sizer->GetMinSize(); ret = m_sizer->GetMinSize();
// if we have to preserve aspect ratio _AND_ this is // if we have to preserve aspect ratio _AND_ this is
// the first-time calculation, consider ret to be initial size // 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 else
if (IsWindow()) {
ret = m_window->GetSize(); if ( IsWindow() && (m_flag & wxADJUST_MINSIZE) )
*/ {
else ret = m_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) if (m_flag & wxWEST)
ret.x += m_border; ret.x += m_border;