浏览代码

Refactored keydown/up/press events to use event vs. Action<T>

Charlie Kindel 5 年之前
父节点
当前提交
ea813ce1e7
共有 3 个文件被更改,包括 32 次插入27 次删除
  1. 5 5
      Example/demo.cs
  2. 21 16
      Terminal.Gui/Core.cs
  3. 6 6
      Terminal.Gui/Views/Menu.cs

+ 5 - 5
Example/demo.cs

@@ -90,8 +90,8 @@ static class Demo {
 			Width = Dim.Fill (),
 			Width = Dim.Fill (),
 			Height = Dim.Fill ()
 			Height = Dim.Fill ()
 		};
 		};
-		container.OnKeyUp += (KeyEvent ke) => {
-			if (ke.Key == Key.Esc)
+		container.KeyUp += (sender, e) => {
+			if (e.KeyEvent.Key == Key.Esc)
 				container.Running = false;
 				container.Running = false;
 		};
 		};
 
 
@@ -469,9 +469,9 @@ static class Demo {
 		}
 		}
 
 
 
 
-		container.OnKeyDown += (KeyEvent keyEvent) => KeyDownPressUp (keyEvent, "Down");
-		container.OnKeyPress += (KeyEvent keyEvent) => KeyDownPressUp (keyEvent, "Press");
-		container.OnKeyUp += (KeyEvent keyEvent) => KeyDownPressUp (keyEvent, "Up");
+		container.KeyDown += (o, e) => KeyDownPressUp (e.KeyEvent, "Down");
+		container.KeyPress += (o, e) => KeyDownPressUp (e.KeyEvent, "Press");
+		container.KeyUp += (o, e) => KeyDownPressUp (e.KeyEvent, "Up");
 		Application.Run (container);
 		Application.Run (container);
 	}
 	}
 	#endregion
 	#endregion

+ 21 - 16
Terminal.Gui/Core.cs

@@ -126,7 +126,7 @@ namespace Terminal.Gui {
 		/// </summary>
 		/// </summary>
 		/// <param name="keyEvent">Contains the details about the key that produced the event.</param>
 		/// <param name="keyEvent">Contains the details about the key that produced the event.</param>
 		/// <returns>true if the event was handled</returns>
 		/// <returns>true if the event was handled</returns>
-		public virtual bool KeyDown (KeyEvent keyEvent)
+		public virtual bool OnKeyDown (KeyEvent keyEvent)
 		{
 		{
 			return false;
 			return false;
 		}
 		}
@@ -136,7 +136,7 @@ namespace Terminal.Gui {
 		/// </summary>
 		/// </summary>
 		/// <param name="keyEvent">Contains the details about the key that produced the event.</param>
 		/// <param name="keyEvent">Contains the details about the key that produced the event.</param>
 		/// <returns>true if the event was handled</returns>
 		/// <returns>true if the event was handled</returns>
-		public virtual bool KeyUp (KeyEvent keyEvent)
+		public virtual bool OnKeyUp (KeyEvent keyEvent)
 		{
 		{
 			return false;
 			return false;
 		}
 		}
@@ -1066,15 +1066,20 @@ namespace Terminal.Gui {
 			SuperView?.SetFocus(this);
 			SuperView?.SetFocus(this);
 		}
 		}
 
 
+		public class KeyEventEventArgs : EventArgs {
+			public KeyEventEventArgs(KeyEvent ke) => KeyEvent = ke;
+			public KeyEvent KeyEvent { get; set; }
+		}
+
 		/// <summary>
 		/// <summary>
 		/// Invoked when a character key is pressed and occurs after the key down event.
 		/// Invoked when a character key is pressed and occurs after the key down event.
 		/// </summary>
 		/// </summary>
-		public Action<KeyEvent> OnKeyPress;
+		public event EventHandler<KeyEventEventArgs> KeyPress;
 
 
 		/// <param name="keyEvent">Contains the details about the key that produced the event.</param>
 		/// <param name="keyEvent">Contains the details about the key that produced the event.</param>
 		public override bool ProcessKey (KeyEvent keyEvent)
 		public override bool ProcessKey (KeyEvent keyEvent)
 		{
 		{
-			OnKeyPress?.Invoke (keyEvent);
+			KeyPress?.Invoke (this, new KeyEventEventArgs(keyEvent));
 			if (Focused?.ProcessKey (keyEvent) == true)
 			if (Focused?.ProcessKey (keyEvent) == true)
 				return true;
 				return true;
 
 
@@ -1084,7 +1089,7 @@ namespace Terminal.Gui {
 		/// <param name="keyEvent">Contains the details about the key that produced the event.</param>
 		/// <param name="keyEvent">Contains the details about the key that produced the event.</param>
 		public override bool ProcessHotKey (KeyEvent keyEvent)
 		public override bool ProcessHotKey (KeyEvent keyEvent)
 		{
 		{
-			OnKeyPress?.Invoke (keyEvent);
+			KeyPress?.Invoke (this, new KeyEventEventArgs (keyEvent));
 			if (subviews == null || subviews.Count == 0)
 			if (subviews == null || subviews.Count == 0)
 				return false;
 				return false;
 			foreach (var view in subviews)
 			foreach (var view in subviews)
@@ -1096,7 +1101,7 @@ namespace Terminal.Gui {
 		/// <param name="keyEvent">Contains the details about the key that produced the event.</param>
 		/// <param name="keyEvent">Contains the details about the key that produced the event.</param>
 		public override bool ProcessColdKey (KeyEvent keyEvent)
 		public override bool ProcessColdKey (KeyEvent keyEvent)
 		{
 		{
-			OnKeyPress?.Invoke (keyEvent);
+			KeyPress?.Invoke (this, new KeyEventEventArgs(keyEvent));
 			if (subviews == null || subviews.Count == 0)
 			if (subviews == null || subviews.Count == 0)
 				return false;
 				return false;
 			foreach (var view in subviews)
 			foreach (var view in subviews)
@@ -1108,16 +1113,16 @@ namespace Terminal.Gui {
 		/// <summary>
 		/// <summary>
 		/// Invoked when a key is pressed
 		/// Invoked when a key is pressed
 		/// </summary>
 		/// </summary>
-		public Action<KeyEvent> OnKeyDown;
+		public event EventHandler<KeyEventEventArgs> KeyDown;
 
 
 		/// <param name="keyEvent">Contains the details about the key that produced the event.</param>
 		/// <param name="keyEvent">Contains the details about the key that produced the event.</param>
-		public override bool KeyDown (KeyEvent keyEvent)
+		public override bool OnKeyDown (KeyEvent keyEvent)
 		{
 		{
-			OnKeyDown?.Invoke (keyEvent);
+			KeyDown?.Invoke (this, new KeyEventEventArgs (keyEvent));
 			if (subviews == null || subviews.Count == 0)
 			if (subviews == null || subviews.Count == 0)
 				return false;
 				return false;
 			foreach (var view in subviews)
 			foreach (var view in subviews)
-				if (view.KeyDown (keyEvent))
+				if (view.OnKeyDown (keyEvent))
 					return true;
 					return true;
 
 
 			return false;
 			return false;
@@ -1126,16 +1131,16 @@ namespace Terminal.Gui {
 		/// <summary>
 		/// <summary>
 		/// Invoked when a key is released
 		/// Invoked when a key is released
 		/// </summary>
 		/// </summary>
-		public Action<KeyEvent> OnKeyUp;
+		public event EventHandler<KeyEventEventArgs> KeyUp;
 
 
 		/// <param name="keyEvent">Contains the details about the key that produced the event.</param>
 		/// <param name="keyEvent">Contains the details about the key that produced the event.</param>
-		public override bool KeyUp (KeyEvent keyEvent)
+		public override bool OnKeyUp (KeyEvent keyEvent)
 		{
 		{
-			OnKeyUp?.Invoke (keyEvent);
+			KeyUp?.Invoke (this, new KeyEventEventArgs (keyEvent));
 			if (subviews == null || subviews.Count == 0)
 			if (subviews == null || subviews.Count == 0)
 				return false;
 				return false;
 			foreach (var view in subviews)
 			foreach (var view in subviews)
-				if (view.KeyUp (keyEvent))
+				if (view.OnKeyUp (keyEvent))
 					return true;
 					return true;
 
 
 			return false;
 			return false;
@@ -2142,7 +2147,7 @@ namespace Terminal.Gui {
 		{
 		{
 			var chain = toplevels.ToList ();
 			var chain = toplevels.ToList ();
 			foreach (var topLevel in chain) {
 			foreach (var topLevel in chain) {
-				if (topLevel.KeyDown (ke))
+				if (topLevel.OnKeyDown (ke))
 					return;
 					return;
 				if (topLevel.Modal)
 				if (topLevel.Modal)
 					break;
 					break;
@@ -2154,7 +2159,7 @@ namespace Terminal.Gui {
 		{
 		{
 			var chain = toplevels.ToList ();
 			var chain = toplevels.ToList ();
 			foreach (var topLevel in chain) {
 			foreach (var topLevel in chain) {
-				if (topLevel.KeyUp (ke))
+				if (topLevel.OnKeyUp (ke))
 					return;
 					return;
 				if (topLevel.Modal)
 				if (topLevel.Modal)
 					break;
 					break;

+ 6 - 6
Terminal.Gui/Views/Menu.cs

@@ -344,7 +344,7 @@ namespace Terminal.Gui {
 			});
 			});
 		}
 		}
 
 
-		public override bool KeyDown (KeyEvent keyEvent)
+		public override bool OnKeyDown (KeyEvent keyEvent)
 		{
 		{
 			if (keyEvent.IsAlt) {
 			if (keyEvent.IsAlt) {
 				host.CloseAllMenus ();
 				host.CloseAllMenus ();
@@ -359,7 +359,7 @@ namespace Terminal.Gui {
 			// To ncurses simulate a AltMask key pressing Alt+Space because
 			// To ncurses simulate a AltMask key pressing Alt+Space because
 			// it can´t detect an alone special key down was pressed.
 			// it can´t detect an alone special key down was pressed.
 			if (keyEvent.IsAlt && keyEvent.Key == Key.AltMask) {
 			if (keyEvent.IsAlt && keyEvent.Key == Key.AltMask) {
-				KeyDown (keyEvent);
+				OnKeyDown (keyEvent);
 				return true;
 				return true;
 			}
 			}
 
 
@@ -559,7 +559,7 @@ namespace Terminal.Gui {
 		}
 		}
 
 
 		bool openedByAltKey;
 		bool openedByAltKey;
-		public override bool KeyDown (KeyEvent keyEvent)
+		public override bool OnKeyDown (KeyEvent keyEvent)
 		{
 		{
 			if (keyEvent.IsAlt) {
 			if (keyEvent.IsAlt) {
 				openedByAltKey = true;
 				openedByAltKey = true;
@@ -575,7 +575,7 @@ namespace Terminal.Gui {
 		/// </summary>
 		/// </summary>
 		/// <param name="keyEvent"></param>
 		/// <param name="keyEvent"></param>
 		/// <returns></returns>
 		/// <returns></returns>
-		public override bool KeyUp (KeyEvent keyEvent)
+		public override bool OnKeyUp (KeyEvent keyEvent)
 		{
 		{
 			if (keyEvent.IsAlt) {
 			if (keyEvent.IsAlt) {
 				// User pressed Alt - this may be a precursor to a menu accelerator (e.g. Alt-F)
 				// User pressed Alt - this may be a precursor to a menu accelerator (e.g. Alt-F)
@@ -982,8 +982,8 @@ namespace Terminal.Gui {
 			// To ncurses simulate a AltMask key pressing Alt+Space because
 			// To ncurses simulate a AltMask key pressing Alt+Space because
 			// it can´t detect an alone special key down was pressed.
 			// it can´t detect an alone special key down was pressed.
 			if (kb.IsAlt && kb.Key == Key.AltMask && openMenu == null) {
 			if (kb.IsAlt && kb.Key == Key.AltMask && openMenu == null) {
-				KeyDown (kb);
-				KeyUp (kb);
+				OnKeyDown (kb);
+				OnKeyUp (kb);
 				return true;
 				return true;
 			} else if (kb.IsAlt) {
 			} else if (kb.IsAlt) {
 				if (FindAndOpenMenuByHotkey (kb)) return true;
 				if (FindAndOpenMenuByHotkey (kb)) return true;