From 696d21eb0d77b4f44b8a1d047399dfe5d49bf33c Mon Sep 17 00:00:00 2001 From: bicijinlian Date: Thu, 1 Jun 2023 21:43:38 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=8A=B6=E6=80=81=E6=A0=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SpectreConsoleStudy.Core7App/Program.cs | 5 + SpectreConsoleStudy.Shared/Menu.cs | 41 +++ .../SpectreConsoleRunner.cs | 98 +++++- SpectreConsoleStudy.Shared/UseStatus.cs | 322 ++++++++++++++++++ 4 files changed, 461 insertions(+), 5 deletions(-) create mode 100644 SpectreConsoleStudy.Shared/Menu.cs create mode 100644 SpectreConsoleStudy.Shared/UseStatus.cs diff --git a/SpectreConsoleStudy.Core7App/Program.cs b/SpectreConsoleStudy.Core7App/Program.cs index 592b5cf..7a1a07a 100644 --- a/SpectreConsoleStudy.Core7App/Program.cs +++ b/SpectreConsoleStudy.Core7App/Program.cs @@ -1,4 +1,9 @@  +using Spectre.Console; +using Spectre.Console.Advanced; +using Spectre.Console.Extensions; +using Spectre.Console.Rendering; + namespace SpectreConsoleStudy.Core7App { internal class Program diff --git a/SpectreConsoleStudy.Shared/Menu.cs b/SpectreConsoleStudy.Shared/Menu.cs new file mode 100644 index 0000000..ecc81a1 --- /dev/null +++ b/SpectreConsoleStudy.Shared/Menu.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Text.RegularExpressions; + +namespace SpectreConsoleStudy.Shared +{ + public class Menu + { + public Menu() { } + + public Menu(string groupName, string menuName, Action runner) + : this(groupName, 0, menuName, 0, runner) + { + + } + + public Menu(string groupName, int groupOrder, string menuName, int order, Action runner) + { + Group = groupName; + GroupOrder = groupOrder; + Name = menuName; + Order = order; + Runner = runner; + } + + public int GroupOrder { get; set; } = 0; + + public string Group { get; set; } + public string Name { get; set; } + + public int Order { get; set; } + + public Action Runner { get; set; } + + public override string ToString() + { + return Name ?? "未知"; + } + } +} diff --git a/SpectreConsoleStudy.Shared/SpectreConsoleRunner.cs b/SpectreConsoleStudy.Shared/SpectreConsoleRunner.cs index c33c55d..a0b0e36 100644 --- a/SpectreConsoleStudy.Shared/SpectreConsoleRunner.cs +++ b/SpectreConsoleStudy.Shared/SpectreConsoleRunner.cs @@ -1,4 +1,6 @@ using System; +using System.Collections.Generic; +using System.Linq; using Spectre.Console; @@ -9,19 +11,105 @@ namespace SpectreConsoleStudy.Shared /// public class SpectreConsoleRunner { + private static List Menus = new List() + { + new Menu("入门示例",100,"入门示例",0,Hello), + + new Menu("提示组件",1,"文本提示",1,Hello), + new Menu("提示组件",1,"选择",2,Hello), + new Menu("提示组件",1,"多选",3,Hello), + + new Menu("实时组件",20,"实时展示",1,Hello), + new Menu("实时组件",20,"进度条",2,Hello), + new Menu("实时组件",20,"状态条",3,UseStatus.Run), + + new Menu("小组件",30,"面板",1,Hello), + new Menu("小组件",30,"桌面",2,Hello), + new Menu("小组件",30,"日历",3,Hello), + new Menu("小组件",30,"网格",4,Hello), + new Menu("小组件",30,"布局",5,Hello), + + new Menu("符录",40,"颜色",10,Hello), + new Menu("符录",40,"风格",0,Hello), + new Menu("符录",40,"边框",0,Hello), + new Menu("符录",40,"微调器",0,Hello), + }; + + /// + /// 启动执行 + /// public static void Run() { - //简单应用 - Hello(); + Welcome(); + + RunMenu(); + } + + /// + /// 欢迎信息 + /// + public static void Welcome() + { + var hello = new Panel("此为开源多彩控制台项目:[red] Spectre.Console [/]的学习、演示程序。请选择模块,查询效果。") + .Header(new PanelHeader("[yellow3] 多彩控制台,[/][red]欢迎您 [/]", Justify.Center)) + .Border(BoxBorder.Ascii) + .BorderStyle(Style.Parse("green")) + .Padding(new Padding(2, 1)) + .Expand() + ; + + AnsiConsole.Write(hello); + AnsiConsole.WriteLine(); } - public static void Hello() + /// + /// 执行菜单 + /// + public static void RunMenu() { - AnsiConsole.MarkupLine("[green]Hello[/] Spectre.Console!!"); - while (!AnsiConsole.Confirm("退出应用?")) + //声明多选 + var multiSelect = new MultiSelectionPrompt() + .PageSize(15) + //.Title("您想运行哪些 [green]示例[/] ?") + //.MoreChoicesText("[grey](按上下键以显示更选项)[/]") + .InstructionsText("[grey](按 [blue] 键[/] 切换选中状态, 按[green] 键[/] 执行选择项)[/]"); + + //添加选项 + var menuGroups = Menus.OrderByDescending(x => x.GroupOrder).GroupBy(x => x.Group); + foreach (var group in menuGroups) { + int itemNuber = group.Count(); + if (itemNuber == 1) + { + multiSelect.AddChoice(group.First()); + } + else if (itemNuber > 1) + { + var menuList = group.OrderByDescending(x => x.Order).ToList(); + var firstMenu = menuList.First(); + multiSelect.AddChoiceGroup(firstMenu, menuList); + } + } + + //展示 + var menus = AnsiConsole.Prompt(multiSelect); + //执行选中项 + foreach (var menu in menus) + { + menu?.Runner(menu); } } + + /// + /// 执行模块(start) + /// + /// + private static void Hello(Menu menu) + { + Rule rule = new Rule(menu.ToString()); + AnsiConsole.Write(rule); + AnsiConsole.WriteLine(); + } } } diff --git a/SpectreConsoleStudy.Shared/UseStatus.cs b/SpectreConsoleStudy.Shared/UseStatus.cs new file mode 100644 index 0000000..787041a --- /dev/null +++ b/SpectreConsoleStudy.Shared/UseStatus.cs @@ -0,0 +1,322 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Threading; + +using Spectre.Console; + +namespace SpectreConsoleStudy.Shared +{ + public static class UseStatus + { + public static void Run(Menu menu) + { + + AnsiConsole.Status() + .Spinner(Spinner.Known.BouncingBar) + .Start("状态栏变化中...", ctx => + { + ctx.Spinner(Spinner.Known.BouncingBar); + Thread.Sleep(2000); + AnsiConsole.MarkupLine(nameof(Spinner.Known.Aesthetic)); + + ctx.Spinner(Spinner.Known.Arc); + Thread.Sleep(2000); + AnsiConsole.MarkupLine(nameof(Spinner.Known.Arc)); + + ctx.Spinner(Spinner.Known.Arrow); + Thread.Sleep(2000); + AnsiConsole.MarkupLine(nameof(Spinner.Known.Arrow)); + + ctx.Spinner(Spinner.Known.Arrow2); + Thread.Sleep(2000); + AnsiConsole.MarkupLine(nameof(Spinner.Known.Arrow2)); + + ctx.Spinner(Spinner.Known.Arrow3); + Thread.Sleep(2000); + AnsiConsole.MarkupLine(nameof(Spinner.Known.Arrow3)); + + ctx.Spinner(Spinner.Known.Balloon); + Thread.Sleep(2000); + AnsiConsole.MarkupLine(nameof(Spinner.Known.Balloon)); + + ctx.Spinner(Spinner.Known.Balloon2); + Thread.Sleep(2000); + AnsiConsole.MarkupLine(nameof(Spinner.Known.Balloon2)); + + ctx.Spinner(Spinner.Known.BetaWave); + Thread.Sleep(2000); + AnsiConsole.MarkupLine(nameof(Spinner.Known.BetaWave)); + + ctx.Spinner(Spinner.Known.Bounce); + Thread.Sleep(2000); + AnsiConsole.MarkupLine(nameof(Spinner.Known.Bounce)); + + ctx.Spinner(Spinner.Known.BouncingBall); + Thread.Sleep(3000); + AnsiConsole.MarkupLine(nameof(Spinner.Known.BouncingBall)); + + ctx.Spinner(Spinner.Known.BouncingBar); + Thread.Sleep(3000); + AnsiConsole.MarkupLine(nameof(Spinner.Known.BouncingBar)); + + ctx.Spinner(Spinner.Known.BoxBounce); + Thread.Sleep(3000); + AnsiConsole.MarkupLine(nameof(Spinner.Known.BoxBounce)); + + ctx.Spinner(Spinner.Known.BoxBounce2); + Thread.Sleep(3000); + AnsiConsole.MarkupLine(nameof(Spinner.Known.BoxBounce2)); + + ctx.Spinner(Spinner.Known.Dots8Bit); + Thread.Sleep(2000); + AnsiConsole.MarkupLine(nameof(Spinner.Known.Dots8Bit)); + + ctx.Spinner(Spinner.Known.Christmas); + Thread.Sleep(2000); + AnsiConsole.MarkupLine(nameof(Spinner.Known.Christmas)); + + ctx.Spinner(Spinner.Known.Circle); + Thread.Sleep(2000); + AnsiConsole.MarkupLine(nameof(Spinner.Known.Circle)); + + ctx.Spinner(Spinner.Known.CircleHalves); + Thread.Sleep(2000); + AnsiConsole.MarkupLine(nameof(Spinner.Known.CircleHalves)); + + ctx.Spinner(Spinner.Known.CircleQuarters); + Thread.Sleep(2000); + AnsiConsole.MarkupLine(nameof(Spinner.Known.CircleQuarters)); + + ctx.Spinner(Spinner.Known.Clock); + Thread.Sleep(2000); + AnsiConsole.MarkupLine(nameof(Spinner.Known.Clock)); + + ctx.Spinner(Spinner.Known.Default); + Thread.Sleep(2000); + AnsiConsole.MarkupLine(nameof(Spinner.Known.Default)); + + ctx.Spinner(Spinner.Known.Dots); + Thread.Sleep(2000); + AnsiConsole.MarkupLine(nameof(Spinner.Known.Dots)); + + ctx.Spinner(Spinner.Known.Dots2); + Thread.Sleep(2000); + AnsiConsole.MarkupLine(nameof(Spinner.Known.Dots2)); + + ctx.Spinner(Spinner.Known.Dots3); + Thread.Sleep(2000); + AnsiConsole.MarkupLine(nameof(Spinner.Known.Dots3)); + + ctx.Spinner(Spinner.Known.Dots4); + Thread.Sleep(2000); + AnsiConsole.MarkupLine(nameof(Spinner.Known.Dots4)); + + ctx.Spinner(Spinner.Known.Dots5); + Thread.Sleep(2000); + AnsiConsole.MarkupLine(nameof(Spinner.Known.Dots5)); + + ctx.Spinner(Spinner.Known.Dots6); + Thread.Sleep(2000); + AnsiConsole.MarkupLine(nameof(Spinner.Known.Dots6)); + + ctx.Spinner(Spinner.Known.Dots7); + Thread.Sleep(2000); + AnsiConsole.MarkupLine(nameof(Spinner.Known.Dots7)); + + ctx.Spinner(Spinner.Known.Dots8); + Thread.Sleep(2000); + AnsiConsole.MarkupLine(nameof(Spinner.Known.Dots8)); + + ctx.Spinner(Spinner.Known.Dots9); + Thread.Sleep(2000); + AnsiConsole.MarkupLine(nameof(Spinner.Known.Dots9)); + + ctx.Spinner(Spinner.Known.Dots10); + Thread.Sleep(2000); + AnsiConsole.MarkupLine(nameof(Spinner.Known.Dots10)); + + ctx.Spinner(Spinner.Known.Dots11); + Thread.Sleep(2000); + AnsiConsole.MarkupLine(nameof(Spinner.Known.Dots11)); + + ctx.Spinner(Spinner.Known.Dots12); + Thread.Sleep(2000); + AnsiConsole.MarkupLine(nameof(Spinner.Known.Dots12)); + + ctx.Spinner(Spinner.Known.Dots8Bit); + Thread.Sleep(2000); + AnsiConsole.MarkupLine(nameof(Spinner.Known.Dots8Bit)); + + ctx.Spinner(Spinner.Known.Dqpb); + Thread.Sleep(2000); + AnsiConsole.MarkupLine(nameof(Spinner.Known.Dqpb)); + + ctx.Spinner(Spinner.Known.Earth); + Thread.Sleep(2000); + AnsiConsole.MarkupLine(nameof(Spinner.Known.Earth)); + + ctx.Spinner(Spinner.Known.Flip); + Thread.Sleep(2000); + AnsiConsole.MarkupLine(nameof(Spinner.Known.Flip)); + + ctx.Spinner(Spinner.Known.Grenade); + Thread.Sleep(2000); + AnsiConsole.MarkupLine(nameof(Spinner.Known.Grenade)); + + ctx.Spinner(Spinner.Known.GrowHorizontal); + Thread.Sleep(2000); + AnsiConsole.MarkupLine(nameof(Spinner.Known.GrowHorizontal)); + + ctx.Spinner(Spinner.Known.GrowVertical); + Thread.Sleep(2000); + AnsiConsole.MarkupLine(nameof(Spinner.Known.GrowVertical)); + + ctx.Spinner(Spinner.Known.Hamburger); + AnsiConsole.MarkupLine(nameof(Spinner.Known.Hamburger)); + Thread.Sleep(2000); + + ctx.Spinner(Spinner.Known.Hearts); + Thread.Sleep(2000); + AnsiConsole.MarkupLine(nameof(Spinner.Known.Hearts)); + + ctx.Spinner(Spinner.Known.Layer); + Thread.Sleep(2000); + AnsiConsole.MarkupLine(nameof(Spinner.Known.Layer)); + + ctx.Spinner(Spinner.Known.Line); + Thread.Sleep(2000); + AnsiConsole.MarkupLine(nameof(Spinner.Known.Line)); + + ctx.Spinner(Spinner.Known.Line2); + Thread.Sleep(2000); + AnsiConsole.MarkupLine(nameof(Spinner.Known.Line2)); + + ctx.Spinner(Spinner.Known.Material); + Thread.Sleep(2000); + AnsiConsole.MarkupLine(nameof(Spinner.Known.Material)); + + ctx.Spinner(Spinner.Known.Monkey); + Thread.Sleep(2000); + AnsiConsole.MarkupLine(nameof(Spinner.Known.Monkey)); + + ctx.Spinner(Spinner.Known.Moon); + Thread.Sleep(2000); + AnsiConsole.MarkupLine(nameof(Spinner.Known.Moon)); + + ctx.Spinner(Spinner.Known.Noise); + Thread.Sleep(2000); + AnsiConsole.MarkupLine(nameof(Spinner.Known.Noise)); + + ctx.Spinner(Spinner.Known.Pipe); + Thread.Sleep(2000); + AnsiConsole.MarkupLine(nameof(Spinner.Known.Pipe)); + + ctx.Spinner(Spinner.Known.Point); + Thread.Sleep(2000); + AnsiConsole.MarkupLine(nameof(Spinner.Known.Dots8Bit)); + + ctx.Spinner(Spinner.Known.Pong); + Thread.Sleep(2000); + AnsiConsole.MarkupLine(nameof(Spinner.Known.Pong)); + + ctx.Spinner(Spinner.Known.Runner); + Thread.Sleep(2000); + AnsiConsole.MarkupLine(nameof(Spinner.Known.Runner)); + + ctx.Spinner(Spinner.Known.Shark); + Thread.Sleep(2000); + AnsiConsole.MarkupLine(nameof(Spinner.Known.Shark)); + + ctx.Spinner(Spinner.Known.SimpleDots); + Thread.Sleep(2000); + AnsiConsole.MarkupLine(nameof(Spinner.Known.SimpleDots)); + + ctx.Spinner(Spinner.Known.SimpleDotsScrolling); + Thread.Sleep(2000); + AnsiConsole.MarkupLine(nameof(Spinner.Known.SimpleDotsScrolling)); + + ctx.Spinner(Spinner.Known.Smiley); + Thread.Sleep(2000); + AnsiConsole.MarkupLine(nameof(Spinner.Known.Smiley)); + + ctx.Spinner(Spinner.Known.SquareCorners); + Thread.Sleep(2000); + AnsiConsole.MarkupLine(nameof(Spinner.Known.SquareCorners)); + + ctx.Spinner(Spinner.Known.Squish); + Thread.Sleep(2000); + AnsiConsole.MarkupLine(nameof(Spinner.Known.Squish)); + + ctx.Spinner(Spinner.Known.Star); + Thread.Sleep(2000); + AnsiConsole.MarkupLine(nameof(Spinner.Known.Star)); + + ctx.Spinner(Spinner.Known.Star2); + Thread.Sleep(2000); + AnsiConsole.MarkupLine(nameof(Spinner.Known.Star2)); + + ctx.Spinner(Spinner.Known.Toggle); + Thread.Sleep(2000); + AnsiConsole.MarkupLine(nameof(Spinner.Known.Toggle)); + + ctx.Spinner(Spinner.Known.Toggle2); + Thread.Sleep(2000); + AnsiConsole.MarkupLine(nameof(Spinner.Known.Toggle2)); + + ctx.Spinner(Spinner.Known.Toggle3); + Thread.Sleep(2000); + AnsiConsole.MarkupLine(nameof(Spinner.Known.Toggle4)); + + ctx.Spinner(Spinner.Known.Toggle5); + Thread.Sleep(2000); + AnsiConsole.MarkupLine(nameof(Spinner.Known.Toggle5)); + + ctx.Spinner(Spinner.Known.Toggle6); + Thread.Sleep(2000); + AnsiConsole.MarkupLine(nameof(Spinner.Known.Toggle6)); + + ctx.Spinner(Spinner.Known.Toggle7); + Thread.Sleep(2000); + AnsiConsole.MarkupLine(nameof(Spinner.Known.Toggle7)); + + ctx.Spinner(Spinner.Known.Toggle8); + Thread.Sleep(2000); + AnsiConsole.MarkupLine(nameof(Spinner.Known.Toggle8)); + + ctx.Spinner(Spinner.Known.Toggle9); + Thread.Sleep(2000); + AnsiConsole.MarkupLine(nameof(Spinner.Known.Toggle9)); + + ctx.Spinner(Spinner.Known.Toggle10); + Thread.Sleep(2000); + AnsiConsole.MarkupLine(nameof(Spinner.Known.Toggle10)); + + ctx.Spinner(Spinner.Known.Toggle11); + Thread.Sleep(2000); + AnsiConsole.MarkupLine(nameof(Spinner.Known.Toggle11)); + + ctx.Spinner(Spinner.Known.Toggle12); + Thread.Sleep(2000); + AnsiConsole.MarkupLine(nameof(Spinner.Known.Toggle12)); + + ctx.Spinner(Spinner.Known.Toggle13); + Thread.Sleep(2000); + AnsiConsole.MarkupLine(nameof(Spinner.Known.Toggle13)); + + ctx.Spinner(Spinner.Known.Triangle); + Thread.Sleep(2000); + AnsiConsole.MarkupLine(nameof(Spinner.Known.Triangle)); + + ctx.Spinner(Spinner.Known.Weather); + Thread.Sleep(2000); + AnsiConsole.MarkupLine(nameof(Spinner.Known.Weather)); + + ctx.Spinner(Spinner.Known.Weather); + Thread.Sleep(2000); + AnsiConsole.MarkupLine(nameof(Spinner.Known.Weather)); + }); + } + + } +}