+ int sum_proportions = 0;
+ int growable_space = 0;
+ int num = 0;
+ size_t idx;
+ for (idx = 0; idx < m_growableRows.GetCount(); idx++)
+ {
+ // Since the number of rows/columns can change as items are inserted/deleted, we need
+ // to verify at runtime that the requested growable rows/columns are still valid.
+ if (m_growableRows[idx] >= nrows)
+ continue;
+ // If all items in a row/column are hidden, that row/column will have a dimension of -1.
+ // This causes the row/column to be hidden completely.
+ if (m_rowHeights[ m_growableRows[idx] ] == -1)
+ continue;
+ sum_proportions += m_growableRowsProportions[idx];
+ growable_space += m_rowHeights[ m_growableRows[idx] ];
+ num++;
+ }
+
+ if (num > 0)
+ {
+ for (idx = 0; idx < m_growableRows.GetCount(); idx++)
+ {
+ if (m_growableRows[idx] >= nrows )
+ continue;
+ if (m_rowHeights[ m_growableRows[idx] ] == -1)
+ m_rowHeights[ m_growableRows[idx] ] = 0;
+ else
+ {
+ int delta = (sz.y - minsz.y);
+ if (sum_proportions == 0)
+ delta = (delta/num) + m_rowHeights[ m_growableRows[idx] ];
+ else
+ delta = ((delta+growable_space)*m_growableRowsProportions[idx]) / sum_proportions;
+ m_rowHeights[ m_growableRows[idx] ] = delta;
+ }
+ }
+ }
+ }
+ else if ( (m_growMode == wxFLEX_GROWMODE_ALL) && (sz.y > minsz.y) )
+ {
+ // rounding problem?
+ for ( int row = 0; row < nrows; ++row )
+ m_rowHeights[ row ] = sz.y / nrows;