mirror of
https://github.com/gui-cs/Terminal.Gui.git
synced 2025-12-27 00:07:58 +01:00
Fixed page up/down offset and added test
This commit is contained in:
@@ -330,6 +330,15 @@ namespace Terminal.Gui {
|
||||
Driver.AddStr (new string (' ', width));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the amount of vertical space currently occupied by the header or 0 if it is not visible.
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
private int GetHeaderHeightIfAny()
|
||||
{
|
||||
return ShouldRenderHeaders()? GetHeaderHeight():0;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the amount of vertical space required to display the header
|
||||
/// </summary>
|
||||
@@ -589,12 +598,12 @@ namespace Terminal.Gui {
|
||||
break;
|
||||
case Key.PageUp:
|
||||
case Key.PageUp | Key.ShiftMask:
|
||||
ChangeSelectionByOffset(0,-Frame.Height,keyEvent.Key.HasFlag(Key.ShiftMask));
|
||||
ChangeSelectionByOffset(0,-(Bounds.Height - GetHeaderHeightIfAny()),keyEvent.Key.HasFlag(Key.ShiftMask));
|
||||
Update ();
|
||||
break;
|
||||
case Key.PageDown:
|
||||
case Key.PageDown | Key.ShiftMask:
|
||||
ChangeSelectionByOffset(0,Frame.Height,keyEvent.Key.HasFlag(Key.ShiftMask));
|
||||
ChangeSelectionByOffset(0,Bounds.Height - GetHeaderHeightIfAny(),keyEvent.Key.HasFlag(Key.ShiftMask));
|
||||
Update ();
|
||||
break;
|
||||
case Key.Home | Key.CtrlMask:
|
||||
@@ -778,8 +787,8 @@ namespace Terminal.Gui {
|
||||
|
||||
var hit = ScreenToCell(me.OfX,me.OfY);
|
||||
if(hit != null) {
|
||||
// TODO : if shift is held down extend selection
|
||||
SetSelection(hit.Value.X,hit.Value.Y,false );
|
||||
|
||||
SetSelection(hit.Value.X,hit.Value.Y,me.Flags.HasFlag(MouseFlags.ButtonShift));
|
||||
Update();
|
||||
}
|
||||
}
|
||||
@@ -808,7 +817,7 @@ namespace Terminal.Gui {
|
||||
|
||||
var viewPort = CalculateViewport(Bounds);
|
||||
|
||||
var headerHeight = ShouldRenderHeaders()? GetHeaderHeight():0;
|
||||
var headerHeight = GetHeaderHeightIfAny();
|
||||
|
||||
var col = viewPort.LastOrDefault(c=>c.X <= clientX);
|
||||
|
||||
@@ -839,7 +848,7 @@ namespace Terminal.Gui {
|
||||
|
||||
var viewPort = CalculateViewport(Bounds);
|
||||
|
||||
var headerHeight = ShouldRenderHeaders()? GetHeaderHeight():0;
|
||||
var headerHeight = GetHeaderHeightIfAny();
|
||||
|
||||
var colHit = viewPort.FirstOrDefault(c=>c.Column.Ordinal == tableColumn);
|
||||
|
||||
@@ -916,7 +925,7 @@ namespace Terminal.Gui {
|
||||
}
|
||||
|
||||
var columnsToRender = CalculateViewport (Bounds).ToArray();
|
||||
var headerHeight = ShouldRenderHeaders()? GetHeaderHeight() : 0;
|
||||
var headerHeight = GetHeaderHeightIfAny();
|
||||
|
||||
//if we have scrolled too far to the left
|
||||
if (SelectedColumn < columnsToRender.Min (r => r.Column.Ordinal)) {
|
||||
|
||||
@@ -224,6 +224,39 @@ namespace UnitTests {
|
||||
Assert.False(tableView.IsSelected(1,2));
|
||||
Assert.False(tableView.IsSelected(2,2));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void PageDown_ExcludesHeaders()
|
||||
{
|
||||
|
||||
var driver = new FakeDriver ();
|
||||
Application.Init (driver, new FakeMainLoop (() => FakeConsole.ReadKey (true)));
|
||||
driver.Init (() => { });
|
||||
|
||||
|
||||
var tableView = new TableView(){
|
||||
Table = BuildTable(25,50),
|
||||
MultiSelect = true,
|
||||
Bounds = new Rect(0,0,10,5)
|
||||
};
|
||||
|
||||
// Header should take up 2 lines
|
||||
tableView.Style.ShowHorizontalHeaderOverline = false;
|
||||
tableView.Style.ShowHorizontalHeaderUnderline = true;
|
||||
tableView.Style.AlwaysShowHeaders = false;
|
||||
|
||||
Assert.Equal(0,tableView.RowOffset);
|
||||
|
||||
tableView.ProcessKey(new KeyEvent(Key.PageDown,new KeyModifiers()));
|
||||
|
||||
// window height is 5 rows 2 are header so page down should give 3 new rows
|
||||
Assert.Equal(3,tableView.RowOffset);
|
||||
|
||||
// header is no longer visible so page down should give 5 new rows
|
||||
tableView.ProcessKey(new KeyEvent(Key.PageDown,new KeyModifiers()));
|
||||
|
||||
Assert.Equal(8,tableView.RowOffset);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Builds a simple table of string columns with the requested number of columns and rows
|
||||
|
||||
Reference in New Issue
Block a user