X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/5fa51d09eb4f0eea4269e951717dc6d8f540d13d..b53aea81d2e102224b452ef5bf7aee1132f37c6f:/src/common/sizer.cpp diff --git a/src/common/sizer.cpp b/src/common/sizer.cpp index 65d2f3d9cb..3cd52cb4ae 100644 --- a/src/common/sizer.cpp +++ b/src/common/sizer.cpp @@ -480,10 +480,11 @@ void wxSizerItem::SetDimension( const wxPoint& pos_, const wxSize& size_ ) break; case Item_Window: + { m_window->SetSize(pos.x, pos.y, size.x, size.y, - wxSIZE_ALLOW_MINUS_ONE); + wxSIZE_ALLOW_MINUS_ONE|wxSIZE_FORCE_EVENT ); break; - + } case Item_Sizer: m_sizer->SetDimension(pos, size); break; @@ -1325,32 +1326,32 @@ wxGridSizer::wxGridSizer( int cols, int vgap, int hgap ) int wxGridSizer::CalcRowsCols(int& nrows, int& ncols) const { const int nitems = m_children.GetCount(); - if ( nitems ) + if ( m_cols && m_rows ) { - if ( m_cols && m_rows ) - { - // if both rows and columns are specified by user, use the provided - // values even if we don't have enough items - ncols = m_cols; - nrows = m_rows; - } - else if ( m_cols ) - { - ncols = m_cols; - nrows = (nitems + m_cols - 1) / m_cols; - } - else if ( m_rows ) - { - ncols = (nitems + m_rows - 1) / m_rows; - nrows = m_rows; - } - else // 0 columns, 0 rows? - { - wxFAIL_MSG( _T("grid sizer must have either rows or columns fixed") ); + // if both rows and columns are specified by user, use the provided + // values even if we don't have enough items but check that we don't + // have too many of them as this is going to result in problems later + ncols = m_cols; + nrows = m_rows; - nrows = - ncols = 0; - } + wxASSERT_MSG( ncols*nrows >= nitems, "too many items in grid sizer" ); + } + else if ( m_cols ) + { + ncols = m_cols; + nrows = (nitems + m_cols - 1) / m_cols; + } + else if ( m_rows ) + { + ncols = (nitems + m_rows - 1) / m_rows; + nrows = m_rows; + } + else // 0 columns, 0 rows? + { + wxFAIL_MSG( _T("grid sizer must have either rows or columns fixed") ); + + nrows = + ncols = 0; } return nitems; @@ -1987,7 +1988,7 @@ void wxBoxSizer::RecalcSizes() } // NB: wxCENTRE is used here only for backwards compatibility, // wxALIGN_CENTRE should be used in new code - else if ( flag & (wxCENTER | wxALIGN_CENTRE) ) + else if ( flag & (wxCENTER | (IsVertical() ? wxALIGN_CENTRE_HORIZONTAL : wxALIGN_CENTRE_VERTICAL))) { PosInMinorDir(posChild) += (totalMinorSize - minorSize) / 2; }