diff --git a/Content.Client/Access/AccessOverriderSystem.cs b/Content.Client/Access/AccessOverriderSystem.cs new file mode 100644 index 0000000000..88d933c8c4 --- /dev/null +++ b/Content.Client/Access/AccessOverriderSystem.cs @@ -0,0 +1,11 @@ +using Content.Shared.Access.Systems; +using JetBrains.Annotations; + +namespace Content.Client.Access +{ + [UsedImplicitly] + public sealed class AccessOverriderSystem : SharedAccessOverriderSystem + { + + } +} diff --git a/Content.Client/Access/UI/AccessOverriderBoundUserInterface.cs b/Content.Client/Access/UI/AccessOverriderBoundUserInterface.cs new file mode 100644 index 0000000000..cb43185484 --- /dev/null +++ b/Content.Client/Access/UI/AccessOverriderBoundUserInterface.cs @@ -0,0 +1,72 @@ +using Content.Shared.Access.Components; +using Content.Shared.Access.Systems; +using Content.Shared.Containers.ItemSlots; +using Robust.Client.GameObjects; +using Robust.Shared.Prototypes; +using static Content.Shared.Access.Components.AccessOverriderComponent; + +namespace Content.Client.Access.UI +{ + public sealed class AccessOverriderBoundUserInterface : BoundUserInterface + { + [Dependency] private readonly IPrototypeManager _prototypeManager = default!; + private readonly SharedAccessOverriderSystem _accessOverriderSystem = default!; + + private AccessOverriderWindow? _window; + + public AccessOverriderBoundUserInterface(EntityUid owner, Enum uiKey) : base(owner, uiKey) + { + _accessOverriderSystem = EntMan.System(); + } + + protected override void Open() + { + base.Open(); + + List accessLevels; + + if (EntMan.TryGetComponent(Owner, out var accessOverrider)) + { + accessLevels = accessOverrider.AccessLevels; + accessLevels.Sort(); + } + + else + { + accessLevels = new List(); + _accessOverriderSystem.Log.Error($"No AccessOverrider component found for {EntMan.ToPrettyString(Owner)}!"); + } + + _window = new AccessOverriderWindow(this, _prototypeManager, accessLevels) + { + Title = EntMan.GetComponent(Owner).EntityName + }; + + _window.PrivilegedIdButton.OnPressed += _ => SendMessage(new ItemSlotButtonPressedEvent(PrivilegedIdCardSlotId)); + + _window.OnClose += Close; + _window.OpenCentered(); + } + + protected override void Dispose(bool disposing) + { + base.Dispose(disposing); + if (!disposing) + return; + + _window?.Dispose(); + } + + protected override void UpdateState(BoundUserInterfaceState state) + { + base.UpdateState(state); + var castState = (AccessOverriderBoundUserInterfaceState) state; + _window?.UpdateState(castState); + } + + public void SubmitData(List newAccessList) + { + SendMessage(new WriteToTargetAccessReaderIdMessage(newAccessList)); + } + } +} diff --git a/Content.Client/Access/UI/AccessOverriderWindow.xaml b/Content.Client/Access/UI/AccessOverriderWindow.xaml new file mode 100644 index 0000000000..ae482140bc --- /dev/null +++ b/Content.Client/Access/UI/AccessOverriderWindow.xaml @@ -0,0 +1,23 @@ + + + + +