Merge pull request #3399 from BDisp/v2_listview-scrolling-fix_3396

V2 Fixes #3396. ListViewWIthSelection scenario does not show all rows and other issues
This commit is contained in:
Tig
2024-04-14 14:24:18 -06:00
committed by GitHub
3 changed files with 40 additions and 4 deletions

View File

@@ -912,7 +912,7 @@ public class ListWrapper : IListDataSource
int start = 0
)
{
container.Move (col, line);
container.Move (Math.Max (col - start, 0), line);
object t = _source? [item];
if (t is null)
@@ -1028,7 +1028,8 @@ public class ListWrapper : IListDataSource
private void RenderUstr (ConsoleDriver driver, string ustr, int col, int line, int width, int start = 0)
{
string u = TextFormatter.ClipAndJustify (ustr, width, TextAlignment.Left);
string str = start > ustr.GetColumns () ? string.Empty : ustr.Substring (Math.Min (start, ustr.ToRunes ().Length - 1));
string u = TextFormatter.ClipAndJustify (str, width, TextAlignment.Left);
driver.AddStr (u);
width -= u.GetColumns ();

View File

@@ -84,9 +84,9 @@ public class ListViewWithSelection : Scenario
_listView.DrawContent += (s, e) =>
{
scrollBar.Size = _listView.Source.Count - 1;
scrollBar.Size = _listView.Source.Count;
scrollBar.Position = _listView.TopItem;
scrollBar.OtherScrollBarView.Size = _listView.MaxLength - 1;
scrollBar.OtherScrollBarView.Size = _listView.MaxLength;
scrollBar.OtherScrollBarView.Position = _listView.LeftItem;
scrollBar.Refresh ();
};

View File

@@ -759,4 +759,39 @@ Item 6",
Assert.Equal ("Three", selected);
Assert.Equal (2, lv.SelectedItem);
}
[Fact]
[AutoInitShutdown]
public void LeftItem_TopItem_Tests ()
{
var source = new List<string> ();
for (int i = 0; i < 5; i++) {
source.Add ($"Item {i}");
}
var lv = new ListView () {
X = 1,
Width = 10,
Height = 5,
Source = new ListWrapper (source)
};
var top = new Toplevel ();
top.Add (lv);
Application.Begin (top);
TestHelpers.AssertDriverContentsWithFrameAre (@"
Item 0
Item 1
Item 2
Item 3
Item 4", _output);
lv.LeftItem = 1;
lv.TopItem = 1;
Application.Refresh ();
TestHelpers.AssertDriverContentsWithFrameAre (@"
tem 1
tem 2
tem 3
tem 4", _output);
}
}