From 6e6eb799c88c1f6dd07636a032510c8e3f06d8b6 Mon Sep 17 00:00:00 2001 From: Ilya Sinitsyn Date: Tue, 28 Jan 2020 02:42:27 +0700 Subject: [PATCH] Implement wxGrid cells selection for Home and End keys Select cells if Shift is pressed when handling Home and End keys --- src/generic/grid.cpp | 36 ++++++++++++++++++++++++++++++------ 1 file changed, 30 insertions(+), 6 deletions(-) diff --git a/src/generic/grid.cpp b/src/generic/grid.cpp index b48715d05d..4fbe07fb69 100644 --- a/src/generic/grid.cpp +++ b/src/generic/grid.cpp @@ -5567,7 +5567,10 @@ void wxGrid::OnKeyDown( wxKeyEvent& event ) if ( m_currentCellCoords == wxGridNoCellCoords ) break; - int row = m_currentCellCoords.GetRow(); + const bool useSelectedBlockCorner = + event.ShiftDown() && m_selectedBlockCorner != wxGridNoCellCoords; + int row = useSelectedBlockCorner ? m_selectedBlockCorner.GetRow() + : m_currentCellCoords.GetRow(); if ( event.ControlDown() ) { row = 0; @@ -5588,8 +5591,17 @@ void wxGrid::OnKeyDown( wxKeyEvent& event ) break; } - ClearSelection(); - GoToCell(row, GetColAt(col)); + if ( event.ShiftDown() ) + { + UpdateBlockBeingSelected(m_currentCellCoords, + wxGridCellCoords(row, col)); + MakeCellVisible(row, col); + } + else + { + ClearSelection(); + GoToCell(row, GetColAt(col)); + } } break; @@ -5598,7 +5610,10 @@ void wxGrid::OnKeyDown( wxKeyEvent& event ) if ( m_currentCellCoords == wxGridNoCellCoords ) break; - int row = m_currentCellCoords.GetRow(); + const bool useSelectedBlockCorner = + event.ShiftDown() && m_selectedBlockCorner != wxGridNoCellCoords; + int row = useSelectedBlockCorner ? m_selectedBlockCorner.GetRow() + : m_currentCellCoords.GetRow(); if ( event.ControlDown() ) { row = m_numRows - 1; @@ -5619,8 +5634,17 @@ void wxGrid::OnKeyDown( wxKeyEvent& event ) break; } - ClearSelection(); - GoToCell(row, GetColAt(col)); + if ( event.ShiftDown() ) + { + UpdateBlockBeingSelected(m_currentCellCoords, + wxGridCellCoords(row, col)); + MakeCellVisible(row, col); + } + else + { + ClearSelection(); + GoToCell(row, GetColAt(col)); + } } break;