virtualized m_row/col height/widths arrays

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@6178 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2000-02-21 16:39:23 +00:00
parent 943d28e424
commit 7c1cb26122
2 changed files with 235 additions and 147 deletions

View File

@@ -2149,8 +2149,6 @@ bool wxGrid::SetTable( wxGridTableBase *table, bool takeOwnership )
void wxGrid::Init()
{
int i;
if ( m_numRows <= 0 )
m_numRows = WXGRID_DEFAULT_NUMBER_ROWS;
@@ -2194,26 +2192,6 @@ void wxGrid::Init()
m_defaultRowHeight += 4;
#endif
m_rowHeights.Alloc( m_numRows );
m_rowBottoms.Alloc( m_numRows );
int rowBottom = 0;
for ( i = 0; i < m_numRows; i++ )
{
m_rowHeights.Add( m_defaultRowHeight );
rowBottom += m_defaultRowHeight;
m_rowBottoms.Add( rowBottom );
}
m_colWidths.Alloc( m_numCols );
m_colRights.Alloc( m_numCols );
int colRight = 0;
for ( i = 0; i < m_numCols; i++ )
{
m_colWidths.Add( m_defaultColWidth );
colRight += m_defaultColWidth;
m_colRights.Add( colRight );
}
// Set default cell attributes
m_defaultCellAttr->SetFont(GetFont());
m_defaultCellAttr->SetAlignment(wxLEFT, wxTOP);
@@ -2251,9 +2229,84 @@ void wxGrid::Init()
m_inOnKeyDown = FALSE;
m_batchCount = 0;
}
// ----------------------------------------------------------------------------
// the idea is to call these functions only when necessary because they create
// quite big arrays which eat memory mostly unnecessary - in particular, if
// default widths/heights are used for all rows/columns, we may not use these
// arrays at all
//
// with some extra code, it should be possible to only store the
// widths/heights different from default ones but this will be done later...
// ----------------------------------------------------------------------------
void wxGrid::InitRowHeights()
{
m_rowHeights.Empty();
m_rowBottoms.Empty();
m_rowHeights.Alloc( m_numRows );
m_rowBottoms.Alloc( m_numRows );
int rowBottom = 0;
for ( int i = 0; i < m_numRows; i++ )
{
m_rowHeights.Add( m_defaultRowHeight );
rowBottom += m_defaultRowHeight;
m_rowBottoms.Add( rowBottom );
}
}
void wxGrid::InitColWidths()
{
m_colWidths.Empty();
m_colRights.Empty();
m_colWidths.Alloc( m_numCols );
m_colRights.Alloc( m_numCols );
int colRight = 0;
for ( int i = 0; i < m_numCols; i++ )
{
m_colWidths.Add( m_defaultColWidth );
colRight += m_defaultColWidth;
m_colRights.Add( colRight );
}
}
int wxGrid::GetColWidth(int col) const
{
return m_colWidths.IsEmpty() ? m_defaultColWidth : m_colWidths[col];
}
int wxGrid::GetColLeft(int col) const
{
return m_colRights.IsEmpty() ? col * m_defaultColWidth
: m_colRights[col] - m_colWidths[col];
}
int wxGrid::GetColRight(int col) const
{
return m_colRights.IsEmpty() ? (col + 1) * m_defaultColWidth
: m_colRights[col];
}
int wxGrid::GetRowHeight(int row) const
{
return m_rowHeights.IsEmpty() ? m_defaultRowHeight : m_rowHeights[row];
}
int wxGrid::GetRowTop(int row) const
{
return m_rowBottoms.IsEmpty() ? row * m_defaultRowHeight
: m_rowBottoms[row] - m_rowHeights[row];
}
int wxGrid::GetRowBottom(int row) const
{
return m_rowBottoms.IsEmpty() ? (row + 1) * m_defaultRowHeight
: m_rowBottoms[row];
}
void wxGrid::CalcDimensions()
{
@@ -2262,8 +2315,8 @@ void wxGrid::CalcDimensions()
if ( m_numRows > 0 && m_numCols > 0 )
{
int right = m_colRights[ m_numCols-1 ] + 50;
int bottom = m_rowBottoms[ m_numRows-1 ] + 50;
int right = GetColRight( m_numCols-1 ) + 50;
int bottom = GetRowBottom( m_numRows-1 ) + 50;
// TODO: restore the scroll position that we had before sizing
//
@@ -2302,6 +2355,18 @@ bool wxGrid::Redimension( wxGridTableMessage& msg )
{
int i;
// if we were using the default widths/heights so far, we must change them
// now
if ( m_colWidths.IsEmpty() )
{
InitColWidths();
}
if ( m_rowHeights.IsEmpty() )
{
InitRowHeights();
}
switch ( msg.GetId() )
{
case wxGRIDTABLE_NOTIFY_ROWS_INSERTED:
@@ -2507,13 +2572,13 @@ void wxGrid::CalcRowLabelsExposed( wxRegion& reg )
// find the row labels within these bounds
//
int row;
int rowTop;
for ( row = 0; row < m_numRows; row++ )
{
if ( m_rowBottoms[row] < top ) continue;
if ( GetRowBottom(row) < top )
continue;
rowTop = m_rowBottoms[row] - m_rowHeights[row];
if ( rowTop > bottom ) break;
if ( GetRowTop(top) > bottom )
break;
m_rowLabelsExposed.Add( row );
}
@@ -2556,13 +2621,13 @@ void wxGrid::CalcColLabelsExposed( wxRegion& reg )
// find the cells within these bounds
//
int col;
int colLeft;
for ( col = 0; col < m_numCols; col++ )
{
if ( m_colRights[col] < left ) continue;
if ( GetColRight(col) < left )
continue;
colLeft = m_colRights[col] - m_colWidths[col];
if ( colLeft > right ) break;
if ( GetColLeft(col) > right )
break;
m_colLabelsExposed.Add( col );
}
@@ -2608,29 +2673,31 @@ void wxGrid::CalcCellsExposed( wxRegion& reg )
// find the cells within these bounds
//
int row, col;
int colLeft, rowTop;
for ( row = 0; row < m_numRows; row++ )
{
if ( m_rowBottoms[row] <= top ) continue;
if ( GetRowBottom(row) <= top )
continue;
rowTop = m_rowBottoms[row] - m_rowHeights[row];
if ( rowTop > bottom ) break;
if ( GetRowTop(row) > bottom )
break;
m_rowsExposed.Add( row );
for ( col = 0; col < m_numCols; col++ )
{
if ( m_colRights[col] <= left ) continue;
if ( GetColRight(col) <= left )
continue;
colLeft = m_colRights[col] - m_colWidths[col];
if ( colLeft > right ) break;
if ( GetColLeft(col) > right )
break;
if ( m_colsExposed.Index( col ) == wxNOT_FOUND ) m_colsExposed.Add( col );
if ( m_colsExposed.Index( col ) == wxNOT_FOUND )
m_colsExposed.Add( col );
m_cellsExposed.Add( wxGridCellCoords( row, col ) );
}
}
iter++ ;
iter++;
}
}
@@ -2657,10 +2724,7 @@ void wxGrid::ProcessRowLabelMouseEvent( wxMouseEvent& event )
wxClientDC dc( m_gridWin );
PrepareDC( dc );
y = wxMax( y,
m_rowBottoms[m_dragRowOrCol] -
m_rowHeights[m_dragRowOrCol] +
WXGRID_MIN_ROW_HEIGHT );
y = wxMax( y, GetRowTop(m_dragRowOrCol) + WXGRID_MIN_ROW_HEIGHT );
dc.SetLogicalFunction(wxINVERT);
if ( m_dragLastPos >= 0 )
{
@@ -2823,10 +2887,7 @@ void wxGrid::ProcessColLabelMouseEvent( wxMouseEvent& event )
wxClientDC dc( m_gridWin );
PrepareDC( dc );
x = wxMax( x,
m_colRights[m_dragRowOrCol] -
m_colWidths[m_dragRowOrCol] +
WXGRID_MIN_COL_WIDTH );
x = wxMax( x, GetColLeft(m_dragRowOrCol) + WXGRID_MIN_COL_WIDTH );
dc.SetLogicalFunction(wxINVERT);
if ( m_dragLastPos >= 0 )
{
@@ -3134,10 +3195,7 @@ void wxGrid::ProcessGridCellMouseEvent( wxMouseEvent& event )
wxClientDC dc( m_gridWin );
PrepareDC( dc );
y = wxMax( y,
m_rowBottoms[m_dragRowOrCol] -
m_rowHeights[m_dragRowOrCol] +
WXGRID_MIN_ROW_HEIGHT );
y = wxMax( y, GetRowTop(m_dragRowOrCol) + WXGRID_MIN_ROW_HEIGHT );
dc.SetLogicalFunction(wxINVERT);
if ( m_dragLastPos >= 0 )
{
@@ -3154,9 +3212,7 @@ void wxGrid::ProcessGridCellMouseEvent( wxMouseEvent& event )
wxClientDC dc( m_gridWin );
PrepareDC( dc );
x = wxMax( x,
m_colRights[m_dragRowOrCol] -
m_colWidths[m_dragRowOrCol] + WXGRID_MIN_COL_WIDTH );
x = wxMax( x, GetColLeft(m_dragRowOrCol) + WXGRID_MIN_COL_WIDTH );
dc.SetLogicalFunction(wxINVERT);
if ( m_dragLastPos >= 0 )
{
@@ -3386,7 +3442,7 @@ void wxGrid::DoEndDragResizeRow()
dc.DrawLine( left, m_dragLastPos, left+cw, m_dragLastPos );
HideCellEditControl();
int rowTop = m_rowBottoms[m_dragRowOrCol] - m_rowHeights[m_dragRowOrCol];
int rowTop = GetRowTop(m_dragRowOrCol);
SetRowSize( m_dragRowOrCol,
wxMax( m_dragLastPos - rowTop, WXGRID_MIN_ROW_HEIGHT ) );
@@ -3424,7 +3480,7 @@ void wxGrid::DoEndDragResizeCol()
dc.DrawLine( m_dragLastPos, top, m_dragLastPos, top+ch );
HideCellEditControl();
int colLeft = m_colRights[m_dragRowOrCol] - m_colWidths[m_dragRowOrCol];
int colLeft = GetColLeft(m_dragRowOrCol);
SetColSize( m_dragRowOrCol,
wxMax( m_dragLastPos - colLeft, WXGRID_MIN_COL_WIDTH ) );
@@ -4106,7 +4162,7 @@ void wxGrid::DrawCell( wxDC& dc, const wxGridCellCoords& coords )
int row = coords.GetRow();
int col = coords.GetCol();
if ( m_colWidths[col] <= 0 || m_rowHeights[row] <= 0 )
if ( GetColWidth(col) <= 0 || GetRowHeight(row) <= 0 )
return;
// we draw the cell border ourselves
@@ -4120,10 +4176,10 @@ void wxGrid::DrawCell( wxDC& dc, const wxGridCellCoords& coords )
bool isCurrent = coords == m_currentCellCoords;
wxRect rect;
rect.x = m_colRights[col] - m_colWidths[col];
rect.y = m_rowBottoms[row] - m_rowHeights[row];
rect.width = m_colWidths[col] - 1;
rect.height = m_rowHeights[row] - 1;
rect.x = GetColLeft(col);
rect.y = GetRowTop(row);
rect.width = GetColWidth(col) - 1;
rect.height = GetRowHeight(row) - 1;
// if the editor is shown, we should use it and not the renderer
if ( isCurrent && IsCellEditControlEnabled() )
@@ -4145,14 +4201,14 @@ void wxGrid::DrawCellHighlight( wxDC& dc, const wxGridCellAttr *attr )
int row = m_currentCellCoords.GetRow();
int col = m_currentCellCoords.GetCol();
if ( m_colWidths[col] <= 0 || m_rowHeights[row] <= 0 )
if ( GetColWidth(col) <= 0 || GetRowHeight(row) <= 0 )
return;
wxRect rect;
rect.x = m_colRights[col] - m_colWidths[col];
rect.y = m_rowBottoms[row] - m_rowHeights[row];
rect.width = m_colWidths[col] - 1;
rect.height = m_rowHeights[row] - 1;
rect.x = GetColLeft(col);
rect.y = GetRowTop(row);
rect.width = GetColWidth(col) - 1;
rect.height = GetRowHeight(row) - 1;
// hmmm... what could we do here to show that the cell is disabled?
// for now, I just draw a thinner border than for the other ones, but
@@ -4186,22 +4242,22 @@ void wxGrid::DrawCellHighlight( wxDC& dc, const wxGridCellAttr *attr )
void wxGrid::DrawCellBorder( wxDC& dc, const wxGridCellCoords& coords )
{
if ( m_colWidths[coords.GetCol()] <=0 ||
m_rowHeights[coords.GetRow()] <= 0 ) return;
dc.SetPen( wxPen(GetGridLineColour(), 1, wxSOLID) );
int row = coords.GetRow();
int col = coords.GetCol();
if ( GetColWidth(col) <= 0 || GetRowHeight(row) <= 0 )
return;
dc.SetPen( wxPen(GetGridLineColour(), 1, wxSOLID) );
// right hand border
//
dc.DrawLine( m_colRights[col], m_rowBottoms[row] - m_rowHeights[row],
m_colRights[col], m_rowBottoms[row] );
dc.DrawLine( GetColRight(col), GetRowTop(row),
GetColRight(col), GetRowBottom(row) );
// bottom border
//
dc.DrawLine( m_colRights[col] - m_colWidths[col], m_rowBottoms[row],
m_colRights[col], m_rowBottoms[row] );
dc.DrawLine( GetColLeft(col), GetRowBottom(row),
GetColRight(col), GetRowBottom(row) );
}
void wxGrid::DrawHighlight(wxDC& dc)
@@ -4254,8 +4310,8 @@ void wxGrid::DrawAllGridLines( wxDC& dc, const wxRegion & reg )
// avoid drawing grid lines past the last row and col
//
right = wxMin( right, m_colRights[m_numCols-1] );
bottom = wxMin( bottom, m_rowBottoms[m_numRows-1] );
right = wxMin( right, GetColRight(m_numCols - 1) );
bottom = wxMin( bottom, GetRowBottom(m_numRows - 1) );
dc.SetPen( wxPen(GetGridLineColour(), 1, wxSOLID) );
@@ -4264,13 +4320,16 @@ void wxGrid::DrawAllGridLines( wxDC& dc, const wxRegion & reg )
int i;
for ( i = 0; i < m_numRows; i++ )
{
if ( m_rowBottoms[i]-1 > bottom )
int bottom = GetRowBottom(i) - 1;
if ( bottom > bottom )
{
break;
}
else if ( m_rowBottoms[i]-1 >= top )
if ( bottom >= top )
{
dc.DrawLine( left, m_rowBottoms[i]-1, right, m_rowBottoms[i]-1 );
dc.DrawLine( left, bottom, right, bottom );
}
}
@@ -4279,13 +4338,15 @@ void wxGrid::DrawAllGridLines( wxDC& dc, const wxRegion & reg )
//
for ( i = 0; i < m_numCols; i++ )
{
if ( m_colRights[i]-1 > right )
int colRight = GetColRight(i) - 1;
if ( colRight > right )
{
break;
}
else if ( m_colRights[i]-1 >= left )
if ( colRight >= left )
{
dc.DrawLine( m_colRights[i]-1, top, m_colRights[i]-1, bottom );
dc.DrawLine( colRight, top, colRight, bottom );
}
}
}
@@ -4307,19 +4368,20 @@ void wxGrid::DrawRowLabels( wxDC& dc )
void wxGrid::DrawRowLabel( wxDC& dc, int row )
{
if ( m_rowHeights[row] <= 0 ) return;
if ( GetRowHeight(row) <= 0 )
return;
int rowTop = m_rowBottoms[row] - m_rowHeights[row];
int rowTop = GetRowTop(row),
rowBottom = GetRowBottom(row) - 1;
dc.SetPen( *wxBLACK_PEN );
dc.DrawLine( m_rowLabelWidth-1, rowTop,
m_rowLabelWidth-1, m_rowBottoms[row]-1 );
m_rowLabelWidth-1, rowBottom );
dc.DrawLine( 0, m_rowBottoms[row]-1,
m_rowLabelWidth-1, m_rowBottoms[row]-1 );
dc.DrawLine( 0, rowBottom, m_rowLabelWidth-1, rowBottom );
dc.SetPen( *wxWHITE_PEN );
dc.DrawLine( 0, rowTop, 0, m_rowBottoms[row]-1 );
dc.DrawLine( 0, rowTop, 0, rowBottom );
dc.DrawLine( 0, rowTop, m_rowLabelWidth-1, rowTop );
dc.SetBackgroundMode( wxTRANSPARENT );
@@ -4331,9 +4393,9 @@ void wxGrid::DrawRowLabel( wxDC& dc, int row )
wxRect rect;
rect.SetX( 2 );
rect.SetY( m_rowBottoms[row] - m_rowHeights[row] + 2 );
rect.SetY( GetRowTop(row) + 2 );
rect.SetWidth( m_rowLabelWidth - 4 );
rect.SetHeight( m_rowHeights[row] - 4 );
rect.SetHeight( GetRowHeight(row) - 4 );
DrawTextRectangle( dc, GetRowLabelValue( row ), rect, hAlign, vAlign );
}
@@ -4354,20 +4416,22 @@ void wxGrid::DrawColLabels( wxDC& dc )
void wxGrid::DrawColLabel( wxDC& dc, int col )
{
if ( m_colWidths[col] <= 0 ) return;
if ( GetColWidth(col) <= 0 )
return;
int colLeft = m_colRights[col] - m_colWidths[col];
int colLeft = GetColLeft(col),
colRight = GetColRight(col) - 1;
dc.SetPen( *wxBLACK_PEN );
dc.DrawLine( m_colRights[col]-1, 0,
m_colRights[col]-1, m_colLabelHeight-1 );
dc.DrawLine( colRight, 0,
colRight, m_colLabelHeight-1 );
dc.DrawLine( colLeft, m_colLabelHeight-1,
m_colRights[col]-1, m_colLabelHeight-1 );
colRight, m_colLabelHeight-1 );
dc.SetPen( *wxWHITE_PEN );
dc.DrawLine( colLeft, 0, colLeft, m_colLabelHeight-1 );
dc.DrawLine( colLeft, 0, m_colRights[col]-1, 0 );
dc.DrawLine( colLeft, 0, colRight, 0 );
dc.SetBackgroundMode( wxTRANSPARENT );
dc.SetTextForeground( GetLabelTextColour() );
@@ -4381,9 +4445,9 @@ void wxGrid::DrawColLabel( wxDC& dc, int col )
GetColLabelAlignment( &hAlign, &vAlign );
wxRect rect;
rect.SetX( m_colRights[col] - m_colWidths[col] + 2 );
rect.SetX( colLeft + 2 );
rect.SetY( 2 );
rect.SetWidth( m_colWidths[col] - 4 );
rect.SetWidth( GetColWidth(col) - 4 );
rect.SetHeight( m_colLabelHeight - 4 );
DrawTextRectangle( dc, GetColLabelValue( col ), rect, hAlign, vAlign );
}
@@ -4748,7 +4812,8 @@ int wxGrid::YToRow( int y )
for ( i = 0; i < m_numRows; i++ )
{
if ( y < m_rowBottoms[i] ) return i;
if ( y < GetRowBottom(i) )
return i;
}
return m_numRows; //-1;
@@ -4761,7 +4826,8 @@ int wxGrid::XToCol( int x )
for ( i = 0; i < m_numCols; i++ )
{
if ( x < m_colRights[i] ) return i;
if ( x < GetColRight(i) )
return i;
}
return m_numCols; //-1;
@@ -4777,12 +4843,11 @@ int wxGrid::YToEdgeOfRow( int y )
for ( i = 0; i < m_numRows; i++ )
{
if ( m_rowHeights[i] > WXGRID_LABEL_EDGE_ZONE )
if ( GetRowHeight(i) > WXGRID_LABEL_EDGE_ZONE )
{
d = abs( y - m_rowBottoms[i] );
{
if ( d < WXGRID_LABEL_EDGE_ZONE ) return i;
}
d = abs( y - GetRowBottom(i) );
if ( d < WXGRID_LABEL_EDGE_ZONE )
return i;
}
}
@@ -4799,12 +4864,11 @@ int wxGrid::XToEdgeOfCol( int x )
for ( i = 0; i < m_numCols; i++ )
{
if ( m_colWidths[i] > WXGRID_LABEL_EDGE_ZONE )
if ( GetColWidth(i) > WXGRID_LABEL_EDGE_ZONE )
{
d = abs( x - m_colRights[i] );
{
if ( d < WXGRID_LABEL_EDGE_ZONE ) return i;
}
d = abs( x - GetColRight(i) );
if ( d < WXGRID_LABEL_EDGE_ZONE )
return i;
}
}
@@ -4819,10 +4883,10 @@ wxRect wxGrid::CellToRect( int row, int col )
if ( row >= 0 && row < m_numRows &&
col >= 0 && col < m_numCols )
{
rect.x = m_colRights[col] - m_colWidths[col];
rect.y = m_rowBottoms[row] - m_rowHeights[row];
rect.width = m_colWidths[col];
rect.height = m_rowHeights[ row ];
rect.x = GetColLeft(col);
rect.y = GetRowTop(row);
rect.width = GetColWidth(col);
rect.height = GetRowHeight(row);
}
return rect;
@@ -4897,10 +4961,12 @@ void wxGrid::MakeCellVisible( int row, int col )
ypos = r.GetTop();
for ( i = row-1; i >= 0; i-- )
{
if ( h + m_rowHeights[i] > ch ) break;
int rowHeight = GetRowHeight(i);
if ( h + rowHeight > ch )
break;
h += m_rowHeights[i];
ypos -= m_rowHeights[i];
h += rowHeight;
ypos -= rowHeight;
}
// we divide it later by GRID_SCROLL_LINE, make sure that we don't
@@ -4919,10 +4985,12 @@ void wxGrid::MakeCellVisible( int row, int col )
xpos = r.GetLeft();
for ( i = col-1; i >= 0; i-- )
{
if ( w + m_colWidths[i] > cw ) break;
int colWidth = GetColWidth(i);
if ( w + colWidth > cw )
break;
w += m_colWidths[i];
xpos -= m_colWidths[i];
w += colWidth;
xpos -= colWidth;
}
// see comment for ypos above
@@ -5028,7 +5096,7 @@ bool wxGrid::MovePageUp()
int cw, ch;
m_gridWin->GetClientSize( &cw, &ch );
int y = m_rowBottoms[ row ] - m_rowHeights[ row ];
int y = GetRowTop(row);
int newRow = YToRow( y - ch + 1 );
if ( newRow == -1 )
{
@@ -5058,7 +5126,7 @@ bool wxGrid::MovePageDown()
int cw, ch;
m_gridWin->GetClientSize( &cw, &ch );
int y = m_rowBottoms[ row ] - m_rowHeights[ row ];
int y = GetRowTop(row);
int newRow = YToRow( y + ch );
if ( newRow == -1 )
{
@@ -5550,7 +5618,7 @@ int wxGrid::GetRowSize( int row )
{
wxCHECK_MSG( row >= 0 && row < m_numRows, 0, _T("invalid row index") );
return m_rowHeights[row];
return GetRowHeight(row);
}
int wxGrid::GetDefaultColSize()
@@ -5562,7 +5630,7 @@ int wxGrid::GetColSize( int col )
{
wxCHECK_MSG( col >= 0 && col < m_numCols, 0, _T("invalid column index") );
return m_colWidths[col];
return GetColWidth(col);
}
// ============================================================================
@@ -5923,14 +5991,8 @@ void wxGrid::SetDefaultRowSize( int height, bool resizeExistingRows )
if ( resizeExistingRows )
{
int row;
int bottom = 0;
for ( row = 0; row < m_numRows; row++ )
{
m_rowHeights[row] = m_defaultRowHeight;
bottom += m_defaultRowHeight;
m_rowBottoms[row] = bottom;
}
InitRowHeights();
CalcDimensions();
}
}
@@ -5939,12 +6001,17 @@ void wxGrid::SetRowSize( int row, int height )
{
wxCHECK_RET( row >= 0 && row < m_numRows, _T("invalid row index") );
int i;
if ( m_rowHeights.IsEmpty() )
{
// need to really create the array
InitRowHeights();
}
int h = wxMax( 0, height );
int diff = h - m_rowHeights[row];
m_rowHeights[row] = h;
int i;
for ( i = row; i < m_numRows; i++ )
{
m_rowBottoms[i] += diff;
@@ -5958,14 +6025,8 @@ void wxGrid::SetDefaultColSize( int width, bool resizeExistingCols )
if ( resizeExistingCols )
{
int col;
int right = 0;
for ( col = 0; col < m_numCols; col++ )
{
m_colWidths[col] = m_defaultColWidth;
right += m_defaultColWidth;
m_colRights[col] = right;
}
InitColWidths();
CalcDimensions();
}
}
@@ -5974,12 +6035,17 @@ void wxGrid::SetColSize( int col, int width )
{
wxCHECK_RET( col >= 0 && col < m_numCols, _T("invalid column index") );
int i;
if ( m_colWidths.IsEmpty() )
{
// need to really create the array
InitColWidths();
}
int w = wxMax( 0, width );
int diff = w - m_colWidths[col];
m_colWidths[col] = w;
int i;
for ( i = col; i < m_numCols; i++ )
{
m_colRights[i] += diff;