Files
Terminal.Gui/UICatalog/Scenarios/WindowsAndFrameViews.cs
2024-01-15 19:03:05 +00:00

191 lines
5.1 KiB
C#

using System.Collections.Generic;
using System.Linq;
using Terminal.Gui;
namespace UICatalog.Scenarios;
[ScenarioMetadata (Name: "Windows & FrameViews", Description: "Stress Tests Windows, sub-Windows, and FrameViews.")]
[ScenarioCategory ("Layout")]
public class WindowsAndFrameViews : Scenario {
public override void Setup ()
{
static int About ()
{
return MessageBox.Query ("About UI Catalog", "UI Catalog is a comprehensive sample library for Terminal.Gui", "Ok");
}
int margin = 2;
int padding = 1;
int contentHeight = 7;
// list of Windows we create
var listWin = new List<View> ();
//Ignore the Win that UI Catalog created and create a new one
Application.Top.Remove (Win);
Win?.Dispose ();
Win = new Window () {
Title = $"{listWin.Count} - Scenario: {GetName ()}",
X = Pos.Center (),
Y = 1,
Width = Dim.Fill (15),
Height = 10,
ColorScheme = Colors.Dialog
};
Win.Padding.Thickness = new Thickness (padding);
Win.Margin.Thickness = new Thickness (margin);
var paddingButton = new Button ($"Padding of container is {padding}") {
X = Pos.Center (),
Y = 0,
ColorScheme = Colors.Error,
};
paddingButton.Clicked += (s, e) => About ();
Win.Add (paddingButton);
Win.Add (new Button ("Press ME! (Y = Pos.AnchorEnd(1))") {
X = Pos.Center (),
Y = Pos.AnchorEnd (1),
ColorScheme = Colors.Error
});
Application.Top.Add (Win);
// add it to our list
listWin.Add (Win);
// create 3 more Windows in a loop, adding them Application.Top
// Each with a
// button
// sub Window with
// TextField
// sub FrameView with
//
for (var pad = 0; pad < 3; pad++) {
Window win = null;
win = new Window () {
Title = $"{listWin.Count} - Window Loop - padding = {pad}",
X = margin,
Y = Pos.Bottom (listWin.Last ()) + (margin),
Width = Dim.Fill (margin),
Height = contentHeight + (pad * 2) + 2,
};
win.Padding.Thickness = new Thickness (pad);
win.ColorScheme = Colors.Dialog;
var pressMeButton = new Button ("Press me! (Y = 0)") {
X = Pos.Center (),
Y = 0,
ColorScheme = Colors.Error,
};
pressMeButton.Clicked += (s, e) =>
MessageBox.ErrorQuery (win.Title, "Neat?", "Yes", "No");
win.Add (pressMeButton);
var subWin = new Window () {
Title = "Sub Window",
X = Pos.Percent (0),
Y = 1,
Width = Dim.Percent (50),
Height = 5,
ColorScheme = Colors.Base,
Text = "The Text in the Window",
};
subWin.Add (new TextField ("Edit me! " + win.Title) {
Y = 1,
ColorScheme = Colors.Error
});
win.Add (subWin);
var frameView = new FrameView ("This is a Sub-FrameView") {
X = Pos.Percent (50),
Y = 1,
Width = Dim.Percent (100, true), // Or Dim.Percent (50)
Height = 5,
ColorScheme = Colors.Base,
Text = "The Text in the FrameView",
};
frameView.Add (new TextField ("Edit Me!") {
Y = 1,
});
win.Add (frameView);
Application.Top.Add (win);
listWin.Add (win);
}
// Add a FrameView (frame) to Application.Top
// Position it at Bottom, using the list of Windows we created above.
// Fill it with
// a label
// a SubWindow containing (subWinofFV)
// a TextField
// two checkboxes
// a Sub FrameView containing (subFrameViewofFV)
// a TextField
// two CheckBoxes
// a checkbox
// a checkbox
FrameView frame = null;
frame = new FrameView ($"This is a FrameView") {
X = margin,
Y = Pos.Bottom (listWin.Last ()) + (margin / 2),
Width = Dim.Fill (margin),
Height = contentHeight + 2, // 2 for default padding
};
frame.ColorScheme = Colors.Dialog;
frame.Add (new Label ("This is a Label! (Y = 0)") {
X = Pos.Center (),
Y = 0,
ColorScheme = Colors.Error,
//Clicked = () => MessageBox.ErrorQuery (frame.Title, "Neat?", "Yes", "No")
});
var subWinofFV = new Window () {
Title = "This is a Sub-Window",
X = Pos.Percent (0),
Y = 1,
Width = Dim.Percent (50),
Height = Dim.Fill () - 1,
ColorScheme = Colors.Base,
Text = "The Text in the Window",
};
subWinofFV.Add (new TextField ("Edit Me") {
ColorScheme = Colors.Error
});
subWinofFV.Add (new CheckBox ("Check me") { Y = 1 });
subWinofFV.Add (new CheckBox ("Or, Check me") { Y = 2 });
frame.Add (subWinofFV);
var subFrameViewofFV = new FrameView ("this is a Sub-FrameView") {
X = Pos.Percent (50),
Y = 1,
Width = Dim.Percent (100),
Height = Dim.Fill () - 1,
ColorScheme = Colors.Base,
Text = "The Text in the FrameView",
};
subFrameViewofFV.Add (new TextField (0, 0, 15, "Edit Me"));
subFrameViewofFV.Add (new CheckBox ("Check me") { Y = 1 });
// BUGBUG: This checkbox is not shown even though frameViewFV has 3 rows in
// its client area. #522
subFrameViewofFV.Add (new CheckBox ("Or, Check me") { Y = 2 });
frame.Add (new CheckBox ("Btn1 (Y = Pos.AnchorEnd (1))") {
X = 0,
Y = Pos.AnchorEnd (1),
});
CheckBox c = new CheckBox ("Btn2 (Y = Pos.AnchorEnd (1))") {
Y = Pos.AnchorEnd (1),
};
c.X = Pos.AnchorEnd () - (Pos.Right (c) - Pos.Left (c));
frame.Add (c);
frame.Add (subFrameViewofFV);
Application.Top.Add (frame);
listWin.Add (frame);
Application.Top.ColorScheme = Colors.Base;
}
}