refresh the grid after resetting the columns positions to the default order

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@57339 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2008-12-14 20:45:39 +00:00
parent 7280c8281d
commit 4797b0145c
2 changed files with 31 additions and 26 deletions

View File

@@ -2289,10 +2289,9 @@ private:
// the sorting indicator to effectively show // the sorting indicator to effectively show
void UpdateColumnSortingIndicator(int col); void UpdateColumnSortingIndicator(int col);
// update column right positions after their order changed (does nothing if // update the grid after changing the columns order (common part of
// we only use the default widths as in this case m_colRights is not used // SetColPos() and ResetColPos())
// neither) void RefreshAfterColPosChange();
void UpdateColumnRights();
// return the position (not index) of the column at the given logical pixel // return the position (not index) of the column at the given logical pixel

View File

@@ -6842,11 +6842,13 @@ void wxGrid::DoEndMoveCol(int pos)
m_dragRowOrCol = -1; m_dragRowOrCol = -1;
} }
void wxGrid::UpdateColumnRights() void wxGrid::RefreshAfterColPosChange()
{ {
if ( m_colWidths.empty() ) // recalculate the column rights as the column positions have changed,
return; // unless we calculate them dynamically because all columns widths are the
// same and it's easy to do
if ( !m_colWidths.empty() )
{
int colRight = 0; int colRight = 0;
for ( int colPos = 0; colPos < m_numCols; colPos++ ) for ( int colPos = 0; colPos < m_numCols; colPos++ )
{ {
@@ -6855,6 +6857,21 @@ void wxGrid::UpdateColumnRights()
colRight += m_colWidths[colID]; colRight += m_colWidths[colID];
m_colRights[colID] = colRight; m_colRights[colID] = colRight;
} }
}
// and make the changes visible
if ( m_useNativeHeader )
{
if ( m_colAt.empty() )
GetColHeader()->ResetColumnsOrder();
else
GetColHeader()->SetColumnsOrder(m_colAt);
}
else
{
m_colWindow->Refresh();
}
m_gridWin->Refresh();
} }
void wxGrid::SetColPos(int idx, int pos) void wxGrid::SetColPos(int idx, int pos)
@@ -6869,25 +6886,14 @@ void wxGrid::SetColPos(int idx, int pos)
wxHeaderCtrl::MoveColumnInOrderArray(m_colAt, idx, pos); wxHeaderCtrl::MoveColumnInOrderArray(m_colAt, idx, pos);
// also recalculate the column rights as the column positions have changed RefreshAfterColPosChange();
UpdateColumnRights();
// and make the changes visible
if ( m_useNativeHeader )
GetColHeader()->SetColumnsOrder(m_colAt);
else
m_colWindow->Refresh();
m_gridWin->Refresh();
} }
void wxGrid::ResetColPos() void wxGrid::ResetColPos()
{ {
m_colAt.clear(); m_colAt.clear();
if ( m_useNativeHeader ) RefreshAfterColPosChange();
GetColHeader()->ResetColumnsOrder();
else
m_colWindow->Refresh();
} }
void wxGrid::EnableDragColMove( bool enable ) void wxGrid::EnableDragColMove( bool enable )