123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210 |
- using Terminal.Gui;
- using System;
- using Mono.Terminal;
- 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);
- // 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 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 ("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 }
- );
- }
- 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);
- }
- 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");
- }
- public static Label ml;
- static void Main ()
- {
- //Application.UseSystemConsole = true;
- Application.Init ();
- var top = Application.Top;
- var tframe = top.Frame;
- var win = new Window ("Hello"){
- X = 0,
- Y = 1,
- Width = Dim.Fill (),
- Height = Dim.Fill () - 1
- };
- 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)
- })
- });
- 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);
- top.Add (win, menu);
- top.Add (menu);
- Application.Run ();
- }
- }
|