X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/324dc1f2d88433c2e892e28ccc98f486497caaf6..6362d82b3ed82aa6795e4ad03160820f94c9e4d4:/src/common/sizer.cpp diff --git a/src/common/sizer.cpp b/src/common/sizer.cpp index 1ff4b4ec62..98990a2ee1 100644 --- a/src/common/sizer.cpp +++ b/src/common/sizer.cpp @@ -1324,25 +1324,33 @@ wxGridSizer::wxGridSizer( int cols, int vgap, int hgap ) int wxGridSizer::CalcRowsCols(int& nrows, int& ncols) const { - int nitems = m_children.GetCount(); - if ( nitems) + const int nitems = m_children.GetCount(); + if ( m_cols && m_rows ) { - 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;