From b76826d674cf71b2ca9d55f0116bb42aa629805a Mon Sep 17 00:00:00 2001 From: Shrief Gabr Date: Mon, 24 Jun 2024 16:22:28 +0300 Subject: [PATCH] QmlDesigner: Add 3D component from Navigator view context menu Fixes: QDS-12911 Change-Id: Icd6d32d4a09a6f3e7b925037e73a75fdbf472f28 Reviewed-by: Mahmoud Badri --- .../componentcore/componentcore_constants.h | 7 ++++++- .../componentcore/designeractionmanager.cpp | 11 +++++++++++ .../componentcore/modelnodecontextmenu_helper.h | 10 ++++++++++ .../components/componentcore/modelnodeoperations.cpp | 6 ++++++ .../components/componentcore/modelnodeoperations.h | 1 + 5 files changed, 34 insertions(+), 1 deletion(-) diff --git a/src/plugins/qmldesigner/components/componentcore/componentcore_constants.h b/src/plugins/qmldesigner/components/componentcore/componentcore_constants.h index da7c5bf72eb..2f77612b36e 100644 --- a/src/plugins/qmldesigner/components/componentcore/componentcore_constants.h +++ b/src/plugins/qmldesigner/components/componentcore/componentcore_constants.h @@ -69,6 +69,7 @@ const char mergeTemplateCommandId[] = "MergeTemplate"; const char goToImplementationCommandId[] = "GoToImplementation"; const char makeComponentCommandId[] = "MakeComponent"; const char editMaterialCommandId[] = "EditMaterial"; +const char addToContentLibraryCommandId[] = "AddToContentLibrary"; const char addItemToStackedContainerCommandId[] = "AddItemToStackedContainer"; const char addTabBarToStackedContainerCommandId[] = "AddTabBarToStackedContainer"; const char increaseIndexOfStackedContainerCommandId[] = "IncreaseIndexOfStackedContainer"; @@ -127,6 +128,7 @@ const char mergeTemplateDisplayName[] = QT_TRANSLATE_NOOP("QmlDesignerContextMen const char goToImplementationDisplayName[] = QT_TRANSLATE_NOOP("QmlDesignerContextMenu", "Go to Implementation"); const char makeComponentDisplayName[] = QT_TRANSLATE_NOOP("QmlDesignerContextMenu", "Create Component"); const char editMaterialDisplayName[] = QT_TRANSLATE_NOOP("QmlDesignerContextMenu", "Edit Material"); +const char addToContentLibraryDisplayName[] = QT_TRANSLATE_NOOP("QmlDesignerContextMenu", "Add to Content Library"); 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"); @@ -241,7 +243,10 @@ enum PrioritiesEnum : int { SignalsDialog, Refactoring, GenericToolBar, - Last + Last, + /******** Section *****************************/ + AddingAssetsSection = 7000, + Add3DToContentLib }; }; diff --git a/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp b/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp index bbe64935f61..535300da96f 100644 --- a/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp +++ b/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp @@ -1999,6 +1999,17 @@ void DesignerActionManager::createDefaultDesignerActions() [&] (const SelectionContext& context) { mergeWithTemplate(context, m_externalDependencies); }, &SelectionContextFunctors::always)); + addDesignerAction(new ModelNodeContextMenuAction( + addToContentLibraryCommandId, + addToContentLibraryDisplayName, + contextIcon(DesignerIcons::CreateIcon), // TODO: placeholder icon + rootCategory, + QKeySequence(), + Priorities::Add3DToContentLib, + &add3DAssetToContentLibrary, + &enableAddToContentLib, + &enableAddToContentLib)); + addDesignerAction(new ActionGroup( "", genericToolBarCategory, diff --git a/src/plugins/qmldesigner/components/componentcore/modelnodecontextmenu_helper.h b/src/plugins/qmldesigner/components/componentcore/modelnodecontextmenu_helper.h index 6734bac568b..9216933d2b0 100644 --- a/src/plugins/qmldesigner/components/componentcore/modelnodecontextmenu_helper.h +++ b/src/plugins/qmldesigner/components/componentcore/modelnodecontextmenu_helper.h @@ -70,6 +70,16 @@ inline bool isModelOrMaterial(const SelectionContext &selectionState) return node.metaInfo().isQtQuick3DModel() || node.metaInfo().isQtQuick3DMaterial(); } +inline bool enableAddToContentLib(const SelectionContext &selectionState) +{ + ModelNode modelNode = selectionState.currentSingleSelectedNode(); + auto compUtils = QmlDesignerPlugin::instance()->documentManager().generatedComponentUtils(); + bool isInBundle = modelNode.type().startsWith(compUtils.componentBundlesTypePrefix().toLatin1()); + bool isNode3D = modelNode.metaInfo().isQtQuick3DNode(); + + return isNode3D && !isInBundle; +} + inline bool hasEditableMaterial(const SelectionContext &selectionState) { ModelNode node = selectionState.currentSingleSelectedNode(); diff --git a/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp b/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp index 3ab8691b12b..69e24237358 100644 --- a/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp +++ b/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp @@ -797,6 +797,12 @@ void moveToComponent(const SelectionContext &selectionContext) selectionContext.view()->model()->rewriterView()->moveToComponent(modelNode); } +void add3DAssetToContentLibrary(const SelectionContext &selectionContext) +{ + ModelNode node = selectionContext.currentSingleSelectedNode(); + selectionContext.view()->emitCustomNotification("add_3d_to_content_lib", {node}); +} + void goImplementation(const SelectionContext &selectionState) { addSignalHandlerOrGotoImplementation(selectionState, false); diff --git a/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.h b/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.h index 26562f429a0..9e649371c98 100644 --- a/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.h +++ b/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.h @@ -96,6 +96,7 @@ void addSignalHandlerOrGotoImplementation(const SelectionContext &selectionState void removeLayout(const SelectionContext &selectionContext); void removePositioner(const SelectionContext &selectionContext); void moveToComponent(const SelectionContext &selectionContext); +void add3DAssetToContentLibrary(const SelectionContext &selectionContext); PropertyName getIndexPropertyName(const ModelNode &modelNode); void addItemToStackedContainer(const SelectionContext &selectionContext); void increaseIndexOfStackedContainer(const SelectionContext &selectionContext);