feat: 状态栏

main
bicijinlian 2 years ago
parent b18ab6b999
commit 696d21eb0d

@ -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

@ -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<Menu> runner)
: this(groupName, 0, menuName, 0, runner)
{
}
public Menu(string groupName, int groupOrder, string menuName, int order, Action<Menu> 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<Menu> Runner { get; set; }
public override string ToString()
{
return Name ?? "未知";
}
}
}

@ -1,4 +1,6 @@
using System;
using System.Collections.Generic;
using System.Linq;
using Spectre.Console;
@ -9,19 +11,105 @@ namespace SpectreConsoleStudy.Shared
/// </summary>
public class SpectreConsoleRunner
{
private static List<Menu> Menus = new List<Menu>()
{
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),
};
/// <summary>
/// 启动执行
/// </summary>
public static void Run()
{
//简单应用
Hello();
Welcome();
RunMenu();
}
/// <summary>
/// 欢迎信息
/// </summary>
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()
/// <summary>
/// 执行菜单
/// </summary>
public static void RunMenu()
{
AnsiConsole.MarkupLine("[green]Hello[/] Spectre.Console!!");
while (!AnsiConsole.Confirm("退出应用?"))
//声明多选
var multiSelect = new MultiSelectionPrompt<Menu>()
.PageSize(15)
//.Title("您想运行哪些 [green]示例[/] ?")
//.MoreChoicesText("[grey](按上下键以显示更选项)[/]")
.InstructionsText("[grey](按 [blue]<space> 键[/] 切换选中状态, 按[green]<enter> 键[/] 执行选择项)[/]");
//添加选项
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);
}
}
/// <summary>
/// 执行模块(start)
/// </summary>
/// <param name="menu"></param>
private static void Hello(Menu menu)
{
Rule rule = new Rule(menu.ToString());
AnsiConsole.Write(rule);
AnsiConsole.WriteLine();
}
}
}

@ -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));
});
}
}
}
Loading…
Cancel
Save