Browse Source

Merge pull request #747 from BDisp/listview-reseting

Reset the ListView when the source is defined.
Charlie Kindel 5 years ago
parent
commit
db1186e1a9
1 changed files with 26 additions and 2 deletions
  1. 26 2
      Terminal.Gui/Views/ListView.cs

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

@@ -120,6 +120,7 @@ namespace Terminal.Gui {
 				source = value;
 				top = 0;
 				selected = 0;
+				lastSelectedItem = -1;
 				SetNeedsDisplay ();
 			}
 		}
@@ -205,14 +206,15 @@ namespace Terminal.Gui {
 		public int SelectedItem {
 			get => selected;
 			set {
-				if (source == null)
+				if (source == null || source.Count == 0)
 					return;
 				if (selected < 0 || selected >= source.Count)
 					throw new ArgumentException ("value");
 				selected = value;
+				OnSelectedChanged ();
 				if (selected < top)
 					top = selected;
-				else if (selected >= top + Frame.Height)
+				else if (selected >= top + (LayoutStyle == LayoutStyle.Absolute ? Frame.Height : Height.Anchor (0)))
 					top = selected;
 			}
 		}
@@ -527,6 +529,28 @@ namespace Terminal.Gui {
 			return true;
 		}
 
+		///<inheritdoc/>
+		public override bool OnEnter (View view)
+		{
+			if (source?.Count > 0 && lastSelectedItem == -1) {
+				OnSelectedChanged ();
+				return true;
+			}
+
+			return false;
+		}
+
+		///<inheritdoc/>
+		public override bool OnMouseEnter (MouseEvent mouseEvent)
+		{
+			if (source?.Count > 0 && selected >= 0 && lastSelectedItem == -1) {
+				lastSelectedItem = selected;
+				return true;
+			}
+
+			return false;
+		}
+
 		///<inheritdoc/>
 		public override void PositionCursor ()
 		{