|
@@ -0,0 +1,96 @@
|
|
|
+using System;
|
|
|
+using Terminal.Gui;
|
|
|
+
|
|
|
+namespace UICatalog {
|
|
|
+ [ScenarioMetadata (Name: "Scrolling", Description: "Demonstrates ScrollView etc...")]
|
|
|
+ [ScenarioCategory ("Controls")]
|
|
|
+ [ScenarioCategory ("Bug Repro")]
|
|
|
+
|
|
|
+ class Scrolling : Scenario {
|
|
|
+ public override void Setup ()
|
|
|
+ {
|
|
|
+ var label = new Label ("ScrollView (new Rect (2, 2, 50, 20)) with a 100, 100 ContentSize...") {
|
|
|
+ X = 0, Y = 0,
|
|
|
+ ColorScheme = Colors.Dialog
|
|
|
+ };
|
|
|
+ Win.Add (label);
|
|
|
+
|
|
|
+ // BUGBUG: ScrollView only supports Absolute Positioning (#72)
|
|
|
+ var scrollView = new ScrollView (new Rect (2, 2, 50, 20));
|
|
|
+ scrollView.ColorScheme = Colors.TopLevel;
|
|
|
+ scrollView.ContentSize = new Size (100, 100);
|
|
|
+ //ContentOffset = new Point (0, 0),
|
|
|
+ scrollView.ShowVerticalScrollIndicator = true;
|
|
|
+ scrollView.ShowHorizontalScrollIndicator = true;
|
|
|
+
|
|
|
+ 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
|
|
|
+ };
|
|
|
+ scrollView.Add (horizontalRuler);
|
|
|
+ const string vrule = "|\n1\n2\n3\n4\n5\n6\n7\n8\n9\n";
|
|
|
+
|
|
|
+ var verticalRuler = new Label ("") {
|
|
|
+ X = 0,
|
|
|
+ Y = 0,
|
|
|
+ Width = 1,
|
|
|
+ Height = Dim.Fill (),
|
|
|
+ ColorScheme = Colors.Error
|
|
|
+ };
|
|
|
+ scrollView.Add (verticalRuler);
|
|
|
+
|
|
|
+ Application.Resized += (sender, a) => {
|
|
|
+ horizontalRuler.Text = rule.Repeat ((int)Math.Ceiling ((double)(horizontalRuler.Bounds.Width) / (double)rule.Length)) [0..(horizontalRuler.Bounds.Width)];
|
|
|
+ verticalRuler.Text = vrule.Repeat ((int)Math.Ceiling ((double)(verticalRuler.Bounds.Height * 2) / (double)rule.Length)) [0..(verticalRuler.Bounds.Height * 2)];
|
|
|
+ };
|
|
|
+
|
|
|
+ scrollView.Add (new Button ("Press me!") {
|
|
|
+ X = 3,
|
|
|
+ Y = 3,
|
|
|
+ Clicked = () => MessageBox.Query (20, 7, "MessageBox", "Neat?", "Yes", "No")
|
|
|
+ });
|
|
|
+
|
|
|
+ scrollView.Add (new TextField ("This is a test of...") {
|
|
|
+ X = 3,
|
|
|
+ Y = 5,
|
|
|
+ Width = 50,
|
|
|
+ ColorScheme = Colors.Dialog
|
|
|
+ });
|
|
|
+
|
|
|
+ scrollView.Add (new TextField ("... the emergency broadcast sytem.") {
|
|
|
+ X = 3,
|
|
|
+ Y = 10,
|
|
|
+ Width = 50,
|
|
|
+ ColorScheme = Colors.Dialog
|
|
|
+ });
|
|
|
+
|
|
|
+ scrollView.Add (new TextField ("Last line") {
|
|
|
+ X = 3,
|
|
|
+ Y = 99,
|
|
|
+ Width = 50,
|
|
|
+ ColorScheme = Colors.Dialog
|
|
|
+ });
|
|
|
+
|
|
|
+ // Demonstrate AnchorEnd - Button is anchored to bottom/right
|
|
|
+ var anchorButton = new Button ("Bottom Right") {
|
|
|
+ Y = Pos.AnchorEnd () - 1,
|
|
|
+ };
|
|
|
+ // TODO: Use Pos.Width instead of (Right-Left) when implemented (#502)
|
|
|
+ anchorButton.X = Pos.AnchorEnd () - (Pos.Right (anchorButton) - Pos.Left (anchorButton));
|
|
|
+ anchorButton.Clicked = () => {
|
|
|
+ // Ths demonstrates how to have a dynamically sized button
|
|
|
+ // Each time the button is clicked the button's text gets longer
|
|
|
+ // The call to Win.LayoutSubviews causes the Computed layout to
|
|
|
+ // get updated.
|
|
|
+ anchorButton.Text += "!";
|
|
|
+ Win.LayoutSubviews ();
|
|
|
+ };
|
|
|
+ scrollView.Add (anchorButton);
|
|
|
+
|
|
|
+ Win.Add (scrollView);
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|