From 8de17020429e08e01c9c9cf8d7d9f0139afbe10d Mon Sep 17 00:00:00 2001 From: Charlie Kindel Date: Mon, 18 May 2020 23:00:54 -0600 Subject: [PATCH] Refactored onload/onresize events to use event vs. Action --- Example/demo.cs | 2 +- Terminal.Gui/Core.cs | 70 ++++++++++++++++++++------------- Terminal.Gui/Views/StatusBar.cs | 5 +-- 3 files changed, 45 insertions(+), 32 deletions(-) diff --git a/Example/demo.cs b/Example/demo.cs index cd39607d3..6ffaa21cc 100644 --- a/Example/demo.cs +++ b/Example/demo.cs @@ -604,7 +604,7 @@ static class Demo { var bottom2 = new Label ("This should go on the bottom of another top-level!"); top.Add (bottom2); - Application.OnLoad = () => { + Application.Loaded += (sender, e) => { bottom.X = win.X; bottom.Y = Pos.Bottom (win) - Pos.Top (win) - margin; bottom2.X = Pos.Left (win); diff --git a/Terminal.Gui/Core.cs b/Terminal.Gui/Core.cs index d00b08b38..550b40e80 100644 --- a/Terminal.Gui/Core.cs +++ b/Terminal.Gui/Core.cs @@ -607,7 +607,7 @@ namespace Terminal.Gui { return; while (subviews.Count > 0) { - Remove (subviews[0]); + Remove (subviews [0]); } } @@ -705,9 +705,9 @@ namespace Terminal.Gui { { PerformActionForSubview (subview, x => { var idx = subviews.IndexOf (x); - if (idx+1 < subviews.Count) { + if (idx + 1 < subviews.Count) { subviews.Remove (x); - subviews.Insert (idx+1, x); + subviews.Insert (idx + 1, x); } }); } @@ -910,7 +910,7 @@ namespace Terminal.Gui { OnEnter (); else OnLeave (); - SetNeedsDisplay (); + SetNeedsDisplay (); base.HasFocus = value; // Remove focus down the chain of subviews if focus is removed @@ -1062,7 +1062,7 @@ namespace Terminal.Gui { focused.EnsureFocus (); // Send focus upwards - SuperView?.SetFocus(this); + SuperView?.SetFocus (this); } public class KeyEventEventArgs : EventArgs { @@ -1181,7 +1181,7 @@ namespace Terminal.Gui { public void FocusLast () { if (subviews == null) { - SuperView?.SetFocus(this); + SuperView?.SetFocus (this); return; } @@ -1228,7 +1228,7 @@ namespace Terminal.Gui { w.FocusLast (); SetFocus (w); - return true; + return true; } } if (focused != null) { @@ -1641,7 +1641,7 @@ namespace Terminal.Gui { internal void EnsureVisibleBounds (Toplevel top, int x, int y, out int nx, out int ny) { nx = Math.Max (x, 0); - nx = nx + top.Frame.Width > Driver.Cols ? Math.Max(Driver.Cols - top.Frame.Width, 0) : nx; + nx = nx + top.Frame.Width > Driver.Cols ? Math.Max (Driver.Cols - top.Frame.Width, 0) : nx; bool m, s; if (SuperView == null) m = Application.Top.MenuBar != null; @@ -1655,7 +1655,7 @@ namespace Terminal.Gui { s = ((Toplevel)SuperView).StatusBar != null; l = s ? Driver.Rows - 1 : Driver.Rows; ny = Math.Min (ny, l); - ny = ny + top.Frame.Height > l ? Math.Max(l - top.Frame.Height, m ? 1 : 0) : ny; + ny = ny + top.Frame.Height > l ? Math.Max (l - top.Frame.Height, m ? 1 : 0) : ny; } internal void PositionToplevels () @@ -1809,7 +1809,7 @@ namespace Terminal.Gui { this.Title = title; int wb = 1 + padding; this.padding = padding; - contentView = new ContentView () { + contentView = new ContentView () { X = wb, Y = wb, Width = Dim.Fill (wb), @@ -2092,7 +2092,7 @@ namespace Terminal.Gui { if (UseSystemConsole) { mainLoopDriver = new Mono.Terminal.NetMainLoop (); Driver = new NetDriver (); - } else if (p == PlatformID.Win32NT || p == PlatformID.Win32S || p == PlatformID.Win32Windows){ + } else if (p == PlatformID.Win32NT || p == PlatformID.Win32S || p == PlatformID.Win32Windows) { var windowsDriver = new WindowsDriver (); mainLoopDriver = windowsDriver; Driver = windowsDriver; @@ -2150,7 +2150,7 @@ namespace Terminal.Gui { static void ProcessKeyEvent (KeyEvent ke) { - var chain = toplevels.ToList(); + var chain = toplevels.ToList (); foreach (var topLevel in chain) { if (topLevel.ProcessHotKey (ke)) return; @@ -2207,7 +2207,7 @@ namespace Terminal.Gui { return null; } - if (start.InternalSubviews != null){ + if (start.InternalSubviews != null) { int count = start.InternalSubviews.Count; if (count > 0) { var rx = x - startFrame.X; @@ -2223,8 +2223,8 @@ namespace Terminal.Gui { } } } - resx = x-startFrame.X; - resy = y-startFrame.Y; + resx = x - startFrame.X; + resy = y - startFrame.Y; return start; } @@ -2326,9 +2326,10 @@ namespace Terminal.Gui { } /// - /// Action that is invoked once at beginning. + /// This event is fired once when the application is first loaded. The dimensions of the + /// terminal are provided. /// - static public Action OnLoad; + static public event EventHandler Loaded; /// /// Building block API: Prepares the provided toplevel for execution. @@ -2352,11 +2353,11 @@ namespace Terminal.Gui { Init (); if (toplevel is ISupportInitializeNotification initializableNotification && !initializableNotification.IsInitialized) { - initializableNotification.BeginInit(); - initializableNotification.EndInit(); + initializableNotification.BeginInit (); + initializableNotification.EndInit (); } else if (toplevel is ISupportInitialize initializable) { - initializable.BeginInit(); - initializable.EndInit(); + initializable.BeginInit (); + initializable.EndInit (); } toplevels.Push (toplevel); Current = toplevel; @@ -2364,7 +2365,7 @@ namespace Terminal.Gui { if (toplevel.LayoutStyle == LayoutStyle.Computed) toplevel.RelativeLayout (new Rect (0, 0, Driver.Cols, Driver.Rows)); toplevel.LayoutSubviews (); - OnLoad?.Invoke (); + Loaded?.Invoke (null, new ResizedEventArgs () { Rows = Driver.Rows, Cols = Driver.Cols } ); toplevel.WillPresent (); Redraw (toplevel); toplevel.PositionCursor (); @@ -2431,9 +2432,8 @@ namespace Terminal.Gui { toplevels.Pop (); if (toplevels.Count == 0) Shutdown (); - else - { - Current = toplevels.Peek(); + else { + Current = toplevels.Peek (); Refresh (); } } @@ -2502,7 +2502,7 @@ namespace Terminal.Gui { /// public static void Run () where T : Toplevel, new() { - Init (() => new T()); + Init (() => new T ()); Run (Top); } @@ -2546,15 +2546,29 @@ namespace Terminal.Gui { Current.Running = false; } + /// + /// Event arguments for the event. + /// + public class ResizedEventArgs : EventArgs { + /// + /// The number of rows in the resized terminal. + /// + public int Rows { get; set; } + /// + /// The number of columns in the resized terminal. + /// + public int Cols { get; set; } + } + /// /// Invoked when the terminal was resized. /// - static public Action OnResized; + static public event EventHandler Resized; static void TerminalResized () { - OnResized?.Invoke (); var full = new Rect (0, 0, Driver.Cols, Driver.Rows); + Resized?.Invoke (null, new ResizedEventArgs () { Cols = full.Width, Rows = full.Height }); Driver.Clip = full; foreach (var t in toplevels) { t.PositionToplevels (); diff --git a/Terminal.Gui/Views/StatusBar.cs b/Terminal.Gui/Views/StatusBar.cs index edfc97de5..789781815 100644 --- a/Terminal.Gui/Views/StatusBar.cs +++ b/Terminal.Gui/Views/StatusBar.cs @@ -112,8 +112,7 @@ namespace Terminal.Gui { Width = Dim.Fill (); Height = 1; - // This is never called if it is invoked later on another place. - Application.OnLoad += () => { + Application.Loaded += (sender, e) => { X = 0; Height = 1; #if SNAP_TO_TOP @@ -125,7 +124,7 @@ namespace Terminal.Gui { case StatusBarStyle.SnapToBottom: #endif if (Parent == null) { - Y = Application.Driver.Rows - 1; // TODO: using internals of Application + Y = e.Rows - 1; } else { Y = Pos.Bottom (Parent); }