mirror of
https://github.com/gui-cs/Terminal.Gui.git
synced 2026-01-01 00:46:39 +01:00
* Ensures visibility SelectedItem on MoveDown and MoveUp. * Fix VisibleItems to Frame.Height.
This commit is contained in:
@@ -521,12 +521,17 @@ namespace Terminal.Gui {
|
||||
top++;
|
||||
} else if (selected < top) {
|
||||
top = selected;
|
||||
} else if (selected < top) {
|
||||
top = selected;
|
||||
}
|
||||
OnSelectedChanged ();
|
||||
SetNeedsDisplay ();
|
||||
} else if (selected == 0) {
|
||||
OnSelectedChanged ();
|
||||
SetNeedsDisplay ();
|
||||
} else if (selected >= top + Frame.Height) {
|
||||
top = source.Count - Frame.Height;
|
||||
SetNeedsDisplay ();
|
||||
}
|
||||
|
||||
return true;
|
||||
@@ -561,6 +566,9 @@ namespace Terminal.Gui {
|
||||
}
|
||||
OnSelectedChanged ();
|
||||
SetNeedsDisplay ();
|
||||
} else if (selected < top) {
|
||||
top = selected;
|
||||
SetNeedsDisplay ();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -5,9 +5,17 @@ using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Xunit;
|
||||
using Xunit.Abstractions;
|
||||
|
||||
namespace Terminal.Gui.Views {
|
||||
public class ListViewTests {
|
||||
readonly ITestOutputHelper output;
|
||||
|
||||
public ListViewTests (ITestOutputHelper output)
|
||||
{
|
||||
this.output = output;
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Constructors_Defaults ()
|
||||
{
|
||||
@@ -221,5 +229,207 @@ namespace Terminal.Gui.Views {
|
||||
return item;
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
[AutoInitShutdown]
|
||||
public void Ensures_Visibility_SelectedItem_On_MoveDown_And_MoveUp ()
|
||||
{
|
||||
var source = new List<string> ();
|
||||
for (int i = 0; i < 20; i++) {
|
||||
source.Add ($"Line{i}");
|
||||
}
|
||||
var lv = new ListView (source) { Width = Dim.Fill (), Height = Dim.Fill () };
|
||||
var win = new Window ();
|
||||
win.Add (lv);
|
||||
Application.Top.Add (win);
|
||||
Application.Begin (Application.Top);
|
||||
((FakeDriver)Application.Driver).SetBufferSize (12, 12);
|
||||
Application.Refresh ();
|
||||
|
||||
Assert.Equal (0, lv.SelectedItem);
|
||||
GraphViewTests.AssertDriverContentsWithFrameAre (@"
|
||||
┌──────────┐
|
||||
│Line0 │
|
||||
│Line1 │
|
||||
│Line2 │
|
||||
│Line3 │
|
||||
│Line4 │
|
||||
│Line5 │
|
||||
│Line6 │
|
||||
│Line7 │
|
||||
│Line8 │
|
||||
│Line9 │
|
||||
└──────────┘", output);
|
||||
|
||||
Assert.True (lv.ScrollDown (10));
|
||||
lv.Redraw (lv.Bounds);
|
||||
Assert.Equal (0, lv.SelectedItem);
|
||||
GraphViewTests.AssertDriverContentsWithFrameAre (@"
|
||||
┌──────────┐
|
||||
│Line10 │
|
||||
│Line11 │
|
||||
│Line12 │
|
||||
│Line13 │
|
||||
│Line14 │
|
||||
│Line15 │
|
||||
│Line16 │
|
||||
│Line17 │
|
||||
│Line18 │
|
||||
│Line19 │
|
||||
└──────────┘", output);
|
||||
|
||||
Assert.True (lv.MoveDown ());
|
||||
lv.Redraw (lv.Bounds);
|
||||
Assert.Equal (1, lv.SelectedItem);
|
||||
GraphViewTests.AssertDriverContentsWithFrameAre (@"
|
||||
┌──────────┐
|
||||
│Line1 │
|
||||
│Line2 │
|
||||
│Line3 │
|
||||
│Line4 │
|
||||
│Line5 │
|
||||
│Line6 │
|
||||
│Line7 │
|
||||
│Line8 │
|
||||
│Line9 │
|
||||
│Line10 │
|
||||
└──────────┘", output);
|
||||
|
||||
Assert.True (lv.MoveEnd ());
|
||||
lv.Redraw (lv.Bounds);
|
||||
Assert.Equal (19, lv.SelectedItem);
|
||||
GraphViewTests.AssertDriverContentsWithFrameAre (@"
|
||||
┌──────────┐
|
||||
│Line19 │
|
||||
│ │
|
||||
│ │
|
||||
│ │
|
||||
│ │
|
||||
│ │
|
||||
│ │
|
||||
│ │
|
||||
│ │
|
||||
│ │
|
||||
└──────────┘", output);
|
||||
|
||||
Assert.True (lv.ScrollUp (20));
|
||||
lv.Redraw (lv.Bounds);
|
||||
Assert.Equal (19, lv.SelectedItem);
|
||||
GraphViewTests.AssertDriverContentsWithFrameAre (@"
|
||||
┌──────────┐
|
||||
│Line0 │
|
||||
│Line1 │
|
||||
│Line2 │
|
||||
│Line3 │
|
||||
│Line4 │
|
||||
│Line5 │
|
||||
│Line6 │
|
||||
│Line7 │
|
||||
│Line8 │
|
||||
│Line9 │
|
||||
└──────────┘", output);
|
||||
|
||||
Assert.True (lv.MoveDown ());
|
||||
lv.Redraw (lv.Bounds);
|
||||
Assert.Equal (19, lv.SelectedItem);
|
||||
GraphViewTests.AssertDriverContentsWithFrameAre (@"
|
||||
┌──────────┐
|
||||
│Line10 │
|
||||
│Line11 │
|
||||
│Line12 │
|
||||
│Line13 │
|
||||
│Line14 │
|
||||
│Line15 │
|
||||
│Line16 │
|
||||
│Line17 │
|
||||
│Line18 │
|
||||
│Line19 │
|
||||
└──────────┘", output);
|
||||
|
||||
Assert.True (lv.ScrollUp (20));
|
||||
lv.Redraw (lv.Bounds);
|
||||
Assert.Equal (19, lv.SelectedItem);
|
||||
GraphViewTests.AssertDriverContentsWithFrameAre (@"
|
||||
┌──────────┐
|
||||
│Line0 │
|
||||
│Line1 │
|
||||
│Line2 │
|
||||
│Line3 │
|
||||
│Line4 │
|
||||
│Line5 │
|
||||
│Line6 │
|
||||
│Line7 │
|
||||
│Line8 │
|
||||
│Line9 │
|
||||
└──────────┘", output);
|
||||
|
||||
Assert.True (lv.MoveDown ());
|
||||
lv.Redraw (lv.Bounds);
|
||||
Assert.Equal (19, lv.SelectedItem);
|
||||
GraphViewTests.AssertDriverContentsWithFrameAre (@"
|
||||
┌──────────┐
|
||||
│Line10 │
|
||||
│Line11 │
|
||||
│Line12 │
|
||||
│Line13 │
|
||||
│Line14 │
|
||||
│Line15 │
|
||||
│Line16 │
|
||||
│Line17 │
|
||||
│Line18 │
|
||||
│Line19 │
|
||||
└──────────┘", output);
|
||||
|
||||
Assert.True (lv.MoveHome ());
|
||||
lv.Redraw (lv.Bounds);
|
||||
Assert.Equal (0, lv.SelectedItem);
|
||||
GraphViewTests.AssertDriverContentsWithFrameAre (@"
|
||||
┌──────────┐
|
||||
│Line0 │
|
||||
│Line1 │
|
||||
│Line2 │
|
||||
│Line3 │
|
||||
│Line4 │
|
||||
│Line5 │
|
||||
│Line6 │
|
||||
│Line7 │
|
||||
│Line8 │
|
||||
│Line9 │
|
||||
└──────────┘", output);
|
||||
|
||||
Assert.True (lv.ScrollDown (20));
|
||||
lv.Redraw (lv.Bounds);
|
||||
Assert.Equal (0, lv.SelectedItem);
|
||||
GraphViewTests.AssertDriverContentsWithFrameAre (@"
|
||||
┌──────────┐
|
||||
│Line19 │
|
||||
│ │
|
||||
│ │
|
||||
│ │
|
||||
│ │
|
||||
│ │
|
||||
│ │
|
||||
│ │
|
||||
│ │
|
||||
│ │
|
||||
└──────────┘", output);
|
||||
|
||||
Assert.True (lv.MoveUp ());
|
||||
lv.Redraw (lv.Bounds);
|
||||
Assert.Equal (0, lv.SelectedItem);
|
||||
GraphViewTests.AssertDriverContentsWithFrameAre (@"
|
||||
┌──────────┐
|
||||
│Line0 │
|
||||
│Line1 │
|
||||
│Line2 │
|
||||
│Line3 │
|
||||
│Line4 │
|
||||
│Line5 │
|
||||
│Line6 │
|
||||
│Line7 │
|
||||
│Line8 │
|
||||
│Line9 │
|
||||
└──────────┘", output);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user