diff --git a/UICatalog/Scenarios/ComputedLayout.cs b/UICatalog/Scenarios/ComputedLayout.cs new file mode 100644 index 000000000..ad5c346b2 --- /dev/null +++ b/UICatalog/Scenarios/ComputedLayout.cs @@ -0,0 +1,125 @@ +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