X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/da5a641fc8a83c8b00ac157004f47e93dd08dcc8..e8f25dbbced23734c716f1c5bda91c30635e894b:/src/generic/grid.cpp diff --git a/src/generic/grid.cpp b/src/generic/grid.cpp index c516ec9072..7257f41aa0 100644 --- a/src/generic/grid.cpp +++ b/src/generic/grid.cpp @@ -4806,7 +4806,7 @@ wxGrid::SetTable(wxGridTableBase *table, m_numCols = table->GetNumberCols(); if ( m_useNativeHeader ) - GetColHeader()->SetColumnCount(m_numCols); + GetGridColHeader()->SetColumnCount(m_numCols); m_table = table; m_table->SetView( this ); @@ -5279,7 +5279,7 @@ bool wxGrid::Redimension( wxGridTableMessage& msg ) m_numCols += numCols; if ( m_useNativeHeader ) - GetColHeader()->SetColumnCount(m_numCols); + GetGridColHeader()->SetColumnCount(m_numCols); if ( !m_colAt.IsEmpty() ) { @@ -5347,7 +5347,7 @@ bool wxGrid::Redimension( wxGridTableMessage& msg ) int oldNumCols = m_numCols; m_numCols += numCols; if ( m_useNativeHeader ) - GetColHeader()->SetColumnCount(m_numCols); + GetGridColHeader()->SetColumnCount(m_numCols); if ( !m_colAt.IsEmpty() ) { @@ -5402,7 +5402,7 @@ bool wxGrid::Redimension( wxGridTableMessage& msg ) int numCols = msg.GetCommandInt2(); m_numCols -= numCols; if ( m_useNativeHeader ) - GetColHeader()->SetColumnCount(m_numCols); + GetGridColHeader()->SetColumnCount(m_numCols); if ( !m_colAt.IsEmpty() ) { @@ -5863,7 +5863,7 @@ void wxGrid::UpdateColumnSortingIndicator(int col) wxCHECK_RET( col != wxNOT_FOUND, "invalid column index" ); if ( m_useNativeHeader ) - GetColHeader()->UpdateColumn(col); + GetGridColHeader()->UpdateColumn(col); else if ( m_nativeColumnLabels ) m_colWindow->Refresh(); //else: sorting indicator display not yet implemented in grid version @@ -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() ) + GetGridColHeader()->ResetColumnsOrder(); + else + GetGridColHeader()->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 ) @@ -6898,7 +6904,7 @@ void wxGrid::EnableDragColMove( bool enable ) if ( m_useNativeHeader ) { // update all columns to make them [not] reorderable - GetColHeader()->SetColumnCount(m_numCols); + GetGridColHeader()->SetColumnCount(m_numCols); } m_canDragColMove = enable; @@ -8183,7 +8189,7 @@ void wxGrid::UseNativeColHeader(bool native) CreateColumnWindow(); if ( m_useNativeHeader ) - GetColHeader()->SetColumnCount(m_numCols); + GetGridColHeader()->SetColumnCount(m_numCols); CalcWindowSizes(); } @@ -9567,7 +9573,7 @@ void wxGrid::SetColLabelValue( int col, const wxString& s ) { if ( m_useNativeHeader ) { - GetColHeader()->UpdateColumn(col); + GetGridColHeader()->UpdateColumn(col); } else { @@ -10408,7 +10414,7 @@ void wxGrid::SetColSize( int col, int width ) const int diff = width - m_colWidths[col]; m_colWidths[col] = width; if ( m_useNativeHeader ) - GetColHeader()->UpdateColumn(col); + GetGridColHeader()->UpdateColumn(col); //else: will be refreshed when the header is redrawn for ( int colPos = GetColPos(col); colPos < m_numCols; colPos++ ) @@ -10575,7 +10581,7 @@ wxGrid::AutoSizeColOrRow(int colOrRow, bool setAsMin, wxGridDirection direction) { if ( m_useNativeHeader ) { - GetColHeader()->UpdateColumn(col); + GetGridColHeader()->UpdateColumn(col); } else {