Files
Terminal.Gui/UICatalog/Scenarios/Scrolling.cs
2020-05-29 08:15:37 -06:00

96 lines
2.9 KiB
C#

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);
}
}
}