|
@@ -348,7 +348,7 @@ namespace Terminal.Gui {
|
|
|
}
|
|
|
if (base.CanFocus != value) {
|
|
|
base.CanFocus = value;
|
|
|
-
|
|
|
+
|
|
|
switch (value) {
|
|
|
case false when tabIndex > -1:
|
|
|
TabIndex = -1;
|
|
@@ -357,7 +357,7 @@ namespace Terminal.Gui {
|
|
|
SuperView.CanFocus = true;
|
|
|
break;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
if (value && tabIndex == -1) {
|
|
|
TabIndex = SuperView != null ? SuperView.tabIndexes.IndexOf (this) : -1;
|
|
|
}
|
|
@@ -881,10 +881,10 @@ namespace Terminal.Gui {
|
|
|
NeedDisplay = new Rect (x, y, w, h);
|
|
|
}
|
|
|
container?.SetChildNeedsDisplay ();
|
|
|
-
|
|
|
+
|
|
|
if (subviews == null)
|
|
|
return;
|
|
|
-
|
|
|
+
|
|
|
foreach (var view in subviews)
|
|
|
if (view.Frame.IntersectsWith (region)) {
|
|
|
var childRegion = Rect.Intersect (view.Frame, region);
|
|
@@ -1132,7 +1132,7 @@ namespace Terminal.Gui {
|
|
|
// Computes the real row, col relative to the screen.
|
|
|
rrow = row + frame.Y;
|
|
|
rcol = col + frame.X;
|
|
|
-
|
|
|
+
|
|
|
var curContainer = container;
|
|
|
while (curContainer != null) {
|
|
|
rrow += curContainer.frame.Y;
|
|
@@ -1303,7 +1303,7 @@ namespace Terminal.Gui {
|
|
|
}
|
|
|
|
|
|
bool hasFocus;
|
|
|
-
|
|
|
+
|
|
|
/// <inheritdoc/>
|
|
|
public override bool HasFocus => hasFocus;
|
|
|
|
|
@@ -1495,14 +1495,17 @@ namespace Terminal.Gui {
|
|
|
|
|
|
if (Border != null) {
|
|
|
Border.DrawContent (this);
|
|
|
- } else if ((GetType ().IsPublic || GetType ().IsNestedPublic) && !IsOverridden (this, "Redraw") &&
|
|
|
+ } else if (ustring.IsNullOrEmpty (TextFormatter.Text) &&
|
|
|
+ (GetType ().IsPublic || GetType ().IsNestedPublic) && !IsOverridden (this, "Redraw") &&
|
|
|
(!NeedDisplay.IsEmpty || ChildNeedsDisplay || LayoutNeeded)) {
|
|
|
|
|
|
Clear ();
|
|
|
+ SetChildNeedsDisplay ();
|
|
|
}
|
|
|
|
|
|
if (!ustring.IsNullOrEmpty (TextFormatter.Text)) {
|
|
|
Clear ();
|
|
|
+ SetChildNeedsDisplay ();
|
|
|
// Draw any Text
|
|
|
if (TextFormatter != null) {
|
|
|
TextFormatter.NeedsFormat = true;
|
|
@@ -1694,7 +1697,7 @@ namespace Terminal.Gui {
|
|
|
if (args.Handled)
|
|
|
return true;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
return Focused?.Enabled == true && Focused?.ProcessKey (keyEvent) == true;
|
|
|
}
|
|
|
|
|
@@ -1870,7 +1873,7 @@ namespace Terminal.Gui {
|
|
|
return true;
|
|
|
if (subviews == null || subviews.Count == 0)
|
|
|
return false;
|
|
|
-
|
|
|
+
|
|
|
foreach (var view in subviews)
|
|
|
if (view.Enabled && view.ProcessHotKey (keyEvent))
|
|
|
return true;
|
|
@@ -1897,7 +1900,7 @@ namespace Terminal.Gui {
|
|
|
return true;
|
|
|
if (subviews == null || subviews.Count == 0)
|
|
|
return false;
|
|
|
-
|
|
|
+
|
|
|
foreach (var view in subviews)
|
|
|
if (view.Enabled && view.ProcessColdKey (keyEvent))
|
|
|
return true;
|
|
@@ -2043,7 +2046,7 @@ namespace Terminal.Gui {
|
|
|
FocusLast ();
|
|
|
return focused != null;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
var focusedIdx = -1;
|
|
|
for (var i = tabIndexes.Count; i > 0;) {
|
|
|
i--;
|
|
@@ -2153,7 +2156,7 @@ namespace Terminal.Gui {
|
|
|
actX = x.Anchor (hostFrame.Width - actW);
|
|
|
} else {
|
|
|
actX = x?.Anchor (hostFrame.Width) ?? 0;
|
|
|
-
|
|
|
+
|
|
|
switch (width) {
|
|
|
case null:
|
|
|
actW = AutoSize ? s.Width : hostFrame.Width;
|
|
@@ -2179,7 +2182,7 @@ namespace Terminal.Gui {
|
|
|
actY = y.Anchor (hostFrame.Height - actH);
|
|
|
} else {
|
|
|
actY = y?.Anchor (hostFrame.Height) ?? 0;
|
|
|
-
|
|
|
+
|
|
|
switch (height) {
|
|
|
case null:
|
|
|
actH = AutoSize ? s.Height : hostFrame.Height;
|
|
@@ -2194,7 +2197,7 @@ namespace Terminal.Gui {
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
var r = new Rect (actX, actY, actW, actH);
|
|
|
if (Frame != r) {
|
|
|
Frame = new Rect (actX, actY, actW, actH);
|
|
@@ -2325,48 +2328,44 @@ namespace Terminal.Gui {
|
|
|
void CollectPos (Pos pos, View from, ref HashSet<View> nNodes, ref HashSet<(View, View)> nEdges)
|
|
|
{
|
|
|
switch (pos) {
|
|
|
- case Pos.PosView pv:
|
|
|
- {
|
|
|
- if (pv.Target != this) {
|
|
|
- nEdges.Add ((pv.Target, from));
|
|
|
- }
|
|
|
- foreach (var v in from.InternalSubviews) {
|
|
|
- CollectAll (v, ref nNodes, ref nEdges);
|
|
|
+ case Pos.PosView pv: {
|
|
|
+ if (pv.Target != this) {
|
|
|
+ nEdges.Add ((pv.Target, from));
|
|
|
+ }
|
|
|
+ foreach (var v in from.InternalSubviews) {
|
|
|
+ CollectAll (v, ref nNodes, ref nEdges);
|
|
|
+ }
|
|
|
+ return;
|
|
|
}
|
|
|
- return;
|
|
|
- }
|
|
|
- case Pos.PosCombine pc:
|
|
|
- {
|
|
|
- foreach (var v in from.InternalSubviews) {
|
|
|
- CollectPos (pc.left, from, ref nNodes, ref nEdges);
|
|
|
- CollectPos (pc.right, from, ref nNodes, ref nEdges);
|
|
|
+ case Pos.PosCombine pc: {
|
|
|
+ foreach (var v in from.InternalSubviews) {
|
|
|
+ CollectPos (pc.left, from, ref nNodes, ref nEdges);
|
|
|
+ CollectPos (pc.right, from, ref nNodes, ref nEdges);
|
|
|
+ }
|
|
|
+ break;
|
|
|
}
|
|
|
- break;
|
|
|
- }
|
|
|
}
|
|
|
}
|
|
|
|
|
|
void CollectDim (Dim dim, View from, ref HashSet<View> nNodes, ref HashSet<(View, View)> nEdges)
|
|
|
{
|
|
|
switch (dim) {
|
|
|
- case Dim.DimView dv:
|
|
|
- {
|
|
|
- if (dv.Target != this) {
|
|
|
- nEdges.Add ((dv.Target, from));
|
|
|
- }
|
|
|
- foreach (var v in from.InternalSubviews) {
|
|
|
- CollectAll (v, ref nNodes, ref nEdges);
|
|
|
+ case Dim.DimView dv: {
|
|
|
+ if (dv.Target != this) {
|
|
|
+ nEdges.Add ((dv.Target, from));
|
|
|
+ }
|
|
|
+ foreach (var v in from.InternalSubviews) {
|
|
|
+ CollectAll (v, ref nNodes, ref nEdges);
|
|
|
+ }
|
|
|
+ return;
|
|
|
}
|
|
|
- return;
|
|
|
- }
|
|
|
- case Dim.DimCombine dc:
|
|
|
- {
|
|
|
- foreach (var v in from.InternalSubviews) {
|
|
|
- CollectDim (dc.left, from, ref nNodes, ref nEdges);
|
|
|
- CollectDim (dc.right, from, ref nNodes, ref nEdges);
|
|
|
+ case Dim.DimCombine dc: {
|
|
|
+ foreach (var v in from.InternalSubviews) {
|
|
|
+ CollectDim (dc.left, from, ref nNodes, ref nEdges);
|
|
|
+ CollectDim (dc.right, from, ref nNodes, ref nEdges);
|
|
|
+ }
|
|
|
+ break;
|
|
|
}
|
|
|
- break;
|
|
|
- }
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -2759,14 +2758,14 @@ namespace Terminal.Gui {
|
|
|
/// The <see cref="MouseEvent"/> for the event.
|
|
|
/// </summary>
|
|
|
public MouseEvent MouseEvent { get; set; }
|
|
|
-
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// Indicates if the current mouse event has already been processed and the driver should stop notifying any other event subscriber.
|
|
|
/// Its important to set this value to true specially when updating any View's layout from inside the subscriber method.
|
|
|
/// </summary>
|
|
|
/// <remarks>This property forwards to the <see cref="MouseEvent.Handled"/> property and is provided as a convenience and for
|
|
|
/// backwards compatibility</remarks>
|
|
|
- public bool Handled {
|
|
|
+ public bool Handled {
|
|
|
get => MouseEvent.Handled;
|
|
|
set => MouseEvent.Handled = value;
|
|
|
}
|
|
@@ -2785,7 +2784,7 @@ namespace Terminal.Gui {
|
|
|
|
|
|
var args = new MouseEventArgs (mouseEvent);
|
|
|
MouseEnter?.Invoke (args);
|
|
|
-
|
|
|
+
|
|
|
return args.Handled || base.OnMouseEnter (mouseEvent);
|
|
|
}
|
|
|
|
|
@@ -2802,7 +2801,7 @@ namespace Terminal.Gui {
|
|
|
|
|
|
var args = new MouseEventArgs (mouseEvent);
|
|
|
MouseLeave?.Invoke (args);
|
|
|
-
|
|
|
+
|
|
|
return args.Handled || base.OnMouseLeave (mouseEvent);
|
|
|
}
|
|
|
|
|
@@ -2955,17 +2954,16 @@ namespace Terminal.Gui {
|
|
|
h = Height.Anchor (h);
|
|
|
canSetHeight = !ForceValidatePosDim;
|
|
|
break;
|
|
|
- case Dim.DimFactor factor:
|
|
|
- {
|
|
|
- // Tries to get the SuperView height otherwise the view height.
|
|
|
- var sh = SuperView != null ? SuperView.Frame.Height : h;
|
|
|
- if (factor.IsFromRemaining ()) {
|
|
|
- sh -= Frame.Y;
|
|
|
+ case Dim.DimFactor factor: {
|
|
|
+ // Tries to get the SuperView height otherwise the view height.
|
|
|
+ var sh = SuperView != null ? SuperView.Frame.Height : h;
|
|
|
+ if (factor.IsFromRemaining ()) {
|
|
|
+ sh -= Frame.Y;
|
|
|
+ }
|
|
|
+ h = Height.Anchor (sh);
|
|
|
+ canSetHeight = !ForceValidatePosDim;
|
|
|
+ break;
|
|
|
}
|
|
|
- h = Height.Anchor (sh);
|
|
|
- canSetHeight = !ForceValidatePosDim;
|
|
|
- break;
|
|
|
- }
|
|
|
default:
|
|
|
canSetHeight = true;
|
|
|
break;
|