mirror of
https://github.com/gui-cs/Terminal.Gui.git
synced 2025-12-26 15:57:56 +01:00
210 lines
5.2 KiB
C#
210 lines
5.2 KiB
C#
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, 5, "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 ();
|
|
}
|
|
} |