From a1d899ee3133d617ff64f92ec54b7e755096d1b2 Mon Sep 17 00:00:00 2001 From: Pieter-Jan Briers Date: Mon, 29 Jul 2019 23:05:15 +0200 Subject: [PATCH] Updating control size flags now notifies parent container. --- Robust.Client/UserInterface/Control.cs | 38 +++++++++++++++++-- .../UserInterface/Controls/BoxContainer.cs | 2 +- .../UserInterface/Controls/CenterContainer.cs | 2 +- .../UserInterface/Controls/Container.cs | 2 +- .../UserInterface/Controls/GridContainer.cs | 2 +- .../UserInterface/Controls/MarginContainer.cs | 2 +- .../UserInterface/Controls/PanelContainer.cs | 2 +- .../UserInterface/Controls/ScrollContainer.cs | 2 +- .../UserInterface/Controls/SplitContainer.cs | 2 +- .../UserInterface/Controls/TabContainer.cs | 2 +- 10 files changed, 43 insertions(+), 13 deletions(-) diff --git a/Robust.Client/UserInterface/Control.cs b/Robust.Client/UserInterface/Control.cs index ee8118469..d3e2b6231 100644 --- a/Robust.Client/UserInterface/Control.cs +++ b/Robust.Client/UserInterface/Control.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections; using System.Collections.Generic; using System.Linq; @@ -9,6 +9,7 @@ using Robust.Client.Interfaces.Graphics; using Robust.Client.Interfaces.ResourceManagement; using Robust.Client.Interfaces.UserInterface; using Robust.Client.ResourceManagement.ResourceTypes; +using Robust.Client.UserInterface.Controls; using Robust.Client.Utility; using Robust.Shared.Interfaces.Reflection; using Robust.Shared.IoC; @@ -72,6 +73,8 @@ namespace Robust.Client.UserInterface public event Action OnVisibilityChanged; private int _uniqueChildId; + private SizeFlags _sizeFlagsHorizontal = SizeFlags.Fill; + private SizeFlags _sizeFlagsVertical = SizeFlags.Fill; /// /// The name of this control. @@ -630,13 +633,37 @@ namespace Robust.Client.UserInterface /// Horizontal size flags for container layout. /// [ViewVariables] - public SizeFlags SizeFlagsHorizontal { get; set; } = SizeFlags.Fill; + public SizeFlags SizeFlagsHorizontal + { + get => _sizeFlagsHorizontal; + set + { + _sizeFlagsHorizontal = value; + + if (Parent is Container container) + { + container.SortChildren(); + } + } + } /// /// Vertical size flags for container layout. /// [ViewVariables] - public SizeFlags SizeFlagsVertical { get; set; } = SizeFlags.Fill; + public SizeFlags SizeFlagsVertical + { + get => _sizeFlagsVertical; + set + { + _sizeFlagsVertical = value; + + if (Parent is Container container) + { + container.SortChildren(); + } + } + } /// /// Stretch ratio used to give shared of the available space in case multiple siblings are set to expand @@ -656,8 +683,11 @@ namespace Robust.Client.UserInterface throw new ArgumentOutOfRangeException(nameof(value), value, "Value must be greater than zero."); } - // TODO: Notify parent container. _sizeFlagsStretchRatio = value; + if (Parent is Container container) + { + container.SortChildren(); + } } } diff --git a/Robust.Client/UserInterface/Controls/BoxContainer.cs b/Robust.Client/UserInterface/Controls/BoxContainer.cs index e29eff2d9..a037cc688 100644 --- a/Robust.Client/UserInterface/Controls/BoxContainer.cs +++ b/Robust.Client/UserInterface/Controls/BoxContainer.cs @@ -44,7 +44,7 @@ namespace Robust.Client.UserInterface.Controls public int? SeparationOverride { get; set; } - protected override void SortChildren() + protected internal override void SortChildren() { var separation = (int) (ActualSeparation * UIScale); diff --git a/Robust.Client/UserInterface/Controls/CenterContainer.cs b/Robust.Client/UserInterface/Controls/CenterContainer.cs index 8cc13677d..831e4a557 100644 --- a/Robust.Client/UserInterface/Controls/CenterContainer.cs +++ b/Robust.Client/UserInterface/Controls/CenterContainer.cs @@ -8,7 +8,7 @@ namespace Robust.Client.UserInterface.Controls [ControlWrap("CenterContainer")] public class CenterContainer : Container { - protected override void SortChildren() + protected internal override void SortChildren() { foreach (var child in Children) { diff --git a/Robust.Client/UserInterface/Controls/Container.cs b/Robust.Client/UserInterface/Controls/Container.cs index bc42e4d2f..4e5242946 100644 --- a/Robust.Client/UserInterface/Controls/Container.cs +++ b/Robust.Client/UserInterface/Controls/Container.cs @@ -20,7 +20,7 @@ namespace Robust.Client.UserInterface.Controls /// /// Called when the container should re-sort its children. /// - protected virtual void SortChildren() + protected internal virtual void SortChildren() { } diff --git a/Robust.Client/UserInterface/Controls/GridContainer.cs b/Robust.Client/UserInterface/Controls/GridContainer.cs index 00239941f..621b0cab5 100644 --- a/Robust.Client/UserInterface/Controls/GridContainer.cs +++ b/Robust.Client/UserInterface/Controls/GridContainer.cs @@ -132,7 +132,7 @@ namespace Robust.Client.UserInterface.Controls return totalMinSize / UIScale; } - protected override void SortChildren() + protected internal override void SortChildren() { var rows = Rows; diff --git a/Robust.Client/UserInterface/Controls/MarginContainer.cs b/Robust.Client/UserInterface/Controls/MarginContainer.cs index a240f35ca..b7cbea613 100644 --- a/Robust.Client/UserInterface/Controls/MarginContainer.cs +++ b/Robust.Client/UserInterface/Controls/MarginContainer.cs @@ -19,7 +19,7 @@ namespace Robust.Client.UserInterface.Controls public int? MarginRightOverride { get; set; } public int? MarginLeftOverride { get; set; } - protected override void SortChildren() + protected internal override void SortChildren() { var top = MarginTopOverride ?? 0; var bottom = MarginBottomOverride ?? 0; diff --git a/Robust.Client/UserInterface/Controls/PanelContainer.cs b/Robust.Client/UserInterface/Controls/PanelContainer.cs index 721f8d66f..ba4943e84 100644 --- a/Robust.Client/UserInterface/Controls/PanelContainer.cs +++ b/Robust.Client/UserInterface/Controls/PanelContainer.cs @@ -34,7 +34,7 @@ namespace Robust.Client.UserInterface.Controls style?.Draw(handle, PixelSizeBox); } - protected override void SortChildren() + protected internal override void SortChildren() { base.SortChildren(); diff --git a/Robust.Client/UserInterface/Controls/ScrollContainer.cs b/Robust.Client/UserInterface/Controls/ScrollContainer.cs index e32884008..c135c8979 100644 --- a/Robust.Client/UserInterface/Controls/ScrollContainer.cs +++ b/Robust.Client/UserInterface/Controls/ScrollContainer.cs @@ -62,7 +62,7 @@ namespace Robust.Client.UserInterface.Controls _vScrollBar.OnValueChanged += ev; } - protected override void SortChildren() + protected internal override void SortChildren() { if (_vScrollBar?.Parent == null || _hScrollBar?.Parent == null) { diff --git a/Robust.Client/UserInterface/Controls/SplitContainer.cs b/Robust.Client/UserInterface/Controls/SplitContainer.cs index d818562e5..7631aaeb2 100644 --- a/Robust.Client/UserInterface/Controls/SplitContainer.cs +++ b/Robust.Client/UserInterface/Controls/SplitContainer.cs @@ -11,7 +11,7 @@ namespace Robust.Client.UserInterface.Controls private protected abstract bool Vertical { get; } - protected override void SortChildren() + protected internal override void SortChildren() { base.SortChildren(); diff --git a/Robust.Client/UserInterface/Controls/TabContainer.cs b/Robust.Client/UserInterface/Controls/TabContainer.cs index 7581f9ed7..6a7c35f6d 100644 --- a/Robust.Client/UserInterface/Controls/TabContainer.cs +++ b/Robust.Client/UserInterface/Controls/TabContainer.cs @@ -230,7 +230,7 @@ namespace Robust.Client.UserInterface.Controls FitChildInPixelBox(child, _getContentBox()); } - protected override void SortChildren() + protected internal override void SortChildren() { base.SortChildren();