added proportion parameter to wxFlexGridSizer::AddGrowableRow/Col()

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@19361 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2003-02-27 11:55:26 +00:00
parent 702c420889
commit e8800dcfa7
4 changed files with 55 additions and 11 deletions

View File

@@ -29,6 +29,7 @@ wxBase:
All GUI ports: All GUI ports:
- added wxSplitterWindow handler to XRC - added wxSplitterWindow handler to XRC
- added proportion to wxFlexGridSizer::AddGrowableRow/Col (Maxim Babitski)
- added wxFlexGridSizer::SetFlexibleDirection() (Szczepan Holyszewski) - added wxFlexGridSizer::SetFlexibleDirection() (Szczepan Holyszewski)
- implemented GetEditControl for wxGenericTreeCtrl (Peter Stieber) - implemented GetEditControl for wxGenericTreeCtrl (Peter Stieber)
- improved contrib/utils/convertrc parsing (David J. Cooke) - improved contrib/utils/convertrc parsing (David J. Cooke)

View File

@@ -41,18 +41,25 @@ all children.
\membersection{wxFlexGridSizer::AddGrowableCol}\label{wxflexgridsizeraddgrowablecol} \membersection{wxFlexGridSizer::AddGrowableCol}\label{wxflexgridsizeraddgrowablecol}
\func{void}{AddGrowableCol}{\param{size\_t }{idx}} \func{void}{AddGrowableCol}{\param{size\_t }{idx}, \param{int }{proportion = $0$}}
Specifies that column idx (starting from zero) should be grown if Specifies that column {\it idx} (starting from zero) should be grown if
there is extra space available to the sizer. there is extra space available to the sizer.
The {\it proportion} parameter has the same meaning as the stretch factor for
the \helpref{sizers}{sizeroverview} except that if all proportions are $0$,
then all columns are resized equally (instead of not being resized at all).
\membersection{wxFlexGridSizer::AddGrowableRow}\label{wxflexgridsizeraddgrowablerow} \membersection{wxFlexGridSizer::AddGrowableRow}\label{wxflexgridsizeraddgrowablerow}
\func{void}{AddGrowableRow}{\param{size\_t }{idx}} \func{void}{AddGrowableRow}{\param{size\_t }{idx}, \param{int }{proportion = $0$}}
Specifies that row idx (starting from zero) should be grown if there Specifies that row idx (starting from zero) should be grown if there
is extra space available to the sizer. is extra space available to the sizer.
See \helpref{AddGrowableCol}{wxflexgridsizeraddgrowablecol} for the description
of {\it proportion} parameter.
\membersection{wxFlexGridSizer::GetFlexibleDirection}\label{wxflexgridsizergetflexibledrection} \membersection{wxFlexGridSizer::GetFlexibleDirection}\label{wxflexgridsizergetflexibledrection}
\constfunc{int}{GetFlexibleDirections}{\void} \constfunc{int}{GetFlexibleDirections}{\void}

View File

@@ -395,9 +395,9 @@ public:
// set the rows/columns which will grow (the others will remain of the // set the rows/columns which will grow (the others will remain of the
// constant initial size) // constant initial size)
void AddGrowableRow( size_t idx ); void AddGrowableRow( size_t idx, int proportion = 0 );
void RemoveGrowableRow( size_t idx ); void RemoveGrowableRow( size_t idx );
void AddGrowableCol( size_t idx ); void AddGrowableCol( size_t idx, int proportion = 0 );
void RemoveGrowableCol( size_t idx ); void RemoveGrowableCol( size_t idx );
@@ -427,6 +427,10 @@ protected:
wxArrayInt m_growableRows, wxArrayInt m_growableRows,
m_growableCols; m_growableCols;
// proportion values of the corresponding growable rows and columns
wxArrayInt m_growableRowsProportions,
m_growableColsProportions;
// parameters describing whether the growable cells should be resized in // parameters describing whether the growable cells should be resized in
// both directions or only one // both directions or only one
int m_flexDirection; int m_flexDirection;

View File

@@ -1029,6 +1029,9 @@ void wxFlexGridSizer::RecalcSizes()
int delta; int delta;
size_t idx, num; size_t idx, num;
wxArrayInt temp; wxArrayInt temp;
wxArrayInt temp_proportions;
int sum_proportions = 0;
int growable_space = 0;
// what to do with the rows? by default, resize them proportionally // what to do with the rows? by default, resize them proportionally
if ( (m_flexDirection & wxVERTICAL) || if ( (m_flexDirection & wxVERTICAL) ||
@@ -1040,18 +1043,33 @@ void wxFlexGridSizer::RecalcSizes()
for (idx = 0; idx < m_growableRows.GetCount(); idx++) for (idx = 0; idx < m_growableRows.GetCount(); idx++)
{ {
if (m_growableRows[idx] < nrows) if (m_growableRows[idx] < nrows)
{
temp.Add( m_growableRows[idx] ); temp.Add( m_growableRows[idx] );
temp_proportions.Add( m_growableRowsProportions[idx] );
sum_proportions += m_growableRowsProportions[idx];
growable_space += m_rowHeights[ temp[idx] ];
}
} }
num = temp.GetCount(); num = temp.GetCount();
if ((num > 0) && (sz.y > minsz.y)) if ((num > 0) && (sz.y > minsz.y))
{ {
delta = (sz.y - minsz.y) / num;
for (idx = 0; idx < num; idx++) for (idx = 0; idx < num; idx++)
m_rowHeights[ temp[idx] ] += delta; {
delta = (sz.y - minsz.y);
if (sum_proportions == 0)
delta = (delta/num) + m_rowHeights[ temp[idx] ];
else
delta = ((delta+growable_space)*temp_proportions[idx])/
sum_proportions;
m_rowHeights[ temp[idx] ] = delta;
}
} }
temp.Empty(); temp.Empty();
temp_proportions.Empty();
sum_proportions = 0;
growable_space = 0;
} }
else if ( (m_growMode == wxFLEX_GROWMODE_ALL) && (sz.y > minsz.y) ) else if ( (m_growMode == wxFLEX_GROWMODE_ALL) && (sz.y > minsz.y) )
{ {
@@ -1068,16 +1086,28 @@ void wxFlexGridSizer::RecalcSizes()
for (idx = 0; idx < m_growableCols.GetCount(); idx++) for (idx = 0; idx < m_growableCols.GetCount(); idx++)
{ {
if (m_growableCols[idx] < ncols) if (m_growableCols[idx] < ncols)
{
temp.Add( m_growableCols[idx] ); temp.Add( m_growableCols[idx] );
temp_proportions.Add( m_growableColsProportions[idx] );
sum_proportions += m_growableColsProportions[idx];
growable_space += m_colWidths[idx];
}
} }
num = temp.GetCount(); num = temp.GetCount();
if ((num > 0) && (sz.x > minsz.x)) if ((num > 0) && (sz.x > minsz.x))
{ {
delta = (sz.x - minsz.x) / num;
for (idx = 0; idx < num; idx++) for (idx = 0; idx < num; idx++)
m_colWidths[ temp[idx] ] += delta; {
delta = (sz.x - minsz.x);
if (sum_proportions == 0)
delta = (delta/num) + m_colWidths[ temp[idx] ];
else
delta = ((delta+growable_space)*temp_proportions[idx])/
sum_proportions;
m_colWidths[ temp[idx] ] = delta;
}
} }
} }
else if ( (m_growMode == wxFLEX_GROWMODE_ALL) && (sz.x > minsz.x) ) else if ( (m_growMode == wxFLEX_GROWMODE_ALL) && (sz.x > minsz.x) )
@@ -1191,18 +1221,20 @@ wxSize wxFlexGridSizer::CalcMin()
height + (nrows-1) * m_vgap); height + (nrows-1) * m_vgap);
} }
void wxFlexGridSizer::AddGrowableRow( size_t idx ) void wxFlexGridSizer::AddGrowableRow( size_t idx, int proportion )
{ {
m_growableRows.Add( idx ); m_growableRows.Add( idx );
m_growableRowsProportions.Add( proportion );
} }
void wxFlexGridSizer::RemoveGrowableRow( size_t WXUNUSED(idx) ) void wxFlexGridSizer::RemoveGrowableRow( size_t WXUNUSED(idx) )
{ {
} }
void wxFlexGridSizer::AddGrowableCol( size_t idx ) void wxFlexGridSizer::AddGrowableCol( size_t idx, int proportion )
{ {
m_growableCols.Add( idx ); m_growableCols.Add( idx );
m_growableColsProportions.Add( proportion );
} }
void wxFlexGridSizer::RemoveGrowableCol( size_t WXUNUSED(idx) ) void wxFlexGridSizer::RemoveGrowableCol( size_t WXUNUSED(idx) )