123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- 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 200, 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 (200, 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 Button ("A very long button. Should be wide enough to demo clipping!") {
- X = 3,
- Y = 4,
- Width = 50,
- 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);
- }
- }
- }
|