diff --git a/share/qtcreator/qml/qmlpuppet/interfaces/nodeinstanceglobal.h b/share/qtcreator/qml/qmlpuppet/interfaces/nodeinstanceglobal.h index b1e08943784..5aca843cd73 100644 --- a/share/qtcreator/qml/qmlpuppet/interfaces/nodeinstanceglobal.h +++ b/share/qtcreator/qml/qmlpuppet/interfaces/nodeinstanceglobal.h @@ -37,5 +37,11 @@ using PropertyNameList = QList; using PropertyNames = std::vector; using TypeName = QByteArray; -enum class AuxiliaryDataType { None, Temporary, Document, NodeInstance }; +enum class AuxiliaryDataType { + None, + Temporary, + Document, + NodeInstancePropertyOverwrite, + NodeInstanceAuxiliary +}; } diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.cpp index 780ea1289b3..21abeb5975e 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.cpp @@ -1009,7 +1009,7 @@ void NodeInstanceServer::setInstancePropertyVariant(const PropertyValueContainer void NodeInstanceServer::setInstanceAuxiliaryData(const PropertyValueContainer &auxiliaryContainer) { - if (auxiliaryContainer.auxiliaryDataType() == AuxiliaryDataType::NodeInstance) { + if (auxiliaryContainer.auxiliaryDataType() == AuxiliaryDataType::NodeInstancePropertyOverwrite) { if (!auxiliaryContainer.value().isNull()) setInstancePropertyVariant(auxiliaryContainer); else diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp index e89ed6e6375..1161cb94391 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp @@ -349,7 +349,8 @@ void Qt5InformationNodeInstanceServer::updateRotationBlocks( QSet unblockedNodes; const PropertyName rotBlocked = "rotBlocked"; for (const auto &container : valueChanges) { - if (container.name() == rotBlocked) { + if (container.name() == rotBlocked + && container.auxiliaryDataType() == AuxiliaryDataType::NodeInstanceAuxiliary) { ServerNodeInstance instance = instanceForId(container.instanceId()); if (instance.isValid()) { auto node = qobject_cast(instance.internalObject()); diff --git a/src/plugins/qmldesigner/components/debugview/debugview.cpp b/src/plugins/qmldesigner/components/debugview/debugview.cpp index 66ed8facad0..86899d4373c 100644 --- a/src/plugins/qmldesigner/components/debugview/debugview.cpp +++ b/src/plugins/qmldesigner/components/debugview/debugview.cpp @@ -250,8 +250,11 @@ QTextStream &operator<<(QTextStream &stream, AuxiliaryDataType type) case AuxiliaryDataType::None: stream << "None"; break; - case AuxiliaryDataType::NodeInstance: - stream << "NodeInstance"; + case AuxiliaryDataType::NodeInstancePropertyOverwrite: + stream << "NodeInstancePropertyOverwrite"; + break; + case AuxiliaryDataType::NodeInstanceAuxiliary: + stream << "NodeInstanceAuxiliary"; break; case AuxiliaryDataType::Document: stream << "Permanent"; diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorwidget.cpp b/src/plugins/qmldesigner/components/formeditor/formeditorwidget.cpp index 891b67fc8eb..89be229721f 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditorwidget.cpp +++ b/src/plugins/qmldesigner/components/formeditor/formeditorwidget.cpp @@ -63,7 +63,7 @@ namespace QmlDesigner { namespace { -constexpr AuxiliaryDataKeyView formeditorZoomProperty{AuxiliaryDataType::NodeInstance, +constexpr AuxiliaryDataKeyView formeditorZoomProperty{AuxiliaryDataType::NodeInstancePropertyOverwrite, "formeditorZoom"}; } diff --git a/src/plugins/qmldesigner/designercore/imagecache/imagecachecollector.cpp b/src/plugins/qmldesigner/designercore/imagecache/imagecachecollector.cpp index b1ecdca4172..d7f25058951 100644 --- a/src/plugins/qmldesigner/designercore/imagecache/imagecachecollector.cpp +++ b/src/plugins/qmldesigner/designercore/imagecache/imagecachecollector.cpp @@ -109,7 +109,7 @@ void ImageCacheCollector::start(Utils::SmallStringView name, if (is3DRoot) { if (auto libIcon = Utils::get_if(&auxiliaryData)) - rewriterView.rootModelNode().setAuxiliaryData(AuxiliaryDataType::NodeInstance, + rewriterView.rootModelNode().setAuxiliaryData(AuxiliaryDataType::NodeInstancePropertyOverwrite, "isLibraryIcon", libIcon->enable); } diff --git a/src/plugins/qmldesigner/designercore/include/auxiliarydataproperties.h b/src/plugins/qmldesigner/designercore/include/auxiliarydataproperties.h index 54a470da2e7..d2d0442913e 100644 --- a/src/plugins/qmldesigner/designercore/include/auxiliarydataproperties.h +++ b/src/plugins/qmldesigner/designercore/include/auxiliarydataproperties.h @@ -60,8 +60,10 @@ public: inline constexpr AuxiliaryDataKeyDefaultValue customIdProperty{AuxiliaryDataType::Document, "customId", QStringView{}}; -inline constexpr AuxiliaryDataKeyDefaultValue widthProperty{AuxiliaryDataType::NodeInstance, "width", 4}; -inline constexpr AuxiliaryDataKeyView heightProperty{AuxiliaryDataType::NodeInstance, "height"}; +inline constexpr AuxiliaryDataKeyDefaultValue widthProperty{ + AuxiliaryDataType::NodeInstancePropertyOverwrite, "width", 4}; +inline constexpr AuxiliaryDataKeyView heightProperty{AuxiliaryDataType::NodeInstancePropertyOverwrite, + "height"}; inline constexpr AuxiliaryDataKeyDefaultValue breakPointProperty{AuxiliaryDataType::Document, "breakPoint", 50}; @@ -132,13 +134,16 @@ inline constexpr AuxiliaryDataKeyView transitionDurationProperty{AuxiliaryDataTy "transitionDuration"}; inline constexpr AuxiliaryDataKeyView targetProperty{AuxiliaryDataType::Document, "target"}; inline constexpr AuxiliaryDataKeyView propertyProperty{AuxiliaryDataType::Document, "property"}; -inline constexpr AuxiliaryDataKeyView currentFrameProperty{AuxiliaryDataType::NodeInstance, +inline constexpr AuxiliaryDataKeyView currentFrameProperty{AuxiliaryDataType::NodeInstancePropertyOverwrite, "currentFrame"}; inline constexpr AuxiliaryDataKeyView annotationProperty{AuxiliaryDataType::Document, "annotation"}; inline constexpr AuxiliaryDataKeyView globalAnnotationProperty{AuxiliaryDataType::Document, "globalAnnotation"}; inline constexpr AuxiliaryDataKeyView globalAnnotationStatus{AuxiliaryDataType::Document, "globalAnnotationStatus"}; +inline constexpr AuxiliaryDataKeyView rotBlockProperty{AuxiliaryDataType::NodeInstanceAuxiliary, + "rotBlock"}; + template QVariant getDefaultValueAsQVariant(const Type &key) { diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp b/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp index 3e351486a15..871ed8e24e5 100644 --- a/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp +++ b/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp @@ -76,6 +76,7 @@ #include "nanotracecommand.h" #include "nanotrace/nanotrace.h" +#include #include #include #include @@ -676,7 +677,19 @@ void NodeInstanceView::auxiliaryDataChanged(const ModelNode &node, }; break; - case AuxiliaryDataType::NodeInstance: + case AuxiliaryDataType::NodeInstanceAuxiliary: + if (hasInstanceForModelNode(node)) { + NodeInstance instance = instanceForModelNode(node); + PropertyValueContainer container{instance.instanceId(), + PropertyName{key.name}, + value, + TypeName(), + key.type}; + m_nodeInstanceServer->changeAuxiliaryValues({{container}}); + }; + break; + + case AuxiliaryDataType::NodeInstancePropertyOverwrite: if (hasInstanceForModelNode(node)) { NodeInstance instance = instanceForModelNode(node); if (value.isValid()) { @@ -707,18 +720,6 @@ void NodeInstanceView::auxiliaryDataChanged(const ModelNode &node, break; case AuxiliaryDataType::Temporary: - if (key.name == "rotBlocked" && hasInstanceForModelNode(node)) { - NodeInstance instance = instanceForModelNode(node); - if (value.isValid()) { - PropertyValueContainer container{instance.instanceId(), - PropertyName{key.name}, - value, - TypeName(), - key.type}; - m_nodeInstanceServer->changeAuxiliaryValues({{container}}); - } - }; - if (node.isRootNode()) { if (key.name == "language") { const QString languageAsString = value.toString(); @@ -1037,9 +1038,9 @@ QList filterNodesForSkipItems(const QList &nodeList) namespace { bool shouldSendAuxiliary(const AuxiliaryDataKey &key) { - return key == invisibleProperty || key == lockedProperty - || key.type == AuxiliaryDataType::NodeInstance - || (key.type == AuxiliaryDataType::Temporary && key.name == "rotBlocked"); + return key.type == AuxiliaryDataType::NodeInstancePropertyOverwrite + || key.type == AuxiliaryDataType::NodeInstanceAuxiliary || key == invisibleProperty + || key == lockedProperty; } } // namespace @@ -2237,12 +2238,11 @@ void NodeInstanceView::updateRotationBlocks() } } if (!qml3DNodes.isEmpty()) { - const PropertyName auxDataProp{"rotBlocked"}; for (const auto &node : qAsConst(qml3DNodes)) { if (rotationKeyframeTargets.contains(node)) - node.setAuxiliaryData(AuxiliaryDataType::Temporary, auxDataProp, true); + node.setAuxiliaryData(rotBlockProperty, true); else - node.setAuxiliaryData(AuxiliaryDataType::Temporary, auxDataProp, false); + node.setAuxiliaryData(rotBlockProperty, false); } } } diff --git a/src/plugins/qmldesigner/designercore/model/qml3dnode.cpp b/src/plugins/qmldesigner/designercore/model/qml3dnode.cpp index d917db46e5f..f2a29dbcc3d 100644 --- a/src/plugins/qmldesigner/designercore/model/qml3dnode.cpp +++ b/src/plugins/qmldesigner/designercore/model/qml3dnode.cpp @@ -24,15 +24,16 @@ ****************************************************************************/ #include "qml3dnode.h" -#include -#include "qmlchangeset.h" -#include "nodelistproperty.h" -#include "nodehints.h" -#include "variantproperty.h" +#include "auxiliarydataproperties.h" #include "bindingproperty.h" -#include "qmlanchors.h" #include "invalidmodelnodeexception.h" #include "itemlibraryinfo.h" +#include "nodehints.h" +#include "nodelistproperty.h" +#include "qmlanchors.h" +#include "qmlchangeset.h" +#include "variantproperty.h" +#include #include "plaintexteditmodifier.h" #include "rewriterview.h" @@ -92,7 +93,7 @@ void Qml3DNode::setBindingProperty(const PropertyName &name, const QString &expr bool Qml3DNode::isBlocked(const PropertyName &propName) const { if (modelNode().isValid() && propName.startsWith("eulerRotation")) - return modelNode().auxiliaryDataWithDefault(AuxiliaryDataType::Temporary, "rotBlocked").toBool(); + return modelNode().auxiliaryDataWithDefault(rotBlockProperty).toBool(); return false; } diff --git a/src/plugins/qmldesigner/designercore/model/qmltimeline.cpp b/src/plugins/qmldesigner/designercore/model/qmltimeline.cpp index 23d25ee520b..1ada6863af3 100644 --- a/src/plugins/qmldesigner/designercore/model/qmltimeline.cpp +++ b/src/plugins/qmldesigner/designercore/model/qmltimeline.cpp @@ -302,7 +302,7 @@ void QmlTimeline::insertKeyframe(const ModelNode &target, const PropertyName &pr QTC_ASSERT(timelineFrames.isValid(), return ); - const qreal frame = modelNode().auxiliaryData(currentFrameProperty)->toReal(); + const qreal frame = modelNode().auxiliaryDataWithDefault(currentFrameProperty).toReal(); const QVariant value = QmlObjectNode(targetNode).instanceValue(propertyName); timelineFrames.setValue(value, frame); diff --git a/src/plugins/qmldesigner/documentmanager.cpp b/src/plugins/qmldesigner/documentmanager.cpp index 4c468efb258..08f227f432c 100644 --- a/src/plugins/qmldesigner/documentmanager.cpp +++ b/src/plugins/qmldesigner/documentmanager.cpp @@ -93,17 +93,17 @@ static inline QHash getProperties(const ModelNode &node) static inline void applyProperties(ModelNode &node, const QHash &propertyHash) { - const auto auxiliaryData = node.auxiliaryData(AuxiliaryDataType::NodeInstance); + const auto auxiliaryData = node.auxiliaryData(AuxiliaryDataType::NodeInstancePropertyOverwrite); for (const auto &element : auxiliaryData) - node.removeAuxiliaryData(AuxiliaryDataType::NodeInstance, element.first); + node.removeAuxiliaryData(AuxiliaryDataType::NodeInstancePropertyOverwrite, element.first); for (auto propertyIterator = propertyHash.cbegin(), end = propertyHash.cend(); propertyIterator != end; ++propertyIterator) { const PropertyName propertyName = propertyIterator.key(); if (propertyName == "width" || propertyName == "height") { - node.setAuxiliaryData(AuxiliaryDataType::NodeInstance, + node.setAuxiliaryData(AuxiliaryDataType::NodeInstancePropertyOverwrite, propertyIterator.key(), propertyIterator.value()); }