+
+ item->SetDimension(pt, sz);
+}
+
+//---------------------------------------------------------------------------
+// wxFlexGridSizer
+//---------------------------------------------------------------------------
+
+wxFlexGridSizer::wxFlexGridSizer( int rows, int cols, int vgap, int hgap )
+ : wxGridSizer( rows, cols, vgap, hgap )
+{
+ m_rowHeights = (int*) NULL;
+ m_colWidths = (int*) NULL;
+}
+
+wxFlexGridSizer::wxFlexGridSizer( int cols, int vgap, int hgap )
+ : wxGridSizer( cols, vgap, hgap )
+{
+ m_rowHeights = (int*) NULL;
+ m_colWidths = (int*) NULL;
+}
+
+wxFlexGridSizer::~wxFlexGridSizer()
+{
+ if (m_rowHeights)
+ delete[] m_rowHeights;
+ if (m_colWidths)
+ delete[] m_colWidths;
+}
+
+void wxFlexGridSizer::CreateArrays()
+{
+ if (m_rowHeights)
+ delete[] m_rowHeights;
+ if (m_colWidths)
+ delete[] m_colWidths;
+
+ int nitems, nrows, ncols;
+ if ( (nitems = CalcRowsCols(nrows, ncols)) == 0 )
+ {
+ m_rowHeights =
+ m_colWidths = NULL;
+ }
+
+ m_rowHeights = new int[nrows];
+ m_colWidths = new int[ncols];
+
+ for (int col = 0; col < ncols; col++)
+ m_colWidths[ col ] = 0;
+ for (int row = 0; row < nrows; row++)
+ m_rowHeights[ row ] = 0;
+}
+
+void wxFlexGridSizer::RecalcSizes()
+{
+ int nitems, nrows, ncols;
+ if ( (nitems = CalcRowsCols(nrows, ncols)) == 0 )
+ return;
+
+ wxSize sz( GetSize() );
+ wxSize minsz( CalcMin() );
+ wxPoint pt( GetPosition() );
+ int delta;
+ size_t idx,num;
+ wxArrayInt temp;
+
+ // Transfer only those rows into temp which exist in the sizer
+ // ignoring the superflouus ones. This prevents a segfault when
+ // calling AddGrowableRow( 3 ) if the sizer only has 2 rows.
+ for (idx = 0; idx < m_growableRows.GetCount(); idx++)
+ if (m_growableRows[idx] < nrows)
+ temp.Add( m_growableRows[idx] );
+ num = temp.GetCount();
+
+ if ((num > 0) && (sz.y > minsz.y))
+ {
+ delta = (sz.y - minsz.y) / num;
+ for (idx = 0; idx < num; idx++)
+ m_rowHeights[ temp[idx] ] += delta;
+ }
+
+ temp.Empty();
+ // See above
+ for (idx = 0; idx < m_growableCols.GetCount(); idx++)
+ if (m_growableCols[idx] < ncols)
+ temp.Add( m_growableCols[idx] );
+ num = temp.GetCount();
+
+ if ((num > 0) && (sz.x > minsz.x))
+ {
+ delta = (sz.x - minsz.x) / num;
+ for (idx = 0; idx < num; idx++)
+ m_colWidths[ temp[idx] ] += delta;
+ }
+
+ sz = wxSize( pt.x + sz.x, pt.y + sz.y );
+
+ int x = pt.x;
+ for (int c = 0; c < ncols; c++)