}
}
+bool wxFlexGridSizer::IsRowGrowable( size_t idx )
+{
+ return m_growableRows.Index( idx ) != wxNOT_FOUND;
+}
+
+bool wxFlexGridSizer::IsColGrowable( size_t idx )
+{
+ return m_growableCols.Index( idx ) != wxNOT_FOUND;
+}
void wxFlexGridSizer::AddGrowableRow( size_t idx, int proportion )
{
+ 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 ),
+ "AddGrowableCol() called for growable column" );
m_growableCols.Add( idx );
m_growableColsProportions.Add( proportion );
}
// adjust the size in the major direction using the proportion
wxCoord majorSize = GetSizeInMajorDir(sizeThis);
- const int propItem = item->GetProportion();
- if ( propItem )
+
+ // if there is not enough space, don't try to distribute negative space
+ // among the children, this would result in overlapping windows which
+ // we don't want
+ if ( delta > 0 )
{
- const int deltaItem = (delta * propItem) / totalProportion;
+ const int propItem = item->GetProportion();
+ if ( propItem )
+ {
+ const int deltaItem = (delta * propItem) / totalProportion;
- majorSize += deltaItem;
+ majorSize += deltaItem;
- delta -= deltaItem;
- totalProportion -= propItem;
+ delta -= deltaItem;
+ totalProportion -= propItem;
+ }
}