From 6d748459017cb808f175a617345d2b079b7503f1 Mon Sep 17 00:00:00 2001 From: Charlie Kindel Date: Thu, 21 May 2020 12:47:48 -0600 Subject: [PATCH 1/3] Working on making Progress use threads. --- UICatalog/Program.cs | 2 +- UICatalog/README.md | 2 +- UICatalog/Scenario.cs | 24 +++++++++++++++++++++++- UICatalog/Scenarios/Progress.cs | 23 +++++++++++++++++++++-- UICatalog/screenshot.png | Bin 26223 -> 22320 bytes 5 files changed, 46 insertions(+), 5 deletions(-) diff --git a/UICatalog/Program.cs b/UICatalog/Program.cs index f81df07df..17315ac5f 100644 --- a/UICatalog/Program.cs +++ b/UICatalog/Program.cs @@ -62,7 +62,7 @@ namespace UICatalog { new MenuBarItem ("_File", new MenuItem [] { new MenuItem ("_Quit", "", () => Application.RequestStop() ) }), - new MenuBarItem ("_About...", "About this app", () => MessageBox.Query (0, 6, "About UI Catalog", "UI Catalog is a comprehensive sample library for Terminal.Gui", "Ok")), + new MenuBarItem ("_About...", "About this app", () => MessageBox.Query (0, 10, "About UI Catalog", "UI Catalog is a comprehensive sample library for Terminal.Gui", "Ok")), }); _leftPane = new Window ("Categories") { diff --git a/UICatalog/README.md b/UICatalog/README.md index 6f6b019f8..49eebf94c 100644 --- a/UICatalog/README.md +++ b/UICatalog/README.md @@ -119,4 +119,4 @@ For complete control, the `Init` and `Run` overrides can be implemented. The `ba - Use the `Bug Rero` Category for `Scnarios` that reproduce bugs. - Include the Github Issue # in the Description. - Once the bug has been fixed in `master` submit another PR to remove the `Scenario` (or modify it to provide a good regression test). -- Tag bugs or suggestions for `UI Catalog` in the main `Terminal.Gui` Github Issues with "UICatalog: ". \ No newline at end of file +- Tag bugs or suggestions for `UI Catalog` as [`Terminal.Gui` Github Issues](https://github.com/migueldeicaza/gui.cs/issues) with "UICatalog: ". \ No newline at end of file diff --git a/UICatalog/Scenario.cs b/UICatalog/Scenario.cs index e491a4c8e..b43821a4e 100644 --- a/UICatalog/Scenario.cs +++ b/UICatalog/Scenario.cs @@ -17,7 +17,9 @@ namespace UICatalog { /// The Main program uses reflection to find all sceanarios and adds them to the /// ListViews. Press ENTER to run the selected sceanrio. Press CTRL-Q to exit it. /// - public class Scenario { + public class Scenario : IDisposable { + private bool _disposedValue; + /// /// The Top level for the Scenario. This should be set to `Application.Top` in most cases. /// @@ -177,5 +179,25 @@ namespace UICatalog { } return objects; } + + protected virtual void Dispose (bool disposing) + { + if (!_disposedValue) { + if (disposing) { + // TODO: dispose managed state (managed objects) + } + + // TODO: free unmanaged resources (unmanaged objects) and override finalizer + // TODO: set large fields to null + _disposedValue = true; + } + } + + public void Dispose () + { + // Do not change this code. Put cleanup code in 'Dispose(bool disposing)' method + Dispose (disposing: true); + GC.SuppressFinalize (this); + } } } diff --git a/UICatalog/Scenarios/Progress.cs b/UICatalog/Scenarios/Progress.cs index 082d0590a..55ceeef16 100644 --- a/UICatalog/Scenarios/Progress.cs +++ b/UICatalog/Scenarios/Progress.cs @@ -1,4 +1,5 @@ using System; +using System.Threading; using Terminal.Gui; namespace UICatalog { @@ -11,6 +12,8 @@ namespace UICatalog { private ProgressBar _activityProgressBar; private ProgressBar _pulseProgressBar; + private Timer _timer; + public override void Setup () { Win.Add (new Button ("Start") { @@ -50,24 +53,40 @@ namespace UICatalog { Win.Add (_pulseProgressBar); } + protected override void Dispose (bool disposing) + { + _timer?.Dispose (); + _timer = null; + base.Dispose (disposing); + } + private void Pulse () { - if (_activityProgressBar.Fraction + 0.1F >= 1) { + if (_activityProgressBar.Fraction + 0.01F >= 1) { _activityProgressBar.Fraction = 0F; } else { - _activityProgressBar.Fraction += 0.1F; + _activityProgressBar.Fraction += 0.01F; } _pulseProgressBar.Pulse (); + } private void Start () { + _timer?.Dispose (); + _timer = null; + _activityProgressBar.Fraction = 0F; _pulseProgressBar.Fraction = 0F; + + _timer = new Timer ((o) => Application.MainLoop.Invoke (() => Pulse ()), null, 0, 250); } private void Stop () { + _timer?.Dispose (); + _timer = null; + _activityProgressBar.Fraction = 1F; _pulseProgressBar.Fraction = 1F; } diff --git a/UICatalog/screenshot.png b/UICatalog/screenshot.png index 093c770e35c3fa7c30bc09c38854f981b97ef682..c81878bf22efadcac46cebf315bf38c55374e6f1 100644 GIT binary patch literal 22320 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

TW>9+rAR2w-IB*N0 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 Date: Thu, 21 May 2020 14:04:34 -0600 Subject: [PATCH 2/3] temporary work around --- UICatalog/Scenarios/Progress.cs | 36 ++++++++++++++++++++------------- 1 file changed, 22 insertions(+), 14 deletions(-) diff --git a/UICatalog/Scenarios/Progress.cs b/UICatalog/Scenarios/Progress.cs index 55ceeef16..1c7c327f9 100644 --- a/UICatalog/Scenarios/Progress.cs +++ b/UICatalog/Scenarios/Progress.cs @@ -13,28 +13,30 @@ namespace UICatalog { private ProgressBar _activityProgressBar; private ProgressBar _pulseProgressBar; private Timer _timer; + private object _timeoutToken; public override void Setup () { - Win.Add (new Button ("Start") { - X = Pos.Center () - 20, + var pulseButton = new Button ("Pulse") { + X = Pos.Center (), Y = Pos.Center () - 5, + Clicked = () => Pulse () + }; + + Win.Add (new Button ("Start Timer") { + X = Pos.Left(pulseButton) - 20, + Y = Pos.Y(pulseButton), Clicked = () => Start () }); - Win.Add (new Button ("Pulse") { - X = Pos.Center () - 5, - Y = Pos.Center () - 5, - Clicked = () => Pulse () - }); - - - Win.Add (new Button ("Stop") { - X = Pos.Center () + 10, - Y = Pos.Center () - 5, + Win.Add (new Button ("Stop Timer") { + X = Pos.Right (pulseButton) + 20, // BUGBUG: Right is somehow adding additional width + Y = Pos.Y (pulseButton), Clicked = () => Stop() }); + Win.Add (pulseButton); + _activityProgressBar = new ProgressBar () { X = Pos.Center (), // BUGBUG: If you remove the +1 below the control is drawn at top?!?! @@ -57,6 +59,7 @@ namespace UICatalog { { _timer?.Dispose (); _timer = null; + Application.MainLoop.RemoveTimeout (_timeoutToken); base.Dispose (disposing); } @@ -68,7 +71,6 @@ namespace UICatalog { _activityProgressBar.Fraction += 0.01F; } _pulseProgressBar.Pulse (); - } private void Start () @@ -79,13 +81,19 @@ namespace UICatalog { _activityProgressBar.Fraction = 0F; _pulseProgressBar.Fraction = 0F; - _timer = new Timer ((o) => Application.MainLoop.Invoke (() => Pulse ()), null, 0, 250); + _timer = new Timer ((o) => Application.MainLoop.Invoke (() => Pulse ()), null, 0, 10); + + // BUGBUG: This timeout does nothing but return true, however it trigger the Application.MainLoop + // to run the Action. Without this timeout, the display updates are random, + // or triggered by user interaction with the UI. See #155 + _timeoutToken = Application.MainLoop.AddTimeout (TimeSpan.FromMilliseconds (10), loop => true); } private void Stop () { _timer?.Dispose (); _timer = null; + Application.MainLoop.RemoveTimeout (_timeoutToken); _activityProgressBar.Fraction = 1F; _pulseProgressBar.Fraction = 1F; From 2c6349a853724abcc5fd8f83698be10acde04bc9 Mon Sep 17 00:00:00 2001 From: Charlie Kindel Date: Thu, 21 May 2020 20:43:47 -0600 Subject: [PATCH 3/3] added docs for KeyEventArgs to get rid of warnings --- Terminal.Gui/Core.cs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Terminal.Gui/Core.cs b/Terminal.Gui/Core.cs index 12cd26705..2bf0d78f7 100644 --- a/Terminal.Gui/Core.cs +++ b/Terminal.Gui/Core.cs @@ -1065,8 +1065,18 @@ namespace Terminal.Gui { SuperView?.SetFocus (this); } + ///

+ /// Specifies the event arguments for + /// public class KeyEventEventArgs : EventArgs { + /// + /// Constructs. + /// + /// public KeyEventEventArgs(KeyEvent ke) => KeyEvent = ke; + /// + /// The for the event. + /// public KeyEvent KeyEvent { get; set; } }