浏览代码

extract methods on ListView to make it controlable from other controls (#310)

* moveup

* MoveDown

* MovePageDown

* MovePageUp

* MarkUnmarkRow
Kasper B. Graversen 5 年之前
父节点
当前提交
787d65b161
共有 1 个文件被更改,包括 76 次插入48 次删除
  1. 76 48
      Terminal.Gui/Views/ListView.cs

+ 76 - 48
Terminal.Gui/Views/ListView.cs

@@ -283,69 +283,97 @@ namespace Terminal.Gui {
 			switch (kb.Key) {
 			case Key.CursorUp:
 			case Key.ControlP:
-				if (selected > 0) {
-					selected--;
-					if (selected < top)
-						top = selected;
-					if (SelectedChanged != null)
-						SelectedChanged ();
-					SetNeedsDisplay ();
-				}
-				return true;
+				return MoveUp();
 
 			case Key.CursorDown:
 			case Key.ControlN:
-				if (selected + 1 < source.Count) {
-					selected++;
-					if (selected >= top + Frame.Height)
-						top++;
-					if (SelectedChanged != null)
-						SelectedChanged ();
-					SetNeedsDisplay ();
-				}
-				return true;
+				return MoveDown();
 
 			case Key.ControlV:
 			case Key.PageDown:
-				var n = (selected + Frame.Height);
-				if (n > source.Count)
-					n = source.Count - 1;
-				if (n != selected) {
-					selected = n;
-					if (source.Count >= Frame.Height)
-						top = selected;
-					else
-						top = 0;
-					if (SelectedChanged != null)
-						SelectedChanged ();
-					SetNeedsDisplay ();
-				}
-				return true;
+				return MovePageDown();
 
 			case Key.PageUp:
-				n = (selected - Frame.Height);
-				if (n < 0)
-					n = 0;
-				if (n != selected) {
-					selected = n;
-					top = selected;
-					if (SelectedChanged != null)
-						SelectedChanged ();
-					SetNeedsDisplay ();
-				}
-				return true;
+				return MovePageUp();
 
 			case Key.Space:
-				if (allowsMarking) {
-					Source.SetMark (SelectedItem, !Source.IsMarked (SelectedItem));
-					SetNeedsDisplay ();
+				if (MarkUnmarkRow())
 					return true;
-				}
-				break;
+				else
+					break;
 			}
 			return base.ProcessKey (kb);
 		}
 
+		public virtual bool MarkUnmarkRow(){
+			if (allowsMarking){
+				Source.SetMark(SelectedItem, !Source.IsMarked(SelectedItem));
+				SetNeedsDisplay();
+				return true;
+			}
+
+			return false;
+		}
+
+		public virtual bool MovePageUp(){
+			int n = (selected - Frame.Height);
+			if (n < 0)
+				n = 0;
+			if (n != selected){
+				selected = n;
+				top = selected;
+				if (SelectedChanged != null)
+					SelectedChanged();
+				SetNeedsDisplay();
+			}
+
+			return true;
+		}
+
+		public virtual bool MovePageDown(){
+			var n = (selected + Frame.Height);
+			if (n > source.Count)
+				n = source.Count - 1;
+			if (n != selected){
+				selected = n;
+				if (source.Count >= Frame.Height)
+					top = selected;
+				else
+					top = 0;
+				if (SelectedChanged != null)
+					SelectedChanged();
+				SetNeedsDisplay();
+			}
+
+			return true;
+		}
+
+		public virtual bool MoveDown(){
+			if (selected + 1 < source.Count){
+				selected++;
+				if (selected >= top + Frame.Height)
+					top++;
+				if (SelectedChanged != null)
+					SelectedChanged();
+				SetNeedsDisplay();
+			}
+
+			return true;
+		}
+
+		public virtual bool MoveUp(){
+			if (selected > 0){
+				selected--;
+				if (selected < top)
+					top = selected;
+				if (SelectedChanged != null)
+					SelectedChanged();
+				SetNeedsDisplay();
+			}
+
+			return true;
+		}
+
 		/// <summary>
 		/// Positions the cursor in this view
 		/// </summary>