Editor | Refactor right-click context menu to improve grouping and surface most used items to the top. (#7742)
* Move "Open pinned Inspector" to separate handler to move it after the Prefab menu items. Signed-off-by: Danilo Aimini <82231674+AMZN-daimini@users.noreply.github.com> * Rearrange context menu items, add shortcuts Signed-off-by: Danilo Aimini <82231674+AMZN-daimini@users.noreply.github.com> * Fix pragma once in header Signed-off-by: Danilo Aimini <82231674+AMZN-daimini@users.noreply.github.com> * Revert casing changes that would cause issues in automated testing. Signed-off-by: Danilo Aimini <82231674+AMZN-daimini@users.noreply.github.com>
This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
/*
|
||||
* Copyright (c) Contributors to the Open 3D Engine Project.
|
||||
* For complete copyright and license terms please see the LICENSE at the root of this distribution.
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0 OR MIT
|
||||
*
|
||||
*/
|
||||
|
||||
#include <ContextMenuHandlers.h>
|
||||
|
||||
#include <AzToolsFramework/API/ToolsApplicationAPI.h>
|
||||
#include <AzToolsFramework/Entity/EditorEntityContextBus.h>
|
||||
|
||||
#include <QAction>
|
||||
#include <QMenu>
|
||||
|
||||
void ContextMenuBottomHandler::Setup()
|
||||
{
|
||||
AzToolsFramework::EditorContextMenuBus::Handler::BusConnect();
|
||||
}
|
||||
|
||||
void ContextMenuBottomHandler::Teardown()
|
||||
{
|
||||
AzToolsFramework::EditorContextMenuBus::Handler::BusDisconnect();
|
||||
}
|
||||
|
||||
int ContextMenuBottomHandler::GetMenuPosition() const
|
||||
{
|
||||
return aznumeric_cast<int>(AzToolsFramework::EditorContextMenuOrdering::BOTTOM);
|
||||
}
|
||||
|
||||
void ContextMenuBottomHandler::PopulateEditorGlobalContextMenu(
|
||||
QMenu* menu, [[maybe_unused]] const AZ::Vector2& point, [[maybe_unused]] int flags)
|
||||
{
|
||||
AzToolsFramework::EntityIdList selected;
|
||||
AzToolsFramework::ToolsApplicationRequestBus::BroadcastResult(
|
||||
selected, &AzToolsFramework::ToolsApplicationRequests::GetSelectedEntities);
|
||||
|
||||
QAction* action = nullptr;
|
||||
|
||||
if (selected.size() > 0)
|
||||
{
|
||||
action = menu->addAction(QObject::tr("Open pinned Inspector"));
|
||||
QObject::connect(
|
||||
action, &QAction::triggered, action,
|
||||
[selected]
|
||||
{
|
||||
AzToolsFramework::EntityIdSet pinnedEntities(selected.begin(), selected.end());
|
||||
AzToolsFramework::EditorRequestBus::Broadcast(&AzToolsFramework::EditorRequests::OpenPinnedInspector, pinnedEntities);
|
||||
}
|
||||
);
|
||||
|
||||
menu->addSeparator();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
/*
|
||||
* Copyright (c) Contributors to the Open 3D Engine Project.
|
||||
* For complete copyright and license terms please see the LICENSE at the root of this distribution.
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0 OR MIT
|
||||
*
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <AzToolsFramework/Editor/EditorContextMenuBus.h>
|
||||
|
||||
class ContextMenuBottomHandler : private AzToolsFramework::EditorContextMenuBus::Handler
|
||||
{
|
||||
public:
|
||||
void Setup();
|
||||
void Teardown();
|
||||
|
||||
private:
|
||||
// EditorContextMenu overrides ...
|
||||
void PopulateEditorGlobalContextMenu(QMenu* menu, const AZ::Vector2& point, int flags) override;
|
||||
int GetMenuPosition() const override;
|
||||
};
|
||||
@@ -45,17 +45,17 @@
|
||||
#include <AzToolsFramework/Entity/SliceEditorEntityOwnershipServiceBus.h>
|
||||
#include <AzToolsFramework/Slice/SliceRequestBus.h>
|
||||
#include <AzToolsFramework/Slice/SliceUtilities.h>
|
||||
#include <AzToolsFramework/ToolsComponents/GenericComponentWrapper.h>
|
||||
#include <AzToolsFramework/ToolsComponents/EditorLayerComponent.h>
|
||||
#include <AzToolsFramework/ToolsComponents/EditorVisibilityComponent.h>
|
||||
#include <AzToolsFramework/ToolsComponents/GenericComponentWrapper.h>
|
||||
#include <AzToolsFramework/Undo/UndoSystem.h>
|
||||
#include <AzToolsFramework/UI/EditorEntityUi/EditorEntityUiInterface.h>
|
||||
#include <AzToolsFramework/UI/Layer/AddToLayerMenu.h>
|
||||
#include <AzToolsFramework/UI/Layer/NameConflictWarning.hxx>
|
||||
#include <AzToolsFramework/UI/Prefab/PrefabIntegrationInterface.h>
|
||||
#include <AzToolsFramework/UI/PropertyEditor/InstanceDataHierarchy.h>
|
||||
#include <AzToolsFramework/UI/PropertyEditor/PropertyEditorAPI.h>
|
||||
#include <AzToolsFramework/UI/PropertyEditor/EntityPropertyEditor.hxx>
|
||||
#include <AzToolsFramework/UI/Layer/NameConflictWarning.hxx>
|
||||
#include <AzToolsFramework/ViewportSelection/EditorHelpers.h>
|
||||
#include <AzToolsFramework/ViewportSelection/EditorSelectionUtil.h>
|
||||
#include <MathConversion.h>
|
||||
@@ -212,6 +212,8 @@ void SandboxIntegrationManager::Setup()
|
||||
AZ_Assert(m_readOnlyEntityPublicInterface, "SandboxIntegrationManager requires an ReadOnlyEntityPublicInterface instance to be present on Setup().");
|
||||
|
||||
AzToolsFramework::Layers::EditorLayerComponentNotificationBus::Handler::BusConnect();
|
||||
|
||||
m_contextMenuBottomHandler.Setup();
|
||||
}
|
||||
|
||||
void SandboxIntegrationManager::SaveSlice(const bool& QuickPushToFirstLevel)
|
||||
@@ -395,6 +397,8 @@ void SandboxIntegrationManager::GetEntitiesInSlices(
|
||||
|
||||
void SandboxIntegrationManager::Teardown()
|
||||
{
|
||||
m_contextMenuBottomHandler.Teardown();
|
||||
|
||||
AzToolsFramework::Layers::EditorLayerComponentNotificationBus::Handler::BusDisconnect();
|
||||
AzFramework::DisplayContextRequestBus::Handler::BusDisconnect();
|
||||
AzToolsFramework::SliceEditorEntityOwnershipServiceNotificationBus::Handler::BusDisconnect();
|
||||
@@ -651,12 +655,14 @@ void SandboxIntegrationManager::PopulateEditorGlobalContextMenu(QMenu* menu, con
|
||||
if (selected.size() == 0)
|
||||
{
|
||||
action = menu->addAction(QObject::tr("Create entity"));
|
||||
action->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::Key_N));
|
||||
QObject::connect(
|
||||
action, &QAction::triggered, action,
|
||||
[this]
|
||||
{
|
||||
ContextMenu_NewEntity();
|
||||
});
|
||||
}
|
||||
);
|
||||
}
|
||||
// when a single entity is selected, entity is created as its child
|
||||
else if (selected.size() == 1)
|
||||
@@ -667,6 +673,7 @@ void SandboxIntegrationManager::PopulateEditorGlobalContextMenu(QMenu* menu, con
|
||||
if (!prefabSystemEnabled || (containerEntityInterface && containerEntityInterface->IsContainerOpen(selectedEntityId) && !selectedEntityIsReadOnly))
|
||||
{
|
||||
action = menu->addAction(QObject::tr("Create entity"));
|
||||
action->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::Key_N));
|
||||
QObject::connect(
|
||||
action, &QAction::triggered, action,
|
||||
[selectedEntityId]
|
||||
@@ -694,33 +701,30 @@ void SandboxIntegrationManager::PopulateEditorGlobalContextMenu(QMenu* menu, con
|
||||
AzToolsFramework::SetupAddToLayerMenu(menu, flattenedSelection, [this] { return ContextMenu_NewLayer(); });
|
||||
|
||||
SetupSliceContextMenu(menu);
|
||||
}
|
||||
|
||||
if (!selected.empty())
|
||||
{
|
||||
// Don't allow duplication if any of the selected entities are direct desendants of a read-only entity
|
||||
bool selectionContainsDescendantOfReadOnlyEntity = false;
|
||||
for (const auto& entityId : selected)
|
||||
if (!selected.empty())
|
||||
{
|
||||
AZ::EntityId parentEntityId;
|
||||
AZ::TransformBus::EventResult(parentEntityId, entityId, &AZ::TransformBus::Events::GetParentId);
|
||||
|
||||
if (parentEntityId.IsValid() && m_readOnlyEntityPublicInterface->IsReadOnly(parentEntityId))
|
||||
// Don't allow duplication if any of the selected entities are direct descendants of a read-only entity
|
||||
bool selectionContainsDescendantOfReadOnlyEntity = false;
|
||||
for (const auto& entityId : selected)
|
||||
{
|
||||
selectionContainsDescendantOfReadOnlyEntity = true;
|
||||
break;
|
||||
AZ::EntityId parentEntityId;
|
||||
AZ::TransformBus::EventResult(parentEntityId, entityId, &AZ::TransformBus::Events::GetParentId);
|
||||
|
||||
if (parentEntityId.IsValid() && m_readOnlyEntityPublicInterface->IsReadOnly(parentEntityId))
|
||||
{
|
||||
selectionContainsDescendantOfReadOnlyEntity = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!selectionContainsDescendantOfReadOnlyEntity)
|
||||
{
|
||||
action = menu->addAction(QObject::tr("Duplicate"));
|
||||
QObject::connect(action, &QAction::triggered, action, [this] { ContextMenu_Duplicate(); });
|
||||
}
|
||||
}
|
||||
|
||||
if (!selectionContainsDescendantOfReadOnlyEntity)
|
||||
{
|
||||
action = menu->addAction(QObject::tr("Duplicate"));
|
||||
QObject::connect(action, &QAction::triggered, action, [this] { ContextMenu_Duplicate(); });
|
||||
}
|
||||
}
|
||||
|
||||
if (!prefabSystemEnabled)
|
||||
{
|
||||
action = menu->addAction(QObject::tr("Delete"));
|
||||
QObject::connect(action, &QAction::triggered, action, [this] { ContextMenu_DeleteSelected(); });
|
||||
if (selected.size() == 0)
|
||||
@@ -733,20 +737,14 @@ void SandboxIntegrationManager::PopulateEditorGlobalContextMenu(QMenu* menu, con
|
||||
|
||||
if (selected.size() > 0)
|
||||
{
|
||||
action = menu->addAction(QObject::tr("Open pinned Inspector"));
|
||||
QObject::connect(action, &QAction::triggered, action, [this, selected]
|
||||
{
|
||||
AzToolsFramework::EntityIdSet pinnedEntities(selected.begin(), selected.end());
|
||||
OpenPinnedInspector(pinnedEntities);
|
||||
});
|
||||
if (selected.size() > 0)
|
||||
{
|
||||
action = menu->addAction(QObject::tr("Find in Entity Outliner"));
|
||||
QObject::connect(action, &QAction::triggered, [selected]
|
||||
action = menu->addAction(QObject::tr("Find in Entity Outliner"));
|
||||
QObject::connect(
|
||||
action, &QAction::triggered,
|
||||
[selected]
|
||||
{
|
||||
AzToolsFramework::EditorEntityContextNotificationBus::Broadcast(&EditorEntityContextNotification::OnFocusInEntityOutliner, selected);
|
||||
AzToolsFramework::EditorEntityContextNotificationBus::Broadcast(
|
||||
&EditorEntityContextNotification::OnFocusInEntityOutliner, selected);
|
||||
});
|
||||
}
|
||||
menu->addSeparator();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,6 +9,8 @@
|
||||
#ifndef CRYINCLUDE_COMPONENTENTITYEDITORPLUGIN_SANDBOXINTEGRATION_H
|
||||
#define CRYINCLUDE_COMPONENTENTITYEDITORPLUGIN_SANDBOXINTEGRATION_H
|
||||
|
||||
#include "ContextMenuHandlers.h"
|
||||
|
||||
#include <AzCore/Component/ComponentApplicationBus.h>
|
||||
#include <AzCore/Slice/SliceBus.h>
|
||||
#include <AzCore/Slice/SliceComponent.h>
|
||||
@@ -273,6 +275,8 @@ private:
|
||||
};
|
||||
|
||||
private:
|
||||
ContextMenuBottomHandler m_contextMenuBottomHandler;
|
||||
|
||||
AZ::Vector2 m_contextMenuViewPoint;
|
||||
|
||||
short m_startedUndoRecordingNestingLevel; // used in OnBegin/EndUndo to ensure we only accept undo's we started recording
|
||||
|
||||
+2
@@ -10,6 +10,8 @@ set(FILES
|
||||
dllmain.cpp
|
||||
ComponentEntityEditorPlugin.h
|
||||
ComponentEntityEditorPlugin.cpp
|
||||
ContextMenuHandlers.h
|
||||
ContextMenuHandlers.cpp
|
||||
SandboxIntegration.h
|
||||
SandboxIntegration.cpp
|
||||
UI/QComponentEntityEditorMainWindow.h
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
#pragma once
|
||||
|
||||
#include <AzCore/EBus/EBus.h>
|
||||
#include <AzCore/Math/Vector2.h>
|
||||
#include <AzCore/Outcome/Outcome.h>
|
||||
#include <AzCore/std/any.h>
|
||||
#include <AzCore/std/string/string.h>
|
||||
|
||||
+125
-71
@@ -253,6 +253,68 @@ namespace AzToolsFramework
|
||||
}
|
||||
}
|
||||
|
||||
// Edit/Inspect/Close Prefab
|
||||
{
|
||||
if (selectedEntities.size() == 1)
|
||||
{
|
||||
AZ::EntityId selectedEntity = selectedEntities[0];
|
||||
|
||||
if (s_prefabPublicInterface->IsInstanceContainerEntity(selectedEntity))
|
||||
{
|
||||
if (!s_prefabFocusPublicInterface->IsOwningPrefabBeingFocused(selectedEntity))
|
||||
{
|
||||
if (s_prefabPublicInterface->IsOwnedByProceduralPrefabInstance(selectedEntity))
|
||||
{
|
||||
// Inspect Prefab
|
||||
QAction* editAction = menu->addAction(QObject::tr("Inspect Procedural Prefab"));
|
||||
editAction->setShortcut(QKeySequence(Qt::Key_Plus));
|
||||
editAction->setToolTip(QObject::tr("See the procedural prefab contents in focus mode."));
|
||||
|
||||
QObject::connect(
|
||||
editAction, &QAction::triggered, editAction,
|
||||
[selectedEntity]
|
||||
{
|
||||
ContextMenu_EditPrefab(selectedEntity);
|
||||
}
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Edit Prefab
|
||||
QAction* editAction = menu->addAction(QObject::tr("Open/Edit Prefab"));
|
||||
editAction->setShortcut(QKeySequence(Qt::Key_Plus));
|
||||
editAction->setToolTip(QObject::tr("Edit the prefab in focus mode."));
|
||||
|
||||
QObject::connect(
|
||||
editAction, &QAction::triggered, editAction,
|
||||
[selectedEntity]
|
||||
{
|
||||
ContextMenu_EditPrefab(selectedEntity);
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Close Prefab
|
||||
QAction* closeAction = menu->addAction(QObject::tr("Close Prefab"));
|
||||
closeAction->setShortcut(QKeySequence(Qt::Key_Minus));
|
||||
closeAction->setToolTip(QObject::tr("Close focus mode for this prefab and move one level up."));
|
||||
|
||||
QObject::connect(
|
||||
closeAction, &QAction::triggered, closeAction,
|
||||
[]
|
||||
{
|
||||
ContextMenu_ClosePrefab();
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
menu->addSeparator();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool itemWasShown = false;
|
||||
|
||||
// Create Prefab
|
||||
@@ -291,7 +353,8 @@ namespace AzToolsFramework
|
||||
[selectedEntities]
|
||||
{
|
||||
ContextMenu_CreatePrefab(selectedEntities);
|
||||
});
|
||||
}
|
||||
);
|
||||
|
||||
itemWasShown = true;
|
||||
}
|
||||
@@ -299,6 +362,21 @@ namespace AzToolsFramework
|
||||
}
|
||||
}
|
||||
|
||||
// Detach Prefab
|
||||
if (onlySelectedEntityIsClosedPrefabContainer)
|
||||
{
|
||||
AZ::EntityId selectedEntityId = selectedEntities.front();
|
||||
|
||||
QAction* detachPrefabAction = menu->addAction(QObject::tr("Detach Prefab..."));
|
||||
QObject::connect(
|
||||
detachPrefabAction, &QAction::triggered, detachPrefabAction,
|
||||
[selectedEntityId]
|
||||
{
|
||||
ContextMenu_DetachPrefab(selectedEntityId);
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
// Instantiate Prefab
|
||||
if (selectedEntities.size() == 0 ||
|
||||
selectedEntities.size() == 1 && !readOnlyEntityInSelection && !onlySelectedEntityIsClosedPrefabContainer)
|
||||
@@ -311,7 +389,8 @@ namespace AzToolsFramework
|
||||
[]
|
||||
{
|
||||
ContextMenu_InstantiatePrefab();
|
||||
});
|
||||
}
|
||||
);
|
||||
|
||||
// Instantiate Procedural Prefab
|
||||
if (AZ::Prefab::ProceduralPrefabAsset::UseProceduralPrefabs())
|
||||
@@ -324,7 +403,8 @@ namespace AzToolsFramework
|
||||
[]
|
||||
{
|
||||
ContextMenu_InstantiateProceduralPrefab();
|
||||
});
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
itemWasShown = true;
|
||||
@@ -335,9 +415,7 @@ namespace AzToolsFramework
|
||||
menu->addSeparator();
|
||||
}
|
||||
|
||||
itemWasShown = false;
|
||||
|
||||
// Edit/Save Prefab
|
||||
// Save Prefab
|
||||
{
|
||||
if (selectedEntities.size() == 1)
|
||||
{
|
||||
@@ -345,52 +423,6 @@ namespace AzToolsFramework
|
||||
|
||||
if (s_prefabPublicInterface->IsInstanceContainerEntity(selectedEntity))
|
||||
{
|
||||
if (!s_prefabFocusPublicInterface->IsOwningPrefabBeingFocused(selectedEntity))
|
||||
{
|
||||
if (s_prefabPublicInterface->IsOwnedByProceduralPrefabInstance(selectedEntity))
|
||||
{
|
||||
// Inspect Prefab
|
||||
QAction* editAction = menu->addAction(QObject::tr("Inspect Procedural Prefab"));
|
||||
editAction->setShortcut(QKeySequence(Qt::Key_Plus));
|
||||
editAction->setToolTip(QObject::tr("See the procedural prefab contents in focus mode."));
|
||||
|
||||
QObject::connect(
|
||||
editAction, &QAction::triggered, editAction,
|
||||
[selectedEntity]
|
||||
{
|
||||
ContextMenu_EditPrefab(selectedEntity);
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
// Edit Prefab
|
||||
QAction* editAction = menu->addAction(QObject::tr("Open/Edit Prefab"));
|
||||
editAction->setShortcut(QKeySequence(Qt::Key_Plus));
|
||||
editAction->setToolTip(QObject::tr("Edit the prefab in focus mode."));
|
||||
|
||||
QObject::connect(
|
||||
editAction, &QAction::triggered, editAction,
|
||||
[selectedEntity]
|
||||
{
|
||||
ContextMenu_EditPrefab(selectedEntity);
|
||||
});
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Close Prefab
|
||||
QAction* closeAction = menu->addAction(QObject::tr("Close Prefab"));
|
||||
closeAction->setShortcut(QKeySequence(Qt::Key_Minus));
|
||||
closeAction->setToolTip(QObject::tr("Close focus mode for this prefab and move one level up."));
|
||||
|
||||
QObject::connect(
|
||||
closeAction, &QAction::triggered, closeAction,
|
||||
[]
|
||||
{
|
||||
ContextMenu_ClosePrefab();
|
||||
});
|
||||
}
|
||||
|
||||
// Save Prefab
|
||||
AZ::IO::Path prefabFilePath = s_prefabPublicInterface->GetOwningInstancePrefabPath(selectedEntity);
|
||||
auto dirtyOutcome = s_prefabPublicInterface->HasUnsavedChanges(prefabFilePath);
|
||||
@@ -405,17 +437,43 @@ namespace AzToolsFramework
|
||||
[selectedEntity]
|
||||
{
|
||||
ContextMenu_SavePrefab(selectedEntity);
|
||||
});
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
itemWasShown = true;
|
||||
menu->addSeparator();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (itemWasShown)
|
||||
if (!selectedEntities.empty())
|
||||
{
|
||||
menu->addSeparator();
|
||||
// Don't allow duplication if any of the selected entities are direct descendants of a read-only entity
|
||||
bool selectionContainsDescendantOfReadOnlyEntity = false;
|
||||
for (const auto& entityId : selectedEntities)
|
||||
{
|
||||
AZ::EntityId parentEntityId;
|
||||
AZ::TransformBus::EventResult(parentEntityId, entityId, &AZ::TransformBus::Events::GetParentId);
|
||||
|
||||
if (parentEntityId.IsValid() && m_readOnlyEntityPublicInterface->IsReadOnly(parentEntityId))
|
||||
{
|
||||
selectionContainsDescendantOfReadOnlyEntity = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!selectionContainsDescendantOfReadOnlyEntity)
|
||||
{
|
||||
QAction* duplicateAction = menu->addAction(QObject::tr("Duplicate"));
|
||||
duplicateAction->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_D));
|
||||
QObject::connect(
|
||||
duplicateAction, &QAction::triggered, duplicateAction,
|
||||
[]
|
||||
{
|
||||
ContextMenu_Duplicate();
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
if (!selectedEntities.empty() &&
|
||||
@@ -424,27 +482,17 @@ namespace AzToolsFramework
|
||||
!readOnlyEntityInSelection)
|
||||
{
|
||||
QAction* deleteAction = menu->addAction(QObject::tr("Delete"));
|
||||
deleteAction->setShortcut(QKeySequence(Qt::Key_Delete));
|
||||
QObject::connect(
|
||||
deleteAction, &QAction::triggered, deleteAction,
|
||||
[]
|
||||
{
|
||||
ContextMenu_DeleteSelected();
|
||||
});
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
// Detach Prefab
|
||||
if (onlySelectedEntityIsClosedPrefabContainer)
|
||||
{
|
||||
AZ::EntityId selectedEntityId = selectedEntities.front();
|
||||
|
||||
QAction* detachPrefabAction = menu->addAction(QObject::tr("Detach Prefab..."));
|
||||
QObject::connect(
|
||||
detachPrefabAction, &QAction::triggered, detachPrefabAction,
|
||||
[selectedEntityId]
|
||||
{
|
||||
ContextMenu_DetachPrefab(selectedEntityId);
|
||||
});
|
||||
}
|
||||
menu->addSeparator();
|
||||
}
|
||||
|
||||
void PrefabIntegrationManager::OnEscape()
|
||||
@@ -653,6 +701,12 @@ namespace AzToolsFramework
|
||||
}
|
||||
}
|
||||
|
||||
void PrefabIntegrationManager::ContextMenu_Duplicate()
|
||||
{
|
||||
bool handled = true;
|
||||
AzToolsFramework::EditorRequestBus::Broadcast(&AzToolsFramework::EditorRequests::CloneSelection, handled);
|
||||
}
|
||||
|
||||
void PrefabIntegrationManager::ContextMenu_DeleteSelected()
|
||||
{
|
||||
AzToolsFramework::EntityIdList selectedEntityIds;
|
||||
|
||||
@@ -92,6 +92,7 @@ namespace AzToolsFramework
|
||||
static void ContextMenu_ClosePrefab();
|
||||
static void ContextMenu_EditPrefab(AZ::EntityId containerEntity);
|
||||
static void ContextMenu_SavePrefab(AZ::EntityId containerEntity);
|
||||
static void ContextMenu_Duplicate();
|
||||
static void ContextMenu_DeleteSelected();
|
||||
static void ContextMenu_DetachPrefab(AZ::EntityId containerEntity);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user