Bladeren bron

Merge branch 'master' into expanded_TimeDate_scenario

Charlie Kindel 5 jaren geleden
bovenliggende
commit
bf9de4f5c5
6 gewijzigde bestanden met toevoegingen van 76 en 17 verwijderingen
  1. 10 0
      Terminal.Gui/Core.cs
  2. 1 1
      UICatalog/Program.cs
  3. 1 1
      UICatalog/README.md
  4. 23 1
      UICatalog/Scenario.cs
  5. 41 14
      UICatalog/Scenarios/Progress.cs
  6. BIN
      UICatalog/screenshot.png

+ 10 - 0
Terminal.Gui/Core.cs

@@ -1065,8 +1065,18 @@ namespace Terminal.Gui {
 			SuperView?.SetFocus (this);
 		}
 
+		/// <summary>
+		/// Specifies the event arguments for <see cref="KeyEvent"/>
+		/// </summary>
 		public class KeyEventEventArgs : EventArgs {
+			/// <summary>
+			/// Constructs.
+			/// </summary>
+			/// <param name="ke"></param>
 			public KeyEventEventArgs(KeyEvent ke) => KeyEvent = ke;
+			/// <summary>
+			/// The <see cref="KeyEvent"/> for the event.
+			/// </summary>
 			public KeyEvent KeyEvent { get; set; }
 		}
 

+ 1 - 1
UICatalog/Program.cs

@@ -63,7 +63,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") {

+ 1 - 1
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: ".
+- Tag bugs or suggestions for `UI Catalog` as [`Terminal.Gui` Github Issues](https://github.com/migueldeicaza/gui.cs/issues) with "UICatalog: ".

+ 23 - 1
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.
 	/// </summary>
-	public class Scenario {
+	public class Scenario : IDisposable {
+		private bool _disposedValue;
+
 		/// <summary>
 		/// The Top level for the Scenario. This should be set to `Application.Top` in most cases.
 		/// </summary>
@@ -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);
+		}
 	}
 }

+ 41 - 14
UICatalog/Scenarios/Progress.cs

@@ -1,4 +1,5 @@
 using System;
+using System.Threading;
 using Terminal.Gui;
 
 namespace UICatalog {
@@ -11,27 +12,31 @@ 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,
-				Y = Pos.Center () - 5,
-				Clicked = () => Start ()
-			});
-
-			Win.Add (new Button ("Pulse") {
-				X = Pos.Center () - 5,
+			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 ("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?!?!
@@ -50,24 +55,46 @@ namespace UICatalog {
 			Win.Add (_pulseProgressBar);
 		}
 
+		protected override void Dispose (bool disposing)
+		{
+			_timer?.Dispose ();
+			_timer = null;
+			Application.MainLoop.RemoveTimeout (_timeoutToken);
+			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, 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;
 		}

BIN
UICatalog/screenshot.png