Pārlūkot izejas kodu

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

V2 Fixes #3396. ListViewWIthSelection scenario does not show all rows and other issues
Tig 1 gadu atpakaļ
vecāks
revīzija
0a73396375

+ 3 - 2
Terminal.Gui/Views/ListView.cs

@@ -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 ();
 

+ 2 - 2
UICatalog/Scenarios/ListViewWithSelection.cs

@@ -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 ();
                                  };

+ 35 - 0
UnitTests/Views/ListViewTests.cs

@@ -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);
+    }
 }