| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327 |
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using System.Collections.ObjectModel;
- using System.Linq;
- using System.Threading;
- using static UICatalog.Scenarios.Adornments;
- namespace UICatalog.Scenarios;
- [ScenarioMetadata ("ProgressBar Styles", "Shows the ProgressBar Styles.")]
- [ScenarioCategory ("Controls")]
- [ScenarioCategory ("Progress")]
- [ScenarioCategory ("Threading")]
- // TODO: Add enable/disable to show that that is working
- // TODO: Clean up how FramesEditor works
- // TODO: Better align rpPBFormat
- public class ProgressBarStyles : Scenario
- {
- private const uint _timerTick = 20;
- private Timer _fractionTimer;
- private Timer _pulseTimer;
- private ListView _pbList;
- public override void Main ()
- {
- Application.Init ();
- Window win = new ()
- {
- Title = GetQuitKeyAndName (), BorderStyle = LineStyle.Single,
- };
- var editor = new AdornmentsEditor ()
- {
- AutoSelectViewToEdit = false,
- ShowViewIdentifier = true
- };
- win.Add (editor);
- View container = new ()
- {
- X = Pos.Right (editor),
- Y = 0,
- Width = Dim.Fill (),
- Height = Dim.Fill (),
- };
- win.Add (container);
- const float fractionStep = 0.01F;
- _pbList = new ListView
- {
- Title = "Focused ProgressBar",
- Y = Pos.Align (Alignment.Start),
- X = Pos.Center (),
- Width = Dim.Auto (),
- Height = Dim.Auto (),
- BorderStyle = LineStyle.Single
- };
- container.Add (_pbList);
- #region ColorPicker
- var fgColorPickerBtn = new Button
- {
- Text = "Foreground HotNormal Color",
- X = Pos.Center (),
- Y = Pos.Align (Alignment.Start)
- };
- container.Add (fgColorPickerBtn);
- fgColorPickerBtn.Accepting += (s, e) =>
- {
- if (!LineDrawing.PromptForColor (
- fgColorPickerBtn.Text,
- editor.ViewToEdit!.GetAttributeForRole (VisualRole.Normal).Foreground,
- out var newColor
- ))
- {
- return;
- }
- var cs = new Scheme (editor.ViewToEdit.GetScheme ())
- {
- Active = new Attribute (
- newColor,
- editor.ViewToEdit.GetAttributeForRole (VisualRole.Active)
- .Background,
- editor.ViewToEdit.GetAttributeForRole (VisualRole.Active).Style
- )
- };
- editor.ViewToEdit.SetScheme (cs);
- };
- var bgColorPickerBtn = new Button
- {
- X = Pos.Center (),
- Y = Pos.Align (Alignment.Start),
- Text = "Background HotNormal Color"
- };
- container.Add (bgColorPickerBtn);
- bgColorPickerBtn.Accepting += (s, e) =>
- {
- if (!LineDrawing.PromptForColor (
- fgColorPickerBtn.Text,
- editor.ViewToEdit!.GetAttributeForRole (VisualRole.Active)
- .Background
- , out var newColor))
- {
- return;
- }
- var cs = new Scheme (editor.ViewToEdit.GetScheme ())
- {
- Active = new Attribute (
- editor.ViewToEdit!.GetAttributeForRole (VisualRole.Normal).Foreground,
- newColor,
- editor.ViewToEdit!.GetAttributeForRole (VisualRole.Normal).Style
- )
- };
- editor.ViewToEdit.SetScheme (cs);
- };
- #endregion
- List<ProgressBarFormat> pbFormatEnum =
- Enum.GetValues (typeof (ProgressBarFormat)).Cast<ProgressBarFormat> ().ToList ();
- OptionSelector<ProgressBarFormat> osPbFormat = new ()
- {
- BorderStyle = LineStyle.Single,
- Title = "ProgressBarFormat",
- X = Pos.Center (),
- Y = Pos.Align (Alignment.Start),
- AssignHotKeys = true
- };
- container.Add (osPbFormat);
- var button = new Button
- {
- X = Pos.Center (),
- Y = Pos.Align (Alignment.Start),
- Text = "Start timer"
- };
- container.Add (button);
- var blocksPB = new ProgressBar
- {
- Title = "Blocks",
- X = Pos.Center (),
- Y = Pos.Align (Alignment.Start),
- Width = Dim.Percent (50),
- BorderStyle = LineStyle.Single,
- CanFocus = true
- };
- container.Add (blocksPB);
- osPbFormat.Value = blocksPB.ProgressBarFormat;
- var continuousPB = new ProgressBar
- {
- Title = "Continuous",
- X = Pos.Center (),
- Y = Pos.Align (Alignment.Start),
- Width = Dim.Percent (50),
- ProgressBarStyle = ProgressBarStyle.Continuous,
- BorderStyle = LineStyle.Single,
- CanFocus = true
- };
- container.Add (continuousPB);
- button.Accepting += (s, e) =>
- {
- if (_fractionTimer == null)
- {
- //blocksPB.Enabled = false;
- blocksPB.Fraction = 0;
- continuousPB.Fraction = 0;
- float fractionSum = 0;
- _fractionTimer = new Timer (
- _ =>
- {
- fractionSum += fractionStep;
- blocksPB.Fraction = fractionSum;
- continuousPB.Fraction = fractionSum;
- if (fractionSum > 1)
- {
- _fractionTimer.Dispose ();
- _fractionTimer = null;
- button.Enabled = true;
- }
- },
- null,
- 0,
- _timerTick
- );
- }
- };
- var ckbBidirectional = new CheckBox
- {
- X = Pos.Center (),
- Y = Pos.Bottom (continuousPB),
- Text = "BidirectionalMarquee",
- CheckedState = CheckState.Checked
- };
- container.Add (ckbBidirectional);
- var marqueesBlocksPB = new ProgressBar
- {
- Title = "Marquee Blocks",
- X = Pos.Center (),
- Y = Pos.Align (Alignment.Start),
- Width = Dim.Percent (50),
- ProgressBarStyle = ProgressBarStyle.MarqueeBlocks,
- BorderStyle = LineStyle.Single,
- CanFocus = true
- };
- container.Add (marqueesBlocksPB);
- var marqueesContinuousPB = new ProgressBar
- {
- Title = "Marquee Continuous",
- X = Pos.Center (),
- Y = Pos.Align (Alignment.Start),
- Width = Dim.Percent (50),
- ProgressBarStyle = ProgressBarStyle.MarqueeContinuous,
- BorderStyle = LineStyle.Single,
- CanFocus = true
- };
- container.Add (marqueesContinuousPB);
- _pbList.SetSource (
- new ObservableCollection<string> (
- container.SubViews.Where (v => v.GetType () == typeof (ProgressBar))
- .Select (v => v.Title)
- .ToList ())
- );
- _pbList.SelectedItemChanged += (sender, e) =>
- {
- editor.ViewToEdit = container.SubViews.First (
- v =>
- v.GetType () == typeof (ProgressBar)
- && v.Title == (string)e.Value
- );
- };
- osPbFormat.ValueChanged += (s, e) =>
- {
- if (e.Value is null)
- {
- return;
- }
- blocksPB.ProgressBarFormat = e.Value.Value;
- continuousPB.ProgressBarFormat = e.Value.Value;
- marqueesBlocksPB.ProgressBarFormat = e.Value.Value;
- marqueesContinuousPB.ProgressBarFormat = e.Value.Value;
- };
- ckbBidirectional.CheckedStateChanging += (s, e) =>
- {
- marqueesBlocksPB.BidirectionalMarquee =
- marqueesContinuousPB.BidirectionalMarquee = e.Result == CheckState.Checked;
- };
- win.Initialized += Win_Initialized;
- win.IsRunningChanged += Win_IsRunningChanged;
- _pulseTimer = new Timer (
- _ =>
- {
- marqueesBlocksPB.Text = marqueesContinuousPB.Text = DateTime.Now.TimeOfDay.ToString ();
- marqueesBlocksPB.Pulse ();
- marqueesContinuousPB.Pulse ();
- },
- null,
- 0,
- 300
- );
- Application.Run (win);
- win.Dispose ();
- Application.Shutdown ();
- return;
- void Win_IsRunningChanged (object sender, EventArgs<bool> args)
- {
- if (args.Value)
- {
- return;
- }
- if (_fractionTimer != null)
- {
- _fractionTimer.Dispose ();
- _fractionTimer = null;
- }
- if (_pulseTimer != null)
- {
- _pulseTimer.Dispose ();
- _pulseTimer = null;
- }
- win.IsRunningChanged -= Win_IsRunningChanged;
- }
- }
- private void Win_Initialized (object sender, EventArgs e)
- {
- _pbList.SelectedItem = 0;
- }
- }
|