// Copyright (C) 2016 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0 WITH Qt-GPL-exception-1.0 #include "qmlstatenodeinstance.h" #include "qmlpropertychangesnodeinstance.h" #include #include namespace QmlDesigner { namespace Internal { /** \class QmlStateNodeInstance QmlStateNodeInstance manages a QQuickState object. */ QmlStateNodeInstance::QmlStateNodeInstance(QObject *object) : ObjectNodeInstance(object) { } QmlStateNodeInstance::Pointer QmlStateNodeInstance::create(QObject *object) { Pointer instance(new QmlStateNodeInstance(object)); instance->populateResetHashes(); return instance; } void setAllNodesDirtyRecursive([[maybe_unused]] QQuickItem *parentItem) { #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) if (!parentItem) return; const QList children = parentItem->childItems(); for (QQuickItem *childItem : children) setAllNodesDirtyRecursive(childItem); QQuickDesignerSupport::addDirty(parentItem, QQuickDesignerSupport::Content); #endif } void QmlStateNodeInstance::activateState() { if (!QmlPrivateGate::States::isStateActive(object(), context()) && nodeInstanceServer()->hasInstanceForObject(object())) { nodeInstanceServer()->setStateInstance(nodeInstanceServer()->instanceForObject(object())); QmlPrivateGate::States::activateState(object(), context()); setAllNodesDirtyRecursive(nodeInstanceServer()->rootItem()); } } void QmlStateNodeInstance::deactivateState() { if (QmlPrivateGate::States::isStateActive(object(), context())) { nodeInstanceServer()->clearStateInstance(); QmlPrivateGate::States::deactivateState(object()); } } void QmlStateNodeInstance::setPropertyVariant(const PropertyName &name, const QVariant &value) { if (name == "when") return; ObjectNodeInstance::setPropertyVariant(name, value); } void QmlStateNodeInstance::setPropertyBinding(const PropertyName &name, const QString &expression) { bool isStateOfTheRootModelNode = parentInstance() && parentInstance()->isRootNodeInstance(); if (name == "when" && (isStateOfTheRootModelNode)) return; ObjectNodeInstance::setPropertyBinding(name, expression); } bool QmlStateNodeInstance::updateStateVariant(const ObjectNodeInstance::Pointer &target, const PropertyName &propertyName, const QVariant &value) { return QmlPrivateGate::States::changeValueInRevertList(object(), target->object(), propertyName, value); } bool QmlStateNodeInstance::updateStateBinding(const ObjectNodeInstance::Pointer &target, const PropertyName &propertyName, const QString &expression) { return QmlPrivateGate::States::updateStateBinding(object(), target->object(), propertyName, expression); } bool QmlStateNodeInstance::resetStateProperty(const ObjectNodeInstance::Pointer &target, const PropertyName &propertyName, const QVariant & resetValue) { return QmlPrivateGate::States::resetStateProperty(object(), target->object(), propertyName, resetValue); } } // namespace Internal } // namespace QmlDesigner