From 9c1e834eafcda63b1e9827ca71cde440f486fffa Mon Sep 17 00:00:00 2001 From: Marco Bubke Date: Thu, 13 Jun 2024 12:05:33 +0200 Subject: [PATCH] QmlDesigner: Add ModelNode::ensureIdExists() Calling ModelNode::validId() and don't get the value looks a little bit strange. Removing the refactoring step too. If there was no id, why it should be refactored? Change-Id: I0ec31f2e9a654635bcdb815e7ab1236506d37d2b Reviewed-by: Thomas Hartmann --- .../components/componentcore/modelnodeoperations.cpp | 2 +- .../components/materialbrowser/materialutils.cpp | 2 +- .../components/stateseditor/stateseditorview.cpp | 2 +- .../components/textureeditor/textureeditorview.cpp | 4 ++-- .../components/timelineeditor/timelineactions.cpp | 2 +- .../components/timelineeditor/timelineview.cpp | 4 ++-- .../components/transitioneditor/transitioneditorview.cpp | 2 +- src/plugins/qmldesigner/designercore/include/modelnode.h | 3 ++- src/plugins/qmldesigner/designercore/model/modelnode.cpp | 9 +++++++-- .../qmldesigner/designercore/model/qmlobjectnode.cpp | 8 ++++---- 10 files changed, 22 insertions(+), 16 deletions(-) diff --git a/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp b/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp index 7c32814b82c..3ab8691b12b 100644 --- a/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp +++ b/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp @@ -1622,7 +1622,7 @@ void addMouseAreaFill(const SelectionContext &selectionContext) QmlDesigner::ModelNode mouseAreaNode = selectionContext.view()->createModelNode( "QtQuick.MouseArea", itemMetaInfo.majorVersion(), itemMetaInfo.minorVersion()); #endif - mouseAreaNode.validId(); + mouseAreaNode.ensureIdExists(); modelNode.defaultNodeListProperty().reparentHere(mouseAreaNode); QmlItemNode mouseAreaItemNode(mouseAreaNode); diff --git a/src/plugins/qmldesigner/components/materialbrowser/materialutils.cpp b/src/plugins/qmldesigner/components/materialbrowser/materialutils.cpp index 1ee2e409f38..1a1071de347 100644 --- a/src/plugins/qmldesigner/components/materialbrowser/materialutils.cpp +++ b/src/plugins/qmldesigner/components/materialbrowser/materialutils.cpp @@ -55,7 +55,7 @@ void MaterialUtils::assignMaterialTo3dModel(AbstractView *view, const ModelNode metaInfo.majorVersion(), metaInfo.minorVersion()); #endif - newMaterialNode.validId(); + newMaterialNode.ensureIdExists(); } } diff --git a/src/plugins/qmldesigner/components/stateseditor/stateseditorview.cpp b/src/plugins/qmldesigner/components/stateseditor/stateseditorview.cpp index 26530647d86..0731d438f4f 100644 --- a/src/plugins/qmldesigner/components/stateseditor/stateseditorview.cpp +++ b/src/plugins/qmldesigner/components/stateseditor/stateseditorview.cpp @@ -171,7 +171,7 @@ void StatesEditorView::createNewState() } executeInTransaction("createNewState", [this, newStateName]() { - activeStatesGroupNode().validId(); + activeStatesGroupNode().ensureIdExists(); ModelNode newState = activeStateGroup().addState(newStateName); setCurrentState(newState); diff --git a/src/plugins/qmldesigner/components/textureeditor/textureeditorview.cpp b/src/plugins/qmldesigner/components/textureeditor/textureeditorview.cpp index f770c8c463b..f43cd135a36 100644 --- a/src/plugins/qmldesigner/components/textureeditor/textureeditorview.cpp +++ b/src/plugins/qmldesigner/components/textureeditor/textureeditorview.cpp @@ -388,7 +388,7 @@ void TextureEditorView::handleToolBarAction(int action) metaInfo.majorVersion(), metaInfo.minorVersion()); #endif - newTextureNode.validId(); + newTextureNode.ensureIdExists(); matLib.defaultNodeListProperty().reparentHere(newTextureNode); }); break; @@ -770,7 +770,7 @@ void TextureEditorView::duplicateTexture(const ModelNode &texture) QmlObjectNode duplicateTex = createModelNode(matType, metaInfo.majorVersion(), metaInfo.minorVersion()); #endif duplicateTextureNode = duplicateTex .modelNode(); - duplicateTextureNode.validId(); + duplicateTextureNode.ensureIdExists(); // sync properties. Only the base state is duplicated. const QList props = texture.properties(); diff --git a/src/plugins/qmldesigner/components/timelineeditor/timelineactions.cpp b/src/plugins/qmldesigner/components/timelineeditor/timelineactions.cpp index b6e8b0f77dd..e78e517ce8c 100644 --- a/src/plugins/qmldesigner/components/timelineeditor/timelineactions.cpp +++ b/src/plugins/qmldesigner/components/timelineeditor/timelineactions.cpp @@ -90,7 +90,7 @@ void TimelineActions::pasteKeyframesToTarget(const ModelNode &targetNode, view.executeInTransaction("TimelineActions::pasteKeyframesToTarget", [=, &view](){ ModelNode nonConstTargetNode = targetNode; - nonConstTargetNode.validId(); + nonConstTargetNode.ensureIdExists(); if (QmlTimelineKeyframeGroup::checkKeyframesType(rootNode)) { /* Single selection */ diff --git a/src/plugins/qmldesigner/components/timelineeditor/timelineview.cpp b/src/plugins/qmldesigner/components/timelineeditor/timelineview.cpp index 8288e69316f..dfdb3b975fe 100644 --- a/src/plugins/qmldesigner/components/timelineeditor/timelineview.cpp +++ b/src/plugins/qmldesigner/components/timelineeditor/timelineview.cpp @@ -349,7 +349,7 @@ const QmlTimeline TimelineView::addNewTimeline() metaInfo.majorVersion(), metaInfo.minorVersion()); #endif - timelineNode.validId(); + timelineNode.ensureIdExists(); timelineNode.variantProperty("startFrame").setValue(0); timelineNode.variantProperty("endFrame").setValue(1000); @@ -390,7 +390,7 @@ ModelNode TimelineView::addAnimation(QmlTimeline timeline) metaInfo.minorVersion()); animationNode.variantProperty("duration").setValue(timeline.duration()); #endif - animationNode.validId(); + animationNode.ensureIdExists(); animationNode.variantProperty("from").setValue(timeline.startKeyframe()); animationNode.variantProperty("to").setValue(timeline.endKeyframe()); diff --git a/src/plugins/qmldesigner/components/transitioneditor/transitioneditorview.cpp b/src/plugins/qmldesigner/components/transitioneditor/transitioneditorview.cpp index 9f9e888823e..a44cc5d9d64 100644 --- a/src/plugins/qmldesigner/components/transitioneditor/transitioneditorview.cpp +++ b/src/plugins/qmldesigner/components/transitioneditor/transitioneditorview.cpp @@ -252,7 +252,7 @@ ModelNode TransitionEditorView::addNewTransition() }}); #endif transition.setAuxiliaryData(transitionDurationProperty, 2000); - transition.validId(); + transition.ensureIdExists(); root.nodeListProperty("transitions").reparentHere(transition); for (auto it = idPropertyList.cbegin(); it != idPropertyList.cend(); ++it) { diff --git a/src/plugins/qmldesigner/designercore/include/modelnode.h b/src/plugins/qmldesigner/designercore/include/modelnode.h index 0517599f5be..85b4198b43a 100644 --- a/src/plugins/qmldesigner/designercore/include/modelnode.h +++ b/src/plugins/qmldesigner/designercore/include/modelnode.h @@ -152,7 +152,8 @@ public: void destroy(); QString id() const; - QString validId(); + void ensureIdExists(); + [[nodiscard]] QString validId(); void setIdWithRefactoring(const QString &id); void setIdWithoutRefactoring(const QString &id); static bool isValidId(const QString &id); diff --git a/src/plugins/qmldesigner/designercore/model/modelnode.cpp b/src/plugins/qmldesigner/designercore/model/modelnode.cpp index 94d431dda6f..5e7defd1456 100644 --- a/src/plugins/qmldesigner/designercore/model/modelnode.cpp +++ b/src/plugins/qmldesigner/designercore/model/modelnode.cpp @@ -80,10 +80,15 @@ QString ModelNode::id() const return m_internalNode->id; } +void ModelNode::ensureIdExists() +{ + if (!hasId()) + setIdWithoutRefactoring(model()->generateNewId(simplifiedTypeName())); +} + QString ModelNode::validId() { - if (id().isEmpty()) - setIdWithRefactoring(model()->generateNewId(simplifiedTypeName())); + ensureIdExists(); return id(); } diff --git a/src/plugins/qmldesigner/designercore/model/qmlobjectnode.cpp b/src/plugins/qmldesigner/designercore/model/qmlobjectnode.cpp index 8e1d130295d..45bfabbf7f6 100644 --- a/src/plugins/qmldesigner/designercore/model/qmlobjectnode.cpp +++ b/src/plugins/qmldesigner/designercore/model/qmlobjectnode.cpp @@ -39,7 +39,7 @@ void QmlObjectNode::setVariantProperty(const PropertyName &name, const QVariant return; if (timelineIsActive() && currentTimeline().isRecording()) { - modelNode().validId(); + modelNode().ensureIdExists(); QmlTimelineKeyframeGroup timelineFrames(currentTimeline().keyframeGroup(modelNode(), name)); @@ -69,7 +69,7 @@ void QmlObjectNode::setVariantProperty(const PropertyName &name, const QVariant if (isInBaseState()) { modelNode().variantProperty(name).setValue(value); //basestate } else { - modelNode().validId(); + modelNode().ensureIdExists(); QmlPropertyChanges changeSet(currentState().propertyChanges(modelNode())); Q_ASSERT(changeSet.isValid()); @@ -88,7 +88,7 @@ void QmlObjectNode::setBindingProperty(const PropertyName &name, const QString & if (isInBaseState()) { modelNode().bindingProperty(name).setExpression(expression); //basestate } else { - modelNode().validId(); + modelNode().ensureIdExists(); QmlPropertyChanges changeSet(currentState().propertyChanges(modelNode())); Q_ASSERT(changeSet.isValid()); @@ -338,7 +338,7 @@ void QmlObjectNode::ensureAliasExport() return; if (!isAliasExported()) { - modelNode().validId(); + modelNode().ensureIdExists(); ModelNode rootModelNode = view()->rootModelNode(); rootModelNode.bindingProperty(modelNode().id().toUtf8()). setDynamicTypeNameAndExpression("alias", modelNode().id());