Fix wxGrid::AutoSizeColOrRow() logic for multicells.
This fixes the regression of r64885 and also tries to make the code more clear by setting the variables explicitly to their correct values. Closes #14611. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@72489 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -8241,9 +8241,15 @@ wxGrid::AutoSizeColOrRow(int colOrRow, bool setAsMin, wxGridDirection direction)
|
|||||||
for ( int rowOrCol = 0; rowOrCol < max; rowOrCol++ )
|
for ( int rowOrCol = 0; rowOrCol < max; rowOrCol++ )
|
||||||
{
|
{
|
||||||
if ( column )
|
if ( column )
|
||||||
|
{
|
||||||
row = rowOrCol;
|
row = rowOrCol;
|
||||||
else
|
col = colOrRow;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
row = colOrRow;
|
||||||
col = rowOrCol;
|
col = rowOrCol;
|
||||||
|
}
|
||||||
|
|
||||||
// we need to account for the cells spanning multiple columns/rows:
|
// we need to account for the cells spanning multiple columns/rows:
|
||||||
// while they may need a lot of space, they don't need all of it in
|
// while they may need a lot of space, they don't need all of it in
|
||||||
@@ -8261,6 +8267,7 @@ wxGrid::AutoSizeColOrRow(int colOrRow, bool setAsMin, wxGridDirection direction)
|
|||||||
GetCellSize(row, col, &numRows, &numCols);
|
GetCellSize(row, col, &numRows, &numCols);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// get cell ( main cell if CellSpan_Inside ) renderer best size
|
||||||
wxGridCellAttr *attr = GetCellAttr(row, col);
|
wxGridCellAttr *attr = GetCellAttr(row, col);
|
||||||
wxGridCellRenderer *renderer = attr->GetRenderer(this, row, col);
|
wxGridCellRenderer *renderer = attr->GetRenderer(this, row, col);
|
||||||
if ( renderer )
|
if ( renderer )
|
||||||
@@ -8295,12 +8302,12 @@ wxGrid::AutoSizeColOrRow(int colOrRow, bool setAsMin, wxGridDirection direction)
|
|||||||
|
|
||||||
if ( column )
|
if ( column )
|
||||||
{
|
{
|
||||||
dc.GetMultiLineTextExtent( GetColLabelValue(col), &w, &h );
|
dc.GetMultiLineTextExtent( GetColLabelValue(colOrRow), &w, &h );
|
||||||
if ( GetColLabelTextOrientation() == wxVERTICAL )
|
if ( GetColLabelTextOrientation() == wxVERTICAL )
|
||||||
w = h;
|
w = h;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
dc.GetMultiLineTextExtent( GetRowLabelValue(row), &w, &h );
|
dc.GetMultiLineTextExtent( GetRowLabelValue(colOrRow), &w, &h );
|
||||||
|
|
||||||
extent = column ? w : h;
|
extent = column ? w : h;
|
||||||
if ( extent > extentMax )
|
if ( extent > extentMax )
|
||||||
@@ -8327,20 +8334,20 @@ wxGrid::AutoSizeColOrRow(int colOrRow, bool setAsMin, wxGridDirection direction)
|
|||||||
// comment in SetColSize() for explanation of why this isn't done
|
// comment in SetColSize() for explanation of why this isn't done
|
||||||
// in SetColSize().
|
// in SetColSize().
|
||||||
if ( !setAsMin )
|
if ( !setAsMin )
|
||||||
extentMax = wxMax(extentMax, GetColMinimalWidth(col));
|
extentMax = wxMax(extentMax, GetColMinimalWidth(colOrRow));
|
||||||
|
|
||||||
SetColSize( col, extentMax );
|
SetColSize( colOrRow, extentMax );
|
||||||
if ( !GetBatchCount() )
|
if ( !GetBatchCount() )
|
||||||
{
|
{
|
||||||
if ( m_useNativeHeader )
|
if ( m_useNativeHeader )
|
||||||
{
|
{
|
||||||
GetGridColHeader()->UpdateColumn(col);
|
GetGridColHeader()->UpdateColumn(colOrRow);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
int cw, ch, dummy;
|
int cw, ch, dummy;
|
||||||
m_gridWin->GetClientSize( &cw, &ch );
|
m_gridWin->GetClientSize( &cw, &ch );
|
||||||
wxRect rect ( CellToRect( 0, col ) );
|
wxRect rect ( CellToRect( 0, colOrRow ) );
|
||||||
rect.y = 0;
|
rect.y = 0;
|
||||||
CalcScrolledPosition(rect.x, 0, &rect.x, &dummy);
|
CalcScrolledPosition(rect.x, 0, &rect.x, &dummy);
|
||||||
rect.width = cw - rect.x;
|
rect.width = cw - rect.x;
|
||||||
@@ -8355,14 +8362,14 @@ wxGrid::AutoSizeColOrRow(int colOrRow, bool setAsMin, wxGridDirection direction)
|
|||||||
// comment in SetColSize() for explanation of why this isn't done
|
// comment in SetColSize() for explanation of why this isn't done
|
||||||
// in SetRowSize().
|
// in SetRowSize().
|
||||||
if ( !setAsMin )
|
if ( !setAsMin )
|
||||||
extentMax = wxMax(extentMax, GetRowMinimalHeight(row));
|
extentMax = wxMax(extentMax, GetRowMinimalHeight(colOrRow));
|
||||||
|
|
||||||
SetRowSize(row, extentMax);
|
SetRowSize(colOrRow, extentMax);
|
||||||
if ( !GetBatchCount() )
|
if ( !GetBatchCount() )
|
||||||
{
|
{
|
||||||
int cw, ch, dummy;
|
int cw, ch, dummy;
|
||||||
m_gridWin->GetClientSize( &cw, &ch );
|
m_gridWin->GetClientSize( &cw, &ch );
|
||||||
wxRect rect( CellToRect( row, 0 ) );
|
wxRect rect( CellToRect( colOrRow, 0 ) );
|
||||||
rect.x = 0;
|
rect.x = 0;
|
||||||
CalcScrolledPosition(0, rect.y, &dummy, &rect.y);
|
CalcScrolledPosition(0, rect.y, &dummy, &rect.y);
|
||||||
rect.width = m_rowLabelWidth;
|
rect.width = m_rowLabelWidth;
|
||||||
@@ -8374,9 +8381,9 @@ wxGrid::AutoSizeColOrRow(int colOrRow, bool setAsMin, wxGridDirection direction)
|
|||||||
if ( setAsMin )
|
if ( setAsMin )
|
||||||
{
|
{
|
||||||
if ( column )
|
if ( column )
|
||||||
SetColMinimalWidth(col, extentMax);
|
SetColMinimalWidth(colOrRow, extentMax);
|
||||||
else
|
else
|
||||||
SetRowMinimalHeight(row, extentMax);
|
SetRowMinimalHeight(colOrRow, extentMax);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user