X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e11d436ba0033d940bd738694eba994b021ce704..7fa4dc1cfcc55b0fe425a3ebe5e992ff8255481b:/src/common/sizer.cpp diff --git a/src/common/sizer.cpp b/src/common/sizer.cpp index 4cee972c00..c2320a4d5a 100644 --- a/src/common/sizer.cpp +++ b/src/common/sizer.cpp @@ -193,13 +193,16 @@ wxSize wxSizerItem::CalcMin() } else { - if ( IsWindow() && (m_flag & wxADJUST_MINSIZE) ) + if ( IsWindow() && !(m_flag & wxFIXED_MINSIZE) ) { - // By user request, keep the minimal size for this item - // in sync with the largest of BestSize and any user supplied - // minimum size hint. Useful in cases where the item is - // changeable -- static text labels, etc. - m_minSize = m_window->GetAdjustedBestSize(); + // Since the size of the window may change during runtime, we + // should use the current minimal size. If there is a MinSize, + // use it, otherwise use the BestSize. + wxSize min = m_window->GetMinSize(); + wxSize best = m_window->GetBestSize(); + if (min.x == -1) min.x = best.x; + if (min.y == -1) min.y = best.y; + m_minSize = min; } ret = m_minSize; @@ -282,7 +285,10 @@ void wxSizerItem::SetDimension( wxPoint pos, wxSize size ) void wxSizerItem::DeleteWindows() { if (m_window) + { m_window->Destroy(); + m_window = NULL; + } if (m_sizer) m_sizer->DeleteWindows(); @@ -737,7 +743,7 @@ bool wxSizer::DoSetItemMinSize( wxWindow *window, int width, int height ) if (item->GetWindow() == window) { - item->SetInitSize( width, height ); + item->SetMinSize( width, height ); return true; } node = node->GetNext(); @@ -816,7 +822,7 @@ bool wxSizer::DoSetItemMinSize( size_t index, int width, int height ) else { // ... but the minimal size of spacers and windows in stored in them - item->SetInitSize( width, height ); + item->SetMinSize( width, height ); } return true; @@ -1140,10 +1146,11 @@ wxSize wxFlexGridSizer::CalcMin() m_rowHeights.SetCount(nrows); m_colWidths.SetCount(ncols); - // We have to recalcuate the sizes in case an item has wxADJUST_MINSIZE, has changed - // minimum size since the previous layout, or has been hidden using wxSizer::Show(). - // If all the items in a row/column are hidden, the final dimension of the row/column - // will be -1, indicating that the column itself is hidden. + // We have to recalcuate the sizes in case the item minimum size has + // changed since the previous layout, or the item has been hidden using + // wxSizer::Show(). If all the items in a row/column are hidden, the final + // dimension of the row/column will be -1, indicating that the column + // itself is hidden. for( s = m_rowHeights.GetCount(), i = 0; i < s; ++i ) m_rowHeights[ i ] = -1; for( s = m_colWidths.GetCount(), i = 0; i < s; ++i ) @@ -1625,6 +1632,12 @@ wxSize wxStaticBoxSizer::CalcMin() return ret; } +void wxStaticBoxSizer::ShowItems( bool show ) +{ + m_staticBox->Show( show ); + wxBoxSizer::ShowItems( show ); +} + #endif // wxUSE_STATBOX // ----------------------------------------------------------------------------