From: Vadim Zeitlin Date: Sun, 14 Dec 2008 20:45:39 +0000 (+0000) Subject: refresh the grid after resetting the columns positions to the default order X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/4797b0145c81236c08cdee4f05e616ef17924a50 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 --- diff --git a/include/wx/generic/grid.h b/include/wx/generic/grid.h index 8611b6ad6c..eb0932154c 100644 --- a/include/wx/generic/grid.h +++ b/include/wx/generic/grid.h @@ -2289,10 +2289,9 @@ private: // the sorting indicator to effectively show void UpdateColumnSortingIndicator(int col); - // update column right positions after their order changed (does nothing if - // we only use the default widths as in this case m_colRights is not used - // neither) - void UpdateColumnRights(); + // update the grid after changing the columns order (common part of + // SetColPos() and ResetColPos()) + void RefreshAfterColPosChange(); // return the position (not index) of the column at the given logical pixel diff --git a/src/generic/grid.cpp b/src/generic/grid.cpp index c516ec9072..95ffe3cd00 100644 --- a/src/generic/grid.cpp +++ b/src/generic/grid.cpp @@ -6842,19 +6842,36 @@ void wxGrid::DoEndMoveCol(int pos) m_dragRowOrCol = -1; } -void wxGrid::UpdateColumnRights() +void wxGrid::RefreshAfterColPosChange() { - if ( m_colWidths.empty() ) - return; - - int colRight = 0; - for ( int colPos = 0; colPos < m_numCols; colPos++ ) + // recalculate the column rights as the column positions have changed, + // unless we calculate them dynamically because all columns widths are the + // same and it's easy to do + if ( !m_colWidths.empty() ) { - int colID = GetColAt( colPos ); + int colRight = 0; + for ( int colPos = 0; colPos < m_numCols; colPos++ ) + { + int colID = GetColAt( colPos ); + + colRight += m_colWidths[colID]; + m_colRights[colID] = colRight; + } + } - colRight += m_colWidths[colID]; - 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) @@ -6869,25 +6886,14 @@ void wxGrid::SetColPos(int idx, int pos) wxHeaderCtrl::MoveColumnInOrderArray(m_colAt, idx, pos); - // also recalculate the column rights as the column positions have changed - UpdateColumnRights(); - - // and make the changes visible - if ( m_useNativeHeader ) - GetColHeader()->SetColumnsOrder(m_colAt); - else - m_colWindow->Refresh(); - m_gridWin->Refresh(); + RefreshAfterColPosChange(); } void wxGrid::ResetColPos() { m_colAt.clear(); - if ( m_useNativeHeader ) - GetColHeader()->ResetColumnsOrder(); - else - m_colWindow->Refresh(); + RefreshAfterColPosChange(); } void wxGrid::EnableDragColMove( bool enable )