Pārlūkot izejas kodu

Merge branch 'uicat_update' of tig:tig/gui.cs into uicat_update

Charlie Kindel 5 gadi atpakaļ
vecāks
revīzija
45896bb88e
1 mainītis faili ar 22 papildinājumiem un 14 dzēšanām
  1. 22 14
      UICatalog/Scenarios/Progress.cs

+ 22 - 14
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,
-				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?!?!
@@ -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;