]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Enable multiple Solution Editor windows (#26005)
authorSlamBamActionman <83650252+SlamBamActionman@users.noreply.github.com>
Tue, 12 Mar 2024 12:10:09 +0000 (13:10 +0100)
committerGitHub <noreply@github.com>
Tue, 12 Mar 2024 12:10:09 +0000 (05:10 -0700)
* More solution edit windows

* Fix error when closing euis after round restart

---------

Co-authored-by: ShadowCommander <10494922+ShadowCommander@users.noreply.github.com>
Content.Server/Administration/Systems/AdminVerbSystem.cs
Content.Server/Administration/UI/EditSolutionsEui.cs

index e678abb0c45cb854657972a4419d259b1662d1ce..c4754af9340f401cf6d155fc20ce001ad8b87c3a 100644 (file)
@@ -67,7 +67,7 @@ namespace Content.Server.Administration.Systems
         [Dependency] private readonly StationSystem _stations = default!;
         [Dependency] private readonly StationSpawningSystem _spawning = default!;
 
-        private readonly Dictionary<ICommonSession, EditSolutionsEui> _openSolutionUis = new();
+        private readonly Dictionary<ICommonSession, List<EditSolutionsEui>> _openSolutionUis = new();
 
         public override void Initialize()
         {
@@ -486,10 +486,13 @@ namespace Content.Server.Administration.Systems
         #region SolutionsEui
         private void OnSolutionChanged(Entity<SolutionContainerManagerComponent> entity, ref SolutionContainerChangedEvent args)
         {
-            foreach (var eui in _openSolutionUis.Values)
+            foreach (var list in _openSolutionUis.Values)
             {
-                if (eui.Target == entity.Owner)
-                    eui.StateDirty();
+                foreach (var eui in list)
+                {
+                    if (eui.Target == entity.Owner)
+                        eui.StateDirty();
+                }
             }
         }
 
@@ -498,21 +501,33 @@ namespace Content.Server.Administration.Systems
             if (session.AttachedEntity == null)
                 return;
 
-            if (_openSolutionUis.ContainsKey(session))
-                _openSolutionUis[session].Close();
-
-            var eui = _openSolutionUis[session] = new EditSolutionsEui(uid);
+            var eui = new EditSolutionsEui(uid);
             _euiManager.OpenEui(eui, session);
             eui.StateDirty();
+
+            if (!_openSolutionUis.ContainsKey(session)) {
+                _openSolutionUis[session] = new List<EditSolutionsEui>();
+            }
+
+            _openSolutionUis[session].Add(eui);
         }
 
-        public void OnEditSolutionsEuiClosed(ICommonSession session)
+        public void OnEditSolutionsEuiClosed(ICommonSession session, EditSolutionsEui eui)
         {
-            _openSolutionUis.Remove(session, out var eui);
+            _openSolutionUis[session].Remove(eui);
+            if (_openSolutionUis[session].Count == 0)
+              _openSolutionUis.Remove(session);
         }
 
         private void Reset(RoundRestartCleanupEvent ev)
         {
+            foreach (var euis in _openSolutionUis.Values)
+            {
+                foreach (var eui in euis.ToList())
+                {
+                    eui.Close();
+                }
+            }
             _openSolutionUis.Clear();
         }
         #endregion
index 2a78a27bc03f9afa02f130e5198b8843ab324bab..b4904d969eb9242654b8868aae60b74c41b66e16 100644 (file)
@@ -36,7 +36,7 @@ namespace Content.Server.Administration.UI
         public override void Closed()
         {
             base.Closed();
-            _entityManager.System<AdminVerbSystem>().OnEditSolutionsEuiClosed(Player);
+            _entityManager.System<AdminVerbSystem>().OnEditSolutionsEuiClosed(Player, this);
         }
 
         public override EuiStateBase GetNewState()