Parcourir la source

merged upstream master'

Charlie Kindel il y a 5 ans
Parent
commit
24087d75ea
4 fichiers modifiés avec 61 ajouts et 25 suppressions
  1. 13 2
      Example/demo.cs
  2. 3 21
      FSharpExample/Program.fs
  3. 5 1
      Terminal.Gui/Views/ScrollView.cs
  4. 40 1
      Terminal.Gui/Views/StatusBar.cs

+ 13 - 2
Example/demo.cs

@@ -375,6 +375,17 @@ static class Demo {
 		MessageBox.Query (50, 7, "Help", "This is a small help\nBe kind.", "Ok");
 		MessageBox.Query (50, 7, "Help", "This is a small help\nBe kind.", "Ok");
 	}
 	}
 
 
+	static void Load ()
+	{
+		MessageBox.Query (50, 7, "Load", "This is a small load\nBe kind.", "Ok");
+	}
+
+	static void Save ()
+	{
+		MessageBox.Query (50, 7, "Save", "This is a small save\nBe kind.", "Ok");
+	}
+
+
 	#region Selection Demo
 	#region Selection Demo
 
 
 	static void ListSelectionDemo (bool multiple)
 	static void ListSelectionDemo (bool multiple)
@@ -611,8 +622,8 @@ static class Demo {
 
 
 		var statusBar = new StatusBar (new StatusItem [] {
 		var statusBar = new StatusBar (new StatusItem [] {
 			new StatusItem(Key.F1, "~F1~ Help", () => Help()),
 			new StatusItem(Key.F1, "~F1~ Help", () => Help()),
-			new StatusItem(Key.F2, "~F2~ Load", null),
-			new StatusItem(Key.F3, "~F3~ Save", null),
+			new StatusItem(Key.F2, "~F2~ Load", Load),
+			new StatusItem(Key.F3, "~F3~ Save", Save),
 			new StatusItem(Key.ControlQ, "~^Q~ Quit", () => { if (Quit ()) top.Running = false; }),
 			new StatusItem(Key.ControlQ, "~^Q~ Quit", () => { if (Quit ()) top.Running = false; }),
 		}) {
 		}) {
 			Parent = null,
 			Parent = null,

+ 3 - 21
FSharpExample/Program.fs

@@ -333,9 +333,9 @@ type Demo() = class end
             X = Pos.At(0),
             X = Pos.At(0),
             Y = Pos.At(0),
             Y = Pos.At(0),
             Width = Dim.Fill () - Dim.op_Implicit(1),
             Width = Dim.Fill () - Dim.op_Implicit(1),
-            Height = Dim.Fill () - Dim.op_Implicit(2)
+            Height = Dim.Fill () - Dim.op_Implicit(2),
+            ColorScheme = Colors.TopLevel
             )
             )
-        listView.ColorScheme <- Colors.TopLevel
         container.Add (listView)
         container.Add (listView)
         
         
         let KeyDownPressUp(keyEvent : KeyEvent, updown : string) =
         let KeyDownPressUp(keyEvent : KeyEvent, updown : string) =
@@ -344,25 +344,7 @@ type Demo() = class end
             | "Down"
             | "Down"
             | "Up"
             | "Up"
             | "Press" -> 
             | "Press" -> 
-                let mutable (msg : string) = sprintf "Key %5s : " updown
-                if (keyEvent.Key &&& Key.ShiftMask) <> Key.Unknown
-                then msg <- msg + "Shift "
-                if (keyEvent.Key &&& Key.CtrlMask) <> Key.Unknown
-                then msg <- msg + "Ctrl "
-                if (keyEvent.Key &&& Key.AltMask) <> Key.Unknown
-                then msg <- msg + "Alt "
-                msg <-  msg + if (keyEvent.KeyValue &&& (int)Key.CharMask) > 26 then (string)keyEvent.KeyValue else (string)keyEvent.Key
-                list.Add (msg)    
-            | _ ->
-                if (keyEvent.Key &&& Key.ShiftMask) <> Key.Unknown
-                then list.Add (sprintf "Key %s : Shift " updown)
-                else if (keyEvent.Key &&& Key.CtrlMask) <> Key.Unknown
-                then list.Add (sprintf "Key %s : Ctrl " updown)
-                else if (keyEvent.Key &&& Key.AltMask) <> Key.Unknown
-                then list.Add (sprintf "Key %s : Alt " updown)
-                else if ((int)keyEvent.KeyValue &&& (int)Key.CharMask) > 26
-                then list.Add (sprintf "Key %s : %s" updown (keyEvent.KeyValue.ToString()))
-                else list.Add (sprintf "Key %s : %s" updown (keyEvent.Key.ToString()))
+                list.Add (keyEvent.ToString ())    
             listView.MoveDown ();
             listView.MoveDown ();
     
     
         container.KeyDown.Add(fun (e : View.KeyEventEventArgs) -> KeyDownPressUp (e.KeyEvent, "Down") |> ignore)
         container.KeyDown.Add(fun (e : View.KeyEventEventArgs) -> KeyDownPressUp (e.KeyEvent, "Down") |> ignore)

+ 5 - 1
Terminal.Gui/Views/ScrollView.cs

@@ -90,6 +90,9 @@ namespace Terminal.Gui {
 		/// <param name="region">Region to be redrawn.</param>
 		/// <param name="region">Region to be redrawn.</param>
 		public override void Redraw(Rect region)
 		public override void Redraw(Rect region)
 		{
 		{
+			if (ColorScheme == null)
+				return;
+
 			Driver.SetAttribute (ColorScheme.Normal);
 			Driver.SetAttribute (ColorScheme.Normal);
 
 
 			if (vertical) {
 			if (vertical) {
@@ -412,7 +415,8 @@ namespace Terminal.Gui {
 				contentView.Redraw (contentView.Bounds);
 				contentView.Redraw (contentView.Bounds);
 			}
 			}
 			vertical.Redraw (vertical.Bounds);
 			vertical.Redraw (vertical.Bounds);
-			horizontal.Redraw (vertical.Bounds);
+			horizontal.Redraw (horizontal.Bounds);
+			Driver.Clip = savedClip;
 			Driver.SetAttribute (ColorScheme.Normal);
 			Driver.SetAttribute (ColorScheme.Normal);
 		}
 		}
 
 

+ 40 - 1
Terminal.Gui/Views/StatusBar.cs

@@ -185,11 +185,50 @@ namespace Terminal.Gui {
 		{
 		{
 			foreach (var item in Items) {
 			foreach (var item in Items) {
 				if (kb.Key == item.Shortcut) {
 				if (kb.Key == item.Shortcut) {
-					if (item.Action != null) item.Action ();
+					item.Action?.Invoke ();
 					return true;
 					return true;
 				}
 				}
 			}
 			}
 			return false;
 			return false;
 		}
 		}
+
+		///<inheritdoc cref="MouseEvent"/>
+		public override bool MouseEvent (MouseEvent me)
+		{
+			if (me.Flags != MouseFlags.Button1Clicked)
+				return false;
+
+			int pos = 1;
+			for (int i = 0; i < Items.Length; i++) {
+				if (me.X >= pos && me.X < pos + GetItemTitleLength (Items [i].Title)) {
+					Run (Items [i].Action);
+				}
+				pos += GetItemTitleLength (Items [i].Title) + 1;
+			}
+			return true;
+		}
+
+		int GetItemTitleLength (ustring title)
+		{
+			int len = 0;
+			foreach (var ch in title) {
+				if (ch == '~')
+					continue;
+				len++;
+			}
+
+			return len;
+		}
+
+		void Run (Action action)
+		{
+			if (action == null)
+				return;
+
+			Application.MainLoop.AddIdle (() => {
+				action ();
+				return false;
+			});
+		}
 	}
 	}
 }
 }