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)
- wxCalendarCtrl now highlighting the date with time part bug fixed
- wxADJUST_MINSIZE sizer flag added
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
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.}

View File

@@ -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);
}
else
{
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;
}
/*
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;
ret = m_minSize;
}
if (m_flag & wxWEST)
ret.x += m_border;