|
@@ -1,313 +0,0 @@
|
|
|
-namespace StandaloneExample {
|
|
|
- using System.Linq;
|
|
|
- using Terminal.Gui;
|
|
|
- using System;
|
|
|
- using NStack;
|
|
|
- using System.Text;
|
|
|
- using Rune = System.Rune;
|
|
|
- using System.Runtime.InteropServices;
|
|
|
- using System.Diagnostics;
|
|
|
-
|
|
|
- static class Demo {
|
|
|
- class Box10x : View {
|
|
|
- public Box10x (int x, int y) : base (new Rect (x, y, 10, 10))
|
|
|
- {
|
|
|
- }
|
|
|
-
|
|
|
- public override void Redraw (Rect region)
|
|
|
- {
|
|
|
- Driver.SetAttribute (ColorScheme.Focus);
|
|
|
-
|
|
|
- for (int y = 0; y < 10; y++) {
|
|
|
- Move (0, y);
|
|
|
- for (int x = 0; x < 10; x++) {
|
|
|
- Driver.AddRune ((Rune)('0' + ((x + y) % 10)));
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- class Filler : View {
|
|
|
- public Filler (Rect rect) : base (rect)
|
|
|
- {
|
|
|
- }
|
|
|
-
|
|
|
- public override void Redraw (Rect region)
|
|
|
- {
|
|
|
- Driver.SetAttribute (ColorScheme.Focus);
|
|
|
- var f = Frame;
|
|
|
-
|
|
|
- for (int y = 0; y < f.Width; y++) {
|
|
|
- Move (0, y);
|
|
|
- for (int x = 0; x < f.Height; x++) {
|
|
|
- var r = (x % 3) switch {
|
|
|
- 0 => '.',
|
|
|
- 1 => 'o',
|
|
|
- _ => 'O',
|
|
|
- };
|
|
|
- Driver.AddRune (r);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- static void ShowTextAlignments ()
|
|
|
- {
|
|
|
- var container = new Window ("Show Text Alignments - Press Esc to return") {
|
|
|
- X = 0,
|
|
|
- Y = 0,
|
|
|
- Width = Dim.Fill (),
|
|
|
- Height = Dim.Fill ()
|
|
|
- };
|
|
|
- container.KeyUp += (e) => {
|
|
|
- if (e.KeyEvent.Key == Key.Esc)
|
|
|
- container.Running = false;
|
|
|
- };
|
|
|
-
|
|
|
- const int i = 0;
|
|
|
- const string txt = "Hello world, how are you doing today?";
|
|
|
- container.Add (
|
|
|
- new Label ($"{i + 1}-{txt}") { TextAlignment = TextAlignment.Left, Y = 3, Width = Dim.Fill () },
|
|
|
- new Label ($"{i + 2}-{txt}") { TextAlignment = TextAlignment.Right, Y = 5, Width = Dim.Fill () },
|
|
|
- new Label ($"{i + 3}-{txt}") { TextAlignment = TextAlignment.Centered, Y = 7, Width = Dim.Fill () },
|
|
|
- new Label ($"{i + 4}-{txt}") { TextAlignment = TextAlignment.Justified, Y = 9, Width = Dim.Fill () }
|
|
|
- );
|
|
|
-
|
|
|
- Application.Run (container);
|
|
|
- }
|
|
|
-
|
|
|
- static void ShowEntries (View container)
|
|
|
- {
|
|
|
- scrollView = new ScrollView (new Rect (50, 10, 20, 8)) {
|
|
|
- ContentSize = new Size (100, 100),
|
|
|
- ContentOffset = new Point (-1, -1),
|
|
|
- ShowVerticalScrollIndicator = true,
|
|
|
- ShowHorizontalScrollIndicator = true
|
|
|
- };
|
|
|
-
|
|
|
- AddScrollViewChild ();
|
|
|
-
|
|
|
- // This is just to debug the visuals of the scrollview when small
|
|
|
- var scrollView2 = new ScrollView (new Rect (72, 10, 3, 3)) {
|
|
|
- ContentSize = new Size (100, 100),
|
|
|
- ShowVerticalScrollIndicator = true,
|
|
|
- ShowHorizontalScrollIndicator = true
|
|
|
- };
|
|
|
- scrollView2.Add (new Box10x (0, 0));
|
|
|
- var progress = new ProgressBar (new Rect (68, 1, 10, 1));
|
|
|
- bool timer (MainLoop _)
|
|
|
- {
|
|
|
- progress.Pulse ();
|
|
|
- return true;
|
|
|
- }
|
|
|
-
|
|
|
- Application.MainLoop.AddTimeout (TimeSpan.FromMilliseconds (300), timer);
|
|
|
-
|
|
|
- // A little convoluted, this is because I am using this to test the
|
|
|
- // layout based on referencing elements of another view:
|
|
|
-
|
|
|
- var login = new Label ("Login: ") { X = 3, Y = 6 };
|
|
|
- var password = new Label ("Password: ") {
|
|
|
- X = Pos.Left (login),
|
|
|
- Y = Pos.Bottom (login) + 1
|
|
|
- };
|
|
|
- var loginText = new TextField ("") {
|
|
|
- X = Pos.Right (password),
|
|
|
- Y = Pos.Top (login),
|
|
|
- Width = 40
|
|
|
- };
|
|
|
- var passText = new TextField ("") {
|
|
|
- Secret = true,
|
|
|
- X = Pos.Left (loginText),
|
|
|
- Y = Pos.Top (password),
|
|
|
- Width = Dim.Width (loginText)
|
|
|
- };
|
|
|
-
|
|
|
- // Add some content
|
|
|
- container.Add (
|
|
|
- login,
|
|
|
- loginText,
|
|
|
- password,
|
|
|
- passText,
|
|
|
- new FrameView (new Rect (3, 10, 25, 6), "Options", new View [] {
|
|
|
- new CheckBox (1, 0, "Remember me"),
|
|
|
- new RadioGroup (1, 2, new ustring [] { "_Personal", "_Company" }) }
|
|
|
- ),
|
|
|
- new ListView (new Rect (60, 6, 16, 4), new string [] {
|
|
|
- "First row",
|
|
|
- "<>",
|
|
|
- "This is a very long row that should overflow what is shown",
|
|
|
- "4th",
|
|
|
- "There is an empty slot on the second row",
|
|
|
- "Whoa",
|
|
|
- "This is so cool"
|
|
|
- }),
|
|
|
- scrollView,
|
|
|
- scrollView2,
|
|
|
- new Button ("Ok") { X = 3, Y = 19 },
|
|
|
- new Button ("Cancel") { X = 10, Y = 19 },
|
|
|
- progress,
|
|
|
- new Label ("Press F9 (on Unix ESC+9 is an alias) to activate the menubar") { X = 3, Y = 22 }
|
|
|
- );
|
|
|
- }
|
|
|
-
|
|
|
- private static void AddScrollViewChild ()
|
|
|
- {
|
|
|
- if (isBox10x) {
|
|
|
- scrollView.Add (new Box10x (0, 0));
|
|
|
- } else {
|
|
|
- scrollView.Add (new Filler (new Rect (0, 0, 40, 40)));
|
|
|
- }
|
|
|
- scrollView.ContentOffset = Point.Empty;
|
|
|
- }
|
|
|
-
|
|
|
- static void NewFile ()
|
|
|
- {
|
|
|
- var okButton = new Button ("Ok", is_default: true);
|
|
|
- okButton.Clicked += () => Application.RequestStop ();
|
|
|
- var cancelButton = new Button ("Cancel");
|
|
|
- cancelButton.Clicked += () => Application.RequestStop ();
|
|
|
-
|
|
|
- var d = new Dialog (
|
|
|
- "New File", 50, 20,
|
|
|
- okButton,
|
|
|
- cancelButton);
|
|
|
-
|
|
|
- var ml2 = new Label (1, 1, "Mouse Debug Line");
|
|
|
- d.Add (ml2);
|
|
|
- Application.Run (d);
|
|
|
- }
|
|
|
-
|
|
|
- static bool Quit ()
|
|
|
- {
|
|
|
- var n = MessageBox.Query (50, 7, "Quit Demo", "Are you sure you want to quit this demo?", "Yes", "No");
|
|
|
- return n == 0;
|
|
|
- }
|
|
|
-
|
|
|
- static void Close ()
|
|
|
- {
|
|
|
- MessageBox.ErrorQuery (50, 7, "Error", "There is nothing to close", "Ok");
|
|
|
- }
|
|
|
-
|
|
|
- private static void ScrollViewCheck ()
|
|
|
- {
|
|
|
- isBox10x = miScrollViewCheck.Children [0].Checked = !miScrollViewCheck.Children [0].Checked;
|
|
|
- miScrollViewCheck.Children [1].Checked = !miScrollViewCheck.Children [1].Checked;
|
|
|
-
|
|
|
- scrollView.RemoveAll ();
|
|
|
- AddScrollViewChild ();
|
|
|
- }
|
|
|
-
|
|
|
- public static Label ml;
|
|
|
- private static MenuBarItem miScrollViewCheck;
|
|
|
- private static bool isBox10x = true;
|
|
|
- private static Window win;
|
|
|
- private static ScrollView scrollView;
|
|
|
-
|
|
|
- static void Main (string [] args)
|
|
|
- {
|
|
|
- if (args.Length > 0 && args.Contains ("-usc")) {
|
|
|
- Application.UseSystemConsole = true;
|
|
|
- }
|
|
|
-
|
|
|
- Console.OutputEncoding = Encoding.Default;
|
|
|
-
|
|
|
- Application.Init ();
|
|
|
-
|
|
|
- var top = Application.Top;
|
|
|
-
|
|
|
- win = new Window ("Hello") {
|
|
|
- X = 0,
|
|
|
- Y = 1,
|
|
|
- Width = Dim.Fill (),
|
|
|
- Height = Dim.Fill () - 1
|
|
|
- };
|
|
|
-
|
|
|
- StringBuilder aboutMessage = new StringBuilder ();
|
|
|
- aboutMessage.AppendLine (@"A comprehensive sample library for");
|
|
|
- aboutMessage.AppendLine (@"");
|
|
|
- aboutMessage.AppendLine (@" _______ _ _ _____ _ ");
|
|
|
- aboutMessage.AppendLine (@" |__ __| (_) | | / ____| (_) ");
|
|
|
- aboutMessage.AppendLine (@" | | ___ _ __ _ __ ___ _ _ __ __ _| || | __ _ _ _ ");
|
|
|
- aboutMessage.AppendLine (@" | |/ _ \ '__| '_ ` _ \| | '_ \ / _` | || | |_ | | | | | ");
|
|
|
- aboutMessage.AppendLine (@" | | __/ | | | | | | | | | | | (_| | || |__| | |_| | | ");
|
|
|
- aboutMessage.AppendLine (@" |_|\___|_| |_| |_| |_|_|_| |_|\__,_|_(_)_____|\__,_|_| ");
|
|
|
- aboutMessage.AppendLine (@"");
|
|
|
- aboutMessage.AppendLine (@"https://github.com/gui-cs/Terminal.Gui");
|
|
|
-
|
|
|
- var menu = new MenuBar (new MenuBarItem [] {
|
|
|
- new MenuBarItem ("_File", new MenuItem [] {
|
|
|
- new MenuItem ("_New", "Creates new file", NewFile),
|
|
|
- new MenuItem ("_Open", "", null),
|
|
|
- new MenuItem ("_Close", "", () => Close ()),
|
|
|
- new MenuItem ("_Quit", "", () => { if (Quit ()) top.Running = false; })
|
|
|
- }),
|
|
|
- new MenuBarItem ("_Edit", new MenuItem [] {
|
|
|
- new MenuItem ("_Copy", "", null),
|
|
|
- new MenuItem ("C_ut", "", null),
|
|
|
- new MenuItem ("_Paste", "", null)
|
|
|
- }),
|
|
|
- new MenuBarItem ("A_ssorted", new MenuItem [] {
|
|
|
- new MenuItem ("_Show text alignments", "", () => ShowTextAlignments (), null, null, Key.AltMask | Key.CtrlMask | Key.G)
|
|
|
- }),
|
|
|
- miScrollViewCheck = new MenuBarItem ("ScrollView", new MenuItem [] {
|
|
|
- new MenuItem ("Box10x", "", () => ScrollViewCheck()) {CheckType = MenuItemCheckStyle.Radio, Checked = true },
|
|
|
- new MenuItem ("Filler", "", () => ScrollViewCheck()) {CheckType = MenuItemCheckStyle.Radio }
|
|
|
- }),
|
|
|
- new MenuBarItem ("_Help", new MenuItem [] {
|
|
|
- new MenuItem ("_gui.cs API Overview", "", () => OpenUrl ("https://gui-cs.github.io/Terminal.Gui/articles/overview.html"), null, null, Key.F1),
|
|
|
- new MenuItem ("gui.cs _README", "", () => OpenUrl ("https://github.com/gui-cs/Terminal.Gui"), null, null, Key.F2),
|
|
|
- new MenuItem ("_About...", "About UI Catalog",
|
|
|
- () => MessageBox.Query ("About UI Catalog", aboutMessage.ToString(), "_Ok"), null, null, Key.CtrlMask | Key.A)
|
|
|
- })
|
|
|
- });
|
|
|
-
|
|
|
- ShowEntries (win);
|
|
|
- int count = 0;
|
|
|
- ml = new Label (new Rect (3, 17, 47, 1), "Mouse: ");
|
|
|
- Application.RootMouseEvent += (me) => ml.Text = $"Mouse: ({me.X},{me.Y}) - {me.Flags} {count++}";
|
|
|
-
|
|
|
- win.Add (ml);
|
|
|
-
|
|
|
- var statusBar = new StatusBar (new StatusItem [] {
|
|
|
- new StatusItem(Key.F1, "~F1~ Help", () => MessageBox.Query (50, 7, "Help", "Helping", "Ok")),
|
|
|
- new StatusItem(Key.F2, "~F2~ Load", () => MessageBox.Query (50, 7, "Load", "Loading", "Ok")),
|
|
|
- new StatusItem(Key.F3, "~F3~ Save", () => MessageBox.Query (50, 7, "Save", "Saving", "Ok")),
|
|
|
- new StatusItem(Key.CtrlMask | Key.Q, "~^Q~ Quit", () => { if (Quit ()) top.Running = false; }),
|
|
|
- new StatusItem(Key.Null, Application.Driver.GetType().Name, null)
|
|
|
- });
|
|
|
-
|
|
|
- top.Add (win, menu, statusBar);
|
|
|
- Application.Run ();
|
|
|
-
|
|
|
- Application.Shutdown ();
|
|
|
- }
|
|
|
-
|
|
|
- private static void OpenUrl (string url)
|
|
|
- {
|
|
|
- try {
|
|
|
- if (RuntimeInformation.IsOSPlatform (OSPlatform.Windows)) {
|
|
|
- url = url.Replace ("&", "^&");
|
|
|
- Process.Start (new ProcessStartInfo ("cmd", $"/c start {url}") { CreateNoWindow = true });
|
|
|
- } else if (RuntimeInformation.IsOSPlatform (OSPlatform.Linux)) {
|
|
|
- using (var process = new Process {
|
|
|
- StartInfo = new ProcessStartInfo {
|
|
|
- FileName = "xdg-open",
|
|
|
- Arguments = url,
|
|
|
- RedirectStandardError = true,
|
|
|
- RedirectStandardOutput = true,
|
|
|
- CreateNoWindow = true,
|
|
|
- UseShellExecute = false
|
|
|
- }
|
|
|
- }) {
|
|
|
- process.Start ();
|
|
|
- }
|
|
|
- } else if (RuntimeInformation.IsOSPlatform (OSPlatform.OSX)) {
|
|
|
- Process.Start ("open", url);
|
|
|
- }
|
|
|
- } catch {
|
|
|
- throw;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-}
|