diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.cpp index 50062818037..60d34c909d9 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.cpp @@ -958,7 +958,6 @@ void NodeInstanceServer::setInstancePropertyVariant(const PropertyValueContainer void NodeInstanceServer::setInstanceAuxiliaryData(const PropertyValueContainer &auxiliaryContainer) { - //instanceId() == 0: the item is root if (auxiliaryContainer.instanceId() == 0 && (auxiliaryContainer.name() == "width" || auxiliaryContainer.name() == "height")) { @@ -978,6 +977,16 @@ void NodeInstanceServer::setInstanceAuxiliaryData(const PropertyValueContainer & } else { rootNodeInstance().resetProperty(propertyName); } + } else if (auxiliaryContainer.name() == "invisible") { + if (hasInstanceForId(auxiliaryContainer.instanceId())) { + ServerNodeInstance instance = instanceForId(auxiliaryContainer.instanceId()); + if (instance.isSubclassOf("QQuick3DNode")) { + if (!auxiliaryContainer.value().isNull()) + instance.setPropertyVariant("visible", !auxiliaryContainer.value().toBool()); + else + instance.resetProperty("visible"); + } + } } } diff --git a/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp b/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp index 08d2454bb15..e82fbe97701 100644 --- a/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp +++ b/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp @@ -607,10 +607,7 @@ bool NavigatorTreeModel::setData(const QModelIndex &index, const QVariant &value QTC_ASSERT(m_view, return false); m_view->handleChangedExport(modelNode, value.toInt() != 0); } else if (index.column() == 2 && role == Qt::CheckStateRole) { - if (value.toInt() == 0) - modelNode.setAuxiliaryData("invisible", true); - else - modelNode.removeAuxiliaryData("invisible"); + QmlVisualNode(modelNode).setVisibilityOverride(value.toInt() == 0); } return true; diff --git a/src/plugins/qmldesigner/components/navigator/navigatorview.cpp b/src/plugins/qmldesigner/components/navigator/navigatorview.cpp index 553baa8e24d..4918f88a8bf 100644 --- a/src/plugins/qmldesigner/components/navigator/navigatorview.cpp +++ b/src/plugins/qmldesigner/components/navigator/navigatorview.cpp @@ -208,7 +208,7 @@ void NavigatorView::handleChangedExport(const ModelNode &modelNode, bool exporte bool NavigatorView::isNodeInvisible(const ModelNode &modelNode) const { - return modelNode.auxiliaryData("invisible").toBool(); + return QmlVisualNode(modelNode).visibilityOverride(); } void NavigatorView::disableWidget() diff --git a/src/plugins/qmldesigner/designercore/include/qmlvisualnode.h b/src/plugins/qmldesigner/designercore/include/qmlvisualnode.h index df6db763f8f..49785d0398b 100644 --- a/src/plugins/qmldesigner/designercore/include/qmlvisualnode.h +++ b/src/plugins/qmldesigner/designercore/include/qmlvisualnode.h @@ -61,6 +61,8 @@ public: const QList allDirectSubModelNodes() const; const QList allSubModelNodes() const; bool hasAnySubModelNodes() const; + void setVisibilityOverride(bool visible); + bool visibilityOverride() const; static bool isItemOr3DNode(const ModelNode &modelNode); }; diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp b/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp index f316200dcc5..dd7052819be 100644 --- a/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp +++ b/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp @@ -472,13 +472,15 @@ void NodeInstanceView::importsChanged(const QList &/*addedImports*/, con restartProcess(); } -void NodeInstanceView::auxiliaryDataChanged(const ModelNode &node, const PropertyName &name, const QVariant &data) +void NodeInstanceView::auxiliaryDataChanged(const ModelNode &node, + const PropertyName &name, + const QVariant &value) { - if ((node.isRootNode() && (name == "width" || name == "height")) || name.endsWith(PropertyName("@NodeInstance"))) { + if ((node.isRootNode() && (name == "width" || name == "height") || name == "invisible") + || name.endsWith(PropertyName("@NodeInstance"))) { if (hasInstanceForModelNode(node)) { NodeInstance instance = instanceForModelNode(node); - QVariant value = data; - if (value.isValid()) { + if (value.isValid() || name == "invisible") { PropertyValueContainer container(instance.instanceId(), name, value, TypeName()); ChangeAuxiliaryCommand changeAuxiliaryCommand({container}); nodeInstanceServer()->changeAuxiliaryValues(changeAuxiliaryCommand); diff --git a/src/plugins/qmldesigner/designercore/model/qmlvisualnode.cpp b/src/plugins/qmldesigner/designercore/model/qmlvisualnode.cpp index a1d351907ba..d0598e844ed 100644 --- a/src/plugins/qmldesigner/designercore/model/qmlvisualnode.cpp +++ b/src/plugins/qmldesigner/designercore/model/qmlvisualnode.cpp @@ -151,6 +151,21 @@ bool QmlVisualNode::hasAnySubModelNodes() const return modelNode().hasAnySubModelNodes(); } +void QmlVisualNode::setVisibilityOverride(bool visible) +{ + if (visible) + modelNode().setAuxiliaryData("invisible", true); + else + modelNode().removeAuxiliaryData("invisible"); +} + +bool QmlVisualNode::visibilityOverride() const +{ + if (isValid()) + return modelNode().auxiliaryData("invisible").toBool(); + return false; +} + QmlModelStateGroup QmlVisualNode::states() const { if (isValid())