diff options
author | Marco Bubke <marco.bubke@qt.io> | 2020-11-09 16:35:00 +0100 |
---|---|---|
committer | Marco Bubke <marco.bubke@qt.io> | 2020-11-10 14:35:12 +0000 |
commit | 2a2dfbec7373c76bb4688e6500142fc17c4d6578 (patch) | |
tree | 4f8242f1157245dc306e03db31d66dcae1e2dba9 /share/qtcreator/qml | |
parent | 2ee63af4cd70bdb98296c636ffb71efacd3c2308 (diff) |
QmlDesigner: Add states to ImageCache
Task-number: QDS-2998
Change-Id: I8e65881181ae1010ef1f8bab92fa71d92c961bcd
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
Diffstat (limited to 'share/qtcreator/qml')
8 files changed, 120 insertions, 198 deletions
diff --git a/share/qtcreator/qml/qmlpuppet/commands/createscenecommand.cpp b/share/qtcreator/qml/qmlpuppet/commands/createscenecommand.cpp index 1ee34ff447..da86573a7a 100644 --- a/share/qtcreator/qml/qmlpuppet/commands/createscenecommand.cpp +++ b/share/qtcreator/qml/qmlpuppet/commands/createscenecommand.cpp @@ -29,136 +29,20 @@ namespace QmlDesigner { -CreateSceneCommand::CreateSceneCommand() = default; - -CreateSceneCommand::CreateSceneCommand(const QVector<InstanceContainer> &instanceContainer, - const QVector<ReparentContainer> &reparentContainer, - const QVector<IdContainer> &idVector, - const QVector<PropertyValueContainer> &valueChangeVector, - const QVector<PropertyBindingContainer> &bindingChangeVector, - const QVector<PropertyValueContainer> &auxiliaryChangeVector, - const QVector<AddImportContainer> &importVector, - const QVector<MockupTypeContainer> &mockupTypeVector, - const QUrl &fileUrl, - const QHash<QString, QVariantMap> &edit3dToolStates, - const QString &language) - : m_instanceVector(instanceContainer), - m_reparentInstanceVector(reparentContainer), - m_idVector(idVector), - m_valueChangeVector(valueChangeVector), - m_bindingChangeVector(bindingChangeVector), - m_auxiliaryChangeVector(auxiliaryChangeVector), - m_importVector(importVector), - m_mockupTypeVector(mockupTypeVector), - m_fileUrl(fileUrl), - m_edit3dToolStates(edit3dToolStates), - m_language(language) -{ -} - -QVector<InstanceContainer> CreateSceneCommand::instances() const -{ - return m_instanceVector; -} - -QVector<ReparentContainer> CreateSceneCommand::reparentInstances() const -{ - return m_reparentInstanceVector; -} - -QVector<IdContainer> CreateSceneCommand::ids() const -{ - return m_idVector; -} - -QVector<PropertyValueContainer> CreateSceneCommand::valueChanges() const -{ - return m_valueChangeVector; -} - -QVector<PropertyBindingContainer> CreateSceneCommand::bindingChanges() const -{ - return m_bindingChangeVector; -} - -QVector<PropertyValueContainer> CreateSceneCommand::auxiliaryChanges() const -{ - return m_auxiliaryChangeVector; -} - -QVector<AddImportContainer> CreateSceneCommand::imports() const -{ - return m_importVector; -} - -QVector<MockupTypeContainer> CreateSceneCommand::mockupTypes() const -{ - return m_mockupTypeVector; -} - -QUrl CreateSceneCommand::fileUrl() const -{ - return m_fileUrl; -} - -QHash<QString, QVariantMap> CreateSceneCommand::edit3dToolStates() const -{ - return m_edit3dToolStates; -} - -QString CreateSceneCommand::language() const -{ - return m_language; -} - -QDataStream &operator<<(QDataStream &out, const CreateSceneCommand &command) -{ - out << command.instances(); - out << command.reparentInstances(); - out << command.ids(); - out << command.valueChanges(); - out << command.bindingChanges(); - out << command.auxiliaryChanges(); - out << command.imports(); - out << command.mockupTypes(); - out << command.fileUrl(); - out << command.edit3dToolStates(); - out << command.language(); - - return out; -} - -QDataStream &operator>>(QDataStream &in, CreateSceneCommand &command) -{ - in >> command.m_instanceVector; - in >> command.m_reparentInstanceVector; - in >> command.m_idVector; - in >> command.m_valueChangeVector; - in >> command.m_bindingChangeVector; - in >> command.m_auxiliaryChangeVector; - in >> command.m_importVector; - in >> command.m_mockupTypeVector; - in >> command.m_fileUrl; - in >> command.m_edit3dToolStates; - in >> command.m_language; - - return in; -} - QDebug operator <<(QDebug debug, const CreateSceneCommand &command) { return debug.nospace() << "CreateSceneCommand(" - << "instances: " << command.instances() << ", " - << "reparentInstances: " << command.reparentInstances() << ", " - << "ids: " << command.ids() << ", " - << "valueChanges: " << command.valueChanges() << ", " - << "bindingChanges: " << command.bindingChanges() << ", " - << "auxiliaryChanges: " << command.auxiliaryChanges() << ", " - << "imports: " << command.imports() << ", " - << "mockupTypes: " << command.mockupTypes() << ", " - << "fileUrl: " << command.fileUrl() << ", " - << "edit3dToolStates: " << command.edit3dToolStates() << ", " - << "language: " << command.language() << ")"; + << "instances: " << command.instances << ", " + << "reparentInstances: " << command.reparentInstances << ", " + << "ids: " << command.ids << ", " + << "valueChanges: " << command.valueChanges << ", " + << "bindingChanges: " << command.bindingChanges << ", " + << "auxiliaryChanges: " << command.auxiliaryChanges << ", " + << "imports: " << command.imports << ", " + << "mockupTypes: " << command.mockupTypes << ", " + << "fileUrl: " << command.fileUrl << ", " + << "edit3dToolStates: " << command.edit3dToolStates << ", " + << "language: " << command.language << ")"; } } diff --git a/share/qtcreator/qml/qmlpuppet/commands/createscenecommand.h b/share/qtcreator/qml/qmlpuppet/commands/createscenecommand.h index aee8fe0d47..021d43a60e 100644 --- a/share/qtcreator/qml/qmlpuppet/commands/createscenecommand.h +++ b/share/qtcreator/qml/qmlpuppet/commands/createscenecommand.h @@ -41,53 +41,87 @@ namespace QmlDesigner { class CreateSceneCommand { - friend QDataStream &operator>>(QDataStream &in, CreateSceneCommand &command); - public: - CreateSceneCommand(); - explicit CreateSceneCommand( - const QVector<InstanceContainer> &instanceContainer, - const QVector<ReparentContainer> &reparentContainer, - const QVector<IdContainer> &idVector, - const QVector<PropertyValueContainer> &valueChangeVector, - const QVector<PropertyBindingContainer> &bindingChangeVector, - const QVector<PropertyValueContainer> &auxiliaryChangeVector, - const QVector<AddImportContainer> &importVector, - const QVector<MockupTypeContainer> &mockupTypeVector, - const QUrl &fileUrl, - const QHash<QString, QVariantMap> &edit3dToolStates, - const QString &language); + CreateSceneCommand() = default; + explicit CreateSceneCommand(const QVector<InstanceContainer> &instanceContainer, + const QVector<ReparentContainer> &reparentContainer, + const QVector<IdContainer> &idVector, + const QVector<PropertyValueContainer> &valueChangeVector, + const QVector<PropertyBindingContainer> &bindingChangeVector, + const QVector<PropertyValueContainer> &auxiliaryChangeVector, + const QVector<AddImportContainer> &importVector, + const QVector<MockupTypeContainer> &mockupTypeVector, + const QUrl &fileUrl, + const QHash<QString, QVariantMap> &edit3dToolStates, + const QString &language, + qint32 stateInstanceId) + : instances(instanceContainer) + , reparentInstances(reparentContainer) + , ids(idVector) + , valueChanges(valueChangeVector) + , bindingChanges(bindingChangeVector) + , auxiliaryChanges(auxiliaryChangeVector) + , imports(importVector) + , mockupTypes(mockupTypeVector) + , fileUrl(fileUrl) + , edit3dToolStates(edit3dToolStates) + , language(language) + , stateInstanceId{stateInstanceId} + {} + + friend QDataStream &operator<<(QDataStream &out, const CreateSceneCommand &command) + { + out << command.instances; + out << command.reparentInstances; + out << command.ids; + out << command.valueChanges; + out << command.bindingChanges; + out << command.auxiliaryChanges; + out << command.imports; + out << command.mockupTypes; + out << command.fileUrl; + out << command.edit3dToolStates; + out << command.language; + out << command.stateInstanceId; + + return out; + } - QVector<InstanceContainer> instances() const; - QVector<ReparentContainer> reparentInstances() const; - QVector<IdContainer> ids() const; - QVector<PropertyValueContainer> valueChanges() const; - QVector<PropertyBindingContainer> bindingChanges() const; - QVector<PropertyValueContainer> auxiliaryChanges() const; - QVector<AddImportContainer> imports() const; - QVector<MockupTypeContainer> mockupTypes() const; - QUrl fileUrl() const; - QHash<QString, QVariantMap> edit3dToolStates() const; - QString language() const; + friend QDataStream &operator>>(QDataStream &in, CreateSceneCommand &command) + { + in >> command.instances; + in >> command.reparentInstances; + in >> command.ids; + in >> command.valueChanges; + in >> command.bindingChanges; + in >> command.auxiliaryChanges; + in >> command.imports; + in >> command.mockupTypes; + in >> command.fileUrl; + in >> command.edit3dToolStates; + in >> command.language; + in >> command.stateInstanceId; -private: - QVector<InstanceContainer> m_instanceVector; - QVector<ReparentContainer> m_reparentInstanceVector; - QVector<IdContainer> m_idVector; - QVector<PropertyValueContainer> m_valueChangeVector; - QVector<PropertyBindingContainer> m_bindingChangeVector; - QVector<PropertyValueContainer> m_auxiliaryChangeVector; - QVector<AddImportContainer> m_importVector; - QVector<MockupTypeContainer> m_mockupTypeVector; - QUrl m_fileUrl; - QHash<QString, QVariantMap> m_edit3dToolStates; - QString m_language; + return in; + } + +public: + QVector<InstanceContainer> instances; + QVector<ReparentContainer> reparentInstances; + QVector<IdContainer> ids; + QVector<PropertyValueContainer> valueChanges; + QVector<PropertyBindingContainer> bindingChanges; + QVector<PropertyValueContainer> auxiliaryChanges; + QVector<AddImportContainer> imports; + QVector<MockupTypeContainer> mockupTypes; + QUrl fileUrl; + QHash<QString, QVariantMap> edit3dToolStates; + QString language; + qint32 stateInstanceId = 0; }; -QDataStream &operator<<(QDataStream &out, const CreateSceneCommand &command); -QDataStream &operator>>(QDataStream &in, CreateSceneCommand &command); +QDebug operator<<(QDebug debug, const CreateSceneCommand &command); -QDebug operator <<(QDebug debug, const CreateSceneCommand &command); -} +} // namespace QmlDesigner Q_DECLARE_METATYPE(QmlDesigner::CreateSceneCommand) diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.cpp index 39add144fb..552d323247 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.cpp @@ -318,12 +318,13 @@ void NodeInstanceServer::stopRenderTimer() void NodeInstanceServer::createScene(const CreateSceneCommand &command) { - setTranslationLanguage(command.language()); + setTranslationLanguage(command.language); initializeView(); Internal::QmlPrivateGate::stopUnifiedTimer(); setupScene(command); + setupState(command.stateInstanceId); refreshBindings(); startRenderTimer(); } @@ -399,15 +400,7 @@ void NodeInstanceServer::reparentInstances(const ReparentInstancesCommand &comma void NodeInstanceServer::changeState(const ChangeStateCommand &command) { - if (hasInstanceForId(command.stateInstanceId())) { - if (activeStateInstance().isValid()) - activeStateInstance().deactivateState(); - ServerNodeInstance instance = instanceForId(command.stateInstanceId()); - instance.activateState(); - } else { - if (activeStateInstance().isValid()) - activeStateInstance().deactivateState(); - } + setupState(command.stateInstanceId()); startRenderTimer(); } @@ -569,38 +562,37 @@ void NodeInstanceServer::setupDefaultDummyData() QList<ServerNodeInstance> NodeInstanceServer::setupInstances(const CreateSceneCommand &command) { - QList<ServerNodeInstance> instanceList = createInstances(command.instances()); + QList<ServerNodeInstance> instanceList = createInstances(command.instances); - foreach (const IdContainer &container, command.ids()) { + for (const IdContainer &container : std::as_const(command.ids)) { if (hasInstanceForId(container.instanceId())) instanceForId(container.instanceId()).setId(container.id()); } - foreach (const PropertyValueContainer &container, command.valueChanges()) { + for (const PropertyValueContainer &container : std::as_const(command.valueChanges)) { if (container.isDynamic()) setInstancePropertyVariant(container); } - foreach (const PropertyValueContainer &container, command.valueChanges()) { + for (const PropertyValueContainer &container : std::as_const(command.valueChanges)) { if (!container.isDynamic()) setInstancePropertyVariant(container); } - reparentInstances(command.reparentInstances()); + reparentInstances(command.reparentInstances); - foreach (const PropertyBindingContainer &container, command.bindingChanges()) { + for (const PropertyBindingContainer &container : std::as_const(command.bindingChanges)) { if (container.isDynamic()) setInstancePropertyBinding(container); } - foreach (const PropertyBindingContainer &container, command.bindingChanges()) { + for (const PropertyBindingContainer &container : std::as_const(command.bindingChanges)) { if (!container.isDynamic()) setInstancePropertyBinding(container); } - foreach (const PropertyValueContainer &container, command.auxiliaryChanges()) { + for (const PropertyValueContainer &container : std::as_const(command.auxiliaryChanges)) setInstanceAuxiliaryData(container); - } for (int i = instanceList.size(); --i >= 0; ) instanceList[i].doComponentComplete(); @@ -1498,4 +1490,17 @@ void NodeInstanceServer::handleInstanceHidden(const ServerNodeInstance &/*instan { } +void NodeInstanceServer::setupState(qint32 stateInstanceId) +{ + if (hasInstanceForId(stateInstanceId)) { + if (activeStateInstance().isValid()) + activeStateInstance().deactivateState(); + ServerNodeInstance instance = instanceForId(stateInstanceId); + instance.activateState(); + } else { + if (activeStateInstance().isValid()) + activeStateInstance().deactivateState(); + } +} + } // namespace QmlDesigner diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.h b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.h index 1d1533884d..021a2bd6d0 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.h +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.h @@ -289,6 +289,7 @@ protected: static QList<QObject*> allSubObjectsForObject(QObject *object); virtual void resizeCanvasSizeToRootItemSize() = 0; + void setupState(qint32 stateInstanceId); private: void setupOnlyWorkingImports(const QStringList &workingImportStatementList); diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp index 99dbe5ffe1..07f2398151 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp @@ -1316,8 +1316,7 @@ void Qt5InformationNodeInstanceServer::createScene(const CreateSceneCommand &com Qt5NodeInstanceServer::createScene(command); QList<ServerNodeInstance> instanceList; - const auto instances = command.instances(); - for (const InstanceContainer &container : instances) { + for (const InstanceContainer &container : std::as_const(command.instances)) { if (hasInstanceForId(container.instanceId())) { ServerNodeInstance instance = instanceForId(container.instanceId()); if (instance.isValid()) @@ -1331,7 +1330,7 @@ void Qt5InformationNodeInstanceServer::createScene(const CreateSceneCommand &com nodeInstanceClient()->componentCompleted(createComponentCompletedCommand(instanceList)); if (isQuick3DMode()) - setup3DEditView(instanceList, command.edit3dToolStates()); + setup3DEditView(instanceList, command.edit3dToolStates); QObject::connect(&m_renderModelNodeImageViewTimer, &QTimer::timeout, this, &Qt5InformationNodeInstanceServer::doRenderModelNodeImageView); diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5nodeinstanceserver.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5nodeinstanceserver.cpp index 3cc541545e..8ea68bd231 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5nodeinstanceserver.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5nodeinstanceserver.cpp @@ -116,11 +116,10 @@ void Qt5NodeInstanceServer::resetAllItems() void Qt5NodeInstanceServer::setupScene(const CreateSceneCommand &command) { - - setupMockupTypes(command.mockupTypes()); - setupFileUrl(command.fileUrl()); - setupImports(command.imports()); - setupDummyData(command.fileUrl()); + setupMockupTypes(command.mockupTypes); + setupFileUrl(command.fileUrl); + setupImports(command.imports); + setupDummyData(command.fileUrl); setupInstances(command); quickView()->resize(rootNodeInstance().boundingRect().size().toSize()); diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5previewnodeinstanceserver.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5previewnodeinstanceserver.cpp index 810c8f0dcf..ae167ad6ca 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5previewnodeinstanceserver.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5previewnodeinstanceserver.cpp @@ -46,7 +46,7 @@ Qt5PreviewNodeInstanceServer::Qt5PreviewNodeInstanceServer(NodeInstanceClientInt void Qt5PreviewNodeInstanceServer::createScene(const CreateSceneCommand &command) { - setTranslationLanguage(command.language()); + setTranslationLanguage(command.language); initializeView(); setupScene(command); startRenderTimer(); diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5rendernodeinstanceserver.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5rendernodeinstanceserver.cpp index 9722280dfa..4a45c626be 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5rendernodeinstanceserver.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5rendernodeinstanceserver.cpp @@ -137,7 +137,7 @@ void Qt5RenderNodeInstanceServer::createScene(const CreateSceneCommand &command) Qt5NodeInstanceServer::createScene(command); QList<ServerNodeInstance> instanceList; - foreach (const InstanceContainer &container, command.instances()) { + for (const InstanceContainer &container : std::as_const(command.instances)) { if (hasInstanceForId(container.instanceId())) { ServerNodeInstance instance = instanceForId(container.instanceId()); if (instance.isValid()) { |