Code cleanup & doc fix

This commit is contained in:
Tig
2024-08-03 17:50:37 -06:00
parent 87726454c9
commit 5f567be2d0
2 changed files with 93 additions and 92 deletions

View File

@@ -38,8 +38,6 @@
/// </remarks>
public class Shortcut : View, IOrientation, IDesignable
{
private readonly OrientationHelper _orientationHelper;
/// <summary>
/// Creates a new instance of <see cref="Shortcut"/>.
/// </summary>
@@ -76,7 +74,7 @@ public class Shortcut : View, IOrientation, IDesignable
CommandView = new ()
{
Width = Dim.Auto (),
Height = Dim.Auto (DimAutoStyle.Auto, minimumContentDim: 1)
Height = Dim.Auto (1)
};
HelpView.Id = "_helpView";
@@ -142,45 +140,25 @@ public class Shortcut : View, IOrientation, IDesignable
/// </summary>
public Shortcut () : this (Key.Empty, string.Empty, null) { }
#region IOrientation members
/// <summary>
/// Gets or sets the <see cref="Orientation"/> for this <see cref="Bar"/>. The default is
/// <see cref="Orientation.Horizontal"/>.
/// </summary>
/// <remarks>
/// <para>
/// Horizontal orientation arranges the command, help, and key parts of each <see cref="Shortcut"/>s from right to
/// left
/// Vertical orientation arranges the command, help, and key parts of each <see cref="Shortcut"/>s from left to
/// right.
/// </para>
/// </remarks>
public Orientation Orientation
{
get => _orientationHelper.Orientation;
set => _orientationHelper.Orientation = value;
}
/// <inheritdoc/>
public event EventHandler<CancelEventArgs<Orientation>> OrientationChanging;
/// <inheritdoc/>
public event EventHandler<EventArgs<Orientation>> OrientationChanged;
/// <summary>Called when <see cref="Orientation"/> has changed.</summary>
/// <param name="newOrientation"></param>
public void OnOrientationChanged (Orientation newOrientation)
{
// TODO: Determine what, if anything, is opinionated about the orientation.
SetNeedsLayout ();
}
#endregion
private readonly OrientationHelper _orientationHelper;
private AlignmentModes _alignmentModes = AlignmentModes.StartToEnd | AlignmentModes.IgnoreFirstOrLast;
// This is used to calculate the minimum width of the Shortcut when the width is NOT Dim.Auto
private int? _minimumDimAutoWidth;
private Color? _savedForeColor;
/// <inheritdoc/>
public bool EnableForDesign ()
{
Title = "_Shortcut";
HelpText = "Shortcut help";
Key = Key.F1;
return true;
}
/// <summary>
/// Gets or sets the <see cref="AlignmentModes"/> for this <see cref="Shortcut"/>.
/// </summary>
@@ -202,6 +180,30 @@ public class Shortcut : View, IOrientation, IDesignable
}
}
/// <inheritdoc/>
protected override void Dispose (bool disposing)
{
if (disposing)
{
if (CommandView?.IsAdded == false)
{
CommandView.Dispose ();
}
if (HelpView?.IsAdded == false)
{
HelpView.Dispose ();
}
if (KeyView?.IsAdded == false)
{
KeyView.Dispose ();
}
}
base.Dispose (disposing);
}
// When one of the subviews is "empty" we don't want to show it. So we
// Use Add/Remove. We need to be careful to add them in the right order
// so Pos.Align works correctly.
@@ -225,8 +227,15 @@ public class Shortcut : View, IOrientation, IDesignable
}
}
// This is used to calculate the minimum width of the Shortcut when the width is NOT Dim.Auto
private int? _minimumDimAutoWidth;
private Thickness GetMarginThickness ()
{
if (Orientation == Orientation.Vertical)
{
return new (1, 0, 1, 0);
}
return new (1, 0, 1, 0);
}
// When layout starts, we need to adjust the layout of the HelpView and KeyView
private void OnLayoutStarted (object sender, LayoutEventArgs e)
@@ -305,18 +314,16 @@ public class Shortcut : View, IOrientation, IDesignable
}
}
private Thickness GetMarginThickness ()
private bool? OnSelect (CommandContext ctx)
{
if (Orientation == Orientation.Vertical)
if (CommandView.GetSupportedCommands ().Contains (Command.Select))
{
return new (1, 0, 1, 0);
return CommandView.InvokeCommand (Command.Select, ctx.Key, ctx.KeyBinding);
}
return new (1, 0, 1, 0);
return false;
}
private Color? _savedForeColor;
private void Shortcut_Highlight (object sender, CancelEventArgs<HighlightStyle> e)
{
if (e.CurrentValue.HasFlag (HighlightStyle.Pressed))
@@ -368,6 +375,43 @@ public class Shortcut : View, IOrientation, IDesignable
// TODO: Remove. This does nothing.
}
#region IOrientation members
/// <summary>
/// Gets or sets the <see cref="Orientation"/> for this <see cref="Bar"/>. The default is
/// <see cref="Orientation.Horizontal"/>.
/// </summary>
/// <remarks>
/// <para>
/// Horizontal orientation arranges the command, help, and key parts of each <see cref="Shortcut"/>s from right to
/// left
/// Vertical orientation arranges the command, help, and key parts of each <see cref="Shortcut"/>s from left to
/// right.
/// </para>
/// </remarks>
public Orientation Orientation
{
get => _orientationHelper.Orientation;
set => _orientationHelper.Orientation = value;
}
/// <inheritdoc/>
public event EventHandler<CancelEventArgs<Orientation>> OrientationChanging;
/// <inheritdoc/>
public event EventHandler<EventArgs<Orientation>> OrientationChanged;
/// <summary>Called when <see cref="Orientation"/> has changed.</summary>
/// <param name="newOrientation"></param>
public void OnOrientationChanged (Orientation newOrientation)
{
// TODO: Determine what, if anything, is opinionated about the orientation.
SetNeedsLayout ();
}
#endregion
#region Command
private View _commandView = new ();
@@ -644,6 +688,7 @@ public class Shortcut : View, IOrientation, IDesignable
{
KeyBindings.Remove (oldKey);
}
KeyBindings.Remove (Key);
KeyBindings.Add (Key, KeyBindingScope | KeyBindingScope.HotKey, Command.Accept);
}
@@ -724,16 +769,6 @@ public class Shortcut : View, IOrientation, IDesignable
#endregion Accept Handling
private bool? OnSelect (CommandContext ctx)
{
if (CommandView.GetSupportedCommands ().Contains (Command.Select))
{
return CommandView.InvokeCommand (Command.Select, ctx.Key, ctx.KeyBinding);
}
return false;
}
#region Focus
/// <inheritdoc/>
@@ -803,38 +838,4 @@ public class Shortcut : View, IOrientation, IDesignable
}
#endregion Focus
/// <inheritdoc/>
public bool EnableForDesign ()
{
Title = "_Shortcut";
HelpText = "Shortcut help";
Key = Key.F1;
return true;
}
/// <inheritdoc/>
protected override void Dispose (bool disposing)
{
if (disposing)
{
if (CommandView?.IsAdded == false)
{
CommandView.Dispose ();
}
if (HelpView?.IsAdded == false)
{
HelpView.Dispose ();
}
if (KeyView?.IsAdded == false)
{
KeyView.Dispose ();
}
}
base.Dispose (disposing);
}
}

View File

@@ -5,7 +5,7 @@ Terminal.Gui provides a rich system for how `View` objects are laid out relative
## Coordinates
* **Screen-Relative** - Describes the dimensions and characteristics of the underlying terminal. Currently Terminal.Gui only supports applications that run "full-screen", meaning they fill the entire terminal when running. As the user resizes their terminal, the `Screen` changes size and the applicaiton will be resized to fit. *Screen-Relative* means an origin (`0, 0`) at the top-left corner of the terminal. `ConsoleDriver`s operate exclusively on *Screen-Relative* coordinates.
* **Application.Relative** - The dimensions and characteristics of the application. Because only full-screen apps are currently supported, `Application` is effectively the same as `Screen` from a layout perspective. *Application-Relative* currently means an origin (`0, 0`) at the top-left corner of the terminal. `Applicaiton.Top` is a `View` with a top-left corner fixed at the *Application.Relative* coordinate of (`0, 0`) and is the size of `Screen`.
* **Application-Relative** - The dimensions and characteristics of the application. Because only full-screen apps are currently supported, `Application` is effectively the same as `Screen` from a layout perspective. *Application-Relative* currently means an origin (`0, 0`) at the top-left corner of the terminal. `Applicaiton.Top` is a `View` with a top-left corner fixed at the *Application.Relative* coordinate of (`0, 0`) and is the size of `Screen`.
* **Frame-Relative** - The `Frame` property of a `View` is a rectangle that describes the current location and size of the view relative to the `Superview`'s content area. *Frame-Relative* means a coordinate is relative to the top-left corner of the View in question. `View.FrameToScreen ()` and `View.ScreenToFrame ()` are helper methods for translating a *Frame-Relative* coordinate to a *Screen-Relative* coordinate and vice-versa.
* **Content-Relative** - A rectangle, with an origin of (`0, 0`) and size (defined by `View.GetContentSize()`) where the View's content exists. *Content-Relative* means a coordinate is relative to the top-left corner of the content, which is always (`0,0`). `View.ContentToScreen ()` and `View.ScreenToContent ()` are helper methods for translating a *Content-Relative* coordinate to a *Screen-Relative* coordinate and vice-versa.
* **Viewport-Relative** - A *Content-Relative* rectangle representing the subset of the View's content that is visible to the user. If `View.GetContentSize()` is larger than the Viewport, scrolling is enabled. *Viewport-Relative* means a coordinate that is bound by (`0,0`) and the size of the inner-rectangle of the View's `Padding`. The View drawing primitives (e.g. `View.Move`) take *Viewport-Relative* coordinates; `Move (0, 0)` means the `Cell` in the top-left corner of the inner rectangle of `Padding`. `View.ViewportToScreen ()` and `View.ScreenToViewport ()` are helper methods for translating a *Viewport-Relative* coordinate to a *Screen-Relative* coordinate and vice-versa. To convert a *Viewport-Relative* coordinate to a *Content-Relative* coordinate, simply subtract `Viewport.X` and/or `Viewport.Y` from the *Content-Relative* coordinate. To convert a *Viewport-Relative* coordinate to a *Frame-Relative* coordinate, subtract the point returned by `View.GetViewportOffsetFromFrame`.