diff options
author | Thomas Hartmann <thomas.hartmann@qt.io> | 2020-04-21 08:06:43 +0200 |
---|---|---|
committer | Thomas Hartmann <thomas.hartmann@qt.io> | 2020-04-21 10:57:26 +0000 |
commit | 3caafb2b8194ab28c5ee9f9772abd6233aa3845d (patch) | |
tree | 7bafa729d4faaaa020e75699e48cff843ac8c857 | |
parent | dbccc57597169246827c5ec6087ad7316c2ad4e1 (diff) |
QmlDesigner: Inspect components for existing states
For each created items we retrieve a list of the names
of all existing states.
Task-number: QDS-1978
Change-Id: I8e85e439fce3c6204cb8bcf69f6be847cc8dae5c
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
10 files changed, 50 insertions, 0 deletions
diff --git a/share/qtcreator/qml/qmlpuppet/interfaces/commondefines.h b/share/qtcreator/qml/qmlpuppet/interfaces/commondefines.h index eb1bd41051..b5cf157a8c 100644 --- a/share/qtcreator/qml/qmlpuppet/interfaces/commondefines.h +++ b/share/qtcreator/qml/qmlpuppet/interfaces/commondefines.h @@ -34,6 +34,7 @@ enum InformationName { NoName, NoInformationChange = NoName, + AllStates, Size, BoundingRect, Transform, diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.cpp index cfdc513c1b..813057e10b 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.cpp @@ -1061,6 +1061,7 @@ static QVector<InformationContainer> createInformationVector(const QList<ServerN informationVector.append(InformationContainer(instance.instanceId(), PenWidth, instance.penWidth())); informationVector.append(InformationContainer(instance.instanceId(), IsAnchoredByChildren, instance.isAnchoredByChildren())); informationVector.append(InformationContainer(instance.instanceId(), IsAnchoredBySibling, instance.isAnchoredBySibling())); + informationVector.append(InformationContainer(instance.instanceId(), AllStates, instance.allStates())); informationVector.append(InformationContainer(instance.instanceId(), HasAnchor, PropertyName("anchors.fill"), instance.hasAnchor("anchors.fill"))); informationVector.append(InformationContainer(instance.instanceId(), HasAnchor, PropertyName("anchors.centerIn"), instance.hasAnchor("anchors.centerIn"))); diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/objectnodeinstance.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/objectnodeinstance.cpp index 7fabfcf903..87e0cc4d71 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/objectnodeinstance.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/objectnodeinstance.cpp @@ -871,6 +871,11 @@ void ObjectNodeInstance::deactivateState() { } +QStringList ObjectNodeInstance::allStates() const +{ + return {}; +} + void ObjectNodeInstance::populateResetHashes() { QmlPrivateGate::registerCustomData(object()); diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/objectnodeinstance.h b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/objectnodeinstance.h index d716c4d755..3026ffefce 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/objectnodeinstance.h +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/objectnodeinstance.h @@ -148,6 +148,7 @@ public: virtual void activateState(); virtual void deactivateState(); + virtual QStringList allStates() const; void populateResetHashes(); bool hasValidResetBinding(const PropertyName &propertyName) const; diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/quickitemnodeinstance.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/quickitemnodeinstance.cpp index f697052575..cfa1b1eac0 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/quickitemnodeinstance.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/quickitemnodeinstance.cpp @@ -232,6 +232,20 @@ QList<QQuickItem *> QuickItemNodeInstance::allItemsRecursive() const return itemList; } +QStringList QuickItemNodeInstance::allStates() const +{ + QStringList list; + + QList<QObject*> stateList = DesignerSupport::statesForItem(quickItem()); + for (QObject *state : stateList) { + QQmlProperty property(state, "name"); + if (property.isValid()) + list.append(property.read().toString()); + } + + return list; +} + QRectF QuickItemNodeInstance::contentItemBoundingBox() const { if (contentItem()) { diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/quickitemnodeinstance.h b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/quickitemnodeinstance.h index 8aab24178b..f42e45a8ff 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/quickitemnodeinstance.h +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/quickitemnodeinstance.h @@ -96,6 +96,7 @@ public: void doComponentComplete() override; QList<QQuickItem*> allItemsRecursive() const override; + QStringList allStates() const override; protected: explicit QuickItemNodeInstance(QQuickItem*); diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/servernodeinstance.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/servernodeinstance.cpp index 483cf581c1..0c9f5721a5 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/servernodeinstance.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/servernodeinstance.cpp @@ -661,6 +661,14 @@ QList<ServerNodeInstance> ServerNodeInstance::stateInstances() const return m_nodeInstance->stateInstances(); } +QStringList ServerNodeInstance::allStates() const +{ + if (isValid()) + return m_nodeInstance->allStates(); + + return {}; +} + Internal::ObjectNodeInstance::Pointer ServerNodeInstance::internalInstance() const { return m_nodeInstance; diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/servernodeinstance.h b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/servernodeinstance.h index c85ba9a2b8..ceb3b1e5b1 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/servernodeinstance.h +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/servernodeinstance.h @@ -164,6 +164,7 @@ public: QSharedPointer<Internal::ObjectNodeInstance> internalInstance() const; QList<ServerNodeInstance> stateInstances() const; + QStringList allStates() const; static bool isSubclassOf(QObject *object, const QByteArray &superTypeName); diff --git a/src/plugins/qmldesigner/designercore/include/nodeinstance.h b/src/plugins/qmldesigner/designercore/include/nodeinstance.h index 9595396ae9..56b8141bde 100644 --- a/src/plugins/qmldesigner/designercore/include/nodeinstance.h +++ b/src/plugins/qmldesigner/designercore/include/nodeinstance.h @@ -90,6 +90,7 @@ public: bool hasAnchors() const; QString error() const; bool hasError() const; + QStringList allStateNames() const; protected: void setProperty(const PropertyName &name, const QVariant &value); @@ -117,6 +118,7 @@ protected: InformationName setInformationAnchor(const PropertyName &sourceAnchorLine, const PropertyName &targetAnchorLine, qint32 targetInstanceId); InformationName setInformationInstanceTypeForProperty(const PropertyName &property, const TypeName &type); InformationName setInformationHasBindingForProperty(const PropertyName &property, bool hasProperty); + InformationName setAllStates(const QStringList &states); void setParentId(qint32 instanceId); void setRenderPixmap(const QImage &image); diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstance.cpp b/src/plugins/qmldesigner/designercore/instances/nodeinstance.cpp index 15d09e4516..453c1b31a4 100644 --- a/src/plugins/qmldesigner/designercore/instances/nodeinstance.cpp +++ b/src/plugins/qmldesigner/designercore/instances/nodeinstance.cpp @@ -76,6 +76,7 @@ public: QString errorMessage; QHash<PropertyName, QPair<PropertyName, qint32> > anchors; + QStringList allStates; }; NodeInstance::NodeInstance() = default; @@ -169,6 +170,10 @@ bool NodeInstance::hasError() const return !d->errorMessage.isEmpty(); } +QStringList NodeInstance::allStateNames() const +{ + return d->allStates; +} bool NodeInstance::isValid() const { @@ -592,6 +597,16 @@ InformationName NodeInstance::setInformationHasBindingForProperty(const Property return NoInformationChange; } +InformationName NodeInstance::setAllStates(const QStringList &states) +{ + if (d->allStates != states) { + d->allStates = states; + return AllStates; + } + + return NoInformationChange; +} + InformationName NodeInstance::setInformation(InformationName name, const QVariant &information, const QVariant &secondInformation, const QVariant &thirdInformation) { switch (name) { @@ -614,6 +629,7 @@ InformationName NodeInstance::setInformation(InformationName name, const QVarian case Anchor: return setInformationAnchor(information.toByteArray(), secondInformation.toByteArray(), thirdInformation.value<qint32>()); case InstanceTypeForProperty: return setInformationInstanceTypeForProperty(information.toByteArray(), secondInformation.toByteArray()); case HasBindingForProperty: return setInformationHasBindingForProperty(information.toByteArray(), secondInformation.toBool()); + case AllStates: return setAllStates(information.toStringList()); case NoName: default: break; } |