diff --git a/Terminal.Gui/Views/DatePicker.cs b/Terminal.Gui/Views/DatePicker.cs
index aca0c086e..cc1be2e77 100644
--- a/Terminal.Gui/Views/DatePicker.cs
+++ b/Terminal.Gui/Views/DatePicker.cs
@@ -200,8 +200,9 @@ public class DatePicker : View
ShowHeaders = true,
ShowHorizontalBottomline = true,
ShowVerticalCellLines = true,
- ExpandLastColumn = true
- }
+ ExpandLastColumn = true,
+ },
+ MultiSelect = false
};
_dateField = new DateField (DateTime.Now)
@@ -286,6 +287,9 @@ public class DatePicker : View
Add (_dateLabel, _dateField, _calendar, _previousMonthButton, _nextMonthButton);
}
+ ///
+ protected override bool OnDrawingText (Rectangle viewport) { return true; }
+
private static string StandardizeDateFormat (string format)
{
return format switch
diff --git a/UICatalog/Scenarios/AllViewsTester.cs b/UICatalog/Scenarios/AllViewsTester.cs
index 98bed18dd..f490d3b39 100644
--- a/UICatalog/Scenarios/AllViewsTester.cs
+++ b/UICatalog/Scenarios/AllViewsTester.cs
@@ -111,7 +111,9 @@ public class AllViewsTester : Scenario
Height = Dim.Auto (),
CanFocus = true,
ColorScheme = Colors.ColorSchemes ["TopLevel"],
- BorderStyle = LineStyle.Rounded
+ BorderStyle = LineStyle.Rounded,
+ AutoSelectViewToEdit = false,
+ AutoSelectAdornments = false,
};
_settingsPane = new ()
diff --git a/UICatalog/Scenarios/Arrangement.cs b/UICatalog/Scenarios/Arrangement.cs
index d707bfb10..14f91c6d8 100644
--- a/UICatalog/Scenarios/Arrangement.cs
+++ b/UICatalog/Scenarios/Arrangement.cs
@@ -33,7 +33,8 @@ public class Arrangement : Scenario
};
app.Add (adornmentsEditor);
- adornmentsEditor.ExpandButton!.Collapsed = true;
+
+ adornmentsEditor.ExpanderButton!.Collapsed = true;
var arrangementEditor = new ArrangementEditor ()
{
diff --git a/UICatalog/Scenarios/Editors/AdornmentEditor.cs b/UICatalog/Scenarios/Editors/AdornmentEditor.cs
index 8eea17dc3..b7de4893a 100644
--- a/UICatalog/Scenarios/Editors/AdornmentEditor.cs
+++ b/UICatalog/Scenarios/Editors/AdornmentEditor.cs
@@ -7,7 +7,7 @@ namespace UICatalog.Scenarios;
///
/// Provides a composable UI for editing the settings of an Adornment.
///
-public class AdornmentEditor : View
+public class AdornmentEditor : EditorBase
{
private readonly ColorPicker16 _backgroundColorPicker = new ()
{
@@ -79,6 +79,12 @@ public class AdornmentEditor : View
AdornmentChanged?.Invoke (this, EventArgs.Empty);
}
+ ///
+ protected override void OnViewToEditChanged ()
+ {
+ AdornmentToEdit = ViewToEdit as Adornment;
+ }
+
private NumericUpDown? _topEdit;
private NumericUpDown? _leftEdit;
private NumericUpDown? _bottomEdit;
@@ -86,21 +92,12 @@ public class AdornmentEditor : View
public AdornmentEditor ()
{
- Width = Dim.Auto (DimAutoStyle.Content);
- Height = Dim.Auto (DimAutoStyle.Content);
-
- BorderStyle = LineStyle.Dashed;
- Initialized += AdornmentEditor_Initialized;
-
CanFocus = true;
- TabStop = TabBehavior.TabStop;
+ Initialized += AdornmentEditor_Initialized;
}
private void AdornmentEditor_Initialized (object? sender, EventArgs e)
{
- ExpanderButton? expandButton;
- Border.Add (expandButton = new ExpanderButton ());
-
_topEdit = new ()
{
X = Pos.Center (), Y = 0,
diff --git a/UICatalog/Scenarios/Editors/AdornmentsEditor.cs b/UICatalog/Scenarios/Editors/AdornmentsEditor.cs
index f08de540b..4aa768f73 100644
--- a/UICatalog/Scenarios/Editors/AdornmentsEditor.cs
+++ b/UICatalog/Scenarios/Editors/AdornmentsEditor.cs
@@ -7,89 +7,56 @@ namespace UICatalog.Scenarios;
///
/// Provides an editor UI for the Margin, Border, and Padding of a View.
///
-public class AdornmentsEditor : View
+public class AdornmentsEditor : EditorBase
{
public AdornmentsEditor ()
{
Title = "AdornmentsEditor";
- Width = Dim.Auto (DimAutoStyle.Content);
- Height = Dim.Auto (DimAutoStyle.Content);
-
- CanFocus = true;
-
TabStop = TabBehavior.TabGroup;
- ExpandButton = new ()
- {
- Orientation = Orientation.Horizontal
- };
+ ExpanderButton.Orientation = Orientation.Horizontal;
Initialized += AdornmentsEditor_Initialized;
}
- private View? _viewToEdit;
-
private MarginEditor? _marginEditor;
private BorderEditor? _borderEditor;
private PaddingEditor? _paddingEditor;
- ///
- /// Gets or sets whether the AdornmentsEditor should automatically select the View to edit
- /// based on the values of and .
- ///
- public bool AutoSelectViewToEdit { get; set; }
-
- ///
- /// Gets or sets the View that will scope the behavior of .
- ///
- public View? AutoSelectSuperView { get; set; }
-
- ///
- /// Gets or sets whether auto select with the mouse will select Adornments or just Views.
- ///
- public bool AutoSelectAdornments { get; set; }
-
- public View? ViewToEdit
+ ///
+ protected override void OnViewToEditChanged ()
{
- get => _viewToEdit;
- set
+
+ if (_marginEditor is { })
{
- if (_viewToEdit == value)
- {
- return;
- }
-
- _viewToEdit = value;
-
- if (_marginEditor is { })
- {
- _marginEditor.AdornmentToEdit = _viewToEdit?.Margin ?? null;
- }
-
- if (_borderEditor is { })
- {
- _borderEditor.AdornmentToEdit = _viewToEdit?.Border ?? null;
- }
-
- if (_paddingEditor is { })
- {
- _paddingEditor.AdornmentToEdit = _viewToEdit?.Padding ?? null;
- }
-
- if (_viewToEdit is not Adornment)
- {
- Enabled = true;
- }
- else
- {
- Enabled = false;
- }
-
- Padding.Text = $"View: {GetIdentifyingString(_viewToEdit)}";
+ _marginEditor.AdornmentToEdit = ViewToEdit?.Margin ?? null;
}
+
+ if (_borderEditor is { })
+ {
+ _borderEditor.AdornmentToEdit = ViewToEdit?.Border ?? null;
+ }
+
+ if (_paddingEditor is { })
+ {
+ _paddingEditor.AdornmentToEdit = ViewToEdit?.Padding ?? null;
+ }
+
+ if (ViewToEdit is not Adornment)
+ {
+ Enabled = true;
+ }
+ else
+ {
+ Enabled = false;
+ }
+
+ Padding.Text = $"View: {GetIdentifyingString (ViewToEdit)}";
}
+
+
private string GetIdentifyingString (View? view)
{
if (view is null)
@@ -115,59 +82,6 @@ public class AdornmentsEditor : View
return view.GetType ().Name;
}
- private void NavigationOnFocusedChanged (object? sender, EventArgs e)
- {
- if (AutoSelectSuperView is null)
- {
- return;
- }
-
- if (ApplicationNavigation.IsInHierarchy (this, Application.Navigation!.GetFocused ()))
- {
- return;
- }
-
- if (!ApplicationNavigation.IsInHierarchy (AutoSelectSuperView, Application.Navigation!.GetFocused ()))
- {
- return;
- }
-
- ViewToEdit = Application.Navigation!.GetFocused ();
- }
-
- private void ApplicationOnMouseEvent (object? sender, MouseEventArgs e)
- {
- if (e.Flags != MouseFlags.Button1Clicked || !AutoSelectViewToEdit)
- {
- return;
- }
-
- if ((AutoSelectSuperView is { } && !AutoSelectSuperView.FrameToScreen ().Contains (e.Position))
- || FrameToScreen ().Contains (e.Position))
- {
- return;
- }
-
- View view = e.View;
-
- if (view is { })
- {
- if (view is Adornment adornment)
- {
- ViewToEdit = AutoSelectAdornments ? adornment : adornment.Parent;
- }
- else
- {
- ViewToEdit = view;
- }
- }
- }
-
- ///
- protected override void Dispose (bool disposing) { base.Dispose (disposing); }
-
- public ExpanderButton? ExpandButton { get; }
-
public bool ShowViewIdentifier
{
get => Padding.Thickness != Thickness.Empty;
@@ -179,22 +93,18 @@ public class AdornmentsEditor : View
}
else
{
- Padding.Thickness =Thickness.Empty;
+ Padding.Thickness = Thickness.Empty;
}
}
}
private void AdornmentsEditor_Initialized (object? sender, EventArgs e)
{
- BorderStyle = LineStyle.Dotted;
-
- Border.Add (ExpandButton!);
-
_marginEditor = new ()
{
X = 0,
Y = 0,
- SuperViewRendersLineCanvas = true
+ SuperViewRendersLineCanvas = true,
};
Add (_marginEditor);
@@ -215,11 +125,9 @@ public class AdornmentsEditor : View
Add (_paddingEditor);
- _marginEditor.AdornmentToEdit = _viewToEdit?.Margin ?? null;
- _borderEditor.AdornmentToEdit = _viewToEdit?.Border ?? null;
- _paddingEditor.AdornmentToEdit = _viewToEdit?.Padding ?? null;
+ _marginEditor.AdornmentToEdit = ViewToEdit?.Margin ?? null;
+ _borderEditor.AdornmentToEdit = ViewToEdit?.Border ?? null;
+ _paddingEditor.AdornmentToEdit = ViewToEdit?.Padding ?? null;
- Application.MouseEvent += ApplicationOnMouseEvent;
- Application.Navigation!.FocusedChanged += NavigationOnFocusedChanged;
}
}
diff --git a/UICatalog/Scenarios/Editors/DimEditor.cs b/UICatalog/Scenarios/Editors/DimEditor.cs
index 176472f78..c9ade18a5 100644
--- a/UICatalog/Scenarios/Editors/DimEditor.cs
+++ b/UICatalog/Scenarios/Editors/DimEditor.cs
@@ -10,101 +10,26 @@ namespace UICatalog.Scenarios;
///
/// Provides an editor UI for the Margin, Border, and Padding of a View.
///
-public class DimEditor : View
+public class DimEditor : EditorBase
{
public DimEditor ()
{
Title = "Dim";
-
- BorderStyle = LineStyle.Rounded;
-
- Width = Dim.Auto (DimAutoStyle.Content);
- Height = Dim.Auto (DimAutoStyle.Content);
-
- CanFocus = true;
-
- _expandButton = new ()
- {
- Orientation = Orientation.Vertical
- };
-
-
- TabStop = TabBehavior.TabStop;
-
-
Initialized += DimEditor_Initialized;
-
- AddCommand (Command.Accept, () => true);
}
- private View? _viewToEdit;
-
private int _value;
private RadioGroup? _dimRadioGroup;
private TextField? _valueEdit;
- ///
- /// Gets or sets whether the DimEditor should automatically select the View to edit
- /// based on the values of and .
- ///
- public bool AutoSelectViewToEdit { get; set; }
-
- ///
- /// Gets or sets the View that will scope the behavior of .
- ///
- public View? AutoSelectSuperView { get; set; }
-
- ///
- /// Gets or sets whether auto select with the mouse will select Adornments or just Views.
- ///
- public bool AutoSelectAdornments { get; set; }
-
- public View? ViewToEdit
- {
- get => _viewToEdit;
- set
- {
- if (_viewToEdit == value)
- {
- return;
- }
-
- if (value is null && _viewToEdit is { })
- {
- _viewToEdit.SubviewsLaidOut -= View_LayoutComplete;
- }
-
- _viewToEdit = value;
-
- if (_viewToEdit is { })
- {
- _viewToEdit.SubviewsLaidOut += View_LayoutComplete;
-
- _viewToEdit.SubviewLayout += (sender, args) =>
- {
-
- };
- }
- }
- }
-
- private void View_LayoutComplete (object? sender, LayoutEventArgs args)
- {
- UpdateSettings ();
- }
-
- private bool _updatingSettings = false;
-
- private void UpdateSettings ()
+ protected override void OnUpdateSettings ()
{
if (ViewToEdit is null)
{
return;
}
- _updatingSettings = true;
-
- Dim? dim;
+ Dim dim;
if (Dimension == Dimension.Width)
{
dim = ViewToEdit.Width;
@@ -116,7 +41,7 @@ public class DimEditor : View
try
{
- _dimRadioGroup!.SelectedItem = _dimNames.IndexOf (_dimNames.First (s => dim!.ToString ().StartsWith(s)));
+ _dimRadioGroup!.SelectedItem = _dimNames.IndexOf (Enumerable.First (_dimNames, s => dim!.ToString ().StartsWith (s)));
}
catch (InvalidOperationException e)
{
@@ -134,7 +59,7 @@ public class DimEditor : View
break;
case DimFill fill:
var margin = fill.Margin as DimAbsolute;
- _valueEdit.Enabled = margin is {};
+ _valueEdit.Enabled = margin is { };
_value = margin?.Size ?? 0;
_valueEdit!.Text = _value.ToString ();
break;
@@ -152,76 +77,12 @@ public class DimEditor : View
_valueEdit!.Text = dim!.ToString ();
break;
}
-
- _updatingSettings = false;
}
- private void NavigationOnFocusedChanged (object? sender, EventArgs e)
- {
- if (AutoSelectSuperView is null)
- {
- return;
- }
-
- if (ApplicationNavigation.IsInHierarchy (this, Application.Navigation!.GetFocused ()))
- {
- return;
- }
-
- if (!ApplicationNavigation.IsInHierarchy (AutoSelectSuperView, Application.Navigation!.GetFocused ()))
- {
- return;
- }
-
- ViewToEdit = Application.Navigation!.GetFocused ();
- }
-
- private void ApplicationOnMouseEvent (object? sender, MouseEventArgs e)
- {
- if (e.Flags != MouseFlags.Button1Clicked || !AutoSelectViewToEdit)
- {
- return;
- }
-
- if ((AutoSelectSuperView is { } && !AutoSelectSuperView.FrameToScreen ().Contains (e.Position))
- || FrameToScreen ().Contains (e.Position))
- {
- return;
- }
-
- View? view = e.View;
-
- if (view is null)
- {
- return;
- }
-
- if (view is Adornment adornment)
- {
- ViewToEdit = AutoSelectAdornments ? adornment : adornment.Parent;
- }
- else
- {
- ViewToEdit = view;
- }
- }
-
- ///
- protected override void Dispose (bool disposing)
- {
- base.Dispose (disposing);
- }
-
- private readonly ExpanderButton? _expandButton;
-
- public ExpanderButton? ExpandButton => _expandButton;
-
public Dimension Dimension { get; set; }
private void DimEditor_Initialized (object? sender, EventArgs e)
{
- Border.Add (_expandButton!);
-
var label = new Label
{
X = 0, Y = 0,
@@ -254,9 +115,6 @@ public class DimEditor : View
Add (_valueEdit);
Add (_dimRadioGroup);
-
- Application.MouseEvent += ApplicationOnMouseEvent;
- Application.Navigation!.FocusedChanged += NavigationOnFocusedChanged;
}
private void OnRadioGroupOnSelectedItemChanged (object? s, SelectedItemChangedArgs selected) { DimChanged (); }
@@ -267,7 +125,7 @@ public class DimEditor : View
private void DimChanged ()
{
- if (ViewToEdit == null || _updatingSettings)
+ if (ViewToEdit == null || UpdatingSettings)
{
return;
}
diff --git a/UICatalog/Scenarios/Editors/EditorBase.cs b/UICatalog/Scenarios/Editors/EditorBase.cs
new file mode 100644
index 000000000..a9f6e9255
--- /dev/null
+++ b/UICatalog/Scenarios/Editors/EditorBase.cs
@@ -0,0 +1,155 @@
+using System;
+using System.Diagnostics;
+using System.Linq;
+using Terminal.Gui;
+
+namespace UICatalog.Scenarios;
+
+public abstract class EditorBase : View
+{
+ protected EditorBase ()
+ {
+ BorderStyle = LineStyle.Rounded;
+
+ Width = Dim.Auto (DimAutoStyle.Content);
+ Height = Dim.Auto (DimAutoStyle.Content);
+
+ CanFocus = true;
+
+ ExpanderButton = new ()
+ {
+ Orientation = Orientation.Vertical
+ };
+
+
+ TabStop = TabBehavior.TabStop;
+
+ Initialized += OnInitialized;
+
+ void OnInitialized (object sender, EventArgs e)
+ {
+ Border.Add (ExpanderButton!);
+
+ Application.MouseEvent += ApplicationOnMouseEvent;
+ Application.Navigation!.FocusedChanged += NavigationOnFocusedChanged;
+
+ }
+
+ AddCommand (Command.Accept, () => true);
+
+ }
+
+ public ExpanderButton ExpanderButton {get; set; }
+
+ public bool UpdatingSettings { get; private set; } = false;
+
+ private void View_LayoutComplete (object sender, LayoutEventArgs e)
+ {
+ UpdatingSettings = true;
+
+ OnUpdateSettings ();
+
+ UpdatingSettings = false;
+ }
+
+
+ private View _viewToEdit;
+
+ public View ViewToEdit
+ {
+ get => _viewToEdit;
+ set
+ {
+ if (_viewToEdit == value)
+ {
+ return;
+ }
+
+
+ if (value is null && _viewToEdit is { })
+ {
+ _viewToEdit.SubviewsLaidOut -= View_LayoutComplete;
+ }
+
+ _viewToEdit = value;
+
+ if (_viewToEdit is { })
+ {
+ _viewToEdit.SubviewsLaidOut += View_LayoutComplete;
+ }
+
+ OnViewToEditChanged ();
+ }
+ }
+
+ protected virtual void OnViewToEditChanged () { }
+
+ protected virtual void OnUpdateSettings () { }
+
+ ///
+ /// Gets or sets whether the DimEditor should automatically select the View to edit
+ /// based on the values of and .
+ ///
+ public bool AutoSelectViewToEdit { get; set; }
+
+ ///
+ /// Gets or sets the View that will scope the behavior of .
+ ///
+ public View AutoSelectSuperView { get; set; }
+
+ ///
+ /// Gets or sets whether auto select with the mouse will select Adornments or just Views.
+ ///
+ public bool AutoSelectAdornments { get; set; }
+
+
+ private void NavigationOnFocusedChanged (object sender, EventArgs e)
+ {
+ if (AutoSelectSuperView is null)
+ {
+ return;
+ }
+
+ if (ApplicationNavigation.IsInHierarchy (this, Application.Navigation!.GetFocused ()))
+ {
+ return;
+ }
+
+ if (!ApplicationNavigation.IsInHierarchy (AutoSelectSuperView, Application.Navigation!.GetFocused ()))
+ {
+ return;
+ }
+
+ ViewToEdit = Application.Navigation!.GetFocused ();
+ }
+
+ private void ApplicationOnMouseEvent (object sender, MouseEventArgs e)
+ {
+ if (e.Flags != MouseFlags.Button1Clicked || !AutoSelectViewToEdit)
+ {
+ return;
+ }
+
+ if ((AutoSelectSuperView is { } && !AutoSelectSuperView.FrameToScreen ().Contains (e.Position))
+ || FrameToScreen ().Contains (e.Position))
+ {
+ return;
+ }
+
+ View view = e.View;
+
+ if (view is null)
+ {
+ return;
+ }
+
+ if (view is Adornment adornment)
+ {
+ ViewToEdit = AutoSelectAdornments ? adornment : adornment.Parent;
+ }
+ else
+ {
+ ViewToEdit = view;
+ }
+ }
+}
diff --git a/UICatalog/Scenarios/Editors/LayoutEditor.cs b/UICatalog/Scenarios/Editors/LayoutEditor.cs
index 34a679f1f..a7aed7d6d 100644
--- a/UICatalog/Scenarios/Editors/LayoutEditor.cs
+++ b/UICatalog/Scenarios/Editors/LayoutEditor.cs
@@ -9,185 +9,50 @@ namespace UICatalog.Scenarios;
///
/// Provides an editor UI for the Margin, Border, and Padding of a View.
///
-public class LayoutEditor : View
+public class LayoutEditor : EditorBase
{
public LayoutEditor ()
{
Title = "_LayoutEditor";
-
- Width = Dim.Auto (DimAutoStyle.Content);
- Height = Dim.Auto (DimAutoStyle.Content);
-
CanFocus = true;
- TabStop = TabBehavior.TabGroup;
-
- _expandButton = new ()
- {
- Orientation = Orientation.Vertical
- };
+ BorderStyle = LineStyle.Rounded;
Initialized += LayoutEditor_Initialized;
-
- AddCommand (Command.Accept, () => true);
}
- private View? _viewToEdit;
-
- private readonly List _dimNames = ["Auto", "Percent", "Fill", "Absolute"];
-
private PosEditor? _xEditor;
private PosEditor? _yEditor;
private DimEditor? _widthEditor;
private DimEditor? _heightEditor;
- ///
- /// Gets or sets whether the LayoutEditor should automatically select the View to edit
- /// based on the values of and .
- ///
- public bool AutoSelectViewToEdit { get; set; }
-
- ///
- /// Gets or sets the View that will scope the behavior of .
- ///
- public View? AutoSelectSuperView { get; set; }
-
- ///
- /// Gets or sets whether auto select with the mouse will select Adornments or just Views.
- ///
- public bool AutoSelectAdornments { get; set; }
-
- public View? ViewToEdit
+ protected override void OnViewToEditChanged ()
{
- get => _viewToEdit;
- set
+
+ if (_xEditor is { })
{
- if (_viewToEdit == value)
- {
- return;
- }
+ _xEditor.ViewToEdit = ViewToEdit;
+ }
- if (value is null && _viewToEdit is { })
- {
- _viewToEdit.SubviewsLaidOut -= View_LayoutComplete;
- }
+ if (_yEditor is { })
+ {
+ _yEditor.ViewToEdit = ViewToEdit;
+ }
- _viewToEdit = value;
-
- if (_viewToEdit is { })
- {
- _viewToEdit.SubviewsLaidOut += View_LayoutComplete;
- }
-
- if (_xEditor is { })
- {
- _xEditor.ViewToEdit = _viewToEdit;
- }
-
- if (_yEditor is { })
- {
- _yEditor.ViewToEdit = _viewToEdit;
- }
-
- if (_widthEditor is { })
- {
- _widthEditor.ViewToEdit = _viewToEdit;
- }
-
- if (_heightEditor is { })
- {
- _heightEditor.ViewToEdit = _viewToEdit;
- }
+ if (_widthEditor is { })
+ {
+ _widthEditor.ViewToEdit = ViewToEdit;
+ }
+ if (_heightEditor is { })
+ {
+ _heightEditor.ViewToEdit = ViewToEdit;
}
}
- private void View_LayoutComplete (object? sender, LayoutEventArgs args)
- {
- UpdateSettings ();
- }
-
- private bool _updatingSettings = false;
-
- private void UpdateSettings ()
- {
- if (ViewToEdit is null)
- {
- return;
- }
-
- _updatingSettings = true;
-
- _updatingSettings = false;
- }
-
- private void NavigationOnFocusedChanged (object? sender, EventArgs e)
- {
- if (AutoSelectSuperView is null)
- {
- return;
- }
-
- if (ApplicationNavigation.IsInHierarchy (this, Application.Navigation!.GetFocused ()))
- {
- return;
- }
-
- if (!ApplicationNavigation.IsInHierarchy (AutoSelectSuperView, Application.Navigation!.GetFocused ()))
- {
- return;
- }
-
- ViewToEdit = Application.Navigation!.GetFocused ();
- }
-
- private void ApplicationOnMouseEvent (object? sender, MouseEventArgs e)
- {
- if (e.Flags != MouseFlags.Button1Clicked || !AutoSelectViewToEdit)
- {
- return;
- }
-
- if ((AutoSelectSuperView is { } && !AutoSelectSuperView.FrameToScreen ().Contains (e.Position))
- || FrameToScreen ().Contains (e.Position))
- {
- return;
- }
-
- View? view = e.View;
-
- if (view is null)
- {
- return;
- }
-
- if (view is Adornment adornment)
- {
- ViewToEdit = AutoSelectAdornments ? adornment : adornment.Parent;
- }
- else
- {
- ViewToEdit = view;
- }
- }
-
- ///
- protected override void Dispose (bool disposing)
- {
- base.Dispose (disposing);
- }
-
- private readonly ExpanderButton? _expandButton;
-
- public ExpanderButton? ExpandButton => _expandButton;
-
private void LayoutEditor_Initialized (object? sender, EventArgs e)
{
- BorderStyle = LineStyle.Rounded;
-
- Border.Add (_expandButton!);
-
_xEditor = new ()
{
Title = "_X",
@@ -200,7 +65,7 @@ public class LayoutEditor : View
Title = "_Y",
BorderStyle = LineStyle.None,
Dimension = Dimension.Height,
- X = Pos.Right(_xEditor) + 1
+ X = Pos.Right (_xEditor) + 1
};
@@ -209,7 +74,7 @@ public class LayoutEditor : View
Title = "_Width",
BorderStyle = LineStyle.None,
Dimension = Dimension.Width,
- X = Pos.Right(_yEditor) + 1
+ X = Pos.Right (_yEditor) + 1
};
_heightEditor = new ()
@@ -221,8 +86,5 @@ public class LayoutEditor : View
};
Add (_xEditor, _yEditor, _widthEditor, _heightEditor);
-
- Application.MouseEvent += ApplicationOnMouseEvent;
- Application.Navigation!.FocusedChanged += NavigationOnFocusedChanged;
}
}
diff --git a/UICatalog/Scenarios/Editors/PosEditor.cs b/UICatalog/Scenarios/Editors/PosEditor.cs
index e57d3fb3f..0875b18b1 100644
--- a/UICatalog/Scenarios/Editors/PosEditor.cs
+++ b/UICatalog/Scenarios/Editors/PosEditor.cs
@@ -10,94 +10,28 @@ namespace UICatalog.Scenarios;
///
/// Provides an editor UI for the Margin, Border, and Padding of a View.
///
-public class PosEditor : View
+public class PosEditor : EditorBase
{
public PosEditor ()
{
Title = "Pos";
- BorderStyle = LineStyle.Rounded;
-
- Width = Dim.Auto (DimAutoStyle.Content);
- Height = Dim.Auto (DimAutoStyle.Content);
-
- CanFocus = true;
-
- _expandButton = new ()
- {
- Orientation = Orientation.Vertical
- };
-
-
- TabStop = TabBehavior.TabStop;
-
Initialized += PosEditor_Initialized;
-
- AddCommand (Command.Accept, () => true);
}
- private View? _viewToEdit;
-
private int _value;
private RadioGroup? _posRadioGroup;
private TextField? _valueEdit;
- ///
- /// Gets or sets whether the PosEditor should automatically select the View to edit
- /// based on the values of and .
- ///
- public bool AutoSelectViewToEdit { get; set; }
- ///
- /// Gets or sets the View that will scope the behavior of .
- ///
- public View? AutoSelectSuperView { get; set; }
- ///
- /// Gets or sets whether auto select with the mouse will select Adornments or just Views.
- ///
- public bool AutoSelectAdornments { get; set; }
-
- public View? ViewToEdit
- {
- get => _viewToEdit;
- set
- {
- if (_viewToEdit == value)
- {
- return;
- }
-
- if (value is null && _viewToEdit is { })
- {
- _viewToEdit.SubviewsLaidOut -= View_LayoutComplete;
- }
-
- _viewToEdit = value;
-
- if (_viewToEdit is { })
- {
- _viewToEdit.SubviewsLaidOut += View_LayoutComplete;
- }
- }
- }
-
- private void View_LayoutComplete (object? sender, LayoutEventArgs args)
- {
- UpdateSettings ();
- }
-
- private bool _updatingSettings = false;
-
- private void UpdateSettings ()
+ protected override void OnUpdateSettings ()
{
if (ViewToEdit is null)
{
return;
}
- _updatingSettings = true;
-
Pos? pos;
if (Dimension == Dimension.Width)
{
@@ -140,76 +74,12 @@ public class PosEditor : View
_valueEdit!.Text = pos.ToString ();
break;
}
-
- _updatingSettings = false;
}
- private void NavigationOnFocusedChanged (object? sender, EventArgs e)
- {
- if (AutoSelectSuperView is null)
- {
- return;
- }
-
- if (ApplicationNavigation.IsInHierarchy (this, Application.Navigation!.GetFocused ()))
- {
- return;
- }
-
- if (!ApplicationNavigation.IsInHierarchy (AutoSelectSuperView, Application.Navigation!.GetFocused ()))
- {
- return;
- }
-
- ViewToEdit = Application.Navigation!.GetFocused ();
- }
-
- private void ApplicationOnMouseEvent (object? sender, MouseEventArgs e)
- {
- if (e.Flags != MouseFlags.Button1Clicked || !AutoSelectViewToEdit)
- {
- return;
- }
-
- if ((AutoSelectSuperView is { } && !AutoSelectSuperView.FrameToScreen ().Contains (e.Position))
- || FrameToScreen ().Contains (e.Position))
- {
- return;
- }
-
- View? view = e.View;
-
- if (view is null)
- {
- return;
- }
-
- if (view is Adornment adornment)
- {
- ViewToEdit = AutoSelectAdornments ? adornment : adornment.Parent;
- }
- else
- {
- ViewToEdit = view;
- }
- }
-
- ///
- protected override void Dispose (bool disposing)
- {
- base.Dispose (disposing);
- }
-
- private readonly ExpanderButton? _expandButton;
-
- public ExpanderButton? ExpandButton => _expandButton;
-
public Dimension Dimension { get; set; }
private void PosEditor_Initialized (object? sender, EventArgs e)
{
- Border.Add (_expandButton!);
-
var label = new Label
{
X = 0, Y = 0,
@@ -243,8 +113,6 @@ public class PosEditor : View
Add (_posRadioGroup);
- Application.MouseEvent += ApplicationOnMouseEvent;
- Application.Navigation!.FocusedChanged += NavigationOnFocusedChanged;
}
private void OnRadioGroupOnSelectedItemChanged (object? s, SelectedItemChangedArgs selected) { PosChanged (); }
@@ -255,7 +123,7 @@ public class PosEditor : View
private void PosChanged ()
{
- if (ViewToEdit == null || _updatingSettings)
+ if (ViewToEdit == null || UpdatingSettings)
{
return;
}