Make Ctrl/Shift-Space apply to all cells of the current selection

This provides a convenient way to select multiple lines and is
consistent with the operation of these keys in spreadsheet programs.
This commit is contained in:
Vadim Zeitlin
2020-04-13 21:59:44 +02:00
parent 4cde93cc82
commit ed767ed324

View File

@@ -5834,21 +5834,29 @@ void wxGrid::OnKeyDown( wxKeyEvent& event )
break; break;
case WXK_SPACE: case WXK_SPACE:
// Ctrl-Space selects the current column, Shift-Space -- the // Ctrl-Space selects the current column or, if there is a
// current row and Ctrl-Shift-Space -- everything // selection, all columns containing the selected cells,
// Shift-Space -- the current row (or all selection rows) and
// Ctrl-Shift-Space -- everything.
{
wxGridCellCoords selStart, selEnd;
switch ( m_selection ? event.GetModifiers() : wxMOD_NONE ) switch ( m_selection ? event.GetModifiers() : wxMOD_NONE )
{ {
case wxMOD_CONTROL: case wxMOD_CONTROL:
m_selection->SelectCol(m_currentCellCoords.GetCol()); selStart.Set(0, m_currentCellCoords.GetCol());
selEnd.Set(m_numRows - 1,
m_selection->GetExtensionAnchor().GetCol());
break; break;
case wxMOD_SHIFT: case wxMOD_SHIFT:
m_selection->SelectRow(m_currentCellCoords.GetRow()); selStart.Set(m_currentCellCoords.GetRow(), 0);
selEnd.Set(m_selection->GetExtensionAnchor().GetRow(),
m_numCols - 1);
break; break;
case wxMOD_CONTROL | wxMOD_SHIFT: case wxMOD_CONTROL | wxMOD_SHIFT:
m_selection->SelectBlock(0, 0, selStart.Set(0, 0);
m_numRows - 1, m_numCols - 1); selEnd.Set(m_numRows - 1, m_numCols - 1);
break; break;
case wxMOD_NONE: case wxMOD_NONE:
@@ -5862,6 +5870,10 @@ void wxGrid::OnKeyDown( wxKeyEvent& event )
default: default:
event.Skip(); event.Skip();
} }
if ( selStart != wxGridNoCellCoords )
m_selection->SelectBlock(selStart, selEnd);
}
break; break;
default: default: