From d060e1e9af21ba43674b77ad57dbcfea6ee3ed42 Mon Sep 17 00:00:00 2001 From: Alexis Ehret Date: Tue, 21 Feb 2023 14:13:05 +0100 Subject: [PATCH 1/2] Fix entity group menu Before this commit the entity submenu was always the submenu of the first entity in the group. Now the submenu is uniq to the current entity selected. --- Content.Client/ContextMenu/UI/EntityMenuUIController.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Content.Client/ContextMenu/UI/EntityMenuUIController.cs b/Content.Client/ContextMenu/UI/EntityMenuUIController.cs index 21ebd8e74e..b33366ee63 100644 --- a/Content.Client/ContextMenu/UI/EntityMenuUIController.cs +++ b/Content.Client/ContextMenu/UI/EntityMenuUIController.cs @@ -260,7 +260,7 @@ namespace Content.Client.ContextMenu.UI { var subElement = new EntityMenuElement(entity); subElement.SubMenu = new ContextMenuPopup(_context, subElement); - subElement.SubMenu.OnPopupOpen += () => _verb.OpenVerbMenu(group[0], popup: subElement.SubMenu); + subElement.SubMenu.OnPopupOpen += () => _verb.OpenVerbMenu(entity, popup: subElement.SubMenu); subElement.SubMenu.OnPopupHide += subElement.SubMenu.MenuBody.DisposeAllChildren; _context.AddElement(subMenu, subElement); Elements.TryAdd(entity, subElement); From 42e8bfb1271f35c24e32f33034e4730e033b99ac Mon Sep 17 00:00:00 2001 From: Alexis Ehret Date: Tue, 21 Feb 2023 15:08:42 +0100 Subject: [PATCH 2/2] Refactor EntityMenuUIController.AddToUI --- .../ContextMenu/UI/EntityMenuUIController.cs | 59 ++++++++++--------- 1 file changed, 31 insertions(+), 28 deletions(-) diff --git a/Content.Client/ContextMenu/UI/EntityMenuUIController.cs b/Content.Client/ContextMenu/UI/EntityMenuUIController.cs index b33366ee63..24ff87fc3e 100644 --- a/Content.Client/ContextMenu/UI/EntityMenuUIController.cs +++ b/Content.Client/ContextMenu/UI/EntityMenuUIController.cs @@ -216,16 +216,7 @@ namespace Content.Client.ContextMenu.UI // If there is only a single group. We will just directly list individual entities if (entityGroups.Count == 1) { - foreach (var entity in entityGroups[0]) - { - var element = new EntityMenuElement(entity); - element.SubMenu = new ContextMenuPopup(_context, element); - element.SubMenu.OnPopupOpen += () => _verb.OpenVerbMenu(entity, popup: element.SubMenu); - element.SubMenu.OnPopupHide += element.SubMenu.MenuBody.DisposeAllChildren; - - _context.AddElement(_context.RootMenu, element); - Elements.TryAdd(entity, element); - } + AddGroupToMenu(entityGroups[0], _context.RootMenu); return; } @@ -234,16 +225,12 @@ namespace Content.Client.ContextMenu.UI if (group.Count > 1) { AddGroupToUI(group); - continue; } - - // this group only has a single entity, add a simple menu element - var element = new EntityMenuElement(group[0]); - element.SubMenu = new ContextMenuPopup(_context, element); - element.SubMenu.OnPopupOpen += () => _verb.OpenVerbMenu(group[0], popup: element.SubMenu); - element.SubMenu.OnPopupHide += element.SubMenu.MenuBody.DisposeAllChildren; - _context.AddElement(_context.RootMenu, element); - Elements.TryAdd(group[0], element); + else + { + // this group only has a single entity, add a simple menu element + AddEntityToMenu(group[0], _context.RootMenu); + } } } @@ -256,20 +243,36 @@ namespace Content.Client.ContextMenu.UI EntityMenuElement element = new(); ContextMenuPopup subMenu = new(_context, element); - foreach (var entity in group) - { - var subElement = new EntityMenuElement(entity); - subElement.SubMenu = new ContextMenuPopup(_context, subElement); - subElement.SubMenu.OnPopupOpen += () => _verb.OpenVerbMenu(entity, popup: subElement.SubMenu); - subElement.SubMenu.OnPopupHide += subElement.SubMenu.MenuBody.DisposeAllChildren; - _context.AddElement(subMenu, subElement); - Elements.TryAdd(entity, subElement); - } + AddGroupToMenu(group, subMenu); UpdateElement(element); _context.AddElement(_context.RootMenu, element); } + /// + /// Add the group of entities to the menu + /// + private void AddGroupToMenu(List group, ContextMenuPopup menu) + { + foreach (var entity in group) + { + AddEntityToMenu(entity, menu); + } + } + + /// + /// Add the entity to the menu + /// + private void AddEntityToMenu(EntityUid entity, ContextMenuPopup menu) + { + var element = new EntityMenuElement(entity); + element.SubMenu = new ContextMenuPopup(_context, element); + element.SubMenu.OnPopupOpen += () => _verb.OpenVerbMenu(entity, popup: element.SubMenu); + element.SubMenu.OnPopupHide += element.SubMenu.MenuBody.DisposeAllChildren; + _context.AddElement(menu, element); + Elements.TryAdd(entity, element); + } + /// /// Remove an entity from the entity context menu. ///