aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Hartmann <thomas.hartmann@qt.io>2020-04-21 08:06:43 +0200
committerThomas Hartmann <thomas.hartmann@qt.io>2020-04-21 10:57:26 +0000
commit3caafb2b8194ab28c5ee9f9772abd6233aa3845d (patch)
tree7bafa729d4faaaa020e75699e48cff843ac8c857
parentdbccc57597169246827c5ec6087ad7316c2ad4e1 (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>
-rw-r--r--share/qtcreator/qml/qmlpuppet/interfaces/commondefines.h1
-rw-r--r--share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.cpp1
-rw-r--r--share/qtcreator/qml/qmlpuppet/qml2puppet/instances/objectnodeinstance.cpp5
-rw-r--r--share/qtcreator/qml/qmlpuppet/qml2puppet/instances/objectnodeinstance.h1
-rw-r--r--share/qtcreator/qml/qmlpuppet/qml2puppet/instances/quickitemnodeinstance.cpp14
-rw-r--r--share/qtcreator/qml/qmlpuppet/qml2puppet/instances/quickitemnodeinstance.h1
-rw-r--r--share/qtcreator/qml/qmlpuppet/qml2puppet/instances/servernodeinstance.cpp8
-rw-r--r--share/qtcreator/qml/qmlpuppet/qml2puppet/instances/servernodeinstance.h1
-rw-r--r--src/plugins/qmldesigner/designercore/include/nodeinstance.h2
-rw-r--r--src/plugins/qmldesigner/designercore/instances/nodeinstance.cpp16
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;
}