mirror of
https://github.com/gui-cs/Terminal.Gui.git
synced 2025-12-26 15:57:56 +01:00
Code cleanup & doc fix
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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`.
|
||||
|
||||
Reference in New Issue
Block a user