QmlDesigner: Extend captured data

Change-Id: I780815e6f42be4f3aceb1d784a685cc330572832
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
Marco Bubke
2020-08-17 14:24:01 +02:00
parent 96f0d2517f
commit fcabab7b5f
2 changed files with 45 additions and 12 deletions
@@ -29,11 +29,41 @@
#include "imagecontainer.h"
#include <utils/smallstringio.h>
namespace QmlDesigner {
class CapturedDataCommand
{
public:
struct Property
{
Property() = default;
Property(QString key, QVariant value)
: key(std::move(key))
, value(std::move(value))
{}
friend QDataStream &operator<<(QDataStream &out, const Property &property)
{
out << property.key;
out << property.value;
return out;
}
friend QDataStream &operator>>(QDataStream &in, Property &property)
{
in >> property.key;
in >> property.value;
return in;
}
QString key;
QVariant value;
};
struct NodeData
{
friend QDataStream &operator<<(QDataStream &out, const NodeData &data)
@@ -41,7 +71,7 @@ public:
out << data.nodeId;
out << data.contentRect;
out << data.sceneTransform;
out << data.text;
out << data.properties;
return out;
}
@@ -51,7 +81,7 @@ public:
in >> data.nodeId;
in >> data.contentRect;
in >> data.sceneTransform;
in >> data.text;
in >> data.properties;
return in;
}
@@ -59,7 +89,7 @@ public:
qint32 nodeId = -1;
QRectF contentRect;
QTransform sceneTransform;
QString text;
std::vector<Property> properties;
};
struct StateData
@@ -81,7 +111,8 @@ public:
}
ImageContainer image;
QVector<NodeData> nodeData;
std::vector<NodeData> nodeData;
qint32 nodeId = -1;
};
friend QDataStream &operator<<(QDataStream &out, const CapturedDataCommand &command)
@@ -56,17 +56,19 @@ CapturedDataCommand::StateData collectStateData(ServerNodeInstance rootNodeInsta
stateData.image = ImageContainer(stateInstanceId,
QmlDesigner::renderPreviewImage(rootNodeInstance),
stateInstanceId);
stateData.nodeId = stateInstanceId;
for (const ServerNodeInstance &instance : nodeInstances) {
CapturedDataCommand::NodeData nodeData;
nodeData.nodeId = instance.instanceId();
nodeData.contentRect = instance.contentItemBoundingRect();
nodeData.sceneTransform = instance.sceneTransform();
auto textProperty = instance.property("text");
if (!textProperty.isNull() && instance.holdsGraphical()) {
CapturedDataCommand::NodeData nodeData;
nodeData.nodeId = instance.instanceId();
nodeData.contentRect = instance.contentItemBoundingRect();
nodeData.sceneTransform = instance.sceneTransform();
nodeData.text = textProperty.toString();
stateData.nodeData.push_back(std::move(nodeData));
}
if (!textProperty.isNull() && instance.holdsGraphical())
nodeData.properties.emplace_back(QString{"text"}, textProperty.toString());
stateData.nodeData.push_back(std::move(nodeData));
}
return stateData;