From 99e04056f172de3c9031dd35f530a058358af424 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Tue, 23 Apr 2024 17:31:24 +0300 Subject: QmlDesigner: Add "Edit Material" context menu option for material nodes Fixes: QDS-12372 Change-Id: Ie412216514973aa6d108f3595489f92e13497576 Reviewed-by: Mahmoud Badri Reviewed-by: Reviewed-by: Qt CI Patch Build Bot --- .../componentcore/designeractionmanager.cpp | 4 ++-- .../componentcore/modelnodecontextmenu_helper.h | 9 ++++++--- .../componentcore/modelnodeoperations.cpp | 22 +++++++++++++--------- 3 files changed, 21 insertions(+), 14 deletions(-) diff --git a/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp b/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp index 8d2b2c43c2a..0722d2d5f81 100644 --- a/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp +++ b/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp @@ -1988,8 +1988,8 @@ void DesignerActionManager::createDefaultDesignerActions() QKeySequence(), 44, &editMaterial, - &modelHasMaterial, - &isModel)); + &hasEditableMaterial, + &isModelOrMaterial)); addDesignerAction(new ModelNodeContextMenuAction( mergeTemplateCommandId, diff --git a/src/plugins/qmldesigner/components/componentcore/modelnodecontextmenu_helper.h b/src/plugins/qmldesigner/components/componentcore/modelnodecontextmenu_helper.h index aec14e9d04b..a7060fcdc6c 100644 --- a/src/plugins/qmldesigner/components/componentcore/modelnodecontextmenu_helper.h +++ b/src/plugins/qmldesigner/components/componentcore/modelnodecontextmenu_helper.h @@ -64,16 +64,19 @@ inline bool addMouseAreaFillCheck(const SelectionContext &selectionContext) return false; } -inline bool isModel(const SelectionContext &selectionState) +inline bool isModelOrMaterial(const SelectionContext &selectionState) { ModelNode node = selectionState.currentSingleSelectedNode(); - return node.metaInfo().isQtQuick3DModel(); + return node.metaInfo().isQtQuick3DModel() || node.metaInfo().isQtQuick3DMaterial(); } -inline bool modelHasMaterial(const SelectionContext &selectionState) +inline bool hasEditableMaterial(const SelectionContext &selectionState) { ModelNode node = selectionState.currentSingleSelectedNode(); + if (node.metaInfo().isQtQuick3DMaterial()) + return true; + BindingProperty prop = node.bindingProperty("materials"); return prop.exists() && (!prop.expression().isEmpty() || !prop.resolveToModelNodeList().empty()); diff --git a/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp b/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp index c24ec9aa3e1..1cb58d3c6b3 100644 --- a/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp +++ b/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp @@ -817,21 +817,25 @@ void editMaterial(const SelectionContext &selectionContext) QTC_ASSERT(modelNode.isValid(), return); - BindingProperty prop = modelNode.bindingProperty("materials"); - if (!prop.exists()) - return; - AbstractView *view = selectionContext.view(); ModelNode material; - if (view->hasId(prop.expression())) { - material = view->modelNodeForId(prop.expression()); + if (modelNode.metaInfo().isQtQuick3DMaterial()) { + material = modelNode; } else { - QList materials = prop.resolveToModelNodeList(); + BindingProperty prop = modelNode.bindingProperty("materials"); + if (!prop.exists()) + return; - if (materials.size() > 0) - material = materials.first(); + if (view->hasId(prop.expression())) { + material = view->modelNodeForId(prop.expression()); + } else { + QList materials = prop.resolveToModelNodeList(); + + if (materials.size() > 0) + material = materials.first(); + } } if (material.isValid()) { -- cgit v1.2.3