Files
Terminal.Gui/StandaloneExample/Program.cs
Pavel Kurkutov 3e46047971 Fix NewFile modal
Old code is not valid. 1) You can't add event handler in object initializer. 2) ml2 isn't used outside of the method. So you can use local variable.
2021-03-04 15:54:09 +07:00

215 lines
5.4 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 }
);
}
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");
}
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 ();
}
}