From ab72865b2c137dfdde79c127764f77a3ed6d15cf Mon Sep 17 00:00:00 2001 From: Charlie Kindel Date: Mon, 18 May 2020 22:42:04 -0600 Subject: [PATCH] Refactored keydown/up/press events to use event vs. Action --- Example/demo.cs | 10 +++++----- Terminal.Gui/Core.cs | 39 ++++++++++++++++++++++---------------- Terminal.Gui/Views/Menu.cs | 10 +++++----- 3 files changed, 33 insertions(+), 26 deletions(-) diff --git a/Example/demo.cs b/Example/demo.cs index 6db1bb40b..9edfeb4d0 100644 --- a/Example/demo.cs +++ b/Example/demo.cs @@ -90,8 +90,8 @@ static class Demo { Width = 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; }; @@ -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); } #endregion diff --git a/Terminal.Gui/Core.cs b/Terminal.Gui/Core.cs index 6ab3314d2..60f968331 100644 --- a/Terminal.Gui/Core.cs +++ b/Terminal.Gui/Core.cs @@ -126,7 +126,7 @@ namespace Terminal.Gui { /// /// Contains the details about the key that produced the event. /// true if the event was handled - public virtual bool KeyDown (KeyEvent keyEvent) + public virtual bool OnKeyDown (KeyEvent keyEvent) { return false; } @@ -136,7 +136,7 @@ namespace Terminal.Gui { /// /// Contains the details about the key that produced the event. /// true if the event was handled - public virtual bool KeyUp (KeyEvent keyEvent) + public virtual bool OnKeyUp (KeyEvent keyEvent) { return false; } @@ -1065,15 +1065,20 @@ namespace Terminal.Gui { SuperView?.SetFocus(this); } + public class KeyEventEventArgs : EventArgs { + public KeyEventEventArgs(KeyEvent ke) => KeyEvent = ke; + public KeyEvent KeyEvent { get; set; } + } + /// /// Invoked when a character key is pressed and occurs after the key up event. /// - public Action OnKeyPress; + public event EventHandler KeyPress; /// public override bool ProcessKey (KeyEvent keyEvent) { - OnKeyPress?.Invoke (keyEvent); + KeyPress?.Invoke (this, new KeyEventEventArgs(keyEvent)); if (Focused?.ProcessKey (keyEvent) == true) return true; @@ -1083,6 +1088,7 @@ namespace Terminal.Gui { /// public override bool ProcessHotKey (KeyEvent keyEvent) { + KeyPress?.Invoke (this, new KeyEventEventArgs (keyEvent)); if (subviews == null || subviews.Count == 0) return false; foreach (var view in subviews) @@ -1094,6 +1100,7 @@ namespace Terminal.Gui { /// public override bool ProcessColdKey (KeyEvent keyEvent) { + KeyPress?.Invoke (this, new KeyEventEventArgs(keyEvent)); if (subviews == null || subviews.Count == 0) return false; foreach (var view in subviews) @@ -1105,16 +1112,16 @@ namespace Terminal.Gui { /// /// Invoked when a key is pressed /// - public Action OnKeyDown; + public event EventHandler KeyDown; - /// - public override bool KeyDown (KeyEvent keyEvent) + /// Contains the details about the key that produced the event. + public override bool OnKeyDown (KeyEvent keyEvent) { - OnKeyDown?.Invoke (keyEvent); + KeyDown?.Invoke (this, new KeyEventEventArgs (keyEvent)); if (subviews == null || subviews.Count == 0) return false; foreach (var view in subviews) - if (view.KeyDown (keyEvent)) + if (view.OnKeyDown (keyEvent)) return true; return false; @@ -1123,16 +1130,16 @@ namespace Terminal.Gui { /// /// Invoked when a key is released /// - public Action OnKeyUp; + public event EventHandler KeyUp; - /// - public override bool KeyUp (KeyEvent keyEvent) + /// Contains the details about the key that produced the event. + public override bool OnKeyUp (KeyEvent keyEvent) { - OnKeyUp?.Invoke (keyEvent); + KeyUp?.Invoke (this, new KeyEventEventArgs (keyEvent)); if (subviews == null || subviews.Count == 0) return false; foreach (var view in subviews) - if (view.KeyUp (keyEvent)) + if (view.OnKeyUp (keyEvent)) return true; return false; @@ -2165,7 +2172,7 @@ namespace Terminal.Gui { { var chain = toplevels.ToList (); foreach (var topLevel in chain) { - if (topLevel.KeyDown (ke)) + if (topLevel.OnKeyDown (ke)) return; if (topLevel.Modal) break; @@ -2177,7 +2184,7 @@ namespace Terminal.Gui { { var chain = toplevels.ToList (); foreach (var topLevel in chain) { - if (topLevel.KeyUp (ke)) + if (topLevel.OnKeyUp (ke)) return; if (topLevel.Modal) break; diff --git a/Terminal.Gui/Views/Menu.cs b/Terminal.Gui/Views/Menu.cs index 56eecf66c..dc4abea6d 100644 --- a/Terminal.Gui/Views/Menu.cs +++ b/Terminal.Gui/Views/Menu.cs @@ -347,7 +347,7 @@ namespace Terminal.Gui { }); } - public override bool KeyDown (KeyEvent keyEvent) + public override bool OnKeyDown (KeyEvent keyEvent) { if (keyEvent.IsAlt) { host.CloseAllMenus (); @@ -362,7 +362,7 @@ namespace Terminal.Gui { // To ncurses simulate a AltMask key pressing Alt+Space because // it canīt detect an alone special key down was pressed. if (keyEvent.IsAlt && keyEvent.Key == Key.AltMask) { - KeyDown (keyEvent); + OnKeyDown (keyEvent); return true; } @@ -580,7 +580,7 @@ namespace Terminal.Gui { /// /// /// - public override bool KeyUp (KeyEvent keyEvent) + public override bool OnKeyUp (KeyEvent keyEvent) { if (keyEvent.IsAlt) { // User pressed Alt - this may be a precursor to a menu accelerator (e.g. Alt-F) @@ -1003,8 +1003,8 @@ namespace Terminal.Gui { // To ncurses simulate a AltMask key pressing Alt+Space because // it canīt detect an alone special key down was pressed. if (kb.IsAlt && kb.Key == Key.AltMask && openMenu == null) { - KeyDown (kb); - KeyUp (kb); + OnKeyDown (kb); + OnKeyUp (kb); return true; } else if (kb.IsAlt) { if (FindAndOpenMenuByHotkey (kb)) return true;