From 06a636c2b7971db53960b2368d9612b59bcf0dcd Mon Sep 17 00:00:00 2001 From: Tig Date: Sun, 17 Nov 2024 16:33:21 -0700 Subject: [PATCH] Little things. --- Terminal.Gui/View/View.Content.cs | 1 - Terminal.Gui/View/View.ScrollBars.cs | 157 ++++++++------------ Terminal.Gui/View/ViewportSettings.cs | 19 --- Terminal.Gui/Views/ScrollBar/ScrollBar.cs | 17 ++- UICatalog/Scenarios/CharacterMap/CharMap.cs | 144 +++++++----------- UICatalog/Scenarios/Scrolling.cs | 128 +++++++--------- 6 files changed, 180 insertions(+), 286 deletions(-) diff --git a/Terminal.Gui/View/View.Content.cs b/Terminal.Gui/View/View.Content.cs index 968558ca6..719427d70 100644 --- a/Terminal.Gui/View/View.Content.cs +++ b/Terminal.Gui/View/View.Content.cs @@ -218,7 +218,6 @@ public partial class View { // Force set Viewport to cause settings to be applied as needed SetViewport (Viewport); - SetScrollBarsKeepContentInAllViewport (_viewportSettings); } } } diff --git a/Terminal.Gui/View/View.ScrollBars.cs b/Terminal.Gui/View/View.ScrollBars.cs index 24192b303..f7aa971e2 100644 --- a/Terminal.Gui/View/View.ScrollBars.cs +++ b/Terminal.Gui/View/View.ScrollBars.cs @@ -20,32 +20,12 @@ public partial class View _horizontalScrollBar = new (() => CreateScrollBar (Orientation.Horizontal)); } - ///// - ///// Causes the scrollbar associated with to be explicitly created. - ///// - ///// - ///// The built-in scrollbars are lazy-created internally. To enable them, the or - ///// need to be referenced. All this method does is reference the associated property. - ///// - ///// - //public void EnableScrollBar (Orientation orientation) - //{ - // if (orientation == Orientation.Vertical) - // { - // _ = VerticalScrollBar; // Explicitly create the vertical scroll bar - // } - // else - // { - // _ = HorizontalScrollBar; // Explicitly create the horizontal scroll bar - // } - //} - private ScrollBar CreateScrollBar (Orientation orientation) { var scrollBar = new ScrollBar { Orientation = orientation, - Visible = false, // Initially hidden until needed + Visible = false // Initially hidden until needed }; if (orientation == Orientation.Vertical) @@ -59,62 +39,66 @@ public partial class View scrollBar.Initialized += OnScrollBarInitialized; + // Add after setting Initialized event! Padding?.Add (scrollBar); + return scrollBar; } private void ConfigureVerticalScrollBar (ScrollBar scrollBar) { scrollBar.X = Pos.AnchorEnd (); - scrollBar.Height = Dim.Fill (Dim.Func (() => + + scrollBar.Height = Dim.Fill ( + Dim.Func ( + () => { if (_horizontalScrollBar.IsValueCreated) { return _horizontalScrollBar.Value.Visible ? 1 : 0; } + return 0; })); scrollBar.ScrollableContentSize = GetContentSize ().Height; ViewportChanged += (_, _) => - { - scrollBar.VisibleContentSize = Viewport.Height; - scrollBar.Position = Viewport.Y; - }; + { + scrollBar.Position = Viewport.Y; + }; - ContentSizeChanged += (_, _) => - { - scrollBar.ScrollableContentSize = GetContentSize ().Height; - }; + ContentSizeChanged += (_, _) => { scrollBar.ScrollableContentSize = GetContentSize ().Height; }; } private void ConfigureHorizontalScrollBar (ScrollBar scrollBar) { scrollBar.Y = Pos.AnchorEnd (); - scrollBar.Width = Dim.Fill (Dim.Func (() => { + + scrollBar.Width = Dim.Fill ( + Dim.Func ( + () => + { if (_verticalScrollBar.IsValueCreated) { return _verticalScrollBar.Value.Visible ? 1 : 0; } + return 0; })); scrollBar.ScrollableContentSize = GetContentSize ().Width; ViewportChanged += (_, _) => - { - scrollBar.VisibleContentSize = Viewport.Width; - scrollBar.Position = Viewport.X; - }; + { + scrollBar.Position = Viewport.X; + }; - ContentSizeChanged += (_, _) => - { - scrollBar.ScrollableContentSize = GetContentSize ().Width; - }; + ContentSizeChanged += (_, _) => { scrollBar.ScrollableContentSize = GetContentSize ().Width; }; } private void OnScrollBarInitialized (object? sender, EventArgs e) { var scrollBar = (ScrollBar)sender!; + if (scrollBar.Orientation == Orientation.Vertical) { ConfigureVerticalScrollBarEvents (scrollBar); @@ -130,20 +114,20 @@ public partial class View Padding!.Thickness = Padding.Thickness with { Right = scrollBar.Visible ? Padding.Thickness.Right + 1 : 0 }; scrollBar.PositionChanged += (_, args) => - { - Viewport = Viewport with - { - Y = Math.Min (args.CurrentValue, GetContentSize ().Height - Viewport.Height) - }; - }; + { + Viewport = Viewport with + { + Y = Math.Min (args.CurrentValue, scrollBar.ScrollableContentSize - scrollBar.VisibleContentSize) + }; + }; scrollBar.VisibleChanged += (_, _) => - { - Padding.Thickness = Padding.Thickness with - { - Right = scrollBar.Visible ? Padding.Thickness.Right + 1 : Padding.Thickness.Right - 1 - }; - }; + { + Padding.Thickness = Padding.Thickness with + { + Right = scrollBar.Visible ? Padding.Thickness.Right + 1 : Padding.Thickness.Right - 1 + }; + }; } private void ConfigureHorizontalScrollBarEvents (ScrollBar scrollBar) @@ -151,28 +135,40 @@ public partial class View Padding!.Thickness = Padding.Thickness with { Bottom = scrollBar.Visible ? Padding.Thickness.Bottom + 1 : 0 }; scrollBar.PositionChanged += (_, args) => - { - Viewport = Viewport with - { - X = Math.Min (args.CurrentValue, GetContentSize ().Width - Viewport.Width) - }; - }; + { + Viewport = Viewport with + { + X = Math.Min (args.CurrentValue, scrollBar.ScrollableContentSize - scrollBar.VisibleContentSize) + }; + }; scrollBar.VisibleChanged += (_, _) => - { - Padding.Thickness = Padding.Thickness with - { - Bottom = scrollBar.Visible ? Padding.Thickness.Bottom + 1 : Padding.Thickness.Bottom - 1 - }; - }; + { + Padding.Thickness = Padding.Thickness with + { + Bottom = scrollBar.Visible ? Padding.Thickness.Bottom + 1 : Padding.Thickness.Bottom - 1 + }; + }; } /// + /// Gets the horizontal . This property is lazy-loaded and will not be created until it is accessed. /// + /// + /// + /// See for more information on how to use the ScrollBar. + /// + /// public ScrollBar HorizontalScrollBar => _horizontalScrollBar.Value; /// + /// Gets the vertical . This property is lazy-loaded and will not be created until it is accessed. /// + /// + /// + /// See for more information on how to use the ScrollBar. + /// + /// public ScrollBar VerticalScrollBar => _verticalScrollBar.Value; /// @@ -197,39 +193,4 @@ public partial class View _verticalScrollBar.Value.Dispose (); } } - - private void SetScrollBarsKeepContentInAllViewport (ViewportSettings viewportSettings) - { - if (viewportSettings == ViewportSettings.None) - { - //_horizontalScrollBar.Value.KeepContentInAllViewport = true; - //_verticalScrollBar.Value.KeepContentInAllViewport = true; - } - else if (viewportSettings.HasFlag (ViewportSettings.AllowNegativeX)) - { - _horizontalScrollBar.Value.AutoShow = false; - } - else if (viewportSettings.HasFlag (ViewportSettings.AllowNegativeY)) - { - _verticalScrollBar.Value.AutoShow = false; - } - else if (viewportSettings.HasFlag (ViewportSettings.AllowNegativeLocation)) - { - _horizontalScrollBar.Value.AutoShow = false; - _verticalScrollBar.Value.AutoShow = false; - } - else if (viewportSettings.HasFlag (ViewportSettings.AllowXGreaterThanContentWidth)) - { - //_horizontalScrollBar.Value.KeepContentInAllViewport = false; - } - else if (viewportSettings.HasFlag (ViewportSettings.AllowYGreaterThanContentHeight)) - { - //_verticalScrollBar.Value.KeepContentInAllViewport = false; - } - else if (viewportSettings.HasFlag (ViewportSettings.AllowLocationGreaterThanContentSize)) - { - //_horizontalScrollBar.Value.KeepContentInAllViewport = false; - //_verticalScrollBar.Value.KeepContentInAllViewport = false; - } - } } diff --git a/Terminal.Gui/View/ViewportSettings.cs b/Terminal.Gui/View/ViewportSettings.cs index c3cc51ac0..a84899394 100644 --- a/Terminal.Gui/View/ViewportSettings.cs +++ b/Terminal.Gui/View/ViewportSettings.cs @@ -101,23 +101,4 @@ public enum ViewportSettings /// disabled). /// ClearContentOnly = 32, - - /// - /// If set, the vertical scroll bar (see ) will be enabled and automatically made visible - /// when the dimension of the is smaller than the dimension of . - /// - EnableHorizontalScrollBar = 64, - - /// - /// If set, the vertical scroll bar (see ) will be enabled and automatically made visible - /// when the dimension of the is smaller than the dimension of . - /// - EnableVerticalScrollBar = 128, - - /// - /// If set, the horizontal and vertical scroll bars (see cref="View.HorizontalScrollBar"/> and ) - /// will be enabled and automatically made visible when the dimension of the is smaller than the - /// dimension of . - /// - EnableScrollBars = EnableHorizontalScrollBar | EnableVerticalScrollBar } diff --git a/Terminal.Gui/Views/ScrollBar/ScrollBar.cs b/Terminal.Gui/Views/ScrollBar/ScrollBar.cs index dac1f1f0e..6bfe1e760 100644 --- a/Terminal.Gui/Views/ScrollBar/ScrollBar.cs +++ b/Terminal.Gui/Views/ScrollBar/ScrollBar.cs @@ -14,6 +14,9 @@ namespace Terminal.Gui; /// /// /// +/// See the Scrolling Deep Dive. +/// +/// /// By default, the built-in View scrollbars have both and set to /// . /// To enable them, either set set to or explictly set @@ -103,11 +106,11 @@ public class ScrollBar : View, IOrientation, IDesignable if (Orientation == Orientation.Vertical) { - _slider.VisibleContentSize = Viewport.Height; + _slider.VisibleContentSize = VisibleContentSize; } else { - _slider.VisibleContentSize = Viewport.Width; + _slider.VisibleContentSize = VisibleContentSize; } _slider.Size = CalculateSliderSize (); @@ -194,7 +197,7 @@ public class ScrollBar : View, IOrientation, IDesignable #endregion /// - /// Gets or sets the amount each mouse wheel event will incremenet/decrement the . + /// Gets or sets the amount each mouse wheel event, or click on the increment/decrement buttons, will incremenet/decrement the . /// /// /// The default is 1. @@ -249,7 +252,7 @@ public class ScrollBar : View, IOrientation, IDesignable /// . /// /// - /// If not explicitly set, will be the appropriate dimension of the Scroll's Frame. + /// If not explicitly set, the visible content size will be appropriate dimension of the ScrollBar's Frame. /// public int VisibleContentSize { @@ -555,9 +558,9 @@ public class ScrollBar : View, IOrientation, IDesignable } #if PROPORTIONAL_SCROLL_JUMP - // BUGBUG: This logic mostly works to provide a proportional jump. However, the math - // BUGBUG: falls apart in edge cases. Most other scroll bars (e.g. Windows) do not do proportional - // BUGBUG: Thus, this is disabled and we just jump a page each click. + // TODO: This logic mostly works to provide a proportional jump. However, the math + // TODO: falls apart in edge cases. Most other scroll bars (e.g. Windows) do not do proportional + // TODO: Thus, this is disabled; we just jump a page each click. // Ratio of the distance to the viewport dimension double ratio = (double)Math.Abs (distanceFromCenter) / (VisibleContentSize); // Jump size based on the ratio and the total content size diff --git a/UICatalog/Scenarios/CharacterMap/CharMap.cs b/UICatalog/Scenarios/CharacterMap/CharMap.cs index c138d26ff..62ab02f46 100644 --- a/UICatalog/Scenarios/CharacterMap/CharMap.cs +++ b/UICatalog/Scenarios/CharacterMap/CharMap.cs @@ -18,12 +18,13 @@ namespace UICatalog.Scenarios; public class CharMap : View, IDesignable { private const int COLUMN_WIDTH = 3; // Width of each column of glyphs + private const int HEADER_HEIGHT = 1; // Height of the header private int _rowHeight = 1; // Height of each row of 16 glyphs - changing this is not tested private ContextMenu _contextMenu = new (); /// - /// Initalizes a new instance. + /// Initializes a new instance. /// public CharMap () { @@ -75,7 +76,7 @@ public class CharMap : View, IDesignable Command.PageUp, () => { - int page = (Viewport.Height - 1 / _rowHeight) * 16; + int page = (Viewport.Height - HEADER_HEIGHT / _rowHeight) * 16; SelectedCodePoint -= page; return true; @@ -86,7 +87,7 @@ public class CharMap : View, IDesignable Command.PageDown, () => { - int page = (Viewport.Height - 1 / _rowHeight) * 16; + int page = (Viewport.Height - HEADER_HEIGHT / _rowHeight) * 16; SelectedCodePoint += page; return true; @@ -135,120 +136,92 @@ public class CharMap : View, IDesignable MouseClick += Handle_MouseClick; MouseEvent += Handle_MouseEvent; - // Add scrollbars - Padding!.Thickness = new (0, 0, 1, 0); - - SetContentSize (new (COLUMN_WIDTH * 16 + RowLabelWidth, MAX_CODE_POINT / 16 * _rowHeight + 1)); // +1 for Header + SetContentSize (new (COLUMN_WIDTH * 16 + RowLabelWidth, MAX_CODE_POINT / 16 * _rowHeight + HEADER_HEIGHT)); + // Set up the horizontal scrollbar. Turn off AutoShow since we do it manually. HorizontalScrollBar.AutoShow = false; HorizontalScrollBar.Increment = COLUMN_WIDTH; + + // This prevents scrolling past the last column HorizontalScrollBar.ScrollableContentSize = GetContentSize ().Width - RowLabelWidth; HorizontalScrollBar.X = RowLabelWidth; HorizontalScrollBar.Y = Pos.AnchorEnd (); HorizontalScrollBar.Width = Dim.Fill (1); - VerticalScrollBar.AutoShow = false; - VerticalScrollBar.Visible = true; - VerticalScrollBar.ScrollableContentSize = GetContentSize ().Height; - VerticalScrollBar.X = Pos.AnchorEnd (); - VerticalScrollBar.Y = 1; // Header - VerticalScrollBar.Height = Dim.Fill (Dim.Func (() => Padding.Thickness.Bottom)); - - //VerticalScrollBar.PositionChanged += (sender, args) => - // { - // if (Viewport.Height > 0) - // { - // Viewport = Viewport with - // { - // Y = Math.Min (args.CurrentValue, GetContentSize ().Height - (Viewport.Height - 1)) - // }; - // } - // }; - - //HorizontalScrollBar.PositionChanged += (sender, args) => - // { - // if (Viewport.Width > 0) - // { - // Viewport = Viewport with - // { - // X = Math.Min (args.CurrentValue, GetContentSize ().Width - Viewport.Width) - // }; - // } - // }; - + // We want the horizontal scrollbar to only show when needed. + // We can't use ScrollBar.AutoShow because we are using custom ContentSize + // So, we do it manually on ViewportChanged events. ViewportChanged += (sender, args) => - { - if (Viewport.Width < GetContentSize ().Width) - { - HorizontalScrollBar.Visible = true; - } - else - { - HorizontalScrollBar.Visible = false; - } + { + if (Viewport.Width < GetContentSize ().Width) + { + HorizontalScrollBar.Visible = true; + } + else + { + HorizontalScrollBar.Visible = false; + } + }; - VerticalScrollBar.VisibleContentSize = Viewport.Height - 1; - HorizontalScrollBar.VisibleContentSize = Viewport.Width - RowLabelWidth; - }; + // Set up the vertical scrollbar. Turn off AutoShow since it's always visible. + VerticalScrollBar.AutoShow = false; + VerticalScrollBar.Visible = true; // Force always visible + VerticalScrollBar.X = Pos.AnchorEnd (); + VerticalScrollBar.Y = HEADER_HEIGHT; // Header } - private void ScrollToMakeCursorVisible (Point newCursor) + private void ScrollToMakeCursorVisible (Point offsetToNewCursor) { // Adjust vertical scrolling - if (newCursor.Y < 1) // Header is at Y = 0 + if (offsetToNewCursor.Y < 1) // Header is at Y = 0 { - ScrollVertical (newCursor.Y - 1); + ScrollVertical (offsetToNewCursor.Y - HEADER_HEIGHT); } - else if (newCursor.Y >= Viewport.Height) + else if (offsetToNewCursor.Y >= Viewport.Height) { - ScrollVertical (newCursor.Y - Viewport.Height + 1); + ScrollVertical (offsetToNewCursor.Y - Viewport.Height + HEADER_HEIGHT); } // Adjust horizontal scrolling - if (newCursor.X < RowLabelWidth + 1) + if (offsetToNewCursor.X < RowLabelWidth + 1) { - ScrollHorizontal (newCursor.X - (RowLabelWidth + 1)); + ScrollHorizontal (offsetToNewCursor.X - (RowLabelWidth + 1)); } - else if (newCursor.X >= Viewport.Width) + else if (offsetToNewCursor.X >= Viewport.Width) { - ScrollHorizontal (newCursor.X - Viewport.Width + 1); + ScrollHorizontal (offsetToNewCursor.X - Viewport.Width + 1); } - - //VerticalScrollBar.Position = Viewport.Y; - //HorizontalScrollBar.Position = Viewport.X; } #region Cursor - /// Gets or sets the coordinates of the Cursor based on the SelectedCodePoint in Viewport-relative coordinates - public Point Cursor + private Point GetCursor (int codePoint) { - get - { - int row = SelectedCodePoint / 16 * _rowHeight + 1 - Viewport.Y; // + 1 for header - int col = SelectedCodePoint % 16 * COLUMN_WIDTH + RowLabelWidth + 1 - Viewport.X; // + 1 for padding between label and first column + // + 1 for padding between label and first column + int x = codePoint % 16 * COLUMN_WIDTH + RowLabelWidth + 1 - Viewport.X; + int y = codePoint / 16 * _rowHeight + HEADER_HEIGHT - Viewport.Y; - return new (col, row); - } - set => throw new NotImplementedException (); + return new (x, y); } public override Point? PositionCursor () { + Point cursor = GetCursor (SelectedCodePoint); + if (HasFocus - && Cursor.X >= RowLabelWidth - && Cursor.X < Viewport.Width - && Cursor.Y > 0 - && Cursor.Y < Viewport.Height) + && cursor.X >= RowLabelWidth + && cursor.X < Viewport.Width + && cursor.Y > 0 + && cursor.Y < Viewport.Height) { - Move (Cursor.X, Cursor.Y); + Move (cursor.X, cursor.Y); } else { return null; } - return Cursor; + return cursor; } #endregion Cursor @@ -274,16 +247,12 @@ public class CharMap : View, IDesignable int newSelectedCodePoint = Math.Clamp (value, 0, MAX_CODE_POINT); - Point newCursor = new () - { - X = newSelectedCodePoint % 16 * COLUMN_WIDTH + RowLabelWidth + 1 - Viewport.X, - Y = newSelectedCodePoint / 16 * _rowHeight + 1 - Viewport.Y - }; + Point offsetToNewCursor = GetCursor (newSelectedCodePoint); _selectedCodepoint = newSelectedCodePoint; // Ensure the new cursor position is visible - ScrollToMakeCursorVisible (newCursor); + ScrollToMakeCursorVisible (offsetToNewCursor); SetNeedsDraw (); SelectedCodePointChanged?.Invoke (this, new (SelectedCodePoint)); @@ -336,8 +305,8 @@ public class CharMap : View, IDesignable return true; } - int cursorCol = Cursor.X + Viewport.X - RowLabelWidth - 1; - int cursorRow = Cursor.Y + Viewport.Y - 1; + int cursorCol = GetCursor (SelectedCodePoint).X + Viewport.X - RowLabelWidth - 1; + int cursorRow = GetCursor (SelectedCodePoint).Y + Viewport.Y - 1; SetAttribute (GetHotNormalColor ()); Move (0, 0); @@ -504,7 +473,6 @@ public class CharMap : View, IDesignable if (e.Flags == MouseFlags.WheeledDown) { ScrollVertical (1); -// _vScrollBar.Position = Viewport.Y; e.Handled = true; return; @@ -513,7 +481,6 @@ public class CharMap : View, IDesignable if (e.Flags == MouseFlags.WheeledUp) { ScrollVertical (-1); - // _vScrollBar.Position = Viewport.Y; e.Handled = true; return; @@ -522,7 +489,6 @@ public class CharMap : View, IDesignable if (e.Flags == MouseFlags.WheeledRight) { ScrollHorizontal (1); - // _hScrollBar.Position = Viewport.X; e.Handled = true; return; @@ -531,7 +497,6 @@ public class CharMap : View, IDesignable if (e.Flags == MouseFlags.WheeledLeft) { ScrollHorizontal (-1); - // _hScrollBar.Position = Viewport.X; e.Handled = true; } } @@ -545,12 +510,12 @@ public class CharMap : View, IDesignable if (me.Position.Y == 0) { - me.Position = me.Position with { Y = Cursor.Y }; + me.Position = me.Position with { Y = GetCursor (SelectedCodePoint).Y }; } if (me.Position.X < RowLabelWidth || me.Position.X > RowLabelWidth + 16 * COLUMN_WIDTH - 1) { - me.Position = me.Position with { X = Cursor.X }; + me.Position = me.Position with { X = GetCursor (SelectedCodePoint).X }; } int row = (me.Position.Y - 1 - -Viewport.Y) / _rowHeight; // -1 for header @@ -659,6 +624,7 @@ public class CharMap : View, IDesignable Height = Dim.Fill (3), TextAlignment = Alignment.Center }; + var spinner = new SpinnerView { X = Pos.Center (), diff --git a/UICatalog/Scenarios/Scrolling.cs b/UICatalog/Scenarios/Scrolling.cs index ef79b7a67..6c6662163 100644 --- a/UICatalog/Scenarios/Scrolling.cs +++ b/UICatalog/Scenarios/Scrolling.cs @@ -15,7 +15,7 @@ public class Scrolling : Scenario var app = new Window { - Title = GetQuitKeyAndName (), + Title = GetQuitKeyAndName () }; var label = new Label { X = 0, Y = 0 }; @@ -27,7 +27,7 @@ public class Scrolling : Scenario X = 2, Y = Pos.Bottom (label) + 1, Width = 60, - Height = 20, + Height = 20 }; demoView.SetContentSize (new (80, 25)); @@ -35,10 +35,10 @@ public class Scrolling : Scenario $"{demoView}\nContentSize: {demoView.GetContentSize ()}\nViewport.Location: {demoView.Viewport.Location}"; demoView.ViewportChanged += (_, _) => - { - label.Text = - $"{demoView}\nContentSize: {demoView.GetContentSize ()}\nViewport.Location: {demoView.Viewport.Location}"; - }; + { + label.Text = + $"{demoView}\nContentSize: {demoView.GetContentSize ()}\nViewport.Location: {demoView.Viewport.Location}"; + }; app.Add (demoView); @@ -54,10 +54,7 @@ public class Scrolling : Scenario CheckedState = demoView.HorizontalScrollBar.Visible ? CheckState.Checked : CheckState.UnChecked }; app.Add (hCheckBox); - hCheckBox.CheckedStateChanged += (sender, args) => - { - demoView.HorizontalScrollBar.Visible = args.CurrentValue == CheckState.Checked; - }; + hCheckBox.CheckedStateChanged += (sender, args) => { demoView.HorizontalScrollBar.Visible = args.CurrentValue == CheckState.Checked; }; //// NOTE: This call to EnableScrollBar is technically not needed because the reference //// NOTE: to demoView.HorizontalScrollBar below will cause it to be lazy created. @@ -71,35 +68,29 @@ public class Scrolling : Scenario CheckedState = demoView.VerticalScrollBar.Visible ? CheckState.Checked : CheckState.UnChecked }; app.Add (vCheckBox); - vCheckBox.CheckedStateChanged += (sender, args) => - { - demoView.VerticalScrollBar.Visible = args.CurrentValue == CheckState.Checked; - }; + vCheckBox.CheckedStateChanged += (sender, args) => { demoView.VerticalScrollBar.Visible = args.CurrentValue == CheckState.Checked; }; var ahCheckBox = new CheckBox { X = Pos.Left (demoView), Y = Pos.Bottom (hCheckBox), - Text = "_AutoHide (both)", + Text = "_AutoShow (both)", CheckedState = demoView.HorizontalScrollBar.AutoShow ? CheckState.Checked : CheckState.UnChecked }; ahCheckBox.CheckedStateChanging += (s, e) => - { - demoView.HorizontalScrollBar.AutoShow = e.NewValue == CheckState.Checked; - demoView.VerticalScrollBar.AutoShow = e.NewValue == CheckState.Checked; - }; + { + demoView.HorizontalScrollBar.AutoShow = e.NewValue == CheckState.Checked; + demoView.VerticalScrollBar.AutoShow = e.NewValue == CheckState.Checked; + }; app.Add (ahCheckBox); - demoView.VerticalScrollBar.VisibleChanging += (sender, args) => - { - vCheckBox.CheckedState = args.NewValue ? CheckState.Checked : CheckState.UnChecked; - }; + demoView.VerticalScrollBar.VisibleChanging += (sender, args) => { vCheckBox.CheckedState = args.NewValue ? CheckState.Checked : CheckState.UnChecked; }; demoView.HorizontalScrollBar.VisibleChanging += (sender, args) => - { - hCheckBox.CheckedState = args.NewValue ? CheckState.Checked : CheckState.UnChecked; - }; + { + hCheckBox.CheckedState = args.NewValue ? CheckState.Checked : CheckState.UnChecked; + }; var count = 0; @@ -130,19 +121,16 @@ public class Scrolling : Scenario Application.AddTimeout (TimeSpan.FromMilliseconds (300), timer); - app.Unloaded += app_Unloaded; + app.Unloaded += AppUnloaded; Application.Run (app); - app.Unloaded -= app_Unloaded; + app.Unloaded -= AppUnloaded; app.Dispose (); Application.Shutdown (); return; - void app_Unloaded (object sender, EventArgs args) - { - pulsing = false; - } + void AppUnloaded (object sender, EventArgs args) { pulsing = false; } } } @@ -154,18 +142,17 @@ public class DemoView : View CanFocus = true; BorderStyle = LineStyle.Heavy; Arrangement = ViewArrangement.Resizable; - Initialized += OnInitialized; - - + HorizontalScrollBar.AutoShow = true; + VerticalScrollBar.AutoShow = true; } private void OnInitialized (object sender, EventArgs e) { - View rulerView = new View () + var rulerView = new View { Height = Dim.Fill (), - Width = Dim.Fill (), + Width = Dim.Fill () }; rulerView.Border!.Thickness = new (1); rulerView.Border.LineStyle = LineStyle.None; @@ -174,7 +161,6 @@ public class DemoView : View Add (rulerView); - var pressMeButton = new Button { X = 1, @@ -195,37 +181,37 @@ public class DemoView : View Add (aLongButton); Add ( - new TextField - { - X = Pos.Left (pressMeButton), - Y = Pos.Bottom (aLongButton) + 1, - Width = 50, - ColorScheme = Colors.ColorSchemes ["Dialog"], - Text = "This is a test of..." - } - ); + new TextField + { + X = Pos.Left (pressMeButton), + Y = Pos.Bottom (aLongButton) + 1, + Width = 50, + ColorScheme = Colors.ColorSchemes ["Dialog"], + Text = "This is a test of..." + } + ); Add ( - new TextField - { - X = Pos.Left (pressMeButton), - Y = Pos.Bottom (aLongButton) + 3, - Width = 50, - ColorScheme = Colors.ColorSchemes ["Dialog"], - Text = "... the emergency broadcast system." - } - ); + new TextField + { + X = Pos.Left (pressMeButton), + Y = Pos.Bottom (aLongButton) + 3, + Width = 50, + ColorScheme = Colors.ColorSchemes ["Dialog"], + Text = "... the emergency broadcast system." + } + ); Add ( - new TextField - { - X = Pos.Left (pressMeButton), - Y = 40, - Width = 50, - ColorScheme = Colors.ColorSchemes ["Error"], - Text = "Last line" - } - ); + new TextField + { + X = Pos.Left (pressMeButton), + Y = 40, + Width = 50, + ColorScheme = Colors.ColorSchemes ["Error"], + Text = "Last line" + } + ); // Demonstrate AnchorEnd - Button is anchored to bottom/right var anchorButton = new Button @@ -236,13 +222,11 @@ public class DemoView : View }; anchorButton.Accepting += (s, e) => - { - // This demonstrates how to have a dynamically sized button - // Each time the button is clicked the button's text gets longer - anchorButton.Text += "!"; - - }; + { + // This demonstrates how to have a dynamically sized button + // Each time the button is clicked the button's text gets longer + anchorButton.Text += "!"; + }; Add (anchorButton); - } }