#pragma hdrstop
#endif
-#include "wx/display.h"
#include "wx/sizer.h"
#include "wx/private/flagscheck.h"
#include "wx/toplevel.h"
#endif // WX_PRECOMP
+#include "wx/display.h"
#include "wx/listimpl.cpp"
int wxGridSizer::CalcRowsCols(int& nrows, int& ncols) const
{
- int nitems = m_children.GetCount();
- if ( nitems)
+ const int nitems = m_children.GetCount();
+ if ( nitems )
{
- if ( m_cols )
+ 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;
{
wxFAIL_MSG( _T("grid sizer must have either rows or columns fixed") );
- nrows = ncols = 0;
+ nrows =
+ ncols = 0;
}
}
m_rowHeights.assign(nrows, -1);
m_colWidths.assign(ncols, -1);
- // n is the index of the item in left-to-right top-to-bottom order
- size_t n = 0;
for ( wxSizerItemList::iterator i = m_children.begin();
i != m_children.end();
- ++i, ++n )
+ ++i)
{
wxSizerItem * const item = *i;
if ( item->IsShown() )
{
const int col = n % ncols;
didAdjustMinSize |= (*i)->InformFirstDirection(wxHORIZONTAL, m_colWidths[col], sz.y - m_calculatedMinSize.y);
- }
+ }
// Only redo if info was actually used
if( didAdjustMinSize )
- {
- DoAdjustForGrowables
- (
- sz.x - m_calculatedMinSize.x,
- m_growableCols,
- m_colWidths,
- m_growMode == wxFLEX_GROWMODE_SPECIFIED ? &m_growableColsProportions
- : NULL
- );
+ {
+ DoAdjustForGrowables
+ (
+ sz.x - m_calculatedMinSize.x,
+ m_growableCols,
+ m_colWidths,
+ m_growMode == wxFLEX_GROWMODE_SPECIFIED ? &m_growableColsProportions
+ : NULL
+ );
+ }
}
-}
if ( (m_flexDirection & wxVERTICAL) || (m_growMode != wxFLEX_GROWMODE_NONE) )
{
void wxFlexGridSizer::AddGrowableRow( size_t idx, int proportion )
{
- wxASSERT_MSG( !IsRowGrowable( idx ),
+ int nrows, ncols;
+ CalcRowsCols(nrows, ncols);
+ wxCHECK_RET( idx < (size_t)nrows, "invalid row index" );
+
+ wxASSERT_MSG( !IsRowGrowable( idx ),
"AddGrowableRow() called for growable row" );
m_growableRows.Add( idx );
m_growableRowsProportions.Add( proportion );
void wxFlexGridSizer::AddGrowableCol( size_t idx, int proportion )
{
- wxASSERT_MSG( !IsColGrowable( idx ),
+ int nrows, ncols;
+ CalcRowsCols(nrows, ncols);
+ wxCHECK_RET( idx < (size_t)ncols, "invalid column index" );
+
+ wxASSERT_MSG( !IsColGrowable( idx ),
"AddGrowableCol() called for growable column" );
m_growableCols.Add( idx );
m_growableColsProportions.Add( proportion );