mirror of
https://github.com/Leonmmcoset/CMLeonOS.git
synced 2026-03-03 15:30:27 +00:00
TUI+统计
This commit is contained in:
332
UI/TUIDemo.cs
Normal file
332
UI/TUIDemo.cs
Normal file
@@ -0,0 +1,332 @@
|
||||
using System;
|
||||
using System.Threading;
|
||||
using CMLeonOS.UI;
|
||||
|
||||
namespace CMLeonOS.UI.Examples
|
||||
{
|
||||
public static class TUIDemo
|
||||
{
|
||||
public static void Run()
|
||||
{
|
||||
Console.Clear();
|
||||
Console.Title = "CMLeonOS TUI Library Demo";
|
||||
|
||||
bool running = true;
|
||||
while (running)
|
||||
{
|
||||
ShowMainMenu();
|
||||
}
|
||||
}
|
||||
|
||||
private static void ShowMainMenu()
|
||||
{
|
||||
Console.Clear();
|
||||
|
||||
var menu = new Menu(new Rect(5, 5, 70, 15));
|
||||
menu.Items.Add(new MenuItem("Button Demo", () => ShowButtonDemo()));
|
||||
menu.Items.Add(new MenuItem("Input Box Demo", () => ShowInputBoxDemo()));
|
||||
menu.Items.Add(new MenuItem("Dialog Demo", () => ShowDialogDemo()));
|
||||
menu.Items.Add(new MenuItem("Progress Bar Demo", () => ShowProgressBarDemo()));
|
||||
menu.Items.Add(new MenuItem("Tab Control Demo", () => ShowTabControlDemo()));
|
||||
menu.Items.Add(new MenuItem("Exit", () => Environment.Exit(0)));
|
||||
|
||||
menu.Render();
|
||||
|
||||
bool menuRunning = true;
|
||||
while (menuRunning)
|
||||
{
|
||||
var key = Console.ReadKey(true);
|
||||
if (menu.HandleKey(key))
|
||||
{
|
||||
Thread.Sleep(100);
|
||||
}
|
||||
else if (key.Key == ConsoleKey.Escape)
|
||||
{
|
||||
menuRunning = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void ShowButtonDemo()
|
||||
{
|
||||
Console.Clear();
|
||||
|
||||
var titleBar = new Window(new Rect(0, 0, 80, 3), "Button Demo", () =>
|
||||
{
|
||||
Console.Clear();
|
||||
ShowMainMenu();
|
||||
}, false);
|
||||
titleBar.Render();
|
||||
|
||||
var button1 = new Button(new Rect(10, 8, 20, 3), "Click Me!", ConsoleColor.Cyan, ConsoleColor.DarkBlue, ConsoleColor.White);
|
||||
var button2 = new Button(new Rect(35, 8, 20, 3), "Disabled", ConsoleColor.Gray, ConsoleColor.Black, ConsoleColor.DarkGray);
|
||||
button2.IsEnabled = false;
|
||||
var button3 = new Button(new Rect(60, 8, 20, 3), "Hover Me", ConsoleColor.Yellow, ConsoleColor.DarkRed, ConsoleColor.White);
|
||||
|
||||
button1.Render();
|
||||
button2.Render();
|
||||
button3.Render();
|
||||
|
||||
var label = new Label(new Point(10, 13), "Button Component Examples:");
|
||||
label.Render();
|
||||
|
||||
var statusBar = new StatusBar(new Rect(0, 24, 80, 1));
|
||||
statusBar.Items.Add(new StatusBarItem("Press ENTER to click, ESC to return"));
|
||||
statusBar.Render();
|
||||
|
||||
int focusedButton = 0;
|
||||
button1.IsFocused = true;
|
||||
|
||||
bool demoRunning = true;
|
||||
while (demoRunning)
|
||||
{
|
||||
var key = Console.ReadKey(true);
|
||||
|
||||
if (key.Key == ConsoleKey.Escape)
|
||||
{
|
||||
demoRunning = false;
|
||||
}
|
||||
else if (key.Key == ConsoleKey.Enter)
|
||||
{
|
||||
if (focusedButton == 0 && button1.IsEnabled)
|
||||
{
|
||||
Console.SetCursorPosition(10, 14);
|
||||
Console.Write("Clicked!");
|
||||
Thread.Sleep(1000);
|
||||
}
|
||||
}
|
||||
else if (key.Key == ConsoleKey.LeftArrow)
|
||||
{
|
||||
button1.IsFocused = false;
|
||||
button3.IsFocused = false;
|
||||
focusedButton = (focusedButton - 1 + 3) % 3;
|
||||
|
||||
if (focusedButton == 0 && button1.IsEnabled) button1.IsFocused = true;
|
||||
if (focusedButton == 2 && button2.IsEnabled) button2.IsFocused = true;
|
||||
if (focusedButton == 1 && button3.IsEnabled) button3.IsFocused = true;
|
||||
}
|
||||
else if (key.Key == ConsoleKey.RightArrow)
|
||||
{
|
||||
button1.IsFocused = false;
|
||||
button3.IsFocused = false;
|
||||
focusedButton = (focusedButton + 1) % 3;
|
||||
|
||||
if (focusedButton == 0 && button1.IsEnabled) button1.IsFocused = true;
|
||||
if (focusedButton == 2 && button2.IsEnabled) button2.IsFocused = true;
|
||||
if (focusedButton == 1 && button3.IsEnabled) button3.IsFocused = true;
|
||||
}
|
||||
|
||||
button1.Render();
|
||||
button2.Render();
|
||||
button3.Render();
|
||||
}
|
||||
}
|
||||
|
||||
private static void ShowInputBoxDemo()
|
||||
{
|
||||
Console.Clear();
|
||||
|
||||
var titleBar = new Window(new Rect(0, 0, 80, 3), "Input Box Demo", () =>
|
||||
{
|
||||
Console.Clear();
|
||||
ShowMainMenu();
|
||||
}, false);
|
||||
titleBar.Render();
|
||||
|
||||
var inputBox = new InputBox(new Rect(20, 8, 40, 3), "Enter your name:", "John Doe", 20, false, ConsoleColor.White, ConsoleColor.Black, ConsoleColor.White);
|
||||
inputBox.MaxLength = 20;
|
||||
|
||||
var button = new Button(new Rect(65, 8, 15, 3), "Submit");
|
||||
button.OnClick = () =>
|
||||
{
|
||||
Console.SetCursorPosition(20, 12);
|
||||
Console.Write($"Submitted: {inputBox.Value}");
|
||||
Thread.Sleep(2000);
|
||||
};
|
||||
|
||||
inputBox.Render();
|
||||
button.Render();
|
||||
|
||||
var statusBar = new StatusBar(new Rect(0, 24, 80, 1));
|
||||
statusBar.Items.Add(new StatusBarItem("Press ENTER to submit, ESC to return"));
|
||||
statusBar.Render();
|
||||
|
||||
bool demoRunning = true;
|
||||
while (demoRunning)
|
||||
{
|
||||
var key = Console.ReadKey(true);
|
||||
|
||||
if (key.Key == ConsoleKey.Escape)
|
||||
{
|
||||
demoRunning = false;
|
||||
}
|
||||
else if (inputBox.HandleKey(key))
|
||||
{
|
||||
inputBox.Render();
|
||||
}
|
||||
else if (button.HandleKey(key))
|
||||
{
|
||||
button.Render();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void ShowDialogDemo()
|
||||
{
|
||||
Console.Clear();
|
||||
|
||||
var titleBar = new Window(new Rect(0, 0, 80, 3), "Dialog Demo", () =>
|
||||
{
|
||||
Console.Clear();
|
||||
ShowMainMenu();
|
||||
}, false);
|
||||
titleBar.Render();
|
||||
|
||||
var dialog = new Dialog(new Rect(15, 5, 50, 7), "Confirm Action", "Are you sure you want to proceed?");
|
||||
|
||||
dialog.Buttons.Add(new Button(new Rect(17, 14, 12, 3), "Yes", ConsoleColor.White, ConsoleColor.DarkGreen, ConsoleColor.White));
|
||||
dialog.Buttons[0].OnClick = () =>
|
||||
{
|
||||
Console.SetCursorPosition(15, 13);
|
||||
Console.Write("Confirmed!");
|
||||
Thread.Sleep(1500);
|
||||
};
|
||||
|
||||
dialog.Buttons.Add(new Button(new Rect(31, 14, 12, 3), "No", ConsoleColor.White, ConsoleColor.DarkRed, ConsoleColor.White));
|
||||
dialog.Buttons[1].OnClick = () =>
|
||||
{
|
||||
Console.SetCursorPosition(31, 13);
|
||||
Console.Write("Cancelled!");
|
||||
Thread.Sleep(1500);
|
||||
};
|
||||
|
||||
dialog.Render();
|
||||
|
||||
var statusBar = new StatusBar(new Rect(0, 24, 80, 1));
|
||||
statusBar.Items.Add(new StatusBarItem("Use LEFT/RIGHT to select, ENTER to choose"));
|
||||
statusBar.Render();
|
||||
|
||||
bool demoRunning = true;
|
||||
while (demoRunning)
|
||||
{
|
||||
var key = Console.ReadKey(true);
|
||||
|
||||
if (key.Key == ConsoleKey.Escape)
|
||||
{
|
||||
demoRunning = false;
|
||||
}
|
||||
else if (dialog.HandleKey(key))
|
||||
{
|
||||
dialog.Render();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void ShowProgressBarDemo()
|
||||
{
|
||||
Console.Clear();
|
||||
|
||||
var titleBar = new Window(new Rect(0, 0, 80, 3), "Progress Bar Demo", () =>
|
||||
{
|
||||
Console.Clear();
|
||||
ShowMainMenu();
|
||||
}, false);
|
||||
titleBar.Render();
|
||||
|
||||
var progressBar = new ProgressBar(new Point(15, 10), 50, 100);
|
||||
progressBar.Value = 0;
|
||||
|
||||
var button = new Button(new Rect(35, 13, 15, 3), "Start");
|
||||
button.OnClick = () =>
|
||||
{
|
||||
for (int i = 0; i <= 100; i++)
|
||||
{
|
||||
progressBar.SetValue(i);
|
||||
progressBar.Render();
|
||||
Thread.Sleep(30);
|
||||
}
|
||||
};
|
||||
|
||||
progressBar.Render();
|
||||
button.Render();
|
||||
|
||||
var statusBar = new StatusBar(new Rect(0, 24, 80, 1));
|
||||
statusBar.Items.Add(new StatusBarItem("Press ENTER to start, ESC to return"));
|
||||
statusBar.Render();
|
||||
|
||||
bool demoRunning = true;
|
||||
while (demoRunning)
|
||||
{
|
||||
var key = Console.ReadKey(true);
|
||||
|
||||
if (key.Key == ConsoleKey.Escape)
|
||||
{
|
||||
demoRunning = false;
|
||||
}
|
||||
else if (button.HandleKey(key))
|
||||
{
|
||||
button.Render();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void ShowTabControlDemo()
|
||||
{
|
||||
Console.Clear();
|
||||
|
||||
var titleBar = new Window(new Rect(0, 0, 80, 3), "Tab Control Demo", () =>
|
||||
{
|
||||
Console.Clear();
|
||||
ShowMainMenu();
|
||||
}, false);
|
||||
titleBar.Render();
|
||||
|
||||
var tabControl = new TabControl(new Rect(5, 5, 70, 15));
|
||||
|
||||
tabControl.Pages.Add(new TabPage(new Rect(5, 8, 70, 11), "Tab 1", () =>
|
||||
{
|
||||
TUIHelper.SetColors(ConsoleColor.Cyan, ConsoleColor.Black);
|
||||
Console.SetCursorPosition(10, 10);
|
||||
Console.Write("Tab 1 Content");
|
||||
TUIHelper.ResetColors();
|
||||
}));
|
||||
|
||||
tabControl.Pages.Add(new TabPage(new Rect(5, 8, 70, 11), "Tab 2", () =>
|
||||
{
|
||||
TUIHelper.SetColors(ConsoleColor.Green, ConsoleColor.Black);
|
||||
Console.SetCursorPosition(10, 10);
|
||||
Console.Write("Tab 2 Content");
|
||||
TUIHelper.ResetColors();
|
||||
}));
|
||||
|
||||
tabControl.Pages.Add(new TabPage(new Rect(5, 8, 70, 11), "Tab 3", () =>
|
||||
{
|
||||
TUIHelper.SetColors(ConsoleColor.Magenta, ConsoleColor.Black);
|
||||
Console.SetCursorPosition(10, 10);
|
||||
Console.Write("Tab 3 Content");
|
||||
TUIHelper.ResetColors();
|
||||
}));
|
||||
|
||||
tabControl.Render();
|
||||
|
||||
var statusBar = new StatusBar(new Rect(0, 24, 80, 1));
|
||||
statusBar.Items.Add(new StatusBarItem("Use LEFT/RIGHT to switch tabs, ESC to return"));
|
||||
statusBar.Render();
|
||||
|
||||
bool demoRunning = true;
|
||||
while (demoRunning)
|
||||
{
|
||||
var key = Console.ReadKey(true);
|
||||
|
||||
if (key.Key == ConsoleKey.Escape)
|
||||
{
|
||||
demoRunning = false;
|
||||
}
|
||||
else if (tabControl.HandleKey(key))
|
||||
{
|
||||
tabControl.Render();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user