diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp b/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp index 8d97c81505e3cd136332d35c4381bdacb74bb2fa..5884215bce76c83baeb0110ebe601e64b667179e 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp +++ b/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp @@ -435,6 +435,11 @@ void FormEditorView::auxiliaryDataChanged(const ModelNode &node, const QString & } } +void FormEditorView::instancesCompleted(const QVector &completedNodeList) +{ +} + + void FormEditorView::customNotification(const AbstractView *view, const QString &identifier, const QList &nodeList, const QList &data) { if (identifier == "__start rewriter transaction__") { diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorview.h b/src/plugins/qmldesigner/components/formeditor/formeditorview.h index 2fbf9fec3b9aad3d42483512983a65118fa3662f..f98c3b0e1cedfcdaf3d7b2224787b342fd16f611 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditorview.h +++ b/src/plugins/qmldesigner/components/formeditor/formeditorview.h @@ -101,6 +101,8 @@ public: void auxiliaryDataChanged(const ModelNode &node, const QString &name, const QVariant &data); void customNotification(const AbstractView *view, const QString &identifier, const QList &nodeList, const QList &data); + void instancesCompleted(const QVector &completedNodeList); + double margins() const; double spacing() const; void deActivateItemCreator(); diff --git a/src/plugins/qmldesigner/components/integration/componentview.cpp b/src/plugins/qmldesigner/components/integration/componentview.cpp index 8741d72142c4ee7d1a19e4a24046d2b29a4268bb..d24d6fb3643b3e5592c4f27588d9137a24361a79 100644 --- a/src/plugins/qmldesigner/components/integration/componentview.cpp +++ b/src/plugins/qmldesigner/components/integration/componentview.cpp @@ -161,6 +161,7 @@ void ComponentView::bindingPropertiesChanged(const QList& /*pro void ComponentView::rootNodeTypeChanged(const QString &/*type*/, int /*majorVersion*/, int /*minorVersion*/) {} void ComponentView::scriptFunctionsChanged(const ModelNode &/*node*/, const QStringList &/*scriptFunctionList*/) {} void ComponentView::instancePropertyChange(const QList > &/*propertyList*/) {}; +void ComponentView::instancesCompleted(const QVector &/*completedNodeList*/) {} void ComponentView::selectedNodesChanged(const QList &/*selectedNodeList*/, @@ -170,7 +171,6 @@ void ComponentView::fileUrlChanged(const QUrl &/*oldUrl*/, const QUrl &/*newUrl* void ComponentView::nodeOrderChanged(const NodeListProperty &/*listProperty*/, const ModelNode & /*movedNode*/, int /*oldIndex*/) {} -void ComponentView::importsChanged() {} void ComponentView::auxiliaryDataChanged(const ModelNode &/*node*/, const QString &/*name*/, const QVariant &/*data*/) {} diff --git a/src/plugins/qmldesigner/components/integration/componentview.h b/src/plugins/qmldesigner/components/integration/componentview.h index 40a0ffc0c018508df03b69542be9e9befc63848d..b2aeb59f1b0cb156f991ae15464126111a9c0b94 100644 --- a/src/plugins/qmldesigner/components/integration/componentview.h +++ b/src/plugins/qmldesigner/components/integration/componentview.h @@ -69,6 +69,7 @@ public: void rootNodeTypeChanged(const QString &type, int majorVersion, int minorVersion); void scriptFunctionsChanged(const ModelNode &node, const QStringList &scriptFunctionList); void instancePropertyChange(const QList > &propertyList); + void instancesCompleted(const QVector &completedNodeList); void selectedNodesChanged(const QList &selectedNodeList, const QList &lastSelectedNodeList); @@ -77,8 +78,6 @@ public: void nodeOrderChanged(const NodeListProperty &listProperty, const ModelNode &movedNode, int oldIndex); - void importsChanged(); - void auxiliaryDataChanged(const ModelNode &node, const QString &name, const QVariant &data); void customNotification(const AbstractView *view, const QString &identifier, const QList &nodeList, const QList &data); diff --git a/src/plugins/qmldesigner/components/integration/designdocumentcontrollerview.cpp b/src/plugins/qmldesigner/components/integration/designdocumentcontrollerview.cpp index fea1e712d49b8049a15bd36023754f9a17d4f1a9..a1e967a021991929f31871bcc1cf487035d65984 100644 --- a/src/plugins/qmldesigner/components/integration/designdocumentcontrollerview.cpp +++ b/src/plugins/qmldesigner/components/integration/designdocumentcontrollerview.cpp @@ -65,6 +65,11 @@ void DesignDocumentControllerView::instancePropertyChange(const QList &/*completedNodeList*/) +{ + +} + static QStringList arrayToStringList(const QByteArray &byteArray) { QString str(QString::fromLatin1(byteArray)); diff --git a/src/plugins/qmldesigner/components/integration/designdocumentcontrollerview.h b/src/plugins/qmldesigner/components/integration/designdocumentcontrollerview.h index 9d61a58159a52f89933f6a4e110b20df628ff2a8..8ad389119f5873d3f33f16832a2ad80fa1b1f2ff 100644 --- a/src/plugins/qmldesigner/components/integration/designdocumentcontrollerview.h +++ b/src/plugins/qmldesigner/components/integration/designdocumentcontrollerview.h @@ -60,7 +60,7 @@ public: virtual void nodeOrderChanged(const NodeListProperty &listProperty, const ModelNode &movedNode, int oldIndex); virtual void scriptFunctionsChanged(const ModelNode &node, const QStringList &scriptFunctionList); void instancePropertyChange(const QList > &propertyList); - + void instancesCompleted(const QVector &completedNodeList); ModelNode insertModel(const ModelNode &modelNode) { return m_modelMerger.insertModel(modelNode); } diff --git a/src/plugins/qmldesigner/components/navigator/navigatorview.cpp b/src/plugins/qmldesigner/components/navigator/navigatorview.cpp index 7b57375e74df8fe46b75a8d0b73a188a719f601d..9e1ae2d6db4f0b2ea72917a7873a1b0e17e5b2d9 100644 --- a/src/plugins/qmldesigner/components/navigator/navigatorview.cpp +++ b/src/plugins/qmldesigner/components/navigator/navigatorview.cpp @@ -198,6 +198,10 @@ void NavigatorView::instancePropertyChange(const QList { } +void NavigatorView::instancesCompleted(const QVector &/*completedNodeList*/) +{ +} + void NavigatorView::nodeOrderChanged(const NodeListProperty &listProperty, const ModelNode &node, int oldIndex) { if (m_treeModel->isInTree(node)) diff --git a/src/plugins/qmldesigner/components/navigator/navigatorview.h b/src/plugins/qmldesigner/components/navigator/navigatorview.h index ea1ca45fb5bf0a50d0f217e4d61518b78c597f39..30994c52e2cd3d1ccf0ff86142addba40c8c4f48 100644 --- a/src/plugins/qmldesigner/components/navigator/navigatorview.h +++ b/src/plugins/qmldesigner/components/navigator/navigatorview.h @@ -82,6 +82,7 @@ public: void auxiliaryDataChanged(const ModelNode &node, const QString &name, const QVariant &data); void scriptFunctionsChanged(const ModelNode &node, const QStringList &scriptFunctionList); void instancePropertyChange(const QList > &propertyList); + void instancesCompleted(const QVector &completedNodeList); private slots: // void handleChangedItem(QStandardItem * item); diff --git a/src/plugins/qmldesigner/designercore/designercore.pri b/src/plugins/qmldesigner/designercore/designercore.pri index 10570f523b1013dd2c73536b5fcecdb820fedb98..4124021fe20859f9c3d22b58f112d29e50aa2a15 100644 --- a/src/plugins/qmldesigner/designercore/designercore.pri +++ b/src/plugins/qmldesigner/designercore/designercore.pri @@ -119,7 +119,9 @@ SOURCES += $$PWD/model/abstractview.cpp \ $$PWD/instances/addimportcommand.cpp \ $$PWD/instances/childrenchangedcommand.cpp \ $$PWD/instances/statepreviewimagechangedcommand.cpp \ - $$PWD/instances/imagecontainer.cpp + $$PWD/instances/imagecontainer.cpp \ + $$PWD/instances/completecomponentcommand.cpp \ + $$PWD/instances/componentcompletedcommand.cpp HEADERS += $$PWD/include/corelib_global.h \ $$PWD/include/abstractview.h \ $$PWD/include/nodeinstanceview.h \ @@ -237,7 +239,9 @@ HEADERS += $$PWD/include/corelib_global.h \ $$PWD/instances/addimportcommand.h \ $$PWD/instances/childrenchangedcommand.h \ $$PWD/instances/statepreviewimagechangedcommand.h \ - $$PWD/instances/imagecontainer.h + $$PWD/instances/imagecontainer.h \ + $$PWD/instances/completecomponentcommand.h \ + $$PWD/instances/componentcompletedcommand.h contains(CONFIG, plugin) { # If core.pri has been included in the qmldesigner plugin SOURCES += $$PWD/model/basetexteditmodifier.cpp diff --git a/src/plugins/qmldesigner/designercore/include/abstractview.h b/src/plugins/qmldesigner/designercore/include/abstractview.h index 2e27e015ce8dfbfd7150aa06bc819764111bfa09..70b8383b4d5d4f97a1c746cd7f24d8f5957e3e2d 100644 --- a/src/plugins/qmldesigner/designercore/include/abstractview.h +++ b/src/plugins/qmldesigner/designercore/include/abstractview.h @@ -107,6 +107,7 @@ public: void emitCustomNotification(const QString &identifier, const QList &nodeList, const QList &data); void emitInstancePropertyChange(const QList > &propertyList); + void emitInstancesCompleted(const QVector &nodeList); virtual void modelAttached(Model *model); virtual void modelAboutToBeDetached(Model *model); @@ -124,6 +125,8 @@ public: virtual void rootNodeTypeChanged(const QString &type, int majorVersion, int minorVersion) = 0; virtual void instancePropertyChange(const QList > &propertyList) = 0; + virtual void instancesCompleted(const QVector &completedNodeList) = 0; + virtual void selectedNodesChanged(const QList &selectedNodeList, const QList &lastSelectedNodeList) = 0; diff --git a/src/plugins/qmldesigner/designercore/include/nodeinstanceclientinterface.h b/src/plugins/qmldesigner/designercore/include/nodeinstanceclientinterface.h index 4b263fb9cbee51b16df455ff15ddeea12ce644c5..671282231fa33c707c32fbe05835063a771645c4 100644 --- a/src/plugins/qmldesigner/designercore/include/nodeinstanceclientinterface.h +++ b/src/plugins/qmldesigner/designercore/include/nodeinstanceclientinterface.h @@ -10,6 +10,7 @@ class PixmapChangedCommand; class InformationChangedCommand; class ChildrenChangedCommand; class StatePreviewImageChangedCommand; +class ComponentCompletedCommand; class NodeInstanceClientInterface { @@ -19,6 +20,7 @@ public: virtual void pixmapChanged(const PixmapChangedCommand &command) = 0; virtual void childrenChanged(const ChildrenChangedCommand &command) = 0; virtual void statePreviewImagesChanged(const StatePreviewImageChangedCommand &command) = 0; + virtual void componentCompleted(const ComponentCompletedCommand &command) = 0; virtual void flush() {}; virtual qint64 bytesToWrite() const {return 0;} diff --git a/src/plugins/qmldesigner/designercore/include/nodeinstanceserverinterface.h b/src/plugins/qmldesigner/designercore/include/nodeinstanceserverinterface.h index f64321ecef120545ca45c2c3e22a4acdaa27fb46..dc6d57d40083843123e7bfbc93dbab90e6c5b2ed 100644 --- a/src/plugins/qmldesigner/designercore/include/nodeinstanceserverinterface.h +++ b/src/plugins/qmldesigner/designercore/include/nodeinstanceserverinterface.h @@ -21,6 +21,7 @@ class RemoveInstancesCommand; class RemovePropertiesCommand; class ChangeStateCommand; class AddImportCommand; +class CompleteComponentCommand; class NodeInstanceServerInterface : public QObject { @@ -40,6 +41,7 @@ public: virtual void changeIds(const ChangeIdsCommand &command) = 0; virtual void changeState(const ChangeStateCommand &command) = 0; virtual void addImport(const AddImportCommand &command) = 0; + virtual void completeComponent(const CompleteComponentCommand &command) = 0; virtual void setBlockUpdates(bool /*block*/) {} diff --git a/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h b/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h index 0f37eb41520ced4c078265039f31685ffe09a462..619958f2c8a9607d06e210f7d01eabd895d2f00d 100644 --- a/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h +++ b/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h @@ -63,6 +63,7 @@ class ChangeIdsCommand; class RemoveInstancesCommand; class RemovePropertiesCommand; class AddImportCommand; +class CompleteComponentCommand; class CORESHARED_EXPORT NodeInstanceView : public AbstractView, public NodeInstanceClientInterface { @@ -94,6 +95,7 @@ public: void selectedNodesChanged(const QList &selectedNodeList, const QList &lastSelectedNodeList); void scriptFunctionsChanged(const ModelNode &node, const QStringList &scriptFunctionList); void instancePropertyChange(const QList > &propertyList); + void instancesCompleted(const QVector &completedNodeList); void importAdded(const Import &import); void importRemoved(const Import &import); @@ -118,6 +120,7 @@ public: void informationChanged(const InformationChangedCommand &command); void childrenChanged(const ChildrenChangedCommand &command); void statePreviewImagesChanged(const StatePreviewImageChangedCommand &command); + void componentCompleted(const ComponentCompletedCommand &command); private: // functions NodeInstance rootNodeInstance() const; @@ -143,6 +146,8 @@ private: // functions CreateSceneCommand createCreateSceneCommand() const; ClearSceneCommand createClearSceneCommand() const; CreateInstancesCommand createCreateInstancesCommand(const QList &instanceList) const; + CompleteComponentCommand createComponentCompleteCommand(const QList &instanceList) const; + ComponentCompletedCommand createComponentCompletedCommand(const QList &instanceList) const; ReparentInstancesCommand createReparentInstancesCommand(const QList &instanceList) const; ReparentInstancesCommand createReparentInstancesCommand(const ModelNode &node, const NodeAbstractProperty &newPropertyParent, const NodeAbstractProperty &oldPropertyParent) const; ChangeFileUrlCommand createChangeFileUrlCommand(const QUrl &fileUrl) const; diff --git a/src/plugins/qmldesigner/designercore/include/qmlmodelview.h b/src/plugins/qmldesigner/designercore/include/qmlmodelview.h index f5e95103207664eb95306565900edac17595c18a..930a68966d2cf00d4be4016a1be7f4e9899a38de 100644 --- a/src/plugins/qmldesigner/designercore/include/qmlmodelview.h +++ b/src/plugins/qmldesigner/designercore/include/qmlmodelview.h @@ -91,6 +91,7 @@ public: virtual void nodeInstancePropertyChanged(const ModelNode &node, const QString &propertyName); void instancePropertyChange(const QList > &propertyList); + void instancesCompleted(const QVector &completedNodeList); void nodeCreated(const ModelNode &createdNode); void nodeRemoved(const ModelNode &removedNode, const NodeAbstractProperty &parentProperty, PropertyChangeFlags propertyChange); diff --git a/src/plugins/qmldesigner/designercore/include/rewriterview.h b/src/plugins/qmldesigner/designercore/include/rewriterview.h index f5e77193c585c69e80f5822cadce3bfbd99b60ae..ee1a3205e7af8303d815e60bf12298e852b136e7 100644 --- a/src/plugins/qmldesigner/designercore/include/rewriterview.h +++ b/src/plugins/qmldesigner/designercore/include/rewriterview.h @@ -135,6 +135,7 @@ public: void scriptFunctionsChanged(const ModelNode &node, const QStringList &scriptFunctionList); void instancePropertyChange(const QList > &propertyList); + void instancesCompleted(const QVector &completedNodeList); void importAdded(const Import &import); void importRemoved(const Import &import); diff --git a/src/plugins/qmldesigner/designercore/instances/completecomponentcommand.cpp b/src/plugins/qmldesigner/designercore/instances/completecomponentcommand.cpp new file mode 100644 index 0000000000000000000000000000000000000000..91fbef062efc54b9b9c769190a7695a2ae597382 --- /dev/null +++ b/src/plugins/qmldesigner/designercore/instances/completecomponentcommand.cpp @@ -0,0 +1,33 @@ +#include "completecomponentcommand.h" + +namespace QmlDesigner { + +CompleteComponentCommand::CompleteComponentCommand() +{ +} + +CompleteComponentCommand::CompleteComponentCommand(const QVector &container) + : m_instanceVector(container) +{ +} + +QVector CompleteComponentCommand::instances() const +{ + return m_instanceVector; +} + +QDataStream &operator<<(QDataStream &out, const CompleteComponentCommand &command) +{ + out << command.instances(); + + return out; +} + +QDataStream &operator>>(QDataStream &in, CompleteComponentCommand &command) +{ + in >> command.m_instanceVector; + + return in; +} + +} // namespace QmlDesigner diff --git a/src/plugins/qmldesigner/designercore/instances/completecomponentcommand.h b/src/plugins/qmldesigner/designercore/instances/completecomponentcommand.h new file mode 100644 index 0000000000000000000000000000000000000000..2bc5e0f8393e4321345c35f3279c0a942f1893d2 --- /dev/null +++ b/src/plugins/qmldesigner/designercore/instances/completecomponentcommand.h @@ -0,0 +1,30 @@ +#ifndef COMPLETECOMPONENT_H +#define COMPLETECOMPONENT_H + +#include +#include + +namespace QmlDesigner { + +class CompleteComponentCommand +{ + friend QDataStream &operator>>(QDataStream &in, CompleteComponentCommand &command); + +public: + CompleteComponentCommand(); + CompleteComponentCommand(const QVector &container); + + QVector instances() const; + +private: + QVector m_instanceVector; +}; + +QDataStream &operator<<(QDataStream &out, const CompleteComponentCommand &command); +QDataStream &operator>>(QDataStream &in, CompleteComponentCommand &command); + +} // namespace QmlDesigner + +Q_DECLARE_METATYPE(QmlDesigner::CompleteComponentCommand); + +#endif // COMPLETECOMPONENT_H diff --git a/src/plugins/qmldesigner/designercore/instances/componentcompletedcommand.cpp b/src/plugins/qmldesigner/designercore/instances/componentcompletedcommand.cpp new file mode 100644 index 0000000000000000000000000000000000000000..e209574e03607d0c3fa2207e1f5150f454640f87 --- /dev/null +++ b/src/plugins/qmldesigner/designercore/instances/componentcompletedcommand.cpp @@ -0,0 +1,34 @@ +#include "componentcompletedcommand.h" + +namespace QmlDesigner { + +ComponentCompletedCommand::ComponentCompletedCommand() +{ +} + +ComponentCompletedCommand::ComponentCompletedCommand(const QVector &container) + : m_instanceVector(container) +{ +} + +QVector ComponentCompletedCommand::instances() const +{ + return m_instanceVector; +} + +QDataStream &operator<<(QDataStream &out, const ComponentCompletedCommand &command) +{ + out << command.instances(); + + return out; +} + +QDataStream &operator>>(QDataStream &in, ComponentCompletedCommand &command) +{ + in >> command.m_instanceVector; + + return in; +} + +} // namespace QmlDesigner + diff --git a/src/plugins/qmldesigner/designercore/instances/componentcompletedcommand.h b/src/plugins/qmldesigner/designercore/instances/componentcompletedcommand.h new file mode 100644 index 0000000000000000000000000000000000000000..c39177777cf4f46945fa9d6fddbcb06397b33ddc --- /dev/null +++ b/src/plugins/qmldesigner/designercore/instances/componentcompletedcommand.h @@ -0,0 +1,29 @@ +#ifndef COMPONENTCOMPLETEDCOMMAND_H +#define COMPONENTCOMPLETEDCOMMAND_H +#include +#include + +namespace QmlDesigner { + +class ComponentCompletedCommand +{ + friend QDataStream &operator>>(QDataStream &in, ComponentCompletedCommand &command); + +public: + ComponentCompletedCommand(); + ComponentCompletedCommand(const QVector &container); + + QVector instances() const; + +private: + QVector m_instanceVector; +}; + +QDataStream &operator<<(QDataStream &out, const ComponentCompletedCommand &command); +QDataStream &operator>>(QDataStream &in, ComponentCompletedCommand &command); + +} // namespace QmlDesigner + +Q_DECLARE_METATYPE(QmlDesigner::ComponentCompletedCommand); + +#endif // COMPONENTCOMPLETEDCOMMAND_H diff --git a/src/plugins/qmldesigner/designercore/instances/instances.pri b/src/plugins/qmldesigner/designercore/instances/instances.pri index 5d51301e12587e511da0d4187ebac05f20fa6b74..060f8ed1445d023e598efbe9c2e649db74c140e3 100644 --- a/src/plugins/qmldesigner/designercore/instances/instances.pri +++ b/src/plugins/qmldesigner/designercore/instances/instances.pri @@ -3,6 +3,8 @@ INCLUDEPATH += $$PWD/../include HEADERS += $$PWD/behaviornodeinstance.h +HEADERS += $$PWD/componentcompletedcommand.h +HEADERS += $$PWD//completecomponentcommand.h HEADERS += $$PWDstatepreviewimagechangedcommand.h HEADERS += $$PWD//imagecontainer.h HEADERS += $$PWD/childrenchangedcommand.h @@ -45,6 +47,8 @@ HEADERS += $$PWD/../include/nodeinstanceserverinterface.h SOURCES += $$PWD/behaviornodeinstance.cpp +SOURCES += $$PWD/componentcompletedcommand.cpp +SOURCES += $$PWD/completecomponentcommand.cpp SOURCES += $$PWD/statepreviewimagechangedcommand.cpp SOURCES += $$PWD/imagecontainer.cpp SOURCES += $$PWD/childrenchangedcommand.cpp diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstanceclientproxy.cpp b/src/plugins/qmldesigner/designercore/instances/nodeinstanceclientproxy.cpp index 41eee3ced9632d1259c1721d441e910e5eb9d011..0520c98b241bafc86b1edeaaa436449a9535596a 100644 --- a/src/plugins/qmldesigner/designercore/instances/nodeinstanceclientproxy.cpp +++ b/src/plugins/qmldesigner/designercore/instances/nodeinstanceclientproxy.cpp @@ -23,6 +23,7 @@ #include "changeidscommand.h" #include "changestatecommand.h" #include "addimportcommand.h" +#include "completecomponentcommand.h" #include "informationchangedcommand.h" #include "pixmapchangedcommand.h" @@ -30,6 +31,7 @@ #include "childrenchangedcommand.h" #include "imagecontainer.h" #include "statepreviewimagechangedcommand.h" +#include "componentcompletedcommand.h" namespace QmlDesigner { @@ -83,6 +85,11 @@ void NodeInstanceClientProxy::statePreviewImagesChanged(const StatePreviewImageC writeCommand(QVariant::fromValue(command)); } +void NodeInstanceClientProxy::componentCompleted(const ComponentCompletedCommand &command) +{ + writeCommand(QVariant::fromValue(command)); +} + void NodeInstanceClientProxy::flush() { } @@ -142,6 +149,7 @@ void NodeInstanceClientProxy::dispatchCommand(const QVariant &command) static const int changeIdsCommandType = QMetaType::type("ChangeIdsCommand"); static const int changeStateCommandType = QMetaType::type("ChangeStateCommand"); static const int addImportCommandType = QMetaType::type("AddImportCommand"); + static const int completeComponentCommandType = QMetaType::type("CompleteComponentCommand"); if (command.userType() == createInstancesCommandType) nodeInstanceServer()->createInstances(command.value()); @@ -167,6 +175,8 @@ void NodeInstanceClientProxy::dispatchCommand(const QVariant &command) nodeInstanceServer()->changeState(command.value()); else if (command.userType() == addImportCommandType) nodeInstanceServer()->addImport(command.value()); + else if (command.userType() == completeComponentCommandType) + nodeInstanceServer()->completeComponent(command.value()); else Q_ASSERT(false); } diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstanceclientproxy.h b/src/plugins/qmldesigner/designercore/instances/nodeinstanceclientproxy.h index 5206fc5ad9a04fdd1f811e3ce9647611c4277d83..3fc1e0a4663561dd3f838a2859a4c313cd900586 100644 --- a/src/plugins/qmldesigner/designercore/instances/nodeinstanceclientproxy.h +++ b/src/plugins/qmldesigner/designercore/instances/nodeinstanceclientproxy.h @@ -25,6 +25,8 @@ public: void pixmapChanged(const PixmapChangedCommand &command); void childrenChanged(const ChildrenChangedCommand &command); void statePreviewImagesChanged(const StatePreviewImageChangedCommand &command); + void componentCompleted(const ComponentCompletedCommand &command); + void flush(); qint64 bytesToWrite() const; diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstanceserver.cpp b/src/plugins/qmldesigner/designercore/instances/nodeinstanceserver.cpp index 32dcc85b58fee9b4a083480ef40ccea7d80b18e8..fdba9ec2f02626a8ac59954d0fb5799750e6f980 100644 --- a/src/plugins/qmldesigner/designercore/instances/nodeinstanceserver.cpp +++ b/src/plugins/qmldesigner/designercore/instances/nodeinstanceserver.cpp @@ -36,6 +36,8 @@ #include "changestatecommand.h" #include "addimportcommand.h" #include "childrenchangedcommand.h" +#include "completecomponentcommand.h" +#include "componentcompletedcommand.h" #include #include @@ -76,8 +78,6 @@ void NodeInstanceServer::createInstances(const CreateInstancesCommand &command) } } - - instance.doComponentComplete(); } nodeInstanceClient()->valuesChanged(createValuesChangedCommand(instanceList)); @@ -221,6 +221,17 @@ void NodeInstanceServer::changeState(const ChangeStateCommand &command) startRenderTimer(); } +void NodeInstanceServer::completeComponent(const CompleteComponentCommand &command) +{ + foreach(qint32 instanceId, command.instances()) { + if (hasInstanceForId(instanceId)) { + ServerNodeInstance instance = instanceForId(instanceId); + instance.doComponentComplete(); + m_componentCompletedVector.append(instanceId); + } + } +} + void NodeInstanceServer::addImport(const AddImportCommand &command) { QString importStatement = QString("import "); @@ -787,6 +798,10 @@ void NodeInstanceServer::findItemChangesAndSendChangeCommands() if (!parentChangedSet.isEmpty()) sendChildrenChangedCommand(parentChangedSet.toList()); + if (!m_componentCompletedVector.isEmpty()) + nodeInstanceClient()->componentCompleted(ComponentCompletedCommand(m_componentCompletedVector)); + m_componentCompletedVector.clear(); + if (!dirtyInstanceSet.isEmpty()) nodeInstanceClient()->pixmapChanged(createPixmapChangedCommand(dirtyInstanceSet.toList())); diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstanceserver.h b/src/plugins/qmldesigner/designercore/instances/nodeinstanceserver.h index 830df501a5611ce30ad233e509bfe2cff2bc2cec..f4fe0aa5a732b84cc0cd468b9c2531cd71de54c4 100644 --- a/src/plugins/qmldesigner/designercore/instances/nodeinstanceserver.h +++ b/src/plugins/qmldesigner/designercore/instances/nodeinstanceserver.h @@ -49,6 +49,7 @@ public: void reparentInstances(const ReparentInstancesCommand &command); void changeState(const ChangeStateCommand &command); void addImport(const AddImportCommand &command); + void completeComponent(const CompleteComponentCommand &command); ServerNodeInstance instanceForId(qint32 id) const; bool hasInstanceForId(qint32 id) const; @@ -127,6 +128,7 @@ private: int m_timer; bool m_slowRenderTimer; QVector m_changedPropertyList; + QVector m_componentCompletedVector; QStringList m_importList; }; diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverinterface.cpp b/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverinterface.cpp index 80800b46a4d0d78602d7d0ed6c4a18791bf874a1..d4a567d20c4ddb36a44d99a501fcac57fc62e8bb 100644 --- a/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverinterface.cpp +++ b/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverinterface.cpp @@ -16,6 +16,7 @@ #include "reparentinstancescommand.h" #include "changeidscommand.h" #include "changestatecommand.h" +#include "completecomponentcommand.h" #include "informationchangedcommand.h" #include "pixmapchangedcommand.h" @@ -24,6 +25,7 @@ #include "childrenchangedcommand.h" #include "imagecontainer.h" #include "statepreviewimagechangedcommand.h" +#include "componentcompletedcommand.h" namespace QmlDesigner { @@ -117,6 +119,12 @@ void NodeInstanceServerInterface::registerCommands() qRegisterMetaType("StatePreviewImageChangedCommand"); qRegisterMetaTypeStreamOperators("StatePreviewImageChangedCommand"); + + qRegisterMetaType("CompleteComponentCommand"); + qRegisterMetaTypeStreamOperators("CompleteComponentCommand"); + + qRegisterMetaType("ComponentCompletedCommand"); + qRegisterMetaTypeStreamOperators("ComponentCompletedCommand"); } } diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.cpp b/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.cpp index fa14071a3fe712fc29fa1d54879f2972b8557fb0..69b0209d249eaedce12b447f78200bcd5c18ef93 100644 --- a/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.cpp +++ b/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.cpp @@ -22,6 +22,7 @@ #include "changeidscommand.h" #include "changestatecommand.h" #include "addimportcommand.h" +#include "completecomponentcommand.h" #include "informationchangedcommand.h" #include "pixmapchangedcommand.h" @@ -29,6 +30,7 @@ #include "childrenchangedcommand.h" #include "imagecontainer.h" #include "statepreviewimagechangedcommand.h" +#include "componentcompletedcommand.h" #include "nodeinstanceview.h" #include "nodeinstanceclientproxy.h" @@ -78,6 +80,7 @@ void NodeInstanceServerProxy::dispatchCommand(const QVariant &command) static const int pixmapChangedCommandType = QMetaType::type("PixmapChangedCommand"); static const int childrenChangedCommandType = QMetaType::type("ChildrenChangedCommand"); static const int statePreviewImageChangedCommandType = QMetaType::type("StatePreviewImageChangedCommand"); + static const int componentCompletedCommandType = QMetaType::type("ComponentCompletedCommand"); if (command.userType() == informationChangedCommandType) nodeInstanceClient()->informationChanged(command.value()); @@ -89,6 +92,8 @@ void NodeInstanceServerProxy::dispatchCommand(const QVariant &command) nodeInstanceClient()->childrenChanged(command.value()); else if (command.userType() == statePreviewImageChangedCommandType) nodeInstanceClient()->statePreviewImagesChanged(command.value()); + else if (command.userType() == componentCompletedCommandType) + nodeInstanceClient()->componentCompleted(command.value()); else Q_ASSERT(false); } @@ -213,4 +218,9 @@ void NodeInstanceServerProxy::addImport(const AddImportCommand &command) { writeCommand(QVariant::fromValue(command)); } + +void NodeInstanceServerProxy::completeComponent(const CompleteComponentCommand &command) +{ + writeCommand(QVariant::fromValue(command)); +} } // namespace QmlDesigner diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.h b/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.h index 40a6baf68810306d96fcfde6a4369246071e58e2..f4d4b3ab989033818765c3771386c583cedcfa90 100644 --- a/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.h +++ b/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.h @@ -37,6 +37,7 @@ public: void changeIds(const ChangeIdsCommand &command); void changeState(const ChangeStateCommand &command); void addImport(const AddImportCommand &command); + void completeComponent(const CompleteComponentCommand &command); void setBlockUpdates(bool block); diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp b/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp index 20465dd7acc0a5624b50aa182d333c973abef966..65a0e1f83c5629795512cc549f50264f04553d39 100644 --- a/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp +++ b/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp @@ -73,6 +73,8 @@ #include "childrenchangedcommand.h" #include "imagecontainer.h" #include "statepreviewimagechangedcommand.h" +#include "completecomponentcommand.h" +#include "componentcompletedcommand.h" #include "nodeinstanceserverproxy.h" @@ -144,6 +146,7 @@ void NodeInstanceView::modelAttached(Model *model) nodeInstanceServer()->addImport(createImportCommand(import)); loadNodes(allModelNodes()); + setBlockUpdates(false); } @@ -176,6 +179,7 @@ void NodeInstanceView::nodeCreated(const ModelNode &createdNode) NodeInstance instance = loadNode(createdNode); nodeInstanceServer()->createInstances(createCreateInstancesCommand(QList() << instance)); nodeInstanceServer()->changePropertyValues(createChangeValueCommand(createdNode.variantProperties())); + nodeInstanceServer()->completeComponent(createComponentCompleteCommand(QList() << instance)); } /*! \brief Notifing the view that a node was created. @@ -427,6 +431,10 @@ void NodeInstanceView::instancePropertyChange(const QList &/*completedNodeList*/) +{ +} + void NodeInstanceView::importAdded(const Import &import) { nodeInstanceServer()->addImport(createImportCommand(import)); @@ -456,17 +464,12 @@ void NodeInstanceView::loadNodes(const QList &nodeList) bindingPropertyList.append(node.bindingProperties()); } -// QListIterator listIterator(nodeList); -// listIterator.toBack(); - -// while (listIterator.hasPrevious()) -// instanceForNode(listIterator.previous()).doComponentComplete(); - nodeInstanceServer()->createInstances(createCreateInstancesCommand(instanceList)); nodeInstanceServer()->reparentInstances(createReparentInstancesCommand(instanceList)); nodeInstanceServer()->changeIds(createChangeIdsCommand(instanceList)); nodeInstanceServer()->changePropertyValues(createChangeValueCommand(variantPropertyList)); nodeInstanceServer()->changePropertyBindings(createChangeBindingCommand(bindingPropertyList)); + nodeInstanceServer()->completeComponent(createComponentCompleteCommand(instanceList)); } void NodeInstanceView::removeAllInstanceNodeRelationships() @@ -692,6 +695,28 @@ ClearSceneCommand NodeInstanceView::createClearSceneCommand() const return ClearSceneCommand(); } +CompleteComponentCommand NodeInstanceView::createComponentCompleteCommand(const QList &instanceList) const +{ + QVector containerList; + foreach(const NodeInstance &instance, instanceList) { + if (instance.instanceId() >= 0) + containerList.append(instance.instanceId()); + } + + return CompleteComponentCommand(containerList); +} + +ComponentCompletedCommand NodeInstanceView::createComponentCompletedCommand(const QList &instanceList) const +{ + QVector containerList; + foreach(const NodeInstance &instance, instanceList) { + if (instance.instanceId() >= 0) + containerList.append(instance.instanceId()); + } + + return ComponentCompletedCommand(containerList); +} + CreateInstancesCommand NodeInstanceView::createCreateInstancesCommand(const QList &instanceList) const { QVector containerList; @@ -910,6 +935,23 @@ void NodeInstanceView::statePreviewImagesChanged(const StatePreviewImageChangedC } +void NodeInstanceView::componentCompleted(const ComponentCompletedCommand &command) +{ + if (!model()) + return; + + QVector nodeVector; + + foreach(const qint32 &instanceId, command.instances()) { + if (hasModelNodeForInternalId(instanceId)) { + nodeVector.append(modelNodeForInternalId(instanceId)); + } + } + + if (!nodeVector.isEmpty()) + emitInstancesCompleted(nodeVector); +} + void NodeInstanceView::childrenChanged(const ChildrenChangedCommand &command) { if (!model()) diff --git a/src/plugins/qmldesigner/designercore/model/abstractview.cpp b/src/plugins/qmldesigner/designercore/model/abstractview.cpp index 7c2b613833fdc7f7e233c15b6abd487f2184a66c..fc4a57783d758ae94ea65cbf047814460a2305f4 100644 --- a/src/plugins/qmldesigner/designercore/model/abstractview.cpp +++ b/src/plugins/qmldesigner/designercore/model/abstractview.cpp @@ -393,6 +393,12 @@ void AbstractView::emitInstancePropertyChange(const QListm_d->notifyInstancePropertyChange(propertyList); } +void AbstractView::emitInstancesCompleted(const QVector &nodeVector) +{ + if (model() && nodeInstanceView() == this) + model()->m_d->notifyInstancesCompleted(nodeVector); +} + void AbstractView::changeRootNodeType(const QString &type, int majorVersion, int minorVersion) { Internal::WriteLocker locker(m_model.data()); diff --git a/src/plugins/qmldesigner/designercore/model/model.cpp b/src/plugins/qmldesigner/designercore/model/model.cpp index f1c0558bdbb6736fe76b0d8067d114edb70f9d0b..8e2daf93a7a927181d093b5038d3a5c3af910787 100644 --- a/src/plugins/qmldesigner/designercore/model/model.cpp +++ b/src/plugins/qmldesigner/designercore/model/model.cpp @@ -414,6 +414,35 @@ void ModelPrivate::notifyInstancePropertyChange(const QList &nodeVector) +{ + bool resetModel = false; + QString description; + + QVector internalVector(toInternalNodeVector(nodeVector)); + + try { + if (rewriterView()) + rewriterView()->instancesCompleted(toModelNodeVector(internalVector, rewriterView())); + } catch (RewritingException &e) { + description = e.description(); + resetModel = true; + } + + foreach (const QWeakPointer &view, m_viewList) { + Q_ASSERT(view != 0); + view->instancesCompleted(toModelNodeVector(internalVector, view.data())); + } + + if (nodeInstanceView()) { + nodeInstanceView()->instancesCompleted(toModelNodeVector(internalVector, nodeInstanceView())); + } + + if (resetModel) { + resetModelByRewriter(description); + } +} + void ModelPrivate::notifyCustomNotification(const AbstractView *senderView, const QString &identifier, const QList &nodeList, const QList &data) { bool resetModel = false; @@ -1026,6 +1055,15 @@ QList ModelPrivate::toModelNodeList(const QList ModelPrivate::toModelNodeVector(const QVector &nodeVector, AbstractView *view) const +{ + QVector newNodeVector; + foreach (const Internal::InternalNode::Pointer &node, nodeVector) + newNodeVector.append(ModelNode(node, model(), view)); + + return newNodeVector; +} + QList ModelPrivate::toInternalNodeList(const QList &nodeList) const { QList newNodeList; @@ -1035,6 +1073,15 @@ QList ModelPrivate::toInternalNodeList(const QL return newNodeList; } +QVector ModelPrivate::toInternalNodeVector(const QVector &nodeVector) const +{ + QVector newNodeVector; + foreach (const ModelNode &node, nodeVector) + newNodeVector.append(node.internalNode()); + + return newNodeVector; +} + void ModelPrivate::changeSelectedNodes(const QList &newSelectedNodeList, const QList &oldSelectedNodeList) { diff --git a/src/plugins/qmldesigner/designercore/model/model_p.h b/src/plugins/qmldesigner/designercore/model/model_p.h index 74531b9ac8caf5e798a30559e222db3961e926d8..d824164e9736b87105591b32e1b44700e37bea95 100644 --- a/src/plugins/qmldesigner/designercore/model/model_p.h +++ b/src/plugins/qmldesigner/designercore/model/model_p.h @@ -144,7 +144,7 @@ public: void notifyCustomNotification(const AbstractView *senderView, const QString &identifier, const QList &nodeList, const QList &data); void notifyInstancePropertyChange(const QList > &propertyList); - + void notifyInstancesCompleted(const QVector &nodeList); void setSelectedNodes(const QList &selectedNodeList); @@ -207,6 +207,8 @@ private: //functions void removeNodeFromModel(const InternalNodePointer &node); QList toInternalNodeList(const QList &nodeList) const; QList toModelNodeList(const QList &nodeList, AbstractView *view) const; + QVector toModelNodeVector(const QVector &nodeVector, AbstractView *view) const; + QVector toInternalNodeVector(const QVector &nodeVector) const; private: Model *m_q; diff --git a/src/plugins/qmldesigner/designercore/model/qmlmodelview.cpp b/src/plugins/qmldesigner/designercore/model/qmlmodelview.cpp index 9cadcf36719f69becf470c94c81dd8f1d87f8300..40e450f5bc597869ab64d32f4755b43bdb08cd8e 100644 --- a/src/plugins/qmldesigner/designercore/model/qmlmodelview.cpp +++ b/src/plugins/qmldesigner/designercore/model/qmlmodelview.cpp @@ -362,6 +362,9 @@ void QmlModelView::instancePropertyChange(const QList nodeInstancePropertyChanged(propertyPair.first, propertyPair.second); } } +void QmlModelView::instancesCompleted(const QVector &/*completedNodeList*/) +{ +} void QmlModelView::nodeInstancePropertyChanged(const ModelNode &node, const QString &propertyName) { @@ -431,7 +434,7 @@ void QmlModelView::otherPropertyChanged(const QmlObjectNode &/*qmlObjectNode*/, { } -void QmlModelView::stateChanged(const QmlModelState &newQmlModelState, const QmlModelState &oldQmlModelState) +void QmlModelView::stateChanged(const QmlModelState &/*newQmlModelState*/, const QmlModelState &/*oldQmlModelState*/) { } diff --git a/src/plugins/qmldesigner/designercore/model/rewriterview.cpp b/src/plugins/qmldesigner/designercore/model/rewriterview.cpp index 470c3f6d8a82be633b19ba56673cff48ada8447f..fd7e2a866cc3e9c67d742f1c5c4de8dbe4525959 100644 --- a/src/plugins/qmldesigner/designercore/model/rewriterview.cpp +++ b/src/plugins/qmldesigner/designercore/model/rewriterview.cpp @@ -385,6 +385,10 @@ void RewriterView::instancePropertyChange(const QList { } +void RewriterView::instancesCompleted(const QVector &/*completedNodeList*/) +{ +} + void RewriterView::selectedNodesChanged(const QList & /* selectedNodeList, */, const QList & /*lastSelectedNodeList */) { diff --git a/src/plugins/qmldesigner/designercore/model/viewlogger.cpp b/src/plugins/qmldesigner/designercore/model/viewlogger.cpp index 3977d7737d75e1ee5090fe22a513f818f2873b95..5e500536c37d0c33bf4cf4b79c8bf5005bf69123 100644 --- a/src/plugins/qmldesigner/designercore/model/viewlogger.cpp +++ b/src/plugins/qmldesigner/designercore/model/viewlogger.cpp @@ -212,6 +212,14 @@ void ViewLogger::instancePropertyChange(const QList > m_output << time() << indent("property: ") << propertyPair.first << propertyPair.second << endl; } +void ViewLogger::instancesCompleted(const QVector &completedNodeList) +{ + m_output << time() << indent("instancesCompleted:") << endl; + + foreach(const ModelNode &node, completedNodeList) + m_output << time() << indent("node: ") << node << endl; + +} } // namespace Internal } // namespace QmlDesigner diff --git a/src/plugins/qmldesigner/designercore/model/viewlogger.h b/src/plugins/qmldesigner/designercore/model/viewlogger.h index a20b7b2a89b3b7d14beab01c1a8322ebcb82caa5..75de80bc56280affada4d957512120aee41679b9 100644 --- a/src/plugins/qmldesigner/designercore/model/viewlogger.h +++ b/src/plugins/qmldesigner/designercore/model/viewlogger.h @@ -73,7 +73,7 @@ public: void customNotification(const AbstractView *view, const QString &identifier, const QList &nodeList, const QList &data); void scriptFunctionsChanged(const ModelNode &node, const QStringList &scriptFunctionList); void instancePropertyChange(const QList > &propertyList); - + void instancesCompleted(const QVector &completedNodeList); protected: QString time() const;