using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Terminal.Gui;
namespace UICatalog {
///
/// This Scenario demonstrates how to use Termina.gui's Dim and Pos Layout System.
/// [x] - Using Dim.Fill to fill a window
/// [x] - Using Dim.Fill and Dim.Pos to automatically align controls based on an initial control
/// [ ] - ...
///
[ScenarioMetadata (Name: "Computed Layout", Description: "Demonstrates using the Computed (Dim and Pos) Layout System")]
[ScenarioCategory ("Layout")]
class ComputedLayout : Scenario {
public override void Setup ()
{
//Top.LayoutStyle = LayoutStyle.Computed;
// Demonstrate using Dim to create a horizontal ruler that always measures the parent window's width
// BUGBUG: Dim.Fill returns too big a value sometimes.
const string rule = "|123456789";
var horizontalRuler = new Label ("") {
X = 0,
Y = 0,
Width = Dim.Fill (1), // BUGBUG: I don't think this should be needed; DimFill() should respect container's frame. X does.
ColorScheme = Colors.Error
};
Application.OnResized += () => {
horizontalRuler.Text = rule.Repeat ((int)Math.Ceiling ((double)(horizontalRuler.Bounds.Width) / (double)rule.Length)) [0..(horizontalRuler.Bounds.Width)];
};
Win.Add (horizontalRuler);
// Demonstrate using Dim to create a vertical ruler that always measures the parent window's height
// TODO: Either build a custom control for this or implement linewrap in Label #352
//var verticalRuler = new Label ("") {
// X = 0,
// Y = 0,
// Width = 1,
// Height = Dim.Fill (),
// ColorScheme = Colors.Error
//};
//Application.OnResized += () => {
// verticalRuler.Text = rule.Repeat ((int)Math.Ceiling ((double)(verticalRuler.Bounds.Height) / (double)rule.Length)) [0..(verticalRuler.Bounds.Height)];
//};
//Win.Add (verticalRuler);
// Demonstrate using Dim to create a window that fills the parent with a margin
int margin = 10;
var subWin = new Window ($"Centered Sub Window with {margin} character margin") {
X = Pos.Center(),
Y = 2,
Width = Dim.Fill (margin),
Height = 7
};
Win.Add (subWin);
int i = 1;
string txt = "Resize the terminal to see computed layout in action.";
var labelList = new List