|
@@ -0,0 +1,227 @@
|
|
|
+using Terminal.Gui;
|
|
|
+using System;
|
|
|
+using Mono.Terminal;
|
|
|
+
|
|
|
+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++) {
|
|
|
+ Rune r;
|
|
|
+ switch (x % 3) {
|
|
|
+ case 0:
|
|
|
+ r = '.';
|
|
|
+ break;
|
|
|
+ case 1:
|
|
|
+ r = 'o';
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ r = 'O';
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ Driver.AddRune (r);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ static void ShowTextAlignments (View container)
|
|
|
+ {
|
|
|
+ container.Add (
|
|
|
+ new Label (new Rect (0, 0, 40, 3), "1-Hello world, how are you doing today") { TextAlignment = TextAlignment.Left },
|
|
|
+ new Label (new Rect (0, 4, 40, 3), "2-Hello world, how are you doing today") { TextAlignment = TextAlignment.Right },
|
|
|
+ new Label (new Rect (0, 8, 40, 3), "3-Hello world, how are you doing today") { TextAlignment = TextAlignment.Centered },
|
|
|
+ new Label (new Rect (0, 12, 40, 3), "4-Hello world, how are you doing today") { TextAlignment = TextAlignment.Justified });
|
|
|
+ }
|
|
|
+
|
|
|
+ static void ShowEntries (View container)
|
|
|
+ {
|
|
|
+ var scrollView = new ScrollView (new Rect (50, 10, 20, 8)) {
|
|
|
+ ContentSize = new Size (100, 100),
|
|
|
+ ContentOffset = new Point (-1, -1),
|
|
|
+ ShowVerticalScrollIndicator = true,
|
|
|
+ ShowHorizontalScrollIndicator = true
|
|
|
+ };
|
|
|
+
|
|
|
+ scrollView.Add (new Box10x (0, 0));
|
|
|
+ //scrollView.Add (new Filler (new Rect (0, 0, 40, 40)));
|
|
|
+
|
|
|
+ // 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 caller)
|
|
|
+ {
|
|
|
+ progress.Pulse ();
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ Application.MainLoop.AddTimeout (TimeSpan.FromMilliseconds (300), timer);
|
|
|
+
|
|
|
+ // Add some content
|
|
|
+ container.Add (
|
|
|
+ new Label (3, 6, "Login: "),
|
|
|
+ new TextField (14, 6, 40, ""),
|
|
|
+ new Label (3, 8, "Password: "),
|
|
|
+ new TextField (14, 8, 40, "") { Secret = true },
|
|
|
+ new FrameView (new Rect (3, 10, 25, 6), "Options"){
|
|
|
+ new CheckBox (1, 0, "Remember me"),
|
|
|
+ new RadioGroup (1, 2, new [] { "_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 (3, 19, "Ok"),
|
|
|
+ new Button (10, 19, "Cancel"),
|
|
|
+ progress,
|
|
|
+ new Label (3, 22, "Press ESC and 9 to activate the menubar")
|
|
|
+ );
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ public static Label ml2;
|
|
|
+
|
|
|
+ static void NewFile ()
|
|
|
+ {
|
|
|
+ var d = new Dialog (
|
|
|
+ "New File", 50, 20,
|
|
|
+ new Button ("Ok", is_default: true) { Clicked = () => { Application.RequestStop (); } },
|
|
|
+ new Button ("Cancel") { Clicked = () => { Application.RequestStop (); } });
|
|
|
+ ml2 = new Label (1, 1, "Mouse Debug Line");
|
|
|
+ d.Add (ml2);
|
|
|
+ Application.Run (d);
|
|
|
+ }
|
|
|
+
|
|
|
+ //
|
|
|
+ // Creates a nested editor
|
|
|
+ static void Editor (Toplevel top)
|
|
|
+ {
|
|
|
+ var tframe = top.Frame;
|
|
|
+ var ntop = new Toplevel (tframe);
|
|
|
+ var menu = new MenuBar (new MenuBarItem [] {
|
|
|
+ new MenuBarItem ("_File", new MenuItem [] {
|
|
|
+ new MenuItem ("_Close", "", () => {Application.RequestStop ();}),
|
|
|
+ }),
|
|
|
+ new MenuBarItem ("_Edit", new MenuItem [] {
|
|
|
+ new MenuItem ("_Copy", "", null),
|
|
|
+ new MenuItem ("C_ut", "", null),
|
|
|
+ new MenuItem ("_Paste", "", null)
|
|
|
+ }),
|
|
|
+ });
|
|
|
+ ntop.Add (menu);
|
|
|
+
|
|
|
+ var win = new Window (new Rect (0, 1, tframe.Width, tframe.Height - 1), "/etc/passwd");
|
|
|
+ ntop.Add (win);
|
|
|
+
|
|
|
+ var text = new TextView (new Rect (0, 0, tframe.Width - 2, tframe.Height - 3));
|
|
|
+ text.Text = System.IO.File.ReadAllText ("/etc/passwd");
|
|
|
+ win.Add (text);
|
|
|
+
|
|
|
+ Application.Run (ntop);
|
|
|
+ }
|
|
|
+
|
|
|
+ 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, 5, "Error", "There is nothing to close", "Ok");
|
|
|
+ }
|
|
|
+
|
|
|
+ // Watch what happens when I try to introduce a newline after the first open brace
|
|
|
+ // it introduces a new brace instead, and does not indent. Then watch me fight
|
|
|
+ // the editor as more oddities happen.
|
|
|
+
|
|
|
+ public static void Open ()
|
|
|
+ {
|
|
|
+ var d = new OpenDialog ("Open", "Open a file");
|
|
|
+ Application.Run (d);
|
|
|
+ }
|
|
|
+
|
|
|
+ public static Label ml;
|
|
|
+ static void Main ()
|
|
|
+ {
|
|
|
+ //Application.UseSystemConsole = true;
|
|
|
+ Application.Init ();
|
|
|
+
|
|
|
+ var top = Application.Top;
|
|
|
+ var tframe = top.Frame;
|
|
|
+
|
|
|
+ var win = new Window (new Rect (0, 1, tframe.Width, tframe.Height-1), "Hello");
|
|
|
+ var menu = new MenuBar (new MenuBarItem [] {
|
|
|
+ new MenuBarItem ("_File", new MenuItem [] {
|
|
|
+ new MenuItem ("Text Editor Demo", "", () => { Editor (top); }),
|
|
|
+ new MenuItem ("_New", "Creates new file", NewFile),
|
|
|
+ new MenuItem ("_Open", "", Open),
|
|
|
+ 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)
|
|
|
+ }),
|
|
|
+ });
|
|
|
+
|
|
|
+ ShowEntries (win);
|
|
|
+
|
|
|
+ int count = 0;
|
|
|
+ ml = new Label (new Rect (3, 17, 47, 1), "Mouse: ");
|
|
|
+ Application.RootMouseEvent += delegate (MouseEvent me) {
|
|
|
+
|
|
|
+ ml.Text = $"Mouse: ({me.X},{me.Y}) - {me.Flags} {count++}";
|
|
|
+ };
|
|
|
+
|
|
|
+ win.Add (ml);
|
|
|
+
|
|
|
+ // ShowTextAlignments (win);
|
|
|
+ top.Add (win);
|
|
|
+ top.Add (menu);
|
|
|
+ Application.Run ();
|
|
|
+ }
|
|
|
+}
|