diff --git a/src/plugins/qmldesigner/components/componentcore/componentcore_constants.h b/src/plugins/qmldesigner/components/componentcore/componentcore_constants.h index 6a8833ef292..d992a6a5bf0 100644 --- a/src/plugins/qmldesigner/components/componentcore/componentcore_constants.h +++ b/src/plugins/qmldesigner/components/componentcore/componentcore_constants.h @@ -81,6 +81,7 @@ const char fitRootToScreenCommandId[] = "FitRootToScreen"; const char fitSelectionToScreenCommandId[] = "FitSelectionToScreen"; const char editAnnotationsCommandId[] = "EditAnnotation"; const char addMouseAreaFillCommandId[] = "AddMouseAreaFill"; +const char editIn3dViewCommandId[] = "editIn3dView"; const char openSignalDialogCommandId[] = "OpenSignalDialog"; const char update3DAssetCommandId[] = "Update3DAsset"; @@ -130,6 +131,7 @@ const char editMaterialDisplayName[] = QT_TRANSLATE_NOOP("QmlDesignerContextMenu const char editCollectionDisplayName[] = QT_TRANSLATE_NOOP("QmlDesignerContextMenu", "Edit Model"); const char editAnnotationsDisplayName[] = QT_TRANSLATE_NOOP("QmlDesignerContextMenu", "Edit Annotations"); const char addMouseAreaFillDisplayName[] = QT_TRANSLATE_NOOP("QmlDesignerContextMenu", "Add Mouse Area"); +const char editIn3dViewDisplayName[] = QT_TRANSLATE_NOOP("QmlDesignerContextMenu", "Edit in 3D View"); const char openSignalDialogDisplayName[] = QT_TRANSLATE_NOOP("QmlDesignerContextMenu", "Open Signal Dialog"); const char update3DAssetDisplayName[] = QT_TRANSLATE_NOOP("QmlDesignerContextMenu", "Update 3D Asset"); diff --git a/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp b/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp index 27afaa08f2b..4e32237ee95 100644 --- a/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp +++ b/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp @@ -1916,7 +1916,7 @@ void DesignerActionManager::createDefaultDesignerActions() contextIcon(DesignerIcons::EnterComponentIcon), rootCategory, QKeySequence(Qt::Key_F2), - Priorities::ComponentActions + 2, + Priorities::ComponentActions + 3, &goIntoComponentOperation, &selectionIsEditableComponent)); @@ -1963,13 +1963,24 @@ void DesignerActionManager::createDefaultDesignerActions() &singleSelectedAndUiFile)); } + addDesignerAction(new ModelNodeContextMenuAction( + editIn3dViewCommandId, + editIn3dViewDisplayName, + contextIcon(DesignerIcons::EditIcon), + rootCategory, + QKeySequence(), + Priorities::ComponentActions + 1, + &editIn3dView, + &singleSelectionView3D, + &singleSelectionView3D)); + addDesignerAction(new ModelNodeContextMenuAction( makeComponentCommandId, makeComponentDisplayName, contextIcon(DesignerIcons::MakeComponentIcon), rootCategory, QKeySequence(), - Priorities::ComponentActions + 1, + Priorities::ComponentActions + 2, &moveToComponent, &singleSelection, &singleSelection)); diff --git a/src/plugins/qmldesigner/components/componentcore/modelnodecontextmenu_helper.h b/src/plugins/qmldesigner/components/componentcore/modelnodecontextmenu_helper.h index 593ace34d14..eb4915b1d0a 100644 --- a/src/plugins/qmldesigner/components/componentcore/modelnodecontextmenu_helper.h +++ b/src/plugins/qmldesigner/components/componentcore/modelnodecontextmenu_helper.h @@ -97,6 +97,12 @@ inline bool singleSelectionNotRoot(const SelectionContext &selectionState) && !selectionState.currentSingleSelectedNode().isRootNode(); } +inline bool singleSelectionView3D(const SelectionContext &selectionState) +{ + return selectionState.singleNodeIsSelected() + && selectionState.currentSingleSelectedNode().metaInfo().isQtQuick3DView3D(); +} + inline bool selectionHasProperty(const SelectionContext &selectionState, const char *property) { for (const ModelNode &modelNode : selectionState.selectedModelNodes()) diff --git a/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp b/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp index b9dbb67862b..cebe7d7c534 100644 --- a/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp +++ b/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp @@ -1689,6 +1689,15 @@ void updateImported3DAsset(const SelectionContext &selectionContext) } } +void editIn3dView(const SelectionContext &selectionContext) +{ + if (selectionContext.view() && selectionContext.hasSingleSelectedModelNode() + && selectionContext.currentSingleSelectedNode().metaInfo().isQtQuick3DView3D()) { + QmlDesignerPlugin::instance()->mainWidget()->showDockWidget("Editor3D", true); + selectionContext.view()->emitView3DAction(View3DActionType::AlignViewToCamera, true); + } +} + bool isEffectComposerActivated() { const QVector specs = ExtensionSystem::PluginManager::plugins(); diff --git a/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.h b/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.h index 4556462f30b..a67cef49424 100644 --- a/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.h +++ b/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.h @@ -124,6 +124,7 @@ void addMouseAreaFill(const SelectionContext &selectionContext); void openSignalDialog(const SelectionContext &selectionContext); void updateImported3DAsset(const SelectionContext &selectionContext); +void editIn3dView(const SelectionContext &selectionContext); QMLDESIGNERCOMPONENTS_EXPORT Utils::FilePath getEffectsImportDirectory(); QMLDESIGNERCOMPONENTS_EXPORT QString getEffectsDefaultDirectory(const QString &defaultDir = {});