Merge pull request #2263 from tznind/full-row-select-home-end

Fixes #2262 - Change Ctrl+Home/End to prevent horizontal navigation when FullRowSelect is on
This commit is contained in:
Tig
2022-12-31 13:27:32 -07:00
committed by GitHub
2 changed files with 58 additions and 4 deletions

View File

@@ -829,22 +829,28 @@ namespace Terminal.Gui {
}
/// <summary>
/// Moves or extends the selection to the first cell in the table (0,0)
/// Moves or extends the selection to the first cell in the table (0,0).
/// If <see cref="FullRowSelect"/> is enabled then selection instead moves
/// to (<see cref="SelectedColumn"/>,0) i.e. no horizontal scrolling.
/// </summary>
/// <param name="extend">true to extend the current selection (if any) instead of replacing</param>
public void ChangeSelectionToStartOfTable (bool extend)
{
SetSelection (0, 0, extend);
SetSelection (FullRowSelect ? SelectedColumn : 0, 0, extend);
Update ();
}
/// <summary>
/// Moves or extends the selection to the final cell in the table
/// Moves or extends the selection to the final cell in the table (nX,nY).
/// If <see cref="FullRowSelect"/> is enabled then selection instead moves
/// to (<see cref="SelectedColumn"/>,nY) i.e. no horizontal scrolling.
/// </summary>
/// <param name="extend">true to extend the current selection (if any) instead of replacing</param>
public void ChangeSelectionToEndOfTable(bool extend)
{
SetSelection (Table.Columns.Count - 1, Table.Rows.Count - 1, extend);
var finalColumn = Table.Columns.Count - 1;
SetSelection (FullRowSelect ? SelectedColumn : finalColumn, Table.Rows.Count - 1, extend);
Update ();
}

View File

@@ -1381,6 +1381,54 @@ namespace Terminal.Gui.Views {
Assert.Equal (1, tableView.SelectedColumn);
}
[InlineData(true)]
[InlineData (false)]
[Theory, AutoInitShutdown]
public void TestMoveStartEnd_WithFullRowSelect(bool withFullRowSelect)
{
var tableView = GetTwoRowSixColumnTable ();
tableView.FullRowSelect = withFullRowSelect;
tableView.SelectedRow = 1;
tableView.SelectedColumn = 1;
tableView.ProcessKey (new KeyEvent
{
Key = Key.Home | Key.CtrlMask
});
if(withFullRowSelect)
{
// Should not be any horizontal movement when
// using navigate to Start/End and FullRowSelect
Assert.Equal (1, tableView.SelectedColumn);
Assert.Equal (0, tableView.SelectedRow);
}
else
{
Assert.Equal (0, tableView.SelectedColumn);
Assert.Equal (0, tableView.SelectedRow);
}
tableView.ProcessKey (new KeyEvent
{
Key = Key.End | Key.CtrlMask
});
if(withFullRowSelect)
{
Assert.Equal (1, tableView.SelectedColumn);
Assert.Equal (1, tableView.SelectedRow);
}
else
{
Assert.Equal (5, tableView.SelectedColumn);
Assert.Equal (1, tableView.SelectedRow);
}
}
[InlineData (true)]
[InlineData (false)]
[Theory, AutoInitShutdown]