using System; using System.Threading; using CMLeonOS.UI; namespace CMLeonOS.Commands { public static class TestTUICommand { public static void RunTestTUI() { global::System.Console.Clear(); while (true) { ShowMainMenu(); } } private static void ShowMainMenu() { global::System.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("Menu Demo", () => ShowMenuDemo())); menu.Items.Add(new MenuItem("ListBox Demo", () => ShowListBoxDemo())); menu.Items.Add(new MenuItem("CheckBox Demo", () => ShowCheckBoxDemo())); menu.Items.Add(new MenuItem("RadioButton Demo", () => ShowRadioButtonDemo())); menu.Items.Add(new MenuItem("TreeView Demo", () => ShowTreeViewDemo())); menu.Items.Add(new MenuItem("ScrollBar Demo", () => ShowScrollBarDemo())); menu.Items.Add(new MenuItem("Exit", () => global::System.Environment.Exit(0))); menu.Render(); bool menuRunning = true; while (menuRunning) { var key = global::System.Console.ReadKey(true); if (menu.HandleKey(key)) { if (key.Key == global::System.ConsoleKey.Enter) { menuRunning = false; } else { menu.Render(); global::System.Threading.Thread.Sleep(100); } } else if (key.Key == global::System.ConsoleKey.Escape) { menuRunning = false; } } } private static void ShowButtonDemo() { global::System.Console.Clear(); 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(); var button1 = new Button(new Rect(10, 8, 20, 3), "Click Me!", global::System.ConsoleColor.Cyan, global::System.ConsoleColor.DarkBlue, global::System.ConsoleColor.White); var button2 = new Button(new Rect(35, 8, 20, 3), "Disabled", global::System.ConsoleColor.Gray, global::System.ConsoleColor.Black, global::System.ConsoleColor.DarkGray); button2.IsEnabled = false; var button3 = new Button(new Rect(60, 8, 20, 3), "Hover Me", global::System.ConsoleColor.Yellow, global::System.ConsoleColor.DarkRed, global::System.ConsoleColor.White); button1.Render(); button2.Render(); button3.Render(); int focusedButton = 0; button1.IsFocused = true; bool demoRunning = true; while (demoRunning) { var key = global::System.Console.ReadKey(true); if (key.Key == global::System.ConsoleKey.Escape) { demoRunning = false; } else if (key.Key == global::System.ConsoleKey.Enter) { if (focusedButton == 0 && button1.IsEnabled) { global::System.Console.SetCursorPosition(10, 14); global::System.Console.Write("Clicked!"); global::System.Threading.Thread.Sleep(1000); } } else if (key.Key == global::System.ConsoleKey.LeftArrow) { button1.IsFocused = false; button3.IsFocused = false; focusedButton = (focusedButton - 1 + 3) % 3; if (focusedButton == 0 && button1.IsEnabled) button1.IsFocused = true; if (focusedButton == 1 && button2.IsEnabled) button2.IsFocused = true; if (focusedButton == 2 && button3.IsEnabled) button3.IsFocused = true; } else if (key.Key == global::System.ConsoleKey.RightArrow) { button1.IsFocused = false; button3.IsFocused = false; focusedButton = (focusedButton + 1) % 3; if (focusedButton == 0 && button1.IsEnabled) button1.IsFocused = true; if (focusedButton == 1 && button2.IsEnabled) button2.IsFocused = true; if (focusedButton == 2 && button3.IsEnabled) button3.IsFocused = true; } button1.Render(); button2.Render(); button3.Render(); } } private static void ShowInputBoxDemo() { global::System.Console.Clear(); var statusBar = new StatusBar(new Rect(0, 24, 80, 1)); statusBar.Items.Add(new StatusBarItem("Press ENTER to submit, ESC to return")); statusBar.Render(); var inputBox = new InputBox(new Rect(20, 8, 40, 3), "Enter your name:", "John Doe", 20, false, global::System.ConsoleColor.White, global::System.ConsoleColor.Black, global::System.ConsoleColor.White); inputBox.MaxLength = 20; inputBox.IsFocused = true; var button = new Button(new Rect(65, 8, 15, 3), "Submit"); button.OnClick = () => { global::System.Console.SetCursorPosition(20, 12); global::System.Console.Write($"Submitted: {inputBox.Value}"); global::System.Threading.Thread.Sleep(2000); }; inputBox.Render(); button.Render(); bool demoRunning = true; while (demoRunning) { var key = global::System.Console.ReadKey(true); if (key.Key == global::System.ConsoleKey.Escape) { demoRunning = false; } else if (inputBox.HandleKey(key)) { inputBox.Render(); } else if (button.HandleKey(key)) { button.Render(); } } } private static void ShowDialogDemo() { global::System.Console.Clear(); 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(); 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", global::System.ConsoleColor.White, global::System.ConsoleColor.DarkGreen, global::System.ConsoleColor.White)); dialog.Buttons[0].OnClick = () => { global::System.Console.SetCursorPosition(15, 13); global::System.Console.Write("Confirmed!"); global::System.Threading.Thread.Sleep(1500); }; dialog.Buttons.Add(new Button(new Rect(31, 14, 12, 3), "No", global::System.ConsoleColor.White, global::System.ConsoleColor.DarkRed, global::System.ConsoleColor.White)); dialog.Buttons[1].OnClick = () => { global::System.Console.SetCursorPosition(31, 13); global::System.Console.Write("Cancelled!"); global::System.Threading.Thread.Sleep(1500); }; dialog.Render(); bool demoRunning = true; while (demoRunning) { var key = global::System.Console.ReadKey(true); if (key.Key == global::System.ConsoleKey.Escape) { demoRunning = false; } else if (dialog.HandleKey(key)) { dialog.Render(); } } } private static void ShowProgressBarDemo() { global::System.Console.Clear(); var statusBar = new StatusBar(new Rect(0, 24, 80, 1)); statusBar.Items.Add(new StatusBarItem("Press ENTER to start, ESC to return")); statusBar.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(); global::System.Threading.Thread.Sleep(30); } }; progressBar.Render(); button.Render(); bool demoRunning = true; while (demoRunning) { var key = global::System.Console.ReadKey(true); if (key.Key == global::System.ConsoleKey.Escape) { demoRunning = false; } else if (button.HandleKey(key)) { button.Render(); } } } private static void ShowTabControlDemo() { global::System.Console.Clear(); 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(); 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(global::System.ConsoleColor.Cyan, global::System.ConsoleColor.Black); global::System.Console.SetCursorPosition(10, 10); global::System.Console.Write("Tab 1 Content"); TUIHelper.ResetColors(); })); tabControl.Pages.Add(new TabPage(new Rect(5, 8, 70, 11), "Tab 2", () => { TUIHelper.SetColors(global::System.ConsoleColor.Green, global::System.ConsoleColor.Black); global::System.Console.SetCursorPosition(10, 10); global::System.Console.Write("Tab 2 Content"); TUIHelper.ResetColors(); })); tabControl.Pages.Add(new TabPage(new Rect(5, 8, 70, 11), "Tab 3", () => { TUIHelper.SetColors(global::System.ConsoleColor.Magenta, global::System.ConsoleColor.Black); global::System.Console.SetCursorPosition(10, 10); global::System.Console.Write("Tab 3 Content"); TUIHelper.ResetColors(); })); tabControl.Render(); bool demoRunning = true; while (demoRunning) { var key = global::System.Console.ReadKey(true); if (key.Key == global::System.ConsoleKey.Escape) { demoRunning = false; } else if (tabControl.HandleKey(key)) { tabControl.Render(); } } } private static void ShowMenuDemo() { global::System.Console.Clear(); var statusBar = new StatusBar(new Rect(0, 24, 80, 1)); statusBar.Items.Add(new StatusBarItem("Use UP/DOWN to navigate, ENTER to select, ESC to return")); statusBar.Render(); var menu = new Menu(new Rect(15, 5, 50, 15)); menu.Items.Add(new MenuItem("Option 1: Basic functionality", () => { global::System.Console.SetCursorPosition(15, 21); global::System.Console.Write("Selected: Option 1"); global::System.Threading.Thread.Sleep(1500); })); menu.Items.Add(new MenuItem("Option 2: Advanced features", () => { global::System.Console.SetCursorPosition(15, 21); global::System.Console.Write("Selected: Option 2"); global::System.Threading.Thread.Sleep(1500); })); menu.Items.Add(new MenuItem("Option 3: Settings", () => { global::System.Console.SetCursorPosition(15, 21); global::System.Console.Write("Selected: Option 3"); global::System.Threading.Thread.Sleep(1500); })); menu.Items.Add(new MenuItem("Option 4: Help", () => { global::System.Console.SetCursorPosition(15, 21); global::System.Console.Write("Selected: Option 4"); global::System.Threading.Thread.Sleep(1500); })); menu.Items.Add(new MenuItem("Option 5: About", () => { global::System.Console.SetCursorPosition(15, 21); global::System.Console.Write("Selected: Option 5"); global::System.Threading.Thread.Sleep(1500); })); menu.Items.Add(new MenuItem("Option 6: Exit", () => { global::System.Console.SetCursorPosition(15, 21); global::System.Console.Write("Selected: Option 6"); global::System.Threading.Thread.Sleep(1500); })); menu.Render(); bool demoRunning = true; while (demoRunning) { var key = global::System.Console.ReadKey(true); if (key.Key == global::System.ConsoleKey.Escape) { demoRunning = false; } else if (menu.HandleKey(key)) { menu.Render(); } } } private static void ShowListBoxDemo() { global::System.Console.Clear(); var statusBar = new StatusBar(new Rect(0, 24, 80, 1)); statusBar.Items.Add(new StatusBarItem("Use UP/DOWN to navigate, SPACE to select, ESC to return")); statusBar.Render(); var listBox = new ListBox(new Rect(10, 5, 60, 15)); listBox.Items.Add("Item 1: Basic functionality"); listBox.Items.Add("Item 2: Advanced features"); listBox.Items.Add("Item 3: Settings"); listBox.Items.Add("Item 4: Help"); listBox.Items.Add("Item 5: About"); listBox.Items.Add("Item 6: Documentation"); listBox.Items.Add("Item 7: Configuration"); listBox.Items.Add("Item 8: System info"); listBox.Items.Add("Item 9: Network settings"); listBox.Items.Add("Item 10: User management"); listBox.MultiSelect = true; listBox.Render(); bool demoRunning = true; while (demoRunning) { var key = global::System.Console.ReadKey(true); if (key.Key == global::System.ConsoleKey.Escape) { demoRunning = false; } else if (listBox.HandleKey(key)) { listBox.Render(); } } } private static void ShowCheckBoxDemo() { global::System.Console.Clear(); var statusBar = new StatusBar(new Rect(0, 24, 80, 1)); statusBar.Items.Add(new StatusBarItem("Use UP/DOWN to navigate, SPACE to toggle, ESC to return")); statusBar.Render(); var checkBox1 = new CheckBox(new Point(10, 8), "Enable feature 1"); checkBox1.IsChecked = true; checkBox1.IsFocused = true; var checkBox2 = new CheckBox(new Point(10, 10), "Enable feature 2"); checkBox2.IsChecked = false; var checkBox3 = new CheckBox(new Point(10, 12), "Enable feature 3"); checkBox3.IsChecked = false; var checkBox4 = new CheckBox(new Point(10, 14), "Enable feature 4"); checkBox4.IsChecked = false; checkBox1.Render(); checkBox2.Render(); checkBox3.Render(); checkBox4.Render(); int focusedCheckBox = 0; bool demoRunning = true; while (demoRunning) { var key = global::System.Console.ReadKey(true); if (key.Key == global::System.ConsoleKey.Escape) { demoRunning = false; } else if (key.Key == global::System.ConsoleKey.UpArrow) { checkBox1.IsFocused = false; checkBox2.IsFocused = false; checkBox3.IsFocused = false; checkBox4.IsFocused = false; focusedCheckBox = (focusedCheckBox - 1 + 4) % 4; if (focusedCheckBox == 0) checkBox1.IsFocused = true; if (focusedCheckBox == 1) checkBox2.IsFocused = true; if (focusedCheckBox == 2) checkBox3.IsFocused = true; if (focusedCheckBox == 3) checkBox4.IsFocused = true; } else if (key.Key == global::System.ConsoleKey.DownArrow) { checkBox1.IsFocused = false; checkBox2.IsFocused = false; checkBox3.IsFocused = false; checkBox4.IsFocused = false; focusedCheckBox = (focusedCheckBox + 1) % 4; if (focusedCheckBox == 0) checkBox1.IsFocused = true; if (focusedCheckBox == 1) checkBox2.IsFocused = true; if (focusedCheckBox == 2) checkBox3.IsFocused = true; if (focusedCheckBox == 3) checkBox4.IsFocused = true; } else if (key.Key == global::System.ConsoleKey.Enter || key.Key == global::System.ConsoleKey.Spacebar) { if (focusedCheckBox == 0) checkBox1.IsChecked = !checkBox1.IsChecked; if (focusedCheckBox == 1) checkBox2.IsChecked = !checkBox2.IsChecked; if (focusedCheckBox == 2) checkBox3.IsChecked = !checkBox3.IsChecked; if (focusedCheckBox == 3) checkBox4.IsChecked = !checkBox4.IsChecked; } checkBox1.Render(); checkBox2.Render(); checkBox3.Render(); checkBox4.Render(); } } private static void ShowRadioButtonDemo() { global::System.Console.Clear(); var statusBar = new StatusBar(new Rect(0, 24, 80, 1)); statusBar.Items.Add(new StatusBarItem("Use UP/DOWN to navigate, SPACE to select, ESC to return")); statusBar.Render(); var radioButton1 = new RadioButton(new Point(10, 8), "Option 1"); radioButton1.IsChecked = true; radioButton1.IsFocused = true; radioButton1.GroupName = "group1"; var radioButton2 = new RadioButton(new Point(10, 10), "Option 2"); radioButton2.IsChecked = false; radioButton2.GroupName = "group1"; var radioButton3 = new RadioButton(new Point(10, 12), "Option 3"); radioButton3.IsChecked = false; radioButton3.GroupName = "group1"; var radioButton4 = new RadioButton(new Point(10, 14), "Option 4"); radioButton4.IsChecked = false; radioButton4.GroupName = "group1"; radioButton1.Render(); radioButton2.Render(); radioButton3.Render(); radioButton4.Render(); int focusedRadioButton = 0; bool demoRunning = true; while (demoRunning) { var key = global::System.Console.ReadKey(true); if (key.Key == global::System.ConsoleKey.Escape) { demoRunning = false; } else if (key.Key == global::System.ConsoleKey.UpArrow) { radioButton1.IsFocused = false; radioButton2.IsFocused = false; radioButton3.IsFocused = false; radioButton4.IsFocused = false; focusedRadioButton = (focusedRadioButton - 1 + 4) % 4; if (focusedRadioButton == 0) radioButton1.IsFocused = true; if (focusedRadioButton == 1) radioButton2.IsFocused = true; if (focusedRadioButton == 2) radioButton3.IsFocused = true; if (focusedRadioButton == 3) radioButton4.IsFocused = true; } else if (key.Key == global::System.ConsoleKey.DownArrow) { radioButton1.IsFocused = false; radioButton2.IsFocused = false; radioButton3.IsFocused = false; radioButton4.IsFocused = false; focusedRadioButton = (focusedRadioButton + 1) % 4; if (focusedRadioButton == 0) radioButton1.IsFocused = true; if (focusedRadioButton == 1) radioButton2.IsFocused = true; if (focusedRadioButton == 2) radioButton3.IsFocused = true; if (focusedRadioButton == 3) radioButton4.IsFocused = true; } else if (key.Key == global::System.ConsoleKey.Enter || key.Key == global::System.ConsoleKey.Spacebar) { if (focusedRadioButton == 0) radioButton1.IsChecked = true; if (focusedRadioButton == 1) radioButton2.IsChecked = true; if (focusedRadioButton == 2) radioButton3.IsChecked = true; if (focusedRadioButton == 3) radioButton4.IsChecked = true; } radioButton1.Render(); radioButton2.Render(); radioButton3.Render(); radioButton4.Render(); } } private static void ShowTreeViewDemo() { global::System.Console.Clear(); var statusBar = new StatusBar(new Rect(0, 24, 80, 1)); statusBar.Items.Add(new StatusBarItem("Use UP/DOWN to navigate, ENTER/SPACE to expand/collapse, ESC to return")); statusBar.Render(); var treeView = new TreeView(new Rect(5, 5, 70, 15)); treeView.Root = new TreeViewNode { Text = "Root" }; var child1 = new TreeViewNode { Text = "Folder 1", Level = 1, Parent = treeView.Root }; var child2 = new TreeViewNode { Text = "Folder 2", Level = 1, Parent = treeView.Root }; var child3 = new TreeViewNode { Text = "File 1", Level = 2, Parent = child1 }; var child4 = new TreeViewNode { Text = "File 2", Level = 2, Parent = child1 }; var child5 = new TreeViewNode { Text = "File 3", Level = 2, Parent = child2 }; child1.Children.Add(child3); child1.Children.Add(child4); child2.Children.Add(child5); treeView.Root.Children.Add(child1); treeView.Root.Children.Add(child2); treeView.Render(); bool demoRunning = true; while (demoRunning) { var key = global::System.Console.ReadKey(true); if (key.Key == global::System.ConsoleKey.Escape) { demoRunning = false; } else if (treeView.HandleKey(key)) { treeView.Render(); } } } private static void ShowScrollBarDemo() { global::System.Console.Clear(); var statusBar = new StatusBar(new Rect(0, 24, 80, 1)); statusBar.Items.Add(new StatusBarItem("Use UP/DOWN or LEFT/RIGHT to adjust, ESC to return")); statusBar.Render(); var scrollBar1 = new ScrollBar(new Point(15, 10), 10); scrollBar1.MaxValue = 100; scrollBar1.Value = 50; scrollBar1.IsVertical = true; var scrollBar2 = new ScrollBar(new Point(40, 10), 30); scrollBar2.MaxValue = 100; scrollBar2.Value = 30; scrollBar2.IsVertical = false; var scrollBar3 = new ScrollBar(new Point(15, 15), 10); scrollBar3.MaxValue = 50; scrollBar3.Value = 25; scrollBar3.IsVertical = true; var scrollBar4 = new ScrollBar(new Point(40, 15), 30); scrollBar4.MaxValue = 50; scrollBar4.Value = 15; scrollBar4.IsVertical = false; var label1 = new Label(new Point(15, 8), "Vertical ScrollBar:"); var label2 = new Label(new Point(40, 8), "Horizontal ScrollBar:"); var label3 = new Label(new Point(15, 13), "Small Vertical:"); var label4 = new Label(new Point(40, 13), "Small Horizontal:"); label1.Render(); label2.Render(); label3.Render(); label4.Render(); scrollBar1.Render(); scrollBar2.Render(); scrollBar3.Render(); scrollBar4.Render(); int focusedScrollBar = 0; bool demoRunning = true; while (demoRunning) { var key = global::System.Console.ReadKey(true); if (key.Key == global::System.ConsoleKey.Escape) { demoRunning = false; } else if (key.Key == global::System.ConsoleKey.UpArrow || key.Key == global::System.ConsoleKey.DownArrow) { if (focusedScrollBar == 0 && scrollBar1.HandleKey(key)) scrollBar1.Render(); if (focusedScrollBar == 1 && scrollBar2.HandleKey(key)) scrollBar2.Render(); if (focusedScrollBar == 2 && scrollBar3.HandleKey(key)) scrollBar3.Render(); if (focusedScrollBar == 3 && scrollBar4.HandleKey(key)) scrollBar4.Render(); } else if (key.Key == global::System.ConsoleKey.LeftArrow || key.Key == global::System.ConsoleKey.RightArrow) { if (focusedScrollBar == 0 && scrollBar1.HandleKey(key)) scrollBar1.Render(); if (focusedScrollBar == 1 && scrollBar2.HandleKey(key)) scrollBar2.Render(); if (focusedScrollBar == 2 && scrollBar3.HandleKey(key)) scrollBar3.Render(); if (focusedScrollBar == 3 && scrollBar4.HandleKey(key)) scrollBar4.Render(); } else if (key.Key == global::System.ConsoleKey.Tab) { focusedScrollBar = (focusedScrollBar + 1) % 4; } } } } }