123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using Terminal.Gui;
- namespace UICatalog.Scenarios {
- [ScenarioMetadata (Name: "SpinnerView Styles", Description: "Shows the SpinnerView Styles.")]
- [ScenarioCategory ("Controls")]
- [ScenarioCategory ("Progress")]
- public class SpinnerViewStyles : Scenario {
- class Property {
- public string Name { get; set; }
- }
- public override void Setup ()
- {
- const int DEFAULT_DELAY = 130;
- const string DEFAULT_CUSTOM = @"-\|/";
- var styleDict = new Dictionary<int, KeyValuePair<string, Type>> ();
- int i = 0;
- foreach (var style in typeof (SpinnerStyle).GetNestedTypes ()) {
- styleDict.Add (i, new KeyValuePair<string, Type> (style.Name, style));
- i++;
- }
- var preview = new View () {
- X = Pos.Center (),
- Y = 0,
- Width = 22,
- Height = 3,
- //Title = "Preview",
- BorderStyle = LineStyle.Single
- };
- Win.Add (preview);
- var spinner = new SpinnerView () {
- X = Pos.Center (),
- Y = 0
- };
- preview.Add (spinner);
- spinner.AutoSpin = true;
- var ckbAscii = new CheckBox ("Ascii Only", false) {
- X = Pos.Center () - 7,
- Y = Pos.Bottom (preview),
- Enabled = false,
- Checked = true
- };
- Win.Add (ckbAscii);
- var ckbNoSpecial = new CheckBox ("No Special", false) {
- X = Pos.Center () + 7,
- Y = Pos.Bottom (preview),
- Enabled = false,
- Checked = true
- };
- Win.Add (ckbNoSpecial);
- var ckbReverse = new CheckBox ("Reverse", false) {
- X = Pos.Center () - 22,
- Y = Pos.Bottom (preview) + 1,
- Checked = false
- };
- Win.Add (ckbReverse);
- var ckbBounce = new CheckBox ("Bounce", false) {
- X = Pos.Right (ckbReverse) + 2,
- Y = Pos.Bottom (preview) + 1,
- Checked = false
- };
- Win.Add (ckbBounce);
- var delayLabel = new Label ("Delay:") {
- X = Pos.Right (ckbBounce) + 2,
- Y = Pos.Bottom (preview) + 1
- };
- Win.Add (delayLabel);
- var delayField = new TextField (DEFAULT_DELAY.ToString ()) {
- X = Pos.Right (delayLabel),
- Y = Pos.Bottom (preview) + 1,
- Width = 5
- };
- Win.Add (delayField);
- delayField.TextChanged += (s, e) => {
- if (ushort.TryParse (delayField.Text, out var i))
- spinner.SpinDelay = i;
- };
- var customLabel = new Label ("Custom:") {
- X = Pos.Right (delayField) + 2,
- Y = Pos.Bottom (preview) + 1
- };
- Win.Add (customLabel);
- var customField = new TextField (DEFAULT_CUSTOM) {
- X = Pos.Right (customLabel),
- Y = Pos.Bottom (preview) + 1,
- Width = 12
- };
- Win.Add (customField);
- var styleArray = styleDict.Select (e => e.Value.Key).ToArray ();
- if (styleArray.Length < 1)
- return;
- var styles = new ListView () {
- X = Pos.Center (),
- Y = Pos.Bottom (preview) + 2,
- Height = Dim.Fill (),
- Width = Dim.Fill (1)
- };
- styles.SetSource (styleArray);
- styles.SelectedItem = 0; // SpinnerStyle.Custom;
- Win.Add (styles);
- SetCustom ();
- customField.TextChanged += (s, e) => {
- if (customField.Text.Length > 0) {
- if (styles.SelectedItem != 0)
- styles.SelectedItem = 0; // SpinnerStyle.Custom
- SetCustom ();
- }
- };
- styles.SelectedItemChanged += (s, e) => {
- if (e.Item == 0) { // SpinnerStyle.Custom
- if (customField.Text.Length < 1)
- customField.Text = DEFAULT_CUSTOM;
- if (delayField.Text.Length < 1)
- delayField.Text = DEFAULT_DELAY.ToString ();
- SetCustom ();
- } else {
- spinner.Visible = true;
- spinner.Style = (SpinnerStyle)Activator.CreateInstance(styleDict [e.Item].Value);
- delayField.Text = spinner.SpinDelay.ToString ();
- ckbBounce.Checked = spinner.SpinBounce;
- ckbNoSpecial.Checked = !spinner.HasSpecialCharacters;
- ckbAscii.Checked = spinner.IsAsciiOnly;
- ckbReverse.Checked = false;
- }
- };
- ckbReverse.Toggled += (s, e) => {
- spinner.SpinReverse = (bool)!e.OldValue;
- };
- ckbBounce.Toggled += (s, e) => {
- spinner.SpinBounce = (bool)!e.OldValue;
- };
- Application.Top.Unloaded += Top_Unloaded;
- void SetCustom ()
- {
- if (customField.Text.Length > 0) {
- spinner.Visible = true;
- if (ushort.TryParse (delayField.Text, out var d))
- spinner.SpinDelay = d;
- else {
- delayField.Text = DEFAULT_DELAY.ToString ();
- spinner.SpinDelay = DEFAULT_DELAY;
- }
- var str = new List<string> ();
- foreach (var c in customField.Text.ToCharArray ()) {
- str.Add (c.ToString ());
- }
- spinner.Sequence = str.ToArray ();
- } else {
- spinner.Visible = false;
- }
- }
- void Top_Unloaded (object sender, EventArgs args)
- {
- if (spinner != null) {
- spinner.Dispose ();
- spinner = null;
- }
- Application.Top.Unloaded -= Top_Unloaded;
- }
- }
- }
- }
|