From 6081e694a428e4f570fc8717d30b225b65b3b17a Mon Sep 17 00:00:00 2001 From: Dirius Date: Thu, 19 Mar 2026 02:44:52 -0400 Subject: [PATCH 1/5] Selectable Containers --- .../EntitySystems/ContainerSelectionSystem.cs | 12 ++ .../ContainerSelectionBoundUserInterface.cs | 152 ++++++++++++++++++ .../UI/ContainerSelectionWindow.xaml | 12 ++ .../UI/ContainerSelectionWindow.xaml.cs | 25 +++ .../EntitySystems/ContainerSelectionSystem.cs | 104 ++++++++++++ .../EntityTableContainerSelectionComponent.cs | 24 +++ .../SharedContainerSelectionSystem.cs | 21 +++ .../Events/ContainerSelectionEvents.cs | 21 +++ .../container-selection.ftl | 3 + 9 files changed, 374 insertions(+) create mode 100644 Content.Client/_DEN/Containers/EntitySystems/ContainerSelectionSystem.cs create mode 100644 Content.Client/_DEN/Containers/UI/ContainerSelectionBoundUserInterface.cs create mode 100644 Content.Client/_DEN/Containers/UI/ContainerSelectionWindow.xaml create mode 100644 Content.Client/_DEN/Containers/UI/ContainerSelectionWindow.xaml.cs create mode 100644 Content.Server/_DEN/Containers/EntitySystems/ContainerSelectionSystem.cs create mode 100644 Content.Shared/_DEN/Containers/Components/EntityTableContainerSelectionComponent.cs create mode 100644 Content.Shared/_DEN/Containers/EntitySystems/SharedContainerSelectionSystem.cs create mode 100644 Content.Shared/_DEN/Containers/Events/ContainerSelectionEvents.cs create mode 100644 Resources/Locale/en-US/_DEN/container-selection/container-selection.ftl diff --git a/Content.Client/_DEN/Containers/EntitySystems/ContainerSelectionSystem.cs b/Content.Client/_DEN/Containers/EntitySystems/ContainerSelectionSystem.cs new file mode 100644 index 0000000000..fef4fe49d4 --- /dev/null +++ b/Content.Client/_DEN/Containers/EntitySystems/ContainerSelectionSystem.cs @@ -0,0 +1,12 @@ +using Content.Shared._DEN.Containers.EntitySystems; +using Content.Shared._DEN.Containers.Events; + +namespace Content.Client._DEN.Containers.EntitySystems; + +public sealed class ContainerSelectionSystem : SharedContainerSelectionSystem +{ + public void SendSelectionEvent(EntityUid entity, int containerIndex) + { + RaiseNetworkEvent(new ContainerSelectionMessage(GetNetEntity(entity), containerIndex)); + } +} diff --git a/Content.Client/_DEN/Containers/UI/ContainerSelectionBoundUserInterface.cs b/Content.Client/_DEN/Containers/UI/ContainerSelectionBoundUserInterface.cs new file mode 100644 index 0000000000..64688f2f08 --- /dev/null +++ b/Content.Client/_DEN/Containers/UI/ContainerSelectionBoundUserInterface.cs @@ -0,0 +1,152 @@ +using Content.Client._DEN.Containers.EntitySystems; +using Content.Shared._DEN.Containers.Components; +using Content.Shared.EntityTable; +using JetBrains.Annotations; +using Robust.Client.Graphics; +using Robust.Client.UserInterface; +using Robust.Client.UserInterface.Controls; +using Robust.Shared.Prototypes; + +namespace Content.Client._DEN.Containers.UI; + +[UsedImplicitly] +public sealed class ContainerSelectionBoundUserInterface : BoundUserInterface +{ + [Dependency] private readonly IPrototypeManager _prototypeManager = default!; + + private ContainerSelectionWindow? _window; + + public ContainerSelectionBoundUserInterface(EntityUid owner, Enum uiKey) : base(owner, uiKey) + { + IoCManager.InjectDependencies(this); + } + + protected override void Open() + { + base.Open(); + + if (!EntMan.TryGetComponent(Owner, out var entityTableSelectComp)) + return; + + _window = this.CreateWindow(); + var containers = ConvertToContainers(entityTableSelectComp); + _window.SetWindows(containers); + _window.OpenCentered(); + + } + + private IEnumerable ConvertToContainers(EntityTableContainerSelectionComponent entityTableSelectComp) + { + var containers = new BoxContainer[entityTableSelectComp.Selections.Count]; + var containerIndex = 0; + + foreach (var selection in entityTableSelectComp.Selections) + { + var container = new BoxContainer + { + Orientation = BoxContainer.LayoutOrientation.Vertical, + HorizontalExpand = true, + }; + + var innerContainer = new BoxContainer + { + Orientation = BoxContainer.LayoutOrientation.Vertical, + HorizontalExpand = true, + }; + + var wrapper = new PanelContainer + { + VerticalExpand = false, + HorizontalExpand = false, + Margin = new Thickness(4), + PanelOverride = new StyleBoxFlat{BorderThickness = new Thickness(2), BorderColor = Color.FromHex("#2F2F2F")}, + }; + + var header = new BoxContainer + { + Orientation = BoxContainer.LayoutOrientation.Horizontal, + HorizontalExpand = true, + Margin = new Thickness(2), + }; + + var label = new Label + { + Text = Loc.GetString(selection.SelectionName), + HorizontalExpand = true, + Margin = new Thickness(4), + }; + + var button = new Button { Text = Loc.GetString("container-selection-ui-choose-button") }; + var index = containerIndex; + button.OnPressed += _ => MakeSelection(index); + + header.AddChild(label); + header.AddChild(button); + innerContainer.AddChild(header); + + var cbody = new CollapsibleBody + { + HorizontalExpand = true, + Margin = new Thickness(6f), + }; + + var body = new GridContainer() + { + VerticalExpand = false, + HorizontalExpand = false, + MaxGridWidth = 300f, + }; + + foreach (var entContainer in selection.Containers) + { + var ctx = new EntityTableContext(); + foreach (var (proto, _) in entContainer.Value.ListSpawns(EntMan, _prototypeManager, ctx)) + { + var entProtoView = new EntityPrototypeView + { + SetSize = new (32f), + Stretch = SpriteView.StretchMode.Fill, + Scale = new(2), + }; + entProtoView.SetPrototype(proto); + + var viewPanel = new PanelContainer + { + VerticalExpand = false, + HorizontalExpand = false, + Margin = new Thickness(4), + PanelOverride = new StyleBoxFlat{BorderColor = Color.FromHex("#4f4f4f"), BorderThickness = new Thickness(2)}, + }; + + viewPanel.AddChild(entProtoView); + + body.AddChild(viewPanel); + } + } + + cbody.AddChild(body); + + var collapsible = new Collapsible(Loc.GetString("container-selection-ui-contents"), cbody) + { + Orientation = BoxContainer.LayoutOrientation.Vertical, + HorizontalExpand = true, + Margin = new Thickness(4), + }; + innerContainer.AddChild(collapsible); + wrapper.AddChild(innerContainer); + container.AddChild(wrapper); + + containers[containerIndex++] = container; + } + + return containers; + } + + private void MakeSelection(int index) + { + var containerSelection = EntMan.System(); + + containerSelection.SendSelectionEvent(Owner, index); + _window?.Close(); + } +} diff --git a/Content.Client/_DEN/Containers/UI/ContainerSelectionWindow.xaml b/Content.Client/_DEN/Containers/UI/ContainerSelectionWindow.xaml new file mode 100644 index 0000000000..8baa332ae8 --- /dev/null +++ b/Content.Client/_DEN/Containers/UI/ContainerSelectionWindow.xaml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/Content.Client/_DEN/Containers/UI/ContainerSelectionWindow.xaml.cs b/Content.Client/_DEN/Containers/UI/ContainerSelectionWindow.xaml.cs new file mode 100644 index 0000000000..7af371886c --- /dev/null +++ b/Content.Client/_DEN/Containers/UI/ContainerSelectionWindow.xaml.cs @@ -0,0 +1,25 @@ +using Content.Client.UserInterface.Controls; +using Robust.Client.AutoGenerated; +using Robust.Client.UserInterface.Controls; +using Robust.Client.UserInterface.XAML; + +namespace Content.Client._DEN.Containers.UI; + +[GenerateTypedNameReferences] +public sealed partial class ContainerSelectionWindow : FancyWindow +{ + public ContainerSelectionWindow() + { + RobustXamlLoader.Load(this); + IoCManager.InjectDependencies(this); + } + + public void SetWindows(IEnumerable containers) + { + Options.RemoveAllChildren(); + foreach (var container in containers) + { + Options.AddChild(container); + } + } +} diff --git a/Content.Server/_DEN/Containers/EntitySystems/ContainerSelectionSystem.cs b/Content.Server/_DEN/Containers/EntitySystems/ContainerSelectionSystem.cs new file mode 100644 index 0000000000..1c88f1d003 --- /dev/null +++ b/Content.Server/_DEN/Containers/EntitySystems/ContainerSelectionSystem.cs @@ -0,0 +1,104 @@ +using System.Linq; +using System.Numerics; +using Content.Shared._DEN.Containers.Components; +using Content.Shared._DEN.Containers.EntitySystems; +using Content.Shared._DEN.Containers.Events; +using Content.Shared.ActionBlocker; +using Content.Shared.Destructible; +using Content.Shared.EntityTable; +using Content.Shared.Storage.EntitySystems; +using Robust.Shared.Containers; +using Robust.Shared.Map; +using Robust.Shared.Random; + +namespace Content.Server._DEN.Containers.EntitySystems; + +public sealed partial class ContainerSelectionSystem : SharedContainerSelectionSystem +{ + [Dependency] private readonly SharedContainerSystem _containers = default!; + [Dependency] private readonly EntityTableSystem _entityTable = default!; + [Dependency] private readonly SharedTransformSystem _transform = default!; + [Dependency] private readonly ActionBlockerSystem _blockerSystem = default!; + [Dependency] private readonly SharedUserInterfaceSystem _uiSystem = default!; + [Dependency] private readonly IRobustRandom _random = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeNetworkEvent(OnContainerSelectionMessage); + + SubscribeLocalEvent(OnDestruction, before: [typeof(SharedStorageSystem)]); + } + + private void OnContainerSelectionMessage(ContainerSelectionMessage message, EntitySessionEventArgs args) + { + if (args.SenderSession.AttachedEntity is not { Valid: true } user) + return; + + var targetEnt = GetEntity(message.Target); + if (!TryComp(targetEnt, out var comp)) + return; + + if (!_blockerSystem.CanInteract(user, targetEnt)) + return; + + if (comp.Selections.Count < message.SelectionIndex) + return; + + var selection = comp.Selections[message.SelectionIndex]; + OnSelectionMade((targetEnt, comp), selection); + } + + private void OnDestruction(Entity ent, + ref DestructionEventArgs args) + { + Log.Debug("Got Destruction Event."); + + OnSelectionMade(ent, _random.Pick(ent.Comp.Selections)); + } + + private void OnSelectionMade(Entity ent, + ContainerSelectionEntry selection) + { + if (TerminatingOrDeleted(ent) || !Exists(ent)) + return; + + if (ent.Comp.SelectionMade) + return; + + if (!TryComp(ent, out ContainerManagerComponent? containerComp)) + return; + + var xform = Transform(ent); + var coords = new EntityCoordinates(ent, Vector2.Zero); + + foreach (var (containerId, table) in selection.Containers) + { + if (!_containers.TryGetContainer(ent, containerId, out var container, containerComp)) + { + Log.Error($"Entity {ToPrettyString(ent)} with a {nameof(EntityTableContainerSelectionComponent)} is missing a container ({containerId})."); + continue; + } + + var spawns = _entityTable.GetSpawns(table); + foreach (var proto in spawns) + { + var spawn = Spawn(proto, coords); + if (!_containers.Insert(spawn, container, containerXform: xform)) + { + var alreadyContained = container.ContainedEntities.Count > 0 + ? string.Join("\n", container.ContainedEntities.Select(e => $"\t - {ToPrettyString(e)}")) + : "< empty >"; + Log.Error($"Entity {ToPrettyString(ent)} with a {nameof(EntityTableContainerSelectionComponent)} failed to insert an entity: {ToPrettyString(spawn)}.\nCurrent contents:\n{alreadyContained}"); + _transform.AttachToGridOrMap(spawn); + break; + } + } + } + + _uiSystem.CloseUi(ent.Owner, ContainerSelectionUiKey.Key); + ent.Comp.SelectionMade = true; + Dirty(ent, ent.Comp); + } +} diff --git a/Content.Shared/_DEN/Containers/Components/EntityTableContainerSelectionComponent.cs b/Content.Shared/_DEN/Containers/Components/EntityTableContainerSelectionComponent.cs new file mode 100644 index 0000000000..e74cece020 --- /dev/null +++ b/Content.Shared/_DEN/Containers/Components/EntityTableContainerSelectionComponent.cs @@ -0,0 +1,24 @@ +using Content.Shared.EntityTable.EntitySelectors; +using Robust.Shared.GameStates; + +namespace Content.Shared._DEN.Containers.Components; + +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +public sealed partial class EntityTableContainerSelectionComponent : Component +{ + [AutoNetworkedField, ViewVariables] + public bool SelectionMade = false; + + [DataField] + public List Selections = new(); +} + +[DataDefinition] +public sealed partial class ContainerSelectionEntry +{ + [DataField("name")] + public LocId SelectionName; + + [DataField] + public Dictionary Containers = new(); +} diff --git a/Content.Shared/_DEN/Containers/EntitySystems/SharedContainerSelectionSystem.cs b/Content.Shared/_DEN/Containers/EntitySystems/SharedContainerSelectionSystem.cs new file mode 100644 index 0000000000..e05bc15838 --- /dev/null +++ b/Content.Shared/_DEN/Containers/EntitySystems/SharedContainerSelectionSystem.cs @@ -0,0 +1,21 @@ +using Content.Shared._DEN.Containers.Components; +using Content.Shared.UserInterface; + +namespace Content.Shared._DEN.Containers.EntitySystems; + +public abstract partial class SharedContainerSelectionSystem : EntitySystem +{ + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent( + OnUserOpenUIAttempt); + } + + private void OnUserOpenUIAttempt(Entity ent, ref ActivatableUIOpenAttemptEvent args) + { + if (ent.Comp.SelectionMade) + args.Cancel(); + } +} diff --git a/Content.Shared/_DEN/Containers/Events/ContainerSelectionEvents.cs b/Content.Shared/_DEN/Containers/Events/ContainerSelectionEvents.cs new file mode 100644 index 0000000000..2ecdaa71a3 --- /dev/null +++ b/Content.Shared/_DEN/Containers/Events/ContainerSelectionEvents.cs @@ -0,0 +1,21 @@ +using Robust.Shared.Serialization; + +namespace Content.Shared._DEN.Containers.Events; + +/// +/// Sent client -> server to tell the server we're trying to make a selection on an inventory. +/// +/// The target entity to make the selection on. +/// The index in the selection list that the user selected. +[Serializable, NetSerializable] +public sealed class ContainerSelectionMessage(NetEntity target, int selectionIndex) : EntityEventArgs +{ + public readonly NetEntity Target = target; + public readonly int SelectionIndex = selectionIndex; +} + +[Serializable, NetSerializable] +public enum ContainerSelectionUiKey +{ + Key, +} diff --git a/Resources/Locale/en-US/_DEN/container-selection/container-selection.ftl b/Resources/Locale/en-US/_DEN/container-selection/container-selection.ftl new file mode 100644 index 0000000000..bca00e6b85 --- /dev/null +++ b/Resources/Locale/en-US/_DEN/container-selection/container-selection.ftl @@ -0,0 +1,3 @@ +container-selection-ui-title = Select Container Contents +container-selection-ui-choose-button = Choose +container-selection-ui-contents = Contains: From 17c2bf1b56e6732fd77c95ba2a20def114085c75 Mon Sep 17 00:00:00 2001 From: Dirius Date: Fri, 20 Mar 2026 04:20:51 -0400 Subject: [PATCH 2/5] Specify the ordering. --- Content.Shared/UserInterface/ActivatableUISystem.cs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Content.Shared/UserInterface/ActivatableUISystem.cs b/Content.Shared/UserInterface/ActivatableUISystem.cs index 8b2299ccfc..1ba7bf777c 100644 --- a/Content.Shared/UserInterface/ActivatableUISystem.cs +++ b/Content.Shared/UserInterface/ActivatableUISystem.cs @@ -7,6 +7,7 @@ using Content.Shared.Interaction; using Content.Shared.Interaction.Events; using Content.Shared.Popups; +using Content.Shared.Storage.EntitySystems; using Content.Shared.Verbs; using Content.Shared.Whitelist; using Robust.Shared.Utility; @@ -27,9 +28,9 @@ public override void Initialize() base.Initialize(); SubscribeLocalEvent(OnStartup); - SubscribeLocalEvent(OnUseInHand); - SubscribeLocalEvent(OnActivate); - SubscribeLocalEvent(OnInteractUsing); + SubscribeLocalEvent(OnUseInHand, before: [typeof(SharedEntityStorageSystem), typeof(SharedStorageSystem)]); // DEN: Activatable UI before Inventory interactions + SubscribeLocalEvent(OnActivate, before: [typeof(SharedEntityStorageSystem), typeof(SharedStorageSystem)]); // DEN: Activatable UI before Inventory interactions + SubscribeLocalEvent(OnInteractUsing, before: [typeof(SharedEntityStorageSystem), typeof(SharedStorageSystem)]); // DEN: Activatable UI before Inventory interactions SubscribeLocalEvent(OnHandDeselected); SubscribeLocalEvent(OnHandUnequipped); SubscribeLocalEvent(OnUIClose); From 71aafa286c28516fa3d7c7cd4456410314f4c9d3 Mon Sep 17 00:00:00 2001 From: Dirius Date: Mon, 23 Mar 2026 02:33:27 -0400 Subject: [PATCH 3/5] Feedback and adjustments --- .../EntitySystems/ContainerSelectionSystem.cs | 5 + .../ContainerSelectionBoundUserInterface.cs | 108 ++---------------- .../UI/ContainerSelectionControl.xaml | 27 +++++ .../UI/ContainerSelectionControl.xaml.cs | 43 +++++++ .../UI/ContainerSelectionEntityView.xaml | 10 ++ .../UI/ContainerSelectionEntityView.xaml.cs | 24 ++++ .../UI/ContainerSelectionWindow.xaml.cs | 7 +- .../EntitySystems/ContainerSelectionSystem.cs | 71 ++++++++---- .../EntitySelectors/EntSelector.cs | 7 +- .../ValueSelector/BinomialNumberSelector.cs | 6 + .../ValueSelector/ConstantNumberSelector.cs | 6 + .../ValueSelector/NumberSelector.cs | 7 ++ .../ValueSelector/RangeNumberSelector.cs | 6 + .../EntityTableContainerSelectionComponent.cs | 20 +++- .../container-selection.ftl | 3 + .../Objects/Misc/container_selection.yml | 10 ++ .../Storage/Closets/Lockers/lockers.yml | 24 ++++ 17 files changed, 258 insertions(+), 126 deletions(-) create mode 100644 Content.Client/_DEN/Containers/UI/ContainerSelectionControl.xaml create mode 100644 Content.Client/_DEN/Containers/UI/ContainerSelectionControl.xaml.cs create mode 100644 Content.Client/_DEN/Containers/UI/ContainerSelectionEntityView.xaml create mode 100644 Content.Client/_DEN/Containers/UI/ContainerSelectionEntityView.xaml.cs create mode 100644 Resources/Prototypes/_DEN/Entities/Objects/Misc/container_selection.yml create mode 100644 Resources/Prototypes/_DEN/Entities/Structures/Storage/Closets/Lockers/lockers.yml diff --git a/Content.Client/_DEN/Containers/EntitySystems/ContainerSelectionSystem.cs b/Content.Client/_DEN/Containers/EntitySystems/ContainerSelectionSystem.cs index fef4fe49d4..59cd2d3a39 100644 --- a/Content.Client/_DEN/Containers/EntitySystems/ContainerSelectionSystem.cs +++ b/Content.Client/_DEN/Containers/EntitySystems/ContainerSelectionSystem.cs @@ -5,6 +5,11 @@ namespace Content.Client._DEN.Containers.EntitySystems; public sealed class ContainerSelectionSystem : SharedContainerSelectionSystem { + /// + /// Informs the server that a selection has been made on the container. + /// + /// The entity being targeted. + /// The index in the selection list to choose. public void SendSelectionEvent(EntityUid entity, int containerIndex) { RaiseNetworkEvent(new ContainerSelectionMessage(GetNetEntity(entity), containerIndex)); diff --git a/Content.Client/_DEN/Containers/UI/ContainerSelectionBoundUserInterface.cs b/Content.Client/_DEN/Containers/UI/ContainerSelectionBoundUserInterface.cs index 64688f2f08..bf00ecdbfb 100644 --- a/Content.Client/_DEN/Containers/UI/ContainerSelectionBoundUserInterface.cs +++ b/Content.Client/_DEN/Containers/UI/ContainerSelectionBoundUserInterface.cs @@ -29,114 +29,26 @@ protected override void Open() return; _window = this.CreateWindow(); - var containers = ConvertToContainers(entityTableSelectComp); - _window.SetWindows(containers); + var controls = ConvertToControls(entityTableSelectComp); + _window.SetControls(controls); _window.OpenCentered(); } - private IEnumerable ConvertToContainers(EntityTableContainerSelectionComponent entityTableSelectComp) + private IEnumerable ConvertToControls(EntityTableContainerSelectionComponent entityTableSelectComp) { - var containers = new BoxContainer[entityTableSelectComp.Selections.Count]; + var containers = new ContainerSelectionControl[entityTableSelectComp.Selections.Count]; var containerIndex = 0; + // Create a ContainerSelectionControl for each of the possible selections. foreach (var selection in entityTableSelectComp.Selections) { - var container = new BoxContainer - { - Orientation = BoxContainer.LayoutOrientation.Vertical, - HorizontalExpand = true, - }; + var selectionControl = new ContainerSelectionControl(); + selectionControl.SetData(EntMan, selection.SelectionName, selection.Containers); + var curIndex = containerIndex; + selectionControl.ChooseButton.OnPressed += _ => MakeSelection(curIndex); - var innerContainer = new BoxContainer - { - Orientation = BoxContainer.LayoutOrientation.Vertical, - HorizontalExpand = true, - }; - - var wrapper = new PanelContainer - { - VerticalExpand = false, - HorizontalExpand = false, - Margin = new Thickness(4), - PanelOverride = new StyleBoxFlat{BorderThickness = new Thickness(2), BorderColor = Color.FromHex("#2F2F2F")}, - }; - - var header = new BoxContainer - { - Orientation = BoxContainer.LayoutOrientation.Horizontal, - HorizontalExpand = true, - Margin = new Thickness(2), - }; - - var label = new Label - { - Text = Loc.GetString(selection.SelectionName), - HorizontalExpand = true, - Margin = new Thickness(4), - }; - - var button = new Button { Text = Loc.GetString("container-selection-ui-choose-button") }; - var index = containerIndex; - button.OnPressed += _ => MakeSelection(index); - - header.AddChild(label); - header.AddChild(button); - innerContainer.AddChild(header); - - var cbody = new CollapsibleBody - { - HorizontalExpand = true, - Margin = new Thickness(6f), - }; - - var body = new GridContainer() - { - VerticalExpand = false, - HorizontalExpand = false, - MaxGridWidth = 300f, - }; - - foreach (var entContainer in selection.Containers) - { - var ctx = new EntityTableContext(); - foreach (var (proto, _) in entContainer.Value.ListSpawns(EntMan, _prototypeManager, ctx)) - { - var entProtoView = new EntityPrototypeView - { - SetSize = new (32f), - Stretch = SpriteView.StretchMode.Fill, - Scale = new(2), - }; - entProtoView.SetPrototype(proto); - - var viewPanel = new PanelContainer - { - VerticalExpand = false, - HorizontalExpand = false, - Margin = new Thickness(4), - PanelOverride = new StyleBoxFlat{BorderColor = Color.FromHex("#4f4f4f"), BorderThickness = new Thickness(2)}, - }; - - viewPanel.AddChild(entProtoView); - - body.AddChild(viewPanel); - } - } - - cbody.AddChild(body); - - var collapsible = new Collapsible(Loc.GetString("container-selection-ui-contents"), cbody) - { - Orientation = BoxContainer.LayoutOrientation.Vertical, - HorizontalExpand = true, - Margin = new Thickness(4), - }; - innerContainer.AddChild(collapsible); - wrapper.AddChild(innerContainer); - container.AddChild(wrapper); - - containers[containerIndex++] = container; + containers[containerIndex++] = selectionControl; } return containers; diff --git a/Content.Client/_DEN/Containers/UI/ContainerSelectionControl.xaml b/Content.Client/_DEN/Containers/UI/ContainerSelectionControl.xaml new file mode 100644 index 0000000000..09c1228906 --- /dev/null +++ b/Content.Client/_DEN/Containers/UI/ContainerSelectionControl.xaml @@ -0,0 +1,27 @@ + + + + + + + + + + +