mirror of
https://github.com/gui-cs/Terminal.Gui.git
synced 2025-12-26 15:57:56 +01:00
Merge branch 'master' into expanded_TimeDate_scenario
This commit is contained in:
@@ -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; }
|
||||
}
|
||||
|
||||
|
||||
@@ -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") {
|
||||
|
||||
@@ -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: ".
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
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?!?!
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 22 KiB |
Reference in New Issue
Block a user