QmlDesigner: Add 3D component from Navigator view context menu

Fixes: QDS-12911
Change-Id: Icd6d32d4a09a6f3e7b925037e73a75fdbf472f28
Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
This commit is contained in:
Shrief Gabr
2024-06-24 16:22:28 +03:00
parent 3a13e0a561
commit b76826d674
5 changed files with 34 additions and 1 deletions

View File

@@ -69,6 +69,7 @@ const char mergeTemplateCommandId[] = "MergeTemplate";
const char goToImplementationCommandId[] = "GoToImplementation"; const char goToImplementationCommandId[] = "GoToImplementation";
const char makeComponentCommandId[] = "MakeComponent"; const char makeComponentCommandId[] = "MakeComponent";
const char editMaterialCommandId[] = "EditMaterial"; const char editMaterialCommandId[] = "EditMaterial";
const char addToContentLibraryCommandId[] = "AddToContentLibrary";
const char addItemToStackedContainerCommandId[] = "AddItemToStackedContainer"; const char addItemToStackedContainerCommandId[] = "AddItemToStackedContainer";
const char addTabBarToStackedContainerCommandId[] = "AddTabBarToStackedContainer"; const char addTabBarToStackedContainerCommandId[] = "AddTabBarToStackedContainer";
const char increaseIndexOfStackedContainerCommandId[] = "IncreaseIndexOfStackedContainer"; 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 goToImplementationDisplayName[] = QT_TRANSLATE_NOOP("QmlDesignerContextMenu", "Go to Implementation");
const char makeComponentDisplayName[] = QT_TRANSLATE_NOOP("QmlDesignerContextMenu", "Create Component"); const char makeComponentDisplayName[] = QT_TRANSLATE_NOOP("QmlDesignerContextMenu", "Create Component");
const char editMaterialDisplayName[] = QT_TRANSLATE_NOOP("QmlDesignerContextMenu", "Edit Material"); 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 editAnnotationsDisplayName[] = QT_TRANSLATE_NOOP("QmlDesignerContextMenu", "Edit Annotations");
const char addMouseAreaFillDisplayName[] = QT_TRANSLATE_NOOP("QmlDesignerContextMenu", "Add Mouse Area"); const char addMouseAreaFillDisplayName[] = QT_TRANSLATE_NOOP("QmlDesignerContextMenu", "Add Mouse Area");
const char editIn3dViewDisplayName[] = QT_TRANSLATE_NOOP("QmlDesignerContextMenu", "Edit in 3D View"); const char editIn3dViewDisplayName[] = QT_TRANSLATE_NOOP("QmlDesignerContextMenu", "Edit in 3D View");
@@ -241,7 +243,10 @@ enum PrioritiesEnum : int {
SignalsDialog, SignalsDialog,
Refactoring, Refactoring,
GenericToolBar, GenericToolBar,
Last Last,
/******** Section *****************************/
AddingAssetsSection = 7000,
Add3DToContentLib
}; };
}; };

View File

@@ -1999,6 +1999,17 @@ void DesignerActionManager::createDefaultDesignerActions()
[&] (const SelectionContext& context) { mergeWithTemplate(context, m_externalDependencies); }, [&] (const SelectionContext& context) { mergeWithTemplate(context, m_externalDependencies); },
&SelectionContextFunctors::always)); &SelectionContextFunctors::always));
addDesignerAction(new ModelNodeContextMenuAction(
addToContentLibraryCommandId,
addToContentLibraryDisplayName,
contextIcon(DesignerIcons::CreateIcon), // TODO: placeholder icon
rootCategory,
QKeySequence(),
Priorities::Add3DToContentLib,
&add3DAssetToContentLibrary,
&enableAddToContentLib,
&enableAddToContentLib));
addDesignerAction(new ActionGroup( addDesignerAction(new ActionGroup(
"", "",
genericToolBarCategory, genericToolBarCategory,

View File

@@ -70,6 +70,16 @@ inline bool isModelOrMaterial(const SelectionContext &selectionState)
return node.metaInfo().isQtQuick3DModel() || node.metaInfo().isQtQuick3DMaterial(); 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) inline bool hasEditableMaterial(const SelectionContext &selectionState)
{ {
ModelNode node = selectionState.currentSingleSelectedNode(); ModelNode node = selectionState.currentSingleSelectedNode();

View File

@@ -797,6 +797,12 @@ void moveToComponent(const SelectionContext &selectionContext)
selectionContext.view()->model()->rewriterView()->moveToComponent(modelNode); 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) void goImplementation(const SelectionContext &selectionState)
{ {
addSignalHandlerOrGotoImplementation(selectionState, false); addSignalHandlerOrGotoImplementation(selectionState, false);

View File

@@ -96,6 +96,7 @@ void addSignalHandlerOrGotoImplementation(const SelectionContext &selectionState
void removeLayout(const SelectionContext &selectionContext); void removeLayout(const SelectionContext &selectionContext);
void removePositioner(const SelectionContext &selectionContext); void removePositioner(const SelectionContext &selectionContext);
void moveToComponent(const SelectionContext &selectionContext); void moveToComponent(const SelectionContext &selectionContext);
void add3DAssetToContentLibrary(const SelectionContext &selectionContext);
PropertyName getIndexPropertyName(const ModelNode &modelNode); PropertyName getIndexPropertyName(const ModelNode &modelNode);
void addItemToStackedContainer(const SelectionContext &selectionContext); void addItemToStackedContainer(const SelectionContext &selectionContext);
void increaseIndexOfStackedContainer(const SelectionContext &selectionContext); void increaseIndexOfStackedContainer(const SelectionContext &selectionContext);