Files
Terminal.Gui/UICatalog/Scenarios/WindowsAndFrameViews.cs
Charlie Kindel 1024f073b2 Fixing many clipping issues (#580)
* almost got clip rect working

* fixes many bugs related to clipping incl #399

* Merge tweaks.
2020-05-29 17:41:49 -06:00

178 lines
4.7 KiB
C#

using System.Collections.Generic;
using System.Linq;
using Terminal.Gui;
namespace UICatalog {
[ScenarioMetadata (Name: "Windows & FrameViews", Description: "Shows Windows, sub-Windows, FrameViews, and how TAB doesn't work right (#434, #522)")]
[ScenarioCategory ("Views")]
[ScenarioCategory ("Layout")]
[ScenarioCategory ("Bug Repro")]
class WindowsAndFrameViews : Scenario {
public override void Init (Toplevel top)
{
Application.Init ();
Top = top;
if (Top == null) {
Top = Application.Top;
}
}
public override void RequestStop ()
{
base.RequestStop ();
}
public override void Run ()
{
base.Run ();
}
public override void Setup ()
{
static int About ()
{
//return MessageBox.Query (50, 10, "About UI Catalog", "UI Catalog is a comprehensive sample library for Terminal.Gui", "Ok")
var about = new Window (new Rect (0, 0, 50, 10), "About UI catalog", 0) {
X = Pos.Center (),
Y = Pos.Center (),
Width = 50,
Height = 10,
LayoutStyle = LayoutStyle.Computed,
ColorScheme = Colors.Error,
};
//about.Add (new Label ("UI Catalog is a comprehensive sample library for Terminal.Gui"));
Application.Run (about);
return 0;
}
int margin = 2;
int padding = 1;
int contentHeight = 7;
var listWin = new List<View> ();
Win = new Window ($"{listWin.Count} - Scenario: {GetName ()}", padding) {
X = Pos.Center (),
Y = 1,
Width = Dim.Fill (10),
Height = Dim.Percent (15)
};
Win.ColorScheme = Colors.Dialog;
Win.Add (new Button ($"Padding of container is {padding}") {
X = Pos.Center (),
Y = 0,
ColorScheme = Colors.Error,
Clicked = () => About()
});
Win.Add (new Button ("Press ME! (Y = Pos.AnchorEnd(1))") {
X = Pos.Center (),
Y = Pos.AnchorEnd(1),
ColorScheme = Colors.Error
});
Top.Add (Win);
listWin.Add (Win);
for (var i = 0; i < 3; i++) {
Window win = null;
win = new Window ($"{listWin.Count} - Window Loop - padding = {i}", i) {
X = margin,
Y = Pos.Bottom (listWin.Last ()) + (margin),
Width = Dim.Fill (margin),
Height = contentHeight + (i*2) + 2,
};
win.ColorScheme = Colors.Dialog;
win.Add (new Button ("Press me! (Y = 0)") {
X = Pos.Center (),
Y = 0,
ColorScheme = Colors.Error,
Clicked = () => MessageBox.ErrorQuery (30, 10, win.Title.ToString (), "Neat?", "Yes", "No")
});
var subWin = new Window ("Sub Window") {
X = Pos.Percent (0),
Y = 1,
Width = Dim.Percent (50),
Height = 5,
ColorScheme = Colors.Base,
};
subWin.Add (new TextField (win.Title.ToString ()) {
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),
Height = 5,
ColorScheme = Colors.Base,
};
frameView.Add (new TextField ("Edit Me"));
win.Add (frameView);
Top.Add (win);
listWin.Add (win);
}
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 (30, 10, frame.Title.ToString (), "Neat?", "Yes", "No")
});
var subWinofFV = new Window ("this is a Sub-Window") {
X = Pos.Percent (0),
Y = 1,
Width = Dim.Percent (50),
Height = Dim.Fill () - 1,
ColorScheme = Colors.Base,
};
subWinofFV.Add (new TextField ("Edit Me") {
ColorScheme = Colors.Error
});
subWinofFV.Add (new CheckBox (0, 1, "Check me"));
subWinofFV.Add (new CheckBox (0, 2, "Or, Check me"));
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,
};
subFrameViewofFV.Add (new TextField ("Edit Me"));
subFrameViewofFV.Add (new CheckBox (0, 1, "Check me"));
// BUGBUG: This checkbox is not shown even though frameViewFV has 3 rows in
// its client area. #522
subFrameViewofFV.Add (new CheckBox (0, 2, "Or, Check me"));
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);
Top.Add (frame);
listWin.Add (frame);
}
}
}