EntityHierarchyWindow: Fixed right click deselecting entities

This commit is contained in:
Simon Lübeß
2024-01-11 23:36:00 +01:00
parent 91cef7ad4b
commit 3d0c010139
@@ -121,6 +121,20 @@ namespace GlitchyEditor.EditWindows
return _selectedEntityIds.Contains(entity.UUID); return _selectedEntityIds.Contains(entity.UUID);
} }
/// Shows the context menu for the selected entities
// @param deletedEntity Returns true if the entity was deleted.
private void ShowEntityContextMenu(out bool deletedEntity)
{
deletedEntity = false;
bool isAnyEntitySelected = SelectedEntityIds.Count > 0;
Show_ContextMenu_Create(true, SelectedEntityIds.Count == 1, isAnyEntitySelected);
if (isAnyEntitySelected)
deletedEntity = Show_ContextMenu_Delete();
}
protected override void InternalShow() protected override void InternalShow()
{ {
if(!ImGui.Begin(s_WindowTitle, &_open, .MenuBar)) if(!ImGui.Begin(s_WindowTitle, &_open, .MenuBar))
@@ -133,7 +147,7 @@ namespace GlitchyEditor.EditWindows
if (ImGui.BeginPopupContextWindow(s_WindowTitle)) if (ImGui.BeginPopupContextWindow(s_WindowTitle))
{ {
Show_ContextMenu_Create(true, false, false); ShowEntityContextMenu(let _);
ImGui.EndPopup(); ImGui.EndPopup();
} }
@@ -156,8 +170,10 @@ namespace GlitchyEditor.EditWindows
ShowEntityHierarchy(); ShowEntityHierarchy();
if ((ImGui.IsMouseDown(.Left) || ImGui.IsMouseDown(.Right)) && !ImGui.IsAnyItemHovered() && !ImGui.GetIO().KeyCtrl && ImGui.IsWindowHovered(.AllowWhenBlockedByPopup)) if ((ImGui.IsMouseDown(.Left) || ImGui.IsMouseDown(.Right)) && !ImGui.GetIO().KeyCtrl && ImGui.IsWindowHovered(.AllowWhenBlockedByPopup))
{
ClearEntitySelection(); ClearEntitySelection();
}
ImGui.End(); ImGui.End();
} }
@@ -219,7 +235,6 @@ namespace GlitchyEditor.EditWindows
{ {
Show_ContextMenu_Create(true, true, true); Show_ContextMenu_Create(true, true, true);
Show_ContextMenu_Delete();
if(ImGui.MenuItem("Delete", null, false, SelectionSize != 0) || if(ImGui.MenuItem("Delete", null, false, SelectionSize != 0) ||
(Input.IsKeyPressed(.Delete) && ImGui.IsWindowHovered())) (Input.IsKeyPressed(.Delete) && ImGui.IsWindowHovered()))
@@ -393,8 +408,13 @@ namespace GlitchyEditor.EditWindows
if (ImGui.BeginPopupContextItem("treeNodePopup")) if (ImGui.BeginPopupContextItem("treeNodePopup"))
{ {
Show_ContextMenu_Create(true, true, true); // Only select if it isn't already selected, because it otherwise clears the selection when ctrl is released
deleted = Show_ContextMenu_Delete(); if (!IsEntitySelected(tree.Value))
{
SelectEntity(tree.Value, !ImGui.GetIO().KeyCtrl);
}
ShowEntityContextMenu(out deleted);
ImGui.EndPopup(); ImGui.EndPopup();
} }
@@ -444,20 +464,13 @@ namespace GlitchyEditor.EditWindows
lastClickedEntity = tree.Value; lastClickedEntity = tree.Value;
} }
if (!isDragged && (!ImGui.IsMouseDown(.Left) && !ImGui.IsMouseDown(.Right) && hovered) && tree.Value == lastClickedEntity) if (!isDragged && (hovered) && tree.Value == lastClickedEntity)
{ {
if (inSelectedList && !clickedRight) if (!inSelectedList)
{ {
DeselectEntity(tree.Value); SelectEntity(tree.Value, !ImGui.GetIO().KeyCtrl);
inSelectedList = false;
}
else
{
SelectEntity(tree.Value, !ImGui.GetIO().KeyCtrl && !clickedRight);
inSelectedList = true; inSelectedList = true;
} }
lastClickedEntity = .();
} }
} }