From fb1a3e03f35cd724486b5fd97a1dc5c9666c742f Mon Sep 17 00:00:00 2001 From: Tig Date: Sun, 14 Dec 2025 17:31:57 -0700 Subject: [PATCH] Fixes some bugs in the `Scenario/EditorsAndHelpers` and backports `WideGlyphs` (#4494) * Fix scenario editors and tweak scenarios. Enhance ShadowStyles with a second shadow window (transparent style) and a button event handler that shows a message box. In WideGlyphs, add AdornmentsEditor and ViewportSettingsEditor for view property editing, apply custom color schemes to arrangeable views, and update superView with a transparent shadow and increased shadow width. These changes improve interactivity and visualization in the demo scenarios. * Fix scenario editors and tweak scenarios. Enhance ShadowStyles with a second shadow window (transparent style) and a button event handler that shows a message box. In WideGlyphs, add AdornmentsEditor and ViewportSettingsEditor for view property editing, apply custom color schemes to arrangeable views, and update superView with a transparent shadow and increased shadow width. These changes improve interactivity and visualization in the demo scenarios. * Scenario Editors code cleanup & latent bug fixes. Refactored event handler patterns to use correct sender values and discards for unused parameters, aligning with .NET conventions. Cleaned up code by removing redundant usings and comments, and clarified logic in property setters and switch statements. Enhanced robustness and clarity in editor components, fixing issues with value changes, event subscriptions, and nullability. Improved disposal logic in EditorBase and made minor UI and label adjustments. Added "diag" to the custom dictionary. These changes modernize event handling and address subtle bugs in the UICatalog editors. * code cleanup * Update Examples/UICatalog/Scenarios/EditorsAndHelpers/EditorBase.cs Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * PR feedback. --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- Examples/UICatalog/Scenarios/Adornments.cs | 1 + .../EditorsAndHelpers/AdornmentEditor.cs | 37 ++++--- .../EditorsAndHelpers/AdornmentsEditor.cs | 17 +-- .../EditorsAndHelpers/AllViewsView.cs | 19 +--- .../EditorsAndHelpers/BorderEditor.cs | 49 +++++---- .../Scenarios/EditorsAndHelpers/DimEditor.cs | 71 ++++++------ .../Scenarios/EditorsAndHelpers/EditorBase.cs | 51 ++++----- .../Scenarios/EditorsAndHelpers/EventLog.cs | 4 +- .../EditorsAndHelpers/ExpanderButton.cs | 20 ++-- .../EditorsAndHelpers/LayoutEditor.cs | 5 - .../EditorsAndHelpers/MarginEditor.cs | 17 +-- .../Scenarios/EditorsAndHelpers/PosEditor.cs | 9 +- .../EditorsAndHelpers/ViewPropertiesEditor.cs | 30 ++--- .../ViewportSettingsEditor.cs | 104 +++++++++--------- Examples/UICatalog/Scenarios/ShadowStyles.cs | 27 ++++- .../UICatalog/Scenarios/ViewportSettings.cs | 2 + Examples/UICatalog/Scenarios/WideGlyphs.cs | 37 ++++++- Terminal.Gui/App/ApplicationImpl.Run.cs | 2 +- Terminal.Gui/App/ApplicationNavigation.cs | 2 +- Terminal.Gui/App/CWP/CWPEventHelper.cs | 1 + Terminal.Gui/App/CWP/CWPPropertyHelper.cs | 6 +- Terminal.Gui/App/CWP/CWPWorkflowHelper.cs | 2 + Terminal.Gui/App/Keyboard/KeyboardImpl.cs | 4 +- Terminal.Gui/App/Mouse/MouseImpl.cs | 2 +- Terminal.sln.DotSettings | 1 + 25 files changed, 269 insertions(+), 251 deletions(-) diff --git a/Examples/UICatalog/Scenarios/Adornments.cs b/Examples/UICatalog/Scenarios/Adornments.cs index 6dd491f65..453ee2478 100644 --- a/Examples/UICatalog/Scenarios/Adornments.cs +++ b/Examples/UICatalog/Scenarios/Adornments.cs @@ -19,6 +19,7 @@ public class Adornments : Scenario var editor = new AdornmentsEditor { + BorderStyle = LineStyle.Single, AutoSelectViewToEdit = true, // This is for giggles, to show that the editor can be moved around. diff --git a/Examples/UICatalog/Scenarios/EditorsAndHelpers/AdornmentEditor.cs b/Examples/UICatalog/Scenarios/EditorsAndHelpers/AdornmentEditor.cs index 907cbb42e..f4339b801 100644 --- a/Examples/UICatalog/Scenarios/EditorsAndHelpers/AdornmentEditor.cs +++ b/Examples/UICatalog/Scenarios/EditorsAndHelpers/AdornmentEditor.cs @@ -1,6 +1,4 @@ #nullable enable -using System; - namespace UICatalog.Scenarios; /// @@ -57,11 +55,13 @@ public class AdornmentEditor : EditorBase _bottomEdit!.Value = _adornment.Thickness.Bottom; _rightEdit!.Value = _adornment.Thickness.Right; - _adornment.Initialized += (sender, args) => + _adornment.Initialized += (_, _) => { - Scheme? cs = _adornment.GetScheme (); - _foregroundColorPicker.SelectedColor = _adornment.GetAttributeForRole (VisualRole.Normal).Foreground.GetClosestNamedColor16 (); - _backgroundColorPicker.SelectedColor = _adornment.GetAttributeForRole (VisualRole.Normal).Background.GetClosestNamedColor16 (); + _foregroundColorPicker.SelectedColor = + _adornment.GetAttributeForRole (VisualRole.Normal).Foreground.GetClosestNamedColor16 (); + + _backgroundColorPicker.SelectedColor = + _adornment.GetAttributeForRole (VisualRole.Normal).Background.GetClosestNamedColor16 (); }; } @@ -125,12 +125,12 @@ public class AdornmentEditor : EditorBase _bottomEdit.ValueChanging += Bottom_ValueChanging; Add (_bottomEdit); - var copyTop = new Button + Button copyTop = new () { X = Pos.Center (), Y = Pos.Bottom (_bottomEdit), Text = "Cop_y Top" }; - copyTop.Accepting += (s, e) => + copyTop.Accepting += (_, _) => { AdornmentToEdit!.Thickness = new (_topEdit.Value); _leftEdit.Value = _rightEdit.Value = _bottomEdit.Value = _topEdit.Value; @@ -168,9 +168,9 @@ public class AdornmentEditor : EditorBase _diagThicknessCheckBox.CheckedState = Diagnostics.FastHasFlags (ViewDiagnosticFlags.Thickness) ? CheckState.Checked : CheckState.UnChecked; } - _diagThicknessCheckBox.CheckedStateChanging += (s, e) => + _diagThicknessCheckBox.CheckedStateChanging += (_, args) => { - if (e.Result == CheckState.Checked) + if (args.Result == CheckState.Checked) { AdornmentToEdit!.Diagnostics |= ViewDiagnosticFlags.Thickness; } @@ -194,9 +194,9 @@ public class AdornmentEditor : EditorBase _diagRulerCheckBox.CheckedState = Diagnostics.FastHasFlags (ViewDiagnosticFlags.Ruler) ? CheckState.Checked : CheckState.UnChecked; } - _diagRulerCheckBox.CheckedStateChanging += (s, e) => + _diagRulerCheckBox.CheckedStateChanging += (_, args) => { - if (e.Result == CheckState.Checked) + if (args.Result == CheckState.Checked) { AdornmentToEdit!.Diagnostics |= ViewDiagnosticFlags.Ruler; } @@ -212,18 +212,19 @@ public class AdornmentEditor : EditorBase private EventHandler> ColorPickerColorChanged () { - return (o, a) => + return (_, _) => { if (AdornmentToEdit is null) { return; } - AdornmentToEdit.SetScheme (new (AdornmentToEdit.GetScheme ()) - { - Normal = new (_foregroundColorPicker.SelectedColor, _backgroundColorPicker.SelectedColor) - }) - ; + AdornmentToEdit.SetScheme ( + new (AdornmentToEdit.GetScheme ()) + { + Normal = new (_foregroundColorPicker.SelectedColor, _backgroundColorPicker.SelectedColor) + }) + ; }; } diff --git a/Examples/UICatalog/Scenarios/EditorsAndHelpers/AdornmentsEditor.cs b/Examples/UICatalog/Scenarios/EditorsAndHelpers/AdornmentsEditor.cs index 30c3ffda4..b65169f5d 100644 --- a/Examples/UICatalog/Scenarios/EditorsAndHelpers/AdornmentsEditor.cs +++ b/Examples/UICatalog/Scenarios/EditorsAndHelpers/AdornmentsEditor.cs @@ -14,8 +14,6 @@ public class AdornmentsEditor : EditorBase TabStop = TabBehavior.TabGroup; - ExpanderButton!.Orientation = Orientation.Horizontal; - Initialized += AdornmentsEditor_Initialized; SchemeName = "Dialog"; @@ -28,8 +26,6 @@ public class AdornmentsEditor : EditorBase /// protected override void OnViewToEditChanged () { - //Enabled = ViewToEdit is not Adornment; - if (MarginEditor is { }) { MarginEditor.AdornmentToEdit = ViewToEdit?.Margin ?? null; @@ -47,7 +43,7 @@ public class AdornmentsEditor : EditorBase if (Padding is { }) { - Padding.Text = $"View: {GetIdentifyingString (ViewToEdit)}"; + Padding.Text = GetIdentifyingString (ViewToEdit); } } @@ -92,12 +88,17 @@ public class AdornmentsEditor : EditorBase private void AdornmentsEditor_Initialized (object? sender, EventArgs e) { + if (ExpanderButton is { }) + { + ExpanderButton.Orientation = Orientation.Horizontal; + } + MarginEditor = new () { X = -1, Y = 0, SuperViewRendersLineCanvas = true, - BorderStyle = LineStyle.Single + BorderStyle = BorderStyle }; MarginEditor.Border!.Thickness = MarginEditor.Border!.Thickness with { Bottom = 0 }; Add (MarginEditor); @@ -107,7 +108,7 @@ public class AdornmentsEditor : EditorBase X = Pos.Left (MarginEditor), Y = Pos.Bottom (MarginEditor), SuperViewRendersLineCanvas = true, - BorderStyle = LineStyle.Single + BorderStyle = BorderStyle }; BorderEditor.Border!.Thickness = BorderEditor.Border!.Thickness with { Bottom = 0 }; Add (BorderEditor); @@ -117,7 +118,7 @@ public class AdornmentsEditor : EditorBase X = Pos.Left (BorderEditor), Y = Pos.Bottom (BorderEditor), SuperViewRendersLineCanvas = true, - BorderStyle = LineStyle.Single + BorderStyle = BorderStyle }; PaddingEditor.Border!.Thickness = PaddingEditor.Border!.Thickness with { Bottom = 0 }; Add (PaddingEditor); diff --git a/Examples/UICatalog/Scenarios/EditorsAndHelpers/AllViewsView.cs b/Examples/UICatalog/Scenarios/EditorsAndHelpers/AllViewsView.cs index f8f78ac6f..b495cc200 100644 --- a/Examples/UICatalog/Scenarios/EditorsAndHelpers/AllViewsView.cs +++ b/Examples/UICatalog/Scenarios/EditorsAndHelpers/AllViewsView.cs @@ -77,7 +77,7 @@ public class AllViewsView : View View? previousView = null; - foreach (Type? type in allClasses) + foreach (Type type in allClasses) { View? view = CreateView (type); @@ -118,15 +118,8 @@ public class AllViewsView : View // Check if the generic parameter has constraints Type [] constraints = arg.GetGenericParameterConstraints (); - if (constraints.Length > 0) - { - // Use the first constraint type to satisfy the constraint - typeArguments.Add (constraints [0]); - } - else - { - typeArguments.Add (typeof (object)); - } + // Use the first constraint type to satisfy the constraint + typeArguments.Add (constraints.Length > 0 ? constraints [0] : typeof (object)); } } @@ -193,17 +186,17 @@ public class AllViewsView : View return; } - if (view.Width == Dim.Absolute (0) || view.Width is null) + if (view.Width == Dim.Absolute (0)) { view.Width = Dim.Fill (); } - if (view.Height == Dim.Absolute (0) || view.Height is null) + if (view.Height == Dim.Absolute (0)) { view.Height = MAX_VIEW_FRAME_HEIGHT - 2; } - if (!view.Width!.Has (out _)) + if (!view.Width.Has (out _)) { view.Width = Dim.Fill (); } diff --git a/Examples/UICatalog/Scenarios/EditorsAndHelpers/BorderEditor.cs b/Examples/UICatalog/Scenarios/EditorsAndHelpers/BorderEditor.cs index ca962eb30..9f1f799cc 100644 --- a/Examples/UICatalog/Scenarios/EditorsAndHelpers/BorderEditor.cs +++ b/Examples/UICatalog/Scenarios/EditorsAndHelpers/BorderEditor.cs @@ -1,7 +1,6 @@ #nullable enable -using System; -using System.Collections.Generic; -using System.Linq; +using System.Reflection; +using Terminal.Gui.ViewBase; namespace UICatalog.Scenarios; @@ -33,10 +32,10 @@ public class BorderEditor : AdornmentEditor Y = Pos.Bottom (SubViews.ToArray () [^1]), Width = Dim.Fill (), - Value = ((Border)AdornmentToEdit!)?.LineStyle ?? LineStyle.None, + Value = (AdornmentToEdit as Border)?.LineStyle ?? LineStyle.None, BorderStyle = LineStyle.Single, Title = "Border St_yle", - SuperViewRendersLineCanvas = true, + SuperViewRendersLineCanvas = true }; Add (_osBorderStyle); @@ -49,7 +48,7 @@ public class BorderEditor : AdornmentEditor CheckedState = CheckState.Checked, SuperViewRendersLineCanvas = true, - Text = "Title", + Text = "Title" }; _ckbTitle.CheckedStateChanging += OnCkbTitleOnToggle; @@ -62,7 +61,7 @@ public class BorderEditor : AdornmentEditor CheckedState = CheckState.Checked, SuperViewRendersLineCanvas = true, - Text = "Gradient", + Text = "Gradient" }; _ckbGradient.CheckedStateChanging += OnCkbGradientOnToggle; @@ -72,51 +71,55 @@ public class BorderEditor : AdornmentEditor void OnRbBorderStyleOnValueChanged (object? s, EventArgs args) { - LineStyle prevBorderStyle = AdornmentToEdit!.BorderStyle; + if (AdornmentToEdit is not Border border) + { + return; + } if (args.Value is { }) { - ((Border)AdornmentToEdit).LineStyle = (LineStyle)args.Value; + border.LineStyle = (LineStyle)args.Value; } - if (((Border)AdornmentToEdit).LineStyle == LineStyle.None) - { - ((Border)AdornmentToEdit).Thickness = new (0); - } - else if (prevBorderStyle == LineStyle.None && ((Border)AdornmentToEdit).LineStyle != LineStyle.None) - { - ((Border)AdornmentToEdit).Thickness = new (1); - } - - ((Border)AdornmentToEdit).SetNeedsDraw (); + border.SetNeedsDraw (); SetNeedsLayout (); } void OnCkbTitleOnToggle (object? _, ResultEventArgs args) { + if (AdornmentToEdit is not Border border) + { + return; + } + if (args.Result == CheckState.Checked) { - ((Border)AdornmentToEdit!).Settings |= BorderSettings.Title; + border.Settings |= BorderSettings.Title; } else { - ((Border)AdornmentToEdit!).Settings &= ~BorderSettings.Title; + border.Settings &= ~BorderSettings.Title; } } void OnCkbGradientOnToggle (object? _, ResultEventArgs args) { + if (AdornmentToEdit is not Border border) + { + return; + } + if (args.Result == CheckState.Checked) { - ((Border)AdornmentToEdit!).Settings |= BorderSettings.Gradient; + border.Settings |= BorderSettings.Gradient; } else { - ((Border)AdornmentToEdit!).Settings &= ~BorderSettings.Gradient; + border.Settings &= ~BorderSettings.Gradient; } } } diff --git a/Examples/UICatalog/Scenarios/EditorsAndHelpers/DimEditor.cs b/Examples/UICatalog/Scenarios/EditorsAndHelpers/DimEditor.cs index 7f1f795c9..b8e28730c 100644 --- a/Examples/UICatalog/Scenarios/EditorsAndHelpers/DimEditor.cs +++ b/Examples/UICatalog/Scenarios/EditorsAndHelpers/DimEditor.cs @@ -1,8 +1,5 @@ #nullable enable -using System; -using System.Collections.Generic; using System.Diagnostics; -using System.Linq; namespace UICatalog.Scenarios; @@ -21,7 +18,7 @@ public class DimEditor : EditorBase private OptionSelector? _dimOptionSelector; private TextField? _valueEdit; - /// + /// protected override void OnViewToEditChanged () { if (ViewToEdit is { }) @@ -39,12 +36,11 @@ public class DimEditor : EditorBase return; } - Dim? dim; - dim = Dimension == Dimension.Width ? ViewToEdit.Width : ViewToEdit.Height; + Dim dim = Dimension == Dimension.Width ? ViewToEdit.Width : ViewToEdit.Height; try { - _dimOptionSelector!.Value = _dimNames.IndexOf (_dimNames.First (s => dim!.ToString ().StartsWith (s))); + _dimOptionSelector!.Value = _dimNames.IndexOf (_dimNames.First (s => dim.ToString ().StartsWith (s))); } catch (InvalidOperationException e) { @@ -53,31 +49,37 @@ public class DimEditor : EditorBase } _valueEdit!.Enabled = false; + switch (dim) { case DimAbsolute absolute: _valueEdit.Enabled = true; _value = absolute.Size; _valueEdit!.Text = _value.ToString (); + break; case DimFill fill: var margin = fill.Margin as DimAbsolute; _valueEdit.Enabled = margin is { }; _value = margin?.Size ?? 0; _valueEdit!.Text = _value.ToString (); + break; case DimFunc func: _valueEdit.Enabled = true; _value = func.Fn (null); _valueEdit!.Text = _value.ToString (); + break; case DimPercent percent: _valueEdit.Enabled = true; _value = percent.Percentage; _valueEdit!.Text = _value.ToString (); + break; default: - _valueEdit!.Text = dim!.ToString (); + _valueEdit!.Text = dim.ToString (); + break; } } @@ -94,6 +96,7 @@ public class DimEditor : EditorBase Add (label); _dimOptionSelector = new () { X = 0, Y = Pos.Bottom (label), Labels = _optionLabels }; _dimOptionSelector.ValueChanged += OnOptionSelectorOnValueChanged; + _valueEdit = new () { X = Pos.Right (label) + 1, @@ -102,30 +105,30 @@ public class DimEditor : EditorBase Text = $"{_value}" }; - _valueEdit.Accepting += (s, args) => - { - try - { - _value = int.Parse (_valueEdit.Text); - DimChanged (); - } - catch - { - // ignored - } - args.Handled = true; - }; + _valueEdit.Accepting += (_, args) => + { + try + { + _value = int.Parse (_valueEdit.Text); + DimChanged (); + } + catch + { + // ignored + } + + args.Handled = true; + }; Add (_valueEdit); Add (_dimOptionSelector); - } private void OnOptionSelectorOnValueChanged (object? s, EventArgs selected) { DimChanged (); } - // These need to have same order - private readonly List _dimNames = ["Absolute", "Auto", "Fill", "Func", "Percent",]; - private readonly string [] _optionLabels = ["Absolute(n)", "Auto", "Fill(n)", "Func(()=>n)", "Percent(n)",]; + // These need to have same order + private readonly List _dimNames = ["Absolute", "Auto", "Fill", "Func", "Percent"]; + private readonly string [] _optionLabels = ["Absolute(n)", "Auto", "Fill(n)", "Func(()=>n)", "Percent(n)"]; private void DimChanged () { @@ -136,15 +139,15 @@ public class DimEditor : EditorBase try { - Dim? dim = _dimOptionSelector!.Value switch - { - 0 => Dim.Absolute (_value), - 1 => Dim.Auto (), - 2 => Dim.Fill (_value), - 3 => Dim.Func (_ => _value), - 4 => Dim.Percent (_value), - _ => Dimension == Dimension.Width ? ViewToEdit.Width : ViewToEdit.Height - }; + Dim dim = _dimOptionSelector!.Value switch + { + 0 => Dim.Absolute (_value), + 1 => Dim.Auto (), + 2 => Dim.Fill (_value), + 3 => Dim.Func (_ => _value), + 4 => Dim.Percent (_value), + _ => Dimension == Dimension.Width ? ViewToEdit.Width : ViewToEdit.Height + }; if (Dimension == Dimension.Width) { diff --git a/Examples/UICatalog/Scenarios/EditorsAndHelpers/EditorBase.cs b/Examples/UICatalog/Scenarios/EditorsAndHelpers/EditorBase.cs index b4c548d0c..9556be4a2 100644 --- a/Examples/UICatalog/Scenarios/EditorsAndHelpers/EditorBase.cs +++ b/Examples/UICatalog/Scenarios/EditorsAndHelpers/EditorBase.cs @@ -1,8 +1,4 @@ #nullable enable -using System; -using System.Diagnostics; -using System.Linq; - namespace UICatalog.Scenarios; public abstract class EditorBase : View @@ -19,36 +15,21 @@ public abstract class EditorBase : View Orientation = Orientation.Vertical }; - TabStop = TabBehavior.TabStop; Initialized += OnInitialized; void OnInitialized (object? sender, EventArgs e) { - if (Border is { }) - { - Border.Add (ExpanderButton); - - if (ExpanderButton.Orientation == Orientation.Vertical) - { - ExpanderButton.X = Pos.AnchorEnd () - 1; - } - else - { - ExpanderButton.Y = Pos.AnchorEnd () - 1; - } - } - - Application.MouseEvent += ApplicationOnMouseEvent; - Application.Navigation!.FocusedChanged += NavigationOnFocusedChanged; + Border?.Add (ExpanderButton); + App!.Mouse.MouseEvent += ApplicationOnMouseEvent; + App!.Navigation!.FocusedChanged += NavigationOnFocusedChanged; } AddCommand (Command.Accept, () => true); SchemeName = "Dialog"; - } private readonly ExpanderButton? _expanderButton; @@ -58,15 +39,16 @@ public abstract class EditorBase : View get => _expanderButton; init { - if (_expanderButton == value) + if (ReferenceEquals (_expanderButton, value)) { return; } + _expanderButton = value; } } - public bool UpdatingLayoutSettings { get; private set; } = false; + public bool UpdatingLayoutSettings { get; private set; } private void View_LayoutComplete (object? sender, LayoutEventArgs e) { @@ -77,7 +59,6 @@ public abstract class EditorBase : View UpdatingLayoutSettings = false; } - private View? _viewToEdit; public View? ViewToEdit @@ -90,7 +71,6 @@ public abstract class EditorBase : View return; } - if (value is null && _viewToEdit is { }) { _viewToEdit.SubViewsLaidOut -= View_LayoutComplete; @@ -127,7 +107,6 @@ public abstract class EditorBase : View /// public bool AutoSelectAdornments { get; set; } - private void NavigationOnFocusedChanged (object? sender, EventArgs e) { if (AutoSelectSuperView is null) @@ -135,17 +114,17 @@ public abstract class EditorBase : View return; } - if (ApplicationNavigation.IsInHierarchy (this, Application.Navigation!.GetFocused ())) + if (ApplicationNavigation.IsInHierarchy (this, App?.Navigation?.GetFocused ())) { return; } - if (!ApplicationNavigation.IsInHierarchy (AutoSelectSuperView, Application.Navigation!.GetFocused ())) + if (!ApplicationNavigation.IsInHierarchy (AutoSelectSuperView, App?.Navigation?.GetFocused ())) { return; } - ViewToEdit = Application.Navigation!.GetFocused (); + ViewToEdit = App!.Navigation!.GetFocused (); } private void ApplicationOnMouseEvent (object? sender, MouseEventArgs e) @@ -177,4 +156,16 @@ public abstract class EditorBase : View ViewToEdit = view; } } + + /// + protected override void Dispose (bool disposing) + { + if (disposing && App is {}) + { + App.Navigation!.FocusedChanged -= NavigationOnFocusedChanged; + App.Mouse.MouseEvent -= ApplicationOnMouseEvent; + } + + base.Dispose (disposing); + } } diff --git a/Examples/UICatalog/Scenarios/EditorsAndHelpers/EventLog.cs b/Examples/UICatalog/Scenarios/EditorsAndHelpers/EventLog.cs index 4bdd61066..25acdb876 100644 --- a/Examples/UICatalog/Scenarios/EditorsAndHelpers/EventLog.cs +++ b/Examples/UICatalog/Scenarios/EditorsAndHelpers/EventLog.cs @@ -1,5 +1,4 @@ #nullable enable -using System; using System.Collections.ObjectModel; namespace UICatalog.Scenarios; @@ -19,8 +18,7 @@ public class EventLog : ListView X = Pos.AnchorEnd (); Y = 0; - Width = Dim.Func ( - _ => + Width = Dim.Func (_ => { if (!IsInitialized) { diff --git a/Examples/UICatalog/Scenarios/EditorsAndHelpers/ExpanderButton.cs b/Examples/UICatalog/Scenarios/EditorsAndHelpers/ExpanderButton.cs index 13c2aee8a..2630703fa 100644 --- a/Examples/UICatalog/Scenarios/EditorsAndHelpers/ExpanderButton.cs +++ b/Examples/UICatalog/Scenarios/EditorsAndHelpers/ExpanderButton.cs @@ -1,5 +1,4 @@ #nullable enable -using System; using System.Text; namespace UICatalog.Scenarios; @@ -43,14 +42,11 @@ public class ExpanderButton : Button Orientation = Orientation.Vertical; - HighlightStates = Terminal.Gui.ViewBase.MouseState.None; + HighlightStates = MouseState.In; Initialized += ExpanderButton_Initialized; - EnabledChanged += (sender, args) => - { - ShowHide (); - }; + EnabledChanged += (_, _) => { ShowHide (); }; } private void ShowHide () @@ -85,7 +81,7 @@ public class ExpanderButton : Button if (SuperView is Border { } border) { - border.ThicknessChanged += (o, args) => ShowHide (); + border.ThicknessChanged += (_, _) => ShowHide (); } } @@ -111,7 +107,7 @@ public class ExpanderButton : Button /// True of the event was cancelled. protected virtual bool OnOrientationChanging (Orientation newOrientation) { - CancelEventArgs args = new CancelEventArgs (in _orientation, ref newOrientation); + CancelEventArgs args = new (in _orientation, ref newOrientation); OrientationChanging?.Invoke (this, args); if (!args.Cancel) @@ -120,7 +116,7 @@ public class ExpanderButton : Button if (Orientation == Orientation.Vertical) { - X = Pos.AnchorEnd (); + X = Pos.AnchorEnd () - 1; Y = 0; CollapseGlyph = new ('\u21d1'); // ⇑ ExpandGlyph = new ('\u21d3'); // ⇓ @@ -128,7 +124,7 @@ public class ExpanderButton : Button else { X = 0; - Y = Pos.AnchorEnd (); + Y = Pos.AnchorEnd () - 1; CollapseGlyph = new ('\u21d0'); // ⇐ ExpandGlyph = new ('\u21d2'); // ⇒ } @@ -222,12 +218,12 @@ public class ExpanderButton : Button // Collapse if (Orientation == Orientation.Vertical) { - _previousDim = superView!.Height!; + _previousDim = superView.Height; superView.Height = 1; } else { - _previousDim = superView!.Width!; + _previousDim = superView.Width; superView.Width = 1; } } diff --git a/Examples/UICatalog/Scenarios/EditorsAndHelpers/LayoutEditor.cs b/Examples/UICatalog/Scenarios/EditorsAndHelpers/LayoutEditor.cs index cb84ac31d..a0034ee2a 100644 --- a/Examples/UICatalog/Scenarios/EditorsAndHelpers/LayoutEditor.cs +++ b/Examples/UICatalog/Scenarios/EditorsAndHelpers/LayoutEditor.cs @@ -1,8 +1,4 @@ #nullable enable -using System; -using System.Collections.Generic; -using System.Linq; - namespace UICatalog.Scenarios; /// @@ -64,7 +60,6 @@ public class LayoutEditor : EditorBase X = Pos.Right (_xEditor) + 1 }; - _widthEditor = new () { Title = "_Width", diff --git a/Examples/UICatalog/Scenarios/EditorsAndHelpers/MarginEditor.cs b/Examples/UICatalog/Scenarios/EditorsAndHelpers/MarginEditor.cs index 7d5d0f254..2904171d8 100644 --- a/Examples/UICatalog/Scenarios/EditorsAndHelpers/MarginEditor.cs +++ b/Examples/UICatalog/Scenarios/EditorsAndHelpers/MarginEditor.cs @@ -1,6 +1,4 @@ #nullable enable -using System; - namespace UICatalog.Scenarios; public class MarginEditor : AdornmentEditor @@ -34,7 +32,7 @@ public class MarginEditor : AdornmentEditor _optionsShadow = new () { X = 0, - Y = Pos.Bottom (SubViews.ElementAt(SubViews.Count-1)), + Y = Pos.Bottom (SubViews.ElementAt (SubViews.Count - 1)), SuperViewRendersLineCanvas = true, Title = "_Shadow", @@ -51,14 +49,14 @@ public class MarginEditor : AdornmentEditor Add (_optionsShadow); - _flagSelectorTransparent = new FlagSelector () + _flagSelectorTransparent = new FlagSelector { X = 0, Y = Pos.Bottom (_optionsShadow), SuperViewRendersLineCanvas = true, Title = "_ViewportSettings", - BorderStyle = LineStyle.Single, + BorderStyle = LineStyle.Single }; _flagSelectorTransparent.Values = [(int)ViewportSettingsFlags.Transparent, (int)ViewportSettingsFlags.TransparentMouse]; _flagSelectorTransparent.Labels = ["Transparent", "TransparentMouse"]; @@ -71,11 +69,6 @@ public class MarginEditor : AdornmentEditor _flagSelectorTransparent.Value = (int)((Margin)AdornmentToEdit).ViewportSettings; } - _flagSelectorTransparent.ValueChanged += (_, args) => - { - ((Margin)AdornmentToEdit!).ViewportSettings = (ViewportSettingsFlags)args.Value!; - }; - - + _flagSelectorTransparent.ValueChanged += (_, args) => { ((Margin)AdornmentToEdit!).ViewportSettings = (ViewportSettingsFlags)args.Value!; }; } -} \ No newline at end of file +} diff --git a/Examples/UICatalog/Scenarios/EditorsAndHelpers/PosEditor.cs b/Examples/UICatalog/Scenarios/EditorsAndHelpers/PosEditor.cs index 467b54756..ae35161e6 100644 --- a/Examples/UICatalog/Scenarios/EditorsAndHelpers/PosEditor.cs +++ b/Examples/UICatalog/Scenarios/EditorsAndHelpers/PosEditor.cs @@ -1,8 +1,5 @@ #nullable enable -using System; -using System.Collections.Generic; using System.Diagnostics; -using System.Linq; namespace UICatalog.Scenarios; @@ -102,7 +99,7 @@ public class PosEditor : EditorBase Text = $"{_value}" }; - _valueEdit.Accepting += (s, args) => + _valueEdit.Accepting += (_, args) => { try { @@ -123,7 +120,7 @@ public class PosEditor : EditorBase private void OnOptionSelectorOnValueChanged (object? s, EventArgs selected) { PosChanged (); } - // These need to have same order + // These need to have same order private readonly List _posNames = ["Absolute", "Align", "AnchorEnd", "Center", "Func", "Percent"]; private readonly string [] _optionLabels = ["Absolute(n)", "Align", "AnchorEnd", "Center", "Func(()=>n)", "Percent(n)"]; @@ -136,7 +133,7 @@ public class PosEditor : EditorBase try { - Pos? pos = _posOptionSelector!.Value switch + Pos pos = _posOptionSelector!.Value switch { 0 => Pos.Absolute (_value), 1 => Pos.Align (Alignment.Start), diff --git a/Examples/UICatalog/Scenarios/EditorsAndHelpers/ViewPropertiesEditor.cs b/Examples/UICatalog/Scenarios/EditorsAndHelpers/ViewPropertiesEditor.cs index cfca9f433..5b6679bbf 100644 --- a/Examples/UICatalog/Scenarios/EditorsAndHelpers/ViewPropertiesEditor.cs +++ b/Examples/UICatalog/Scenarios/EditorsAndHelpers/ViewPropertiesEditor.cs @@ -20,7 +20,7 @@ public class ViewPropertiesEditor : EditorBase CheckedState = ViewToEdit is { } ? ViewToEdit.CanFocus ? CheckState.Checked : CheckState.UnChecked : CheckState.UnChecked }; - _canFocusCheckBox.CheckedStateChanged += (s, args) => + _canFocusCheckBox.CheckedStateChanged += (_, _) => { if (ViewToEdit is { }) { @@ -37,7 +37,7 @@ public class ViewPropertiesEditor : EditorBase CheckedState = ViewToEdit is { } ? ViewToEdit.Enabled ? CheckState.Checked : CheckState.UnChecked : CheckState.UnChecked }; - _enabledCheckBox.CheckedStateChanged += (s, args) => + _enabledCheckBox.CheckedStateChanged += (_, _) => { if (ViewToEdit is { }) { @@ -55,13 +55,13 @@ public class ViewPropertiesEditor : EditorBase Orientation = Orientation.Horizontal }; - _orientationOptionSelector.ValueChanged += (s, selected) => - { - if (ViewToEdit is IOrientation orientatedView) - { - orientatedView.Orientation = _orientationOptionSelector.Value!.Value; - } - }; + _orientationOptionSelector.ValueChanged += (_, _) => + { + if (ViewToEdit is IOrientation orientatedView) + { + orientatedView.Orientation = _orientationOptionSelector.Value!.Value; + } + }; Add (label, _orientationOptionSelector); label = new () { X = 0, Y = Pos.Bottom (_orientationOptionSelector), Text = "Text:" }; @@ -75,7 +75,7 @@ public class ViewPropertiesEditor : EditorBase Text = "This is demo text" }; - _text.ContentsChanged += (s, e) => + _text.ContentsChanged += (_, _) => { if (ViewToEdit is { }) { @@ -90,15 +90,7 @@ public class ViewPropertiesEditor : EditorBase public string DemoText { - get - { - if (_text is null) - { - return string.Empty; - } - - return _text!.Text; - } + get => _text is null ? string.Empty : _text!.Text; set => _text!.Text = value; } diff --git a/Examples/UICatalog/Scenarios/EditorsAndHelpers/ViewportSettingsEditor.cs b/Examples/UICatalog/Scenarios/EditorsAndHelpers/ViewportSettingsEditor.cs index e54835989..b7a86feaf 100644 --- a/Examples/UICatalog/Scenarios/EditorsAndHelpers/ViewportSettingsEditor.cs +++ b/Examples/UICatalog/Scenarios/EditorsAndHelpers/ViewportSettingsEditor.cs @@ -1,6 +1,4 @@ #nullable enable -using System; - namespace UICatalog.Scenarios; /// @@ -60,8 +58,8 @@ public sealed class ViewportSettingsEditor : EditorBase : CheckState.UnChecked; _cbTransparentMouse!.CheckedState = ViewToEdit.ViewportSettings.HasFlag (ViewportSettingsFlags.TransparentMouse) - ? CheckState.Checked - : CheckState.UnChecked; + ? CheckState.Checked + : CheckState.UnChecked; _cbVerticalScrollBar!.CheckedState = ViewToEdit.VerticalScrollBar.Visible ? CheckState.Checked : CheckState.UnChecked; _cbAutoShowVerticalScrollBar!.CheckedState = ViewToEdit.VerticalScrollBar.AutoShow ? CheckState.Checked : CheckState.UnChecked; @@ -115,27 +113,27 @@ public sealed class ViewportSettingsEditor : EditorBase Add (_cbAllowXGreaterThanContentWidth); - void AllowNegativeXToggle (object? sender, ResultEventArgs e) + void AllowNegativeXToggle (object? sender, ResultEventArgs rea) { - if (e.Result == CheckState.Checked) + if (rea.Result == CheckState.Checked) { - ViewToEdit!.ViewportSettings |= Terminal.Gui.ViewBase.ViewportSettingsFlags.AllowNegativeX; + ViewToEdit!.ViewportSettings |= ViewportSettingsFlags.AllowNegativeX; } else { - ViewToEdit!.ViewportSettings &= ~Terminal.Gui.ViewBase.ViewportSettingsFlags.AllowNegativeX; + ViewToEdit!.ViewportSettings &= ~ViewportSettingsFlags.AllowNegativeX; } } - void AllowXGreaterThanContentWidthToggle (object? sender, ResultEventArgs e) + void AllowXGreaterThanContentWidthToggle (object? sender, ResultEventArgs rea) { - if (e.Result == CheckState.Checked) + if (rea.Result == CheckState.Checked) { - ViewToEdit!.ViewportSettings |= Terminal.Gui.ViewBase.ViewportSettingsFlags.AllowXGreaterThanContentWidth; + ViewToEdit!.ViewportSettings |= ViewportSettingsFlags.AllowXGreaterThanContentWidth; } else { - ViewToEdit!.ViewportSettings &= ~Terminal.Gui.ViewBase.ViewportSettingsFlags.AllowXGreaterThanContentWidth; + ViewToEdit!.ViewportSettings &= ~ViewportSettingsFlags.AllowXGreaterThanContentWidth; } } @@ -153,27 +151,27 @@ public sealed class ViewportSettingsEditor : EditorBase Add (_cbAllowYGreaterThanContentHeight); - void AllowNegativeYToggle (object? sender, ResultEventArgs e) + void AllowNegativeYToggle (object? sender, ResultEventArgs rea) { - if (e.Result == CheckState.Checked) + if (rea.Result == CheckState.Checked) { - ViewToEdit!.ViewportSettings |= Terminal.Gui.ViewBase.ViewportSettingsFlags.AllowNegativeY; + ViewToEdit!.ViewportSettings |= ViewportSettingsFlags.AllowNegativeY; } else { - ViewToEdit!.ViewportSettings &= ~Terminal.Gui.ViewBase.ViewportSettingsFlags.AllowNegativeY; + ViewToEdit!.ViewportSettings &= ~ViewportSettingsFlags.AllowNegativeY; } } - void AllowYGreaterThanContentHeightToggle (object? sender, ResultEventArgs e) + void AllowYGreaterThanContentHeightToggle (object? sender, ResultEventArgs rea) { - if (e.Result == CheckState.Checked) + if (rea.Result == CheckState.Checked) { - ViewToEdit!.ViewportSettings |= Terminal.Gui.ViewBase.ViewportSettingsFlags.AllowYGreaterThanContentHeight; + ViewToEdit!.ViewportSettings |= ViewportSettingsFlags.AllowYGreaterThanContentHeight; } else { - ViewToEdit!.ViewportSettings &= ~Terminal.Gui.ViewBase.ViewportSettingsFlags.AllowYGreaterThanContentHeight; + ViewToEdit!.ViewportSettings &= ~ViewportSettingsFlags.AllowYGreaterThanContentHeight; } } @@ -193,17 +191,16 @@ public sealed class ViewportSettingsEditor : EditorBase }; _contentSizeWidth.ValueChanging += ContentSizeWidthValueChanged; - void ContentSizeWidthValueChanged (object? sender, CancelEventArgs e) + void ContentSizeWidthValueChanged (object? sender, CancelEventArgs cea) { - if (e.NewValue < 0) + if (cea.NewValue < 0) { - e.Cancel = true; + cea.Cancel = true; return; } - // BUGBUG: set_ContentSize is supposed to be `protected`. - ViewToEdit!.SetContentSize (ViewToEdit.GetContentSize () with { Width = e.NewValue }); + ViewToEdit!.SetContentSize (ViewToEdit.GetContentSize () with { Width = cea.NewValue }); } var labelComma = new Label @@ -221,17 +218,16 @@ public sealed class ViewportSettingsEditor : EditorBase }; _contentSizeHeight.ValueChanging += ContentSizeHeightValueChanged; - void ContentSizeHeightValueChanged (object? sender, CancelEventArgs e) + void ContentSizeHeightValueChanged (object? sender, CancelEventArgs cea) { - if (e.NewValue < 0) + if (cea.NewValue < 0) { - e.Cancel = true; + cea.Cancel = true; return; } - // BUGBUG: set_ContentSize is supposed to be `protected`. - ViewToEdit?.SetContentSize (ViewToEdit.GetContentSize () with { Height = e.NewValue }); + ViewToEdit?.SetContentSize (ViewToEdit.GetContentSize () with { Height = cea.NewValue }); } _cbClearContentOnly = new () @@ -243,15 +239,15 @@ public sealed class ViewportSettingsEditor : EditorBase }; _cbClearContentOnly.CheckedStateChanging += ClearContentOnlyToggle; - void ClearContentOnlyToggle (object? sender, ResultEventArgs e) + void ClearContentOnlyToggle (object? sender, ResultEventArgs rea) { - if (e.Result == CheckState.Checked) + if (rea.Result == CheckState.Checked) { - ViewToEdit!.ViewportSettings |= Terminal.Gui.ViewBase.ViewportSettingsFlags.ClearContentOnly; + ViewToEdit!.ViewportSettings |= ViewportSettingsFlags.ClearContentOnly; } else { - ViewToEdit!.ViewportSettings &= ~Terminal.Gui.ViewBase.ViewportSettingsFlags.ClearContentOnly; + ViewToEdit!.ViewportSettings &= ~ViewportSettingsFlags.ClearContentOnly; } } @@ -264,15 +260,15 @@ public sealed class ViewportSettingsEditor : EditorBase }; _cbClipContentOnly.CheckedStateChanging += ClipContentOnlyToggle; - void ClipContentOnlyToggle (object? sender, ResultEventArgs e) + void ClipContentOnlyToggle (object? sender, ResultEventArgs rea) { - if (e.Result == CheckState.Checked) + if (rea.Result == CheckState.Checked) { - ViewToEdit!.ViewportSettings |= Terminal.Gui.ViewBase.ViewportSettingsFlags.ClipContentOnly; + ViewToEdit!.ViewportSettings |= ViewportSettingsFlags.ClipContentOnly; } else { - ViewToEdit!.ViewportSettings &= ~Terminal.Gui.ViewBase.ViewportSettingsFlags.ClipContentOnly; + ViewToEdit!.ViewportSettings &= ~ViewportSettingsFlags.ClipContentOnly; } } @@ -285,15 +281,15 @@ public sealed class ViewportSettingsEditor : EditorBase }; _cbTransparent.CheckedStateChanging += TransparentToggle; - void TransparentToggle (object? sender, ResultEventArgs e) + void TransparentToggle (object? sender, ResultEventArgs rea) { - if (e.Result == CheckState.Checked) + if (rea.Result == CheckState.Checked) { - ViewToEdit!.ViewportSettings |= Terminal.Gui.ViewBase.ViewportSettingsFlags.Transparent; + ViewToEdit!.ViewportSettings |= ViewportSettingsFlags.Transparent; } else { - ViewToEdit!.ViewportSettings &= ~Terminal.Gui.ViewBase.ViewportSettingsFlags.Transparent; + ViewToEdit!.ViewportSettings &= ~ViewportSettingsFlags.Transparent; } } @@ -306,15 +302,15 @@ public sealed class ViewportSettingsEditor : EditorBase }; _cbTransparentMouse.CheckedStateChanging += TransparentMouseToggle; - void TransparentMouseToggle (object? sender, ResultEventArgs e) + void TransparentMouseToggle (object? sender, ResultEventArgs rea) { - if (e.Result == CheckState.Checked) + if (rea.Result == CheckState.Checked) { - ViewToEdit!.ViewportSettings |= Terminal.Gui.ViewBase.ViewportSettingsFlags.TransparentMouse; + ViewToEdit!.ViewportSettings |= ViewportSettingsFlags.TransparentMouse; } else { - ViewToEdit!.ViewportSettings &= ~Terminal.Gui.ViewBase.ViewportSettingsFlags.TransparentMouse; + ViewToEdit!.ViewportSettings &= ~ViewportSettingsFlags.TransparentMouse; } } @@ -327,9 +323,9 @@ public sealed class ViewportSettingsEditor : EditorBase }; _cbVerticalScrollBar.CheckedStateChanging += VerticalScrollBarToggle; - void VerticalScrollBarToggle (object? sender, ResultEventArgs e) + void VerticalScrollBarToggle (object? sender, ResultEventArgs rea) { - ViewToEdit!.VerticalScrollBar.Visible = e.Result == CheckState.Checked; + ViewToEdit!.VerticalScrollBar.Visible = rea.Result == CheckState.Checked; } _cbAutoShowVerticalScrollBar = new () @@ -341,9 +337,9 @@ public sealed class ViewportSettingsEditor : EditorBase }; _cbAutoShowVerticalScrollBar.CheckedStateChanging += AutoShowVerticalScrollBarToggle; - void AutoShowVerticalScrollBarToggle (object? sender, ResultEventArgs e) + void AutoShowVerticalScrollBarToggle (object? sender, ResultEventArgs rea) { - ViewToEdit!.VerticalScrollBar.AutoShow = e.Result == CheckState.Checked; + ViewToEdit!.VerticalScrollBar.AutoShow = rea.Result == CheckState.Checked; } _cbHorizontalScrollBar = new () @@ -355,9 +351,9 @@ public sealed class ViewportSettingsEditor : EditorBase }; _cbHorizontalScrollBar.CheckedStateChanging += HorizontalScrollBarToggle; - void HorizontalScrollBarToggle (object? sender, ResultEventArgs e) + void HorizontalScrollBarToggle (object? sender, ResultEventArgs rea) { - ViewToEdit!.HorizontalScrollBar.Visible = e.Result == CheckState.Checked; + ViewToEdit!.HorizontalScrollBar.Visible = rea.Result == CheckState.Checked; } _cbAutoShowHorizontalScrollBar = new () @@ -369,9 +365,9 @@ public sealed class ViewportSettingsEditor : EditorBase }; _cbAutoShowHorizontalScrollBar.CheckedStateChanging += AutoShowHorizontalScrollBarToggle; - void AutoShowHorizontalScrollBarToggle (object? sender, ResultEventArgs e) + void AutoShowHorizontalScrollBarToggle (object? sender, ResultEventArgs rea) { - ViewToEdit!.HorizontalScrollBar.AutoShow = e.Result == CheckState.Checked; + ViewToEdit!.HorizontalScrollBar.AutoShow = rea.Result == CheckState.Checked; } Add ( diff --git a/Examples/UICatalog/Scenarios/ShadowStyles.cs b/Examples/UICatalog/Scenarios/ShadowStyles.cs index 25a2a335c..2ca3002d5 100644 --- a/Examples/UICatalog/Scenarios/ShadowStyles.cs +++ b/Examples/UICatalog/Scenarios/ShadowStyles.cs @@ -62,6 +62,22 @@ public class ShadowStyles : Scenario shadowWindow.Add (buttonInWin); app.Add (shadowWindow); + Window shadowWindow2 = new () + { + + Id = "shadowWindow2", + X = Pos.Right (editor) + 10, + Y = 10, + Width = Dim.Percent (30), + Height = Dim.Percent (30), + Title = "Shadow Window #2", + Arrangement = ViewArrangement.Movable | ViewArrangement.Overlapped, + BorderStyle = LineStyle.Double, + ShadowStyle = ShadowStyle.Transparent, + }; + app.Add (shadowWindow2); + + var button = new Button { Id = "button", @@ -69,6 +85,7 @@ public class ShadowStyles : Scenario Y = Pos.Center (), Text = "Button", ShadowStyle = ShadowStyle.Opaque }; + button.Accepting += ButtonOnAccepting; ColorPicker colorPicker = new () { @@ -77,12 +94,12 @@ public class ShadowStyles : Scenario Id = "colorPicker16", X = Pos.Center (), Y = Pos.AnchorEnd (), - Width = Dim.Percent(80), + Width = Dim.Percent (80), }; colorPicker.ColorChanged += (sender, args) => { var normal = app.GetScheme ().Normal; - app.SetScheme (app.GetScheme() with {Normal = new Attribute(normal.Foreground, args.Result)}); + app.SetScheme (app.GetScheme () with { Normal = new Attribute (normal.Foreground, args.Result) }); }; app.Add (button, colorPicker); @@ -96,4 +113,10 @@ public class ShadowStyles : Scenario Application.Shutdown (); } + + private void ButtonOnAccepting (object sender, CommandEventArgs e) + { + MessageBox.Query ((sender as View)?.App, "Hello", "You pushed the button!"); + e.Handled = true; + } } diff --git a/Examples/UICatalog/Scenarios/ViewportSettings.cs b/Examples/UICatalog/Scenarios/ViewportSettings.cs index b4934a064..4a3f66c4f 100644 --- a/Examples/UICatalog/Scenarios/ViewportSettings.cs +++ b/Examples/UICatalog/Scenarios/ViewportSettings.cs @@ -108,6 +108,7 @@ public class ViewportSettings : Scenario var adornmentsEditor = new AdornmentsEditor { + BorderStyle = LineStyle.Single, X = Pos.AnchorEnd (), AutoSelectViewToEdit = true, ShowViewIdentifier = true @@ -224,6 +225,7 @@ public class ViewportSettings : Scenario view.Initialized += (s, e) => { viewportSettingsEditor.ViewToEdit = view; + adornmentsEditor.ViewToEdit = view; }; view.SetFocus (); Application.Run (app); diff --git a/Examples/UICatalog/Scenarios/WideGlyphs.cs b/Examples/UICatalog/Scenarios/WideGlyphs.cs index 16e30b723..9b2e80d26 100644 --- a/Examples/UICatalog/Scenarios/WideGlyphs.cs +++ b/Examples/UICatalog/Scenarios/WideGlyphs.cs @@ -24,6 +24,31 @@ public sealed class WideGlyphs : Scenario BorderStyle = LineStyle.None }; + // Add Editors + + AdornmentsEditor adornmentsEditor = new () + { + BorderStyle = LineStyle.Single, + X = Pos.AnchorEnd (), + AutoSelectViewToEdit = true, + AutoSelectAdornments = false, + ShowViewIdentifier = true + }; + adornmentsEditor.ExpanderButton.Accepting += (sender, args) => + { + //adornmentsEditor.ExpanderButton.Collapsed = args.NewValue; + }; + appWindow.Add (adornmentsEditor); + + ViewportSettingsEditor viewportSettingsEditor = new () + { + BorderStyle = LineStyle.Single, + Y = Pos.AnchorEnd (), + X = Pos.AnchorEnd (), + AutoSelectViewToEdit = true, + }; + appWindow.Add (viewportSettingsEditor); + // Build the array of codepoints once when subviews are laid out appWindow.SubViewsLaidOut += (s, _) => { @@ -53,7 +78,7 @@ public sealed class WideGlyphs : Scenario // Fill the window with the pre-built codepoints array // For detailed documentation on the draw code flow from Application.Run to this event, // see WideGlyphs.DrawFlow.md in this directory - appWindow.DrawingContent += (s, _) => + appWindow.DrawingContent += (s, e) => { View? view = s as View; if (view is null || _codepoints is null) @@ -73,6 +98,7 @@ public sealed class WideGlyphs : Scenario } } } + e.DrawContext?.AddDrawnRectangle (view.Viewport); }; Line verticalLineAtEven = new () @@ -99,12 +125,12 @@ public sealed class WideGlyphs : Scenario Y = 5, Width = 15, Height = 5, - //BorderStyle = LineStyle.Dashed, + //BorderStyle = LineStyle.Dashed }; // Proves it's not LineCanvas related arrangeableViewAtEven!.Border!.Thickness = new (1); - arrangeableViewAtEven.Border.Add(new View () { Height = Dim.Auto(), Width = Dim.Auto(), Text = "Even" }); + arrangeableViewAtEven.Border.Add (new View () { Height = Dim.Auto (), Width = Dim.Auto (), Text = "Even" }); appWindow.Add (arrangeableViewAtEven); View arrangeableViewAtOdd = new () @@ -117,6 +143,7 @@ public sealed class WideGlyphs : Scenario Height = 5, BorderStyle = LineStyle.Dashed, }; + appWindow.Add (arrangeableViewAtOdd); var superView = new View @@ -124,8 +151,8 @@ public sealed class WideGlyphs : Scenario CanFocus = true, X = 30, // on an even column to start Y = Pos.Center (), - Width = Dim.Auto () + 4, - Height = Dim.Auto () + 1, + Width = Dim.Auto (), + Height = Dim.Auto (), BorderStyle = LineStyle.Single, Arrangement = ViewArrangement.Movable | ViewArrangement.Resizable }; diff --git a/Terminal.Gui/App/ApplicationImpl.Run.cs b/Terminal.Gui/App/ApplicationImpl.Run.cs index 9f8e0a9b8..8926f2423 100644 --- a/Terminal.Gui/App/ApplicationImpl.Run.cs +++ b/Terminal.Gui/App/ApplicationImpl.Run.cs @@ -36,7 +36,7 @@ internal partial class ApplicationImpl public event EventHandler>? Iteration; /// - public void RaiseIteration () { Iteration?.Invoke (null, new (this)); } + public void RaiseIteration () { Iteration?.Invoke (this, new (this)); } #endregion Main Loop Iteration diff --git a/Terminal.Gui/App/ApplicationNavigation.cs b/Terminal.Gui/App/ApplicationNavigation.cs index 871bd3691..a852f642e 100644 --- a/Terminal.Gui/App/ApplicationNavigation.cs +++ b/Terminal.Gui/App/ApplicationNavigation.cs @@ -89,7 +89,7 @@ public class ApplicationNavigation _focused = value; - FocusedChanged?.Invoke (null, EventArgs.Empty); + FocusedChanged?.Invoke (this, EventArgs.Empty); } /// diff --git a/Terminal.Gui/App/CWP/CWPEventHelper.cs b/Terminal.Gui/App/CWP/CWPEventHelper.cs index 4840a358c..72fd9f7b5 100644 --- a/Terminal.Gui/App/CWP/CWPEventHelper.cs +++ b/Terminal.Gui/App/CWP/CWPEventHelper.cs @@ -49,6 +49,7 @@ public static class CWPEventHelper return false; } + // BUGBUG: This should pass this not null; need to test eventHandler.Invoke (null, args); return args.Handled; } diff --git a/Terminal.Gui/App/CWP/CWPPropertyHelper.cs b/Terminal.Gui/App/CWP/CWPPropertyHelper.cs index 09bcd7fa0..d7095fd7e 100644 --- a/Terminal.Gui/App/CWP/CWPPropertyHelper.cs +++ b/Terminal.Gui/App/CWP/CWPPropertyHelper.cs @@ -84,6 +84,7 @@ public static class CWPPropertyHelper } } + // BUGBUG: This should pass this not null; need to test changingEvent?.Invoke (null, args); if (args.Handled) @@ -100,13 +101,14 @@ public static class CWPPropertyHelper } finalValue = args.NewValue; - + // Do the work (set backing field, update related properties, etc.) BEFORE raising Changed events doWork (finalValue); - + ValueChangedEventArgs changedArgs = new (currentValue, finalValue); currentValue = finalValue; onChanged?.Invoke (changedArgs); + // BUGBUG: This should pass this not null; need to test changedEvent?.Invoke (null, changedArgs); return true; diff --git a/Terminal.Gui/App/CWP/CWPWorkflowHelper.cs b/Terminal.Gui/App/CWP/CWPWorkflowHelper.cs index 4c0328589..061df53d9 100644 --- a/Terminal.Gui/App/CWP/CWPWorkflowHelper.cs +++ b/Terminal.Gui/App/CWP/CWPWorkflowHelper.cs @@ -53,6 +53,7 @@ public static class CWPWorkflowHelper return true; } + // BUGBUG: This should pass this not null; need to test eventHandler?.Invoke (null, args); if (args.Handled) { @@ -112,6 +113,7 @@ public static class CWPWorkflowHelper return args.Result!; } + // BUGBUG: This should pass this not null; need to test eventHandler?.Invoke (null, args); if (!args.Handled) diff --git a/Terminal.Gui/App/Keyboard/KeyboardImpl.cs b/Terminal.Gui/App/Keyboard/KeyboardImpl.cs index dbdd2d67c..40041c974 100644 --- a/Terminal.Gui/App/Keyboard/KeyboardImpl.cs +++ b/Terminal.Gui/App/Keyboard/KeyboardImpl.cs @@ -160,7 +160,7 @@ internal class KeyboardImpl : IKeyboard, IDisposable //#endif // TODO: This should match standard event patterns - KeyDown?.Invoke (null, key); + KeyDown?.Invoke (this, key); if (key.Handled) { @@ -216,7 +216,7 @@ internal class KeyboardImpl : IKeyboard, IDisposable return true; } - KeyUp?.Invoke (null, key); + KeyUp?.Invoke (this, key); if (key.Handled) { diff --git a/Terminal.Gui/App/Mouse/MouseImpl.cs b/Terminal.Gui/App/Mouse/MouseImpl.cs index 59b5d16f9..355c72879 100644 --- a/Terminal.Gui/App/Mouse/MouseImpl.cs +++ b/Terminal.Gui/App/Mouse/MouseImpl.cs @@ -86,7 +86,7 @@ internal class MouseImpl : IMouse, IDisposable mouseEvent.View = deepestViewUnderMouse; } - MouseEvent?.Invoke (null, mouseEvent); + MouseEvent?.Invoke (this, mouseEvent); if (mouseEvent.Handled) { diff --git a/Terminal.sln.DotSettings b/Terminal.sln.DotSettings index e3f73a543..a2ec2772f 100644 --- a/Terminal.sln.DotSettings +++ b/Terminal.sln.DotSettings @@ -416,6 +416,7 @@ True True True + True True True