diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp b/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp index faf2fb97080..880a650ee1b 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp +++ b/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp @@ -458,68 +458,68 @@ void FormEditorView::instancesCompleted(const QVector &completedNodeL currentTool()->instancesCompleted(itemNodeList); } - -void FormEditorView::customNotification(const AbstractView *view, const QString &identifier, const QList &nodeList, const QList &data) +void FormEditorView::instanceInformationsChange(const QVector &nodeList) { - if (identifier == "__start rewriter transaction__") { - m_transactionCounter++; - if (m_transactionCounter == 1 - && selectedModelNodes().count() == 1) - m_formEditorWidget->setFeedbackNode(QmlItemNode(selectedModelNodes().first())); - } + QList itemNodeList; - if (identifier == "__end rewriter transaction__") { - m_transactionCounter--; - if (m_transactionCounter == 0) - m_formEditorWidget->setFeedbackNode(QmlItemNode()); - } + foreach (const ModelNode &node, nodeList) { + QmlItemNode qmlItemNode(node); + if (qmlItemNode.isValid() && scene()->hasItemForQmlItemNode(qmlItemNode)) { + scene()->synchronizeTransformation(qmlItemNode); + if (qmlItemNode.isRootModelNode()) + widget()->setRootItemRect(qmlItemNode.instanceBoundingRect()); - if (identifier == "__instance information changed__") { - QList itemNodeList; - - foreach (const ModelNode &node, nodeList) { - QmlItemNode qmlItemNode(node); - if (qmlItemNode.isValid() && scene()->hasItemForQmlItemNode(qmlItemNode)) { - scene()->synchronizeTransformation(qmlItemNode); - if (qmlItemNode.isRootModelNode()) - widget()->setRootItemRect(qmlItemNode.instanceBoundingRect()); - - itemNodeList.append(scene()->itemForQmlItemNode(qmlItemNode)); - } - } - - m_currentTool->formEditorItemsChanged(itemNodeList); - - } - - if (identifier == "__instance render pixmap changed__") { - QList itemNodeList; - - foreach (const ModelNode &node, nodeList) { - QmlItemNode qmlItemNode(node); - if (qmlItemNode.isValid() && scene()->hasItemForQmlItemNode(qmlItemNode)) { - scene()->itemForQmlItemNode(qmlItemNode)->update(); - } + itemNodeList.append(scene()->itemForQmlItemNode(qmlItemNode)); } } - if (identifier == "__instance children changed__") { - QList itemNodeList; - - foreach (const ModelNode &node, nodeList) { - QmlItemNode qmlItemNode(node); - if (qmlItemNode.isValid() && scene()->hasItemForQmlItemNode(qmlItemNode)) { - scene()->synchronizeParent(qmlItemNode); - itemNodeList.append(scene()->itemForQmlItemNode(qmlItemNode)); - } - } - - m_currentTool->formEditorItemsChanged(itemNodeList); - } - - QmlModelView::customNotification(view, identifier, nodeList, data); + m_currentTool->formEditorItemsChanged(itemNodeList); } +void FormEditorView::instancesRenderImageChanged(const QVector &nodeList) +{ + foreach (const ModelNode &node, nodeList) { + QmlItemNode qmlItemNode(node); + if (qmlItemNode.isValid() && scene()->hasItemForQmlItemNode(qmlItemNode)) { + scene()->itemForQmlItemNode(qmlItemNode)->update(); + } + } +} + +void FormEditorView::instancesPreviewImageChanged(const QVector &/*nodeList*/) +{ + +} + +void FormEditorView::instancesChildrenChanged(const QVector &nodeList) +{ + QList itemNodeList; + + foreach (const ModelNode &node, nodeList) { + QmlItemNode qmlItemNode(node); + if (qmlItemNode.isValid() && scene()->hasItemForQmlItemNode(qmlItemNode)) { + scene()->synchronizeParent(qmlItemNode); + itemNodeList.append(scene()->itemForQmlItemNode(qmlItemNode)); + } + } + + m_currentTool->formEditorItemsChanged(itemNodeList); +} + +void FormEditorView::rewriterBeginTransaction() +{ + m_transactionCounter++; + if (m_transactionCounter == 1 + && selectedModelNodes().count() == 1) + m_formEditorWidget->setFeedbackNode(QmlItemNode(selectedModelNodes().first())); +} + +void FormEditorView::rewriterEndTransaction() +{ + m_transactionCounter--; + if (m_transactionCounter == 0) + m_formEditorWidget->setFeedbackNode(QmlItemNode()); +} double FormEditorView::margins() const { diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorview.h b/src/plugins/qmldesigner/components/formeditor/formeditorview.h index 1b92f5c6c06..2c286fda7f2 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditorview.h +++ b/src/plugins/qmldesigner/components/formeditor/formeditorview.h @@ -106,9 +106,15 @@ public: void nodeSlidedToIndex(const NodeListProperty &listProperty, int newIndex, int oldIndex); 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); + void instanceInformationsChange(const QVector &nodeList); + void instancesRenderImageChanged(const QVector &nodeList); + void instancesPreviewImageChanged(const QVector &nodeList); + void instancesChildrenChanged(const QVector &nodeList); + + void rewriterBeginTransaction(); + void rewriterEndTransaction(); double margins() const; double spacing() const; diff --git a/src/plugins/qmldesigner/components/integration/componentview.cpp b/src/plugins/qmldesigner/components/integration/componentview.cpp index 46e503718ee..26dfa099c1e 100644 --- a/src/plugins/qmldesigner/components/integration/componentview.cpp +++ b/src/plugins/qmldesigner/components/integration/componentview.cpp @@ -166,7 +166,13 @@ void ComponentView::rootNodeTypeChanged(const QString &/*type*/, int /*majorVers void ComponentView::scriptFunctionsChanged(const ModelNode &/*node*/, const QStringList &/*scriptFunctionList*/) {} void ComponentView::instancePropertyChange(const QList > &/*propertyList*/) {} void ComponentView::instancesCompleted(const QVector &/*completedNodeList*/) {} +void ComponentView::instanceInformationsChange(const QVector &/*nodeList*/) {} +void ComponentView::instancesRenderImageChanged(const QVector &/*nodeList*/) {} +void ComponentView::instancesPreviewImageChanged(const QVector &/*nodeList*/) {} +void ComponentView::instancesChildrenChanged(const QVector &/*nodeList*/) {} +void ComponentView::rewriterBeginTransaction() {} +void ComponentView::rewriterEndTransaction() {} void ComponentView::selectedNodesChanged(const QList &/*selectedNodeList*/, const QList &/*lastSelectedNodeList*/) {} diff --git a/src/plugins/qmldesigner/components/integration/componentview.h b/src/plugins/qmldesigner/components/integration/componentview.h index 03e7ce853c2..3f74f647a21 100644 --- a/src/plugins/qmldesigner/components/integration/componentview.h +++ b/src/plugins/qmldesigner/components/integration/componentview.h @@ -74,6 +74,13 @@ public: void scriptFunctionsChanged(const ModelNode &node, const QStringList &scriptFunctionList); void instancePropertyChange(const QList > &propertyList); void instancesCompleted(const QVector &completedNodeList); + void instanceInformationsChange(const QVector &nodeList); + void instancesRenderImageChanged(const QVector &nodeList); + void instancesPreviewImageChanged(const QVector &nodeList); + void instancesChildrenChanged(const QVector &nodeList); + + void rewriterBeginTransaction(); + void rewriterEndTransaction(); void selectedNodesChanged(const QList &selectedNodeList, const QList &lastSelectedNodeList); diff --git a/src/plugins/qmldesigner/components/integration/designdocumentcontrollerview.cpp b/src/plugins/qmldesigner/components/integration/designdocumentcontrollerview.cpp index bc38895c58b..cbccc62e301 100644 --- a/src/plugins/qmldesigner/components/integration/designdocumentcontrollerview.cpp +++ b/src/plugins/qmldesigner/components/integration/designdocumentcontrollerview.cpp @@ -73,6 +73,37 @@ void DesignDocumentControllerView::instancesCompleted(const QVector & { } +void DesignDocumentControllerView::instanceInformationsChange(const QVector &/*nodeList*/) +{ + +} + +void DesignDocumentControllerView::instancesRenderImageChanged(const QVector &/*nodeList*/) +{ + +} + +void DesignDocumentControllerView::instancesPreviewImageChanged(const QVector &/*nodeList*/) +{ + +} + +void DesignDocumentControllerView::instancesChildrenChanged(const QVector &/*nodeList*/) +{ + +} + + +void DesignDocumentControllerView::rewriterBeginTransaction() +{ + +} + +void DesignDocumentControllerView::rewriterEndTransaction() +{ + +} + static QStringList arrayToStringList(const QByteArray &byteArray) { diff --git a/src/plugins/qmldesigner/components/integration/designdocumentcontrollerview.h b/src/plugins/qmldesigner/components/integration/designdocumentcontrollerview.h index dc4c5e781a4..273fe33407e 100644 --- a/src/plugins/qmldesigner/components/integration/designdocumentcontrollerview.h +++ b/src/plugins/qmldesigner/components/integration/designdocumentcontrollerview.h @@ -65,6 +65,13 @@ public: virtual void scriptFunctionsChanged(const ModelNode &node, const QStringList &scriptFunctionList); void instancePropertyChange(const QList > &propertyList); void instancesCompleted(const QVector &completedNodeList); + void instanceInformationsChange(const QVector &nodeList); + void instancesRenderImageChanged(const QVector &nodeList); + void instancesPreviewImageChanged(const QVector &nodeList); + void instancesChildrenChanged(const QVector &nodeList); + + void rewriterBeginTransaction(); + void rewriterEndTransaction(); ModelNode insertModel(const ModelNode &modelNode) { return m_modelMerger.insertModel(modelNode); } diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.cpp index 90838769494..4ff1c336640 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.cpp +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.cpp @@ -128,6 +128,31 @@ void ItemLibraryView::instancesCompleted(const QVector &) } +void ItemLibraryView::instanceInformationsChange(const QVector &/*nodeList*/) +{ +} + +void ItemLibraryView::instancesRenderImageChanged(const QVector &/*nodeList*/) +{ +} + +void ItemLibraryView::instancesPreviewImageChanged(const QVector &/*nodeList*/) +{ +} + +void ItemLibraryView::instancesChildrenChanged(const QVector &/*nodeList*/) +{ + +} + +void ItemLibraryView::rewriterBeginTransaction() +{ +} + +void ItemLibraryView::rewriterEndTransaction() +{ +} + void ItemLibraryView::updateImports() { m_widget->updateModel(); diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.h b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.h index d82171b90cb..69747a9d1a2 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.h +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.h @@ -82,6 +82,13 @@ public: void scriptFunctionsChanged(const ModelNode &node, const QStringList &scriptFunctionList); void instancePropertyChange(const QList > &propertyList); void instancesCompleted(const QVector &completedNodeList); + void instanceInformationsChange(const QVector &nodeList); + void instancesRenderImageChanged(const QVector &nodeList); + void instancesPreviewImageChanged(const QVector &nodeList); + void instancesChildrenChanged(const QVector &nodeList); + + void rewriterBeginTransaction(); + void rewriterEndTransaction(); protected: void updateImports(); diff --git a/src/plugins/qmldesigner/components/navigator/navigatorview.cpp b/src/plugins/qmldesigner/components/navigator/navigatorview.cpp index 0cee37687a7..f6676bdc20c 100644 --- a/src/plugins/qmldesigner/components/navigator/navigatorview.cpp +++ b/src/plugins/qmldesigner/components/navigator/navigatorview.cpp @@ -217,6 +217,31 @@ void NavigatorView::instancesCompleted(const QVector &/*completedNode { } +void NavigatorView::instanceInformationsChange(const QVector &/*nodeList*/) +{ +} + +void NavigatorView::instancesRenderImageChanged(const QVector &/*nodeList*/) +{ +} + +void NavigatorView::instancesPreviewImageChanged(const QVector &/*nodeList*/) +{ +} + +void NavigatorView::instancesChildrenChanged(const QVector &/*nodeList*/) +{ + +} + +void NavigatorView::rewriterBeginTransaction() +{ +} + +void NavigatorView::rewriterEndTransaction() +{ +} + 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 ef61aa854aa..e6339d75c55 100644 --- a/src/plugins/qmldesigner/components/navigator/navigatorview.h +++ b/src/plugins/qmldesigner/components/navigator/navigatorview.h @@ -90,6 +90,13 @@ public: void scriptFunctionsChanged(const ModelNode &node, const QStringList &scriptFunctionList); void instancePropertyChange(const QList > &propertyList); void instancesCompleted(const QVector &completedNodeList); + void instanceInformationsChange(const QVector &nodeList); + void instancesRenderImageChanged(const QVector &nodeList); + void instancesPreviewImageChanged(const QVector &nodeList); + void instancesChildrenChanged(const QVector &nodeList); + + void rewriterBeginTransaction(); + void rewriterEndTransaction(); private slots: // void handleChangedItem(QStandardItem * item); diff --git a/src/plugins/qmldesigner/components/stateseditor/stateseditorview.cpp b/src/plugins/qmldesigner/components/stateseditor/stateseditorview.cpp index 3ef6e203760..3162b86cfe5 100644 --- a/src/plugins/qmldesigner/components/stateseditor/stateseditorview.cpp +++ b/src/plugins/qmldesigner/components/stateseditor/stateseditorview.cpp @@ -325,32 +325,25 @@ void StatesEditorView::otherPropertyChanged(const QmlObjectNode &qmlObjectNode, QmlModelView::otherPropertyChanged(qmlObjectNode, propertyName); } - -void StatesEditorView::customNotification(const AbstractView * view, const QString & identifier, const QList & nodeList, const QList &imageList) +void StatesEditorView::instancesPreviewImageChanged(const QVector &nodeList) { - - if (identifier == "__instance preview image changed__") { - int minimumIndex = 10000; - int maximumIndex = -1; - foreach(const ModelNode &node, nodeList) { - if (node.isRootNode()) { - minimumIndex = qMin(minimumIndex, 0); - maximumIndex = qMax(maximumIndex, 0); - } else { - int index = rootStateGroup().allStates().indexOf(QmlModelState(node)) + 1; - if (index > 0) { - minimumIndex = qMin(minimumIndex, index); - maximumIndex = qMax(maximumIndex, index); - } + int minimumIndex = 10000; + int maximumIndex = -1; + foreach(const ModelNode &node, nodeList) { + if (node.isRootNode()) { + minimumIndex = qMin(minimumIndex, 0); + maximumIndex = qMax(maximumIndex, 0); + } else { + int index = rootStateGroup().allStates().indexOf(QmlModelState(node)) + 1; + if (index > 0) { + minimumIndex = qMin(minimumIndex, index); + maximumIndex = qMax(maximumIndex, index); } } - - if (maximumIndex >= 0) - m_statesEditorModel->updateState(minimumIndex, maximumIndex); - - } else { - QmlModelView::customNotification(view, identifier, nodeList, imageList); } + + if (maximumIndex >= 0) + m_statesEditorModel->updateState(minimumIndex, maximumIndex); } void StatesEditorView::scriptFunctionsChanged(const ModelNode &node, const QStringList &scriptFunctionList) diff --git a/src/plugins/qmldesigner/components/stateseditor/stateseditorview.h b/src/plugins/qmldesigner/components/stateseditor/stateseditorview.h index 43179bd2a49..8e1faa27855 100644 --- a/src/plugins/qmldesigner/components/stateseditor/stateseditorview.h +++ b/src/plugins/qmldesigner/components/stateseditor/stateseditorview.h @@ -72,12 +72,13 @@ public: void parentChanged(const QmlObjectNode &qmlObjectNode); void otherPropertyChanged(const QmlObjectNode &qmlObjectNode, const QString &propertyName); - void customNotification(const AbstractView *view, const QString &identifier, const QList &nodeList, const QList &data); void scriptFunctionsChanged(const ModelNode &node, const QStringList &scriptFunctionList); void nodeIdChanged(const ModelNode &node, const QString &newId, const QString &oldId); void bindingPropertiesChanged(const QList &propertyList, PropertyChangeFlags propertyChange); void selectedNodesChanged(const QList &selectedNodeList, const QList &lastSelectedNodeList); + void instancesPreviewImageChanged(const QVector &nodeList); + StatesEditorWidget *widget(); public slots: diff --git a/src/plugins/qmldesigner/designercore/include/abstractview.h b/src/plugins/qmldesigner/designercore/include/abstractview.h index ff4496aa91c..c9101bf6dce 100644 --- a/src/plugins/qmldesigner/designercore/include/abstractview.h +++ b/src/plugins/qmldesigner/designercore/include/abstractview.h @@ -112,6 +112,12 @@ public: void emitInstancePropertyChange(const QList > &propertyList); void emitInstancesCompleted(const QVector &nodeList); + void emitInstanceInformationsChange(const QVector &nodeList); + void emitInstancesRenderImageChanged(const QVector &nodeList); + void emitInstancesPreviewImageChanged(const QVector &nodeList); + void emitInstancesChildrenChanged(const QVector &nodeList); + void emitRewriterBeginTransaction(); + void emitRewriterEndTransaction(); virtual void modelAttached(Model *model); virtual void modelAboutToBeDetached(Model *model); @@ -130,7 +136,13 @@ public: virtual void instancePropertyChange(const QList > &propertyList) = 0; virtual void instancesCompleted(const QVector &completedNodeList) = 0; + virtual void instanceInformationsChange(const QVector &nodeList) = 0; + virtual void instancesRenderImageChanged(const QVector &nodeList) = 0; + virtual void instancesPreviewImageChanged(const QVector &nodeList) = 0; + virtual void instancesChildrenChanged(const QVector &nodeList) = 0; + virtual void rewriterBeginTransaction() = 0; + virtual void rewriterEndTransaction() = 0; virtual void selectedNodesChanged(const QList &selectedNodeList, const QList &lastSelectedNodeList) = 0; diff --git a/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h b/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h index c48f7690678..b5bd98744e6 100644 --- a/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h +++ b/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h @@ -105,6 +105,13 @@ public: void instancesCompleted(const QVector &completedNodeList); void importAdded(const Import &import); void importRemoved(const Import &import); + void instanceInformationsChange(const QVector &nodeList); + void instancesRenderImageChanged(const QVector &nodeList); + void instancesPreviewImageChanged(const QVector &nodeList); + void instancesChildrenChanged(const QVector &nodeList); + + void rewriterBeginTransaction(); + void rewriterEndTransaction(); QList instances() const; NodeInstance instanceForNode(const ModelNode &node) const ; diff --git a/src/plugins/qmldesigner/designercore/include/qmlmodelview.h b/src/plugins/qmldesigner/designercore/include/qmlmodelview.h index b276b330117..fad1d8ed018 100644 --- a/src/plugins/qmldesigner/designercore/include/qmlmodelview.h +++ b/src/plugins/qmldesigner/designercore/include/qmlmodelview.h @@ -96,6 +96,13 @@ public: void instancePropertyChange(const QList > &propertyList); void instancesCompleted(const QVector &completedNodeList); + void instanceInformationsChange(const QVector &nodeList); + void instancesRenderImageChanged(const QVector &nodeList); + void instancesPreviewImageChanged(const QVector &nodeList); + void instancesChildrenChanged(const QVector &nodeList); + + void rewriterBeginTransaction(); + void rewriterEndTransaction(); 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 7f1e229620a..3e1f2c565df 100644 --- a/src/plugins/qmldesigner/designercore/include/rewriterview.h +++ b/src/plugins/qmldesigner/designercore/include/rewriterview.h @@ -140,6 +140,13 @@ public: void instancePropertyChange(const QList > &propertyList); void instancesCompleted(const QVector &completedNodeList); + void instanceInformationsChange(const QVector &nodeList); + void instancesRenderImageChanged(const QVector &nodeList); + void instancesPreviewImageChanged(const QVector &nodeList); + void instancesChildrenChanged(const QVector &nodeList); + + void rewriterBeginTransaction(); + void rewriterEndTransaction(); void importAdded(const Import &import); void importRemoved(const Import &import); diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp b/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp index 805165cc433..556ce7faa14 100644 --- a/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp +++ b/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp @@ -443,6 +443,37 @@ void NodeInstanceView::importRemoved(const Import &/*import*/) restartProcess(); } +void NodeInstanceView::instanceInformationsChange(const QVector &/*nodeList*/) +{ + +} + +void NodeInstanceView::instancesRenderImageChanged(const QVector &/*nodeList*/) +{ + +} + +void NodeInstanceView::instancesPreviewImageChanged(const QVector &/*nodeList*/) +{ + +} + +void NodeInstanceView::instancesChildrenChanged(const QVector &/*nodeList*/) +{ + +} + + +void NodeInstanceView::rewriterBeginTransaction() +{ + +} + +void NodeInstanceView::rewriterEndTransaction() +{ + +} + //\} @@ -931,7 +962,7 @@ void NodeInstanceView::pixmapChanged(const PixmapChangedCommand &command) } if (!renderImageChangeSet.isEmpty()) - emitCustomNotification("__instance render pixmap changed__", renderImageChangeSet.toList()); + emitInstancesRenderImageChanged(renderImageChangeSet.toList().toVector()); } void NodeInstanceView::informationChanged(const InformationChangedCommand &command) @@ -953,7 +984,7 @@ void NodeInstanceView::informationChanged(const InformationChangedCommand &comma } if (!informationChangedVector.isEmpty()) - emitCustomNotification("__instance information changed__", informationChangedVector.toList()); + emitInstanceInformationsChange(informationChangedVector.toList().toVector()); } QImage NodeInstanceView::statePreviewImage(const ModelNode &stateNode) const @@ -969,21 +1000,21 @@ void NodeInstanceView::statePreviewImagesChanged(const StatePreviewImageChangedC if (!model()) return; - QList previewImageChangeList; + QVector previewImageChangeVector; foreach (const ImageContainer &container, command.previews()) { if (container.instanceId() == 0) { m_baseStatePreviewImage = container.image(); - previewImageChangeList.append(rootModelNode()); + previewImageChangeVector.append(rootModelNode()); } else if (hasInstanceForId(container.instanceId())) { ModelNode node = modelNodeForInternalId(container.instanceId()); m_statePreviewImage.insert(node, container.image()); - previewImageChangeList.append(node); + previewImageChangeVector.append(node); } } - if (!previewImageChangeList.isEmpty()) - emitCustomNotification("__instance preview image changed__", previewImageChangeList); + if (!previewImageChangeVector.isEmpty()) + emitInstancesPreviewImageChanged(previewImageChangeVector); } void NodeInstanceView::componentCompleted(const ComponentCompletedCommand &command) @@ -1008,18 +1039,18 @@ void NodeInstanceView::childrenChanged(const ChildrenChangedCommand &command) if (!model()) return; - QList childNodeList; + QVector childNodeVector; foreach(qint32 instanceId, command.childrenInstances()) { if (hasInstanceForId(instanceId)) { NodeInstance instance = instanceForId(instanceId); instance.setParentId(command.parentInstanceId()); - childNodeList.append(instance.modelNode()); + childNodeVector.append(instance.modelNode()); } } - if (!childNodeList.isEmpty()) - emitCustomNotification("__instance children changed__", childNodeList); + if (!childNodeVector.isEmpty()) + emitInstancesChildrenChanged(childNodeVector); } } diff --git a/src/plugins/qmldesigner/designercore/model/abstractview.cpp b/src/plugins/qmldesigner/designercore/model/abstractview.cpp index 1d876c7ed11..154d8ffb8c9 100644 --- a/src/plugins/qmldesigner/designercore/model/abstractview.cpp +++ b/src/plugins/qmldesigner/designercore/model/abstractview.cpp @@ -403,6 +403,42 @@ void AbstractView::emitInstancesCompleted(const QVector &nodeVector) model()->m_d->notifyInstancesCompleted(nodeVector); } +void AbstractView::emitInstanceInformationsChange(const QVector &nodeVector) +{ + if (model() && nodeInstanceView() == this) + model()->m_d->notifyInstancesInformationsChange(nodeVector); +} + +void AbstractView::emitInstancesRenderImageChanged(const QVector &nodeVector) +{ + if (model() && nodeInstanceView() == this) + model()->m_d->notifyInstancesRenderImageChanged(nodeVector); +} + +void AbstractView::emitInstancesPreviewImageChanged(const QVector &nodeVector) +{ + if (model() && nodeInstanceView() == this) + model()->m_d->notifyInstancesPreviewImageChanged(nodeVector); +} + +void AbstractView::emitInstancesChildrenChanged(const QVector &nodeVector) +{ + if (model() && nodeInstanceView() == this) + model()->m_d->notifyInstancesChildrenChanged(nodeVector); +} + +void AbstractView::emitRewriterBeginTransaction() +{ + if (model()) + model()->m_d->notifyRewriterBeginTransaction(); +} + +void AbstractView::emitRewriterEndTransaction() +{ + if (model()) + model()->m_d->notifyRewriterEndTransaction(); +} + 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 4612f5fe605..b95f6b08edb 100644 --- a/src/plugins/qmldesigner/designercore/model/model.cpp +++ b/src/plugins/qmldesigner/designercore/model/model.cpp @@ -451,6 +451,176 @@ void ModelPrivate::notifyInstancesCompleted(const QVector &nodeVector } } +void ModelPrivate::notifyInstancesInformationsChange(const QVector &nodeVector) +{ + bool resetModel = false; + QString description; + + QVector internalVector(toInternalNodeVector(nodeVector)); + + try { + if (rewriterView()) + rewriterView()->instanceInformationsChange(toModelNodeVector(internalVector, rewriterView())); + } catch (RewritingException &e) { + description = e.description(); + resetModel = true; + } + + foreach (const QWeakPointer &view, m_viewList) { + Q_ASSERT(view != 0); + view->instanceInformationsChange(toModelNodeVector(internalVector, view.data())); + } + + if (nodeInstanceView()) { + nodeInstanceView()->instanceInformationsChange(toModelNodeVector(internalVector, nodeInstanceView())); + } + + if (resetModel) { + resetModelByRewriter(description); + } +} + +void ModelPrivate::notifyInstancesRenderImageChanged(const QVector &nodeVector) +{ + bool resetModel = false; + QString description; + + QVector internalVector(toInternalNodeVector(nodeVector)); + + try { + if (rewriterView()) + rewriterView()->instancesRenderImageChanged(toModelNodeVector(internalVector, rewriterView())); + } catch (RewritingException &e) { + description = e.description(); + resetModel = true; + } + + foreach (const QWeakPointer &view, m_viewList) { + Q_ASSERT(view != 0); + view->instancesRenderImageChanged(toModelNodeVector(internalVector, view.data())); + } + + if (nodeInstanceView()) { + nodeInstanceView()->instancesRenderImageChanged(toModelNodeVector(internalVector, nodeInstanceView())); + } + + if (resetModel) { + resetModelByRewriter(description); + } +} + +void ModelPrivate::notifyInstancesPreviewImageChanged(const QVector &nodeVector) +{ + bool resetModel = false; + QString description; + + QVector internalVector(toInternalNodeVector(nodeVector)); + + try { + if (rewriterView()) + rewriterView()->instancesPreviewImageChanged(toModelNodeVector(internalVector, rewriterView())); + } catch (RewritingException &e) { + description = e.description(); + resetModel = true; + } + + foreach (const QWeakPointer &view, m_viewList) { + Q_ASSERT(view != 0); + view->instancesPreviewImageChanged(toModelNodeVector(internalVector, view.data())); + } + + if (nodeInstanceView()) { + nodeInstanceView()->instancesPreviewImageChanged(toModelNodeVector(internalVector, nodeInstanceView())); + } + + if (resetModel) { + resetModelByRewriter(description); + } +} + +void ModelPrivate::notifyInstancesChildrenChanged(const QVector &nodeVector) +{ + bool resetModel = false; + QString description; + + QVector internalVector(toInternalNodeVector(nodeVector)); + + try { + if (rewriterView()) + rewriterView()->instancesChildrenChanged(toModelNodeVector(internalVector, rewriterView())); + } catch (RewritingException &e) { + description = e.description(); + resetModel = true; + } + + foreach (const QWeakPointer &view, m_viewList) { + Q_ASSERT(view != 0); + view->instancesChildrenChanged(toModelNodeVector(internalVector, view.data())); + } + + if (nodeInstanceView()) { + nodeInstanceView()->instancesChildrenChanged(toModelNodeVector(internalVector, nodeInstanceView())); + } + + if (resetModel) { + resetModelByRewriter(description); + } +} + +void ModelPrivate::notifyRewriterBeginTransaction() +{ + bool resetModel = false; + QString description; + + try { + if (rewriterView()) + rewriterView()->rewriterBeginTransaction(); + } catch (RewritingException &e) { + description = e.description(); + resetModel = true; + } + + foreach (const QWeakPointer &view, m_viewList) { + Q_ASSERT(view != 0); + view->rewriterBeginTransaction(); + } + + if (nodeInstanceView()) { + nodeInstanceView()->rewriterBeginTransaction(); + } + + if (resetModel) { + resetModelByRewriter(description); + } +} + +void ModelPrivate::notifyRewriterEndTransaction() +{ + bool resetModel = false; + QString description; + + try { + if (rewriterView()) + rewriterView()->rewriterEndTransaction(); + } catch (RewritingException &e) { + description = e.description(); + resetModel = true; + } + + foreach (const QWeakPointer &view, m_viewList) { + Q_ASSERT(view != 0); + view->rewriterEndTransaction(); + } + + if (nodeInstanceView()) { + nodeInstanceView()->rewriterEndTransaction(); + } + + if (resetModel) { + resetModelByRewriter(description); + } +} + void ModelPrivate::notifyCustomNotification(const AbstractView *senderView, const QString &identifier, const QList &nodeList, const QList &data) { bool resetModel = false; diff --git a/src/plugins/qmldesigner/designercore/model/model_p.h b/src/plugins/qmldesigner/designercore/model/model_p.h index dd4262f7256..b5d88a9ba37 100644 --- a/src/plugins/qmldesigner/designercore/model/model_p.h +++ b/src/plugins/qmldesigner/designercore/model/model_p.h @@ -149,6 +149,13 @@ 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 notifyInstancesInformationsChange(const QVector &nodeList); + void notifyInstancesRenderImageChanged(const QVector &nodeList); + void notifyInstancesPreviewImageChanged(const QVector &nodeList); + void notifyInstancesChildrenChanged(const QVector &nodeList); + + void notifyRewriterBeginTransaction(); + void notifyRewriterEndTransaction(); void setSelectedNodes(const QList &selectedNodeList); diff --git a/src/plugins/qmldesigner/designercore/model/qmlmodelview.cpp b/src/plugins/qmldesigner/designercore/model/qmlmodelview.cpp index 5ad75f6726a..f7ee8440660 100644 --- a/src/plugins/qmldesigner/designercore/model/qmlmodelview.cpp +++ b/src/plugins/qmldesigner/designercore/model/qmlmodelview.cpp @@ -283,7 +283,7 @@ QmlObjectNode QmlModelView::fxObjectNodeForId(const QString &id) void QmlModelView::customNotification(const AbstractView * /* view */, const QString &identifier, const QList &nodeList, const QList & /* data */) { - if (identifier == "__state changed__") { + if (identifier == "__state changed__") { // TODO: Is this still needed? QmlModelState newState(nodeList.first()); QmlModelState oldState = currentState(); @@ -370,6 +370,37 @@ void QmlModelView::instancesCompleted(const QVector &/*completedNodeL { } +void QmlModelView::instanceInformationsChange(const QVector &/*nodeList*/) +{ + +} + +void QmlModelView::instancesRenderImageChanged(const QVector &/*nodeList*/) +{ + +} + +void QmlModelView::instancesPreviewImageChanged(const QVector &/*nodeList*/) +{ + +} + +void QmlModelView::instancesChildrenChanged(const QVector &/*nodeList*/) +{ + +} + + +void QmlModelView::rewriterBeginTransaction() +{ + +} + +void QmlModelView::rewriterEndTransaction() +{ + +} + void QmlModelView::nodeInstancePropertyChanged(const ModelNode &node, const QString &propertyName) { QmlObjectNode qmlObjectNode(node); diff --git a/src/plugins/qmldesigner/designercore/model/rewriterview.cpp b/src/plugins/qmldesigner/designercore/model/rewriterview.cpp index 47a9cfd4c05..7a9ea083cbf 100644 --- a/src/plugins/qmldesigner/designercore/model/rewriterview.cpp +++ b/src/plugins/qmldesigner/designercore/model/rewriterview.cpp @@ -364,21 +364,6 @@ void RewriterView::customNotification(const AbstractView * /*view*/, const QStri { if (identifier == StartRewriterAmend || identifier == EndRewriterAmend) return; // we emitted this ourselves, so just ignore these notifications. - - if (identifier == ("__start rewriter transaction__")) { - transactionLevel++; - setModificationGroupActive(true); - } - else if (identifier == ("__end rewriter transaction__")) { - transactionLevel--; - Q_ASSERT(transactionLevel >= 0); - - } - if (transactionLevel == 0) - { - setModificationGroupActive(false); - applyModificationGroupChanges(); - } } void RewriterView::scriptFunctionsChanged(const ModelNode &/*node*/, const QStringList &/*scriptFunctionList*/) @@ -393,6 +378,42 @@ void RewriterView::instancesCompleted(const QVector &/*completedNodeL { } +void RewriterView::instanceInformationsChange(const QVector &/*nodeList*/) +{ + +} + +void RewriterView::instancesRenderImageChanged(const QVector &/*nodeList*/) +{ + +} + +void RewriterView::instancesPreviewImageChanged(const QVector &/*nodeList*/) +{ + +} + +void RewriterView::instancesChildrenChanged(const QVector &/*nodeList*/) +{ + +} + +void RewriterView::rewriterBeginTransaction() +{ + transactionLevel++; + setModificationGroupActive(true); +} + +void RewriterView::rewriterEndTransaction() +{ + transactionLevel--; + Q_ASSERT(transactionLevel >= 0); + if (transactionLevel == 0) + { + setModificationGroupActive(false); + applyModificationGroupChanges(); + } +} 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 326dd55e8ca..26d55dd3923 100644 --- a/src/plugins/qmldesigner/designercore/model/viewlogger.cpp +++ b/src/plugins/qmldesigner/designercore/model/viewlogger.cpp @@ -225,5 +225,47 @@ void ViewLogger::instancesCompleted(const QVector &completedNodeList) } +void ViewLogger::instanceInformationsChange(const QVector &nodeList) +{ + m_output << time() << indent("instanceInformationsChange:") << endl; + + foreach(const ModelNode &node, nodeList) + m_output << time() << indent("node: ") << node << endl; +} + +void ViewLogger::instancesRenderImageChanged(const QVector &nodeList) +{ + m_output << time() << indent("instancesRenderImageChanged:") << endl; + + foreach(const ModelNode &node, nodeList) + m_output << time() << indent("node: ") << node << endl; +} + +void ViewLogger::instancesPreviewImageChanged(const QVector &nodeList) +{ + m_output << time() << indent("instancesPreviewImageChanged:") << endl; + + foreach(const ModelNode &node, nodeList) + m_output << time() << indent("node: ") << node << endl; +} + +void ViewLogger::instancesChildrenChanged(const QVector &nodeList) +{ + m_output << time() << indent("instancesChildrenChanged:") << endl; + + foreach(const ModelNode &node, nodeList) + m_output << time() << indent("node: ") << node << endl; +} + +void ViewLogger::rewriterBeginTransaction() +{ + m_output << time() << indent("rewriterBeginTransaction:") << endl; +} + +void ViewLogger::rewriterEndTransaction() +{ + m_output << time() << indent("rewriterEndTransaction:") << endl; +} + } // namespace Internal } // namespace QmlDesigner diff --git a/src/plugins/qmldesigner/designercore/model/viewlogger.h b/src/plugins/qmldesigner/designercore/model/viewlogger.h index 93c2afe647a..7d82962c2c7 100644 --- a/src/plugins/qmldesigner/designercore/model/viewlogger.h +++ b/src/plugins/qmldesigner/designercore/model/viewlogger.h @@ -78,6 +78,14 @@ public: void scriptFunctionsChanged(const ModelNode &node, const QStringList &scriptFunctionList); void instancePropertyChange(const QList > &propertyList); void instancesCompleted(const QVector &completedNodeList); + void instanceInformationsChange(const QVector &nodeList); + void instancesRenderImageChanged(const QVector &nodeList); + void instancesPreviewImageChanged(const QVector &nodeList); + void instancesChildrenChanged(const QVector &nodeList); + + void rewriterBeginTransaction(); + void rewriterEndTransaction(); + protected: QString time() const; diff --git a/src/plugins/qmldesigner/designercore/rewritertransaction.cpp b/src/plugins/qmldesigner/designercore/rewritertransaction.cpp index 570d4805a77..b96f38badbc 100644 --- a/src/plugins/qmldesigner/designercore/rewritertransaction.cpp +++ b/src/plugins/qmldesigner/designercore/rewritertransaction.cpp @@ -44,7 +44,7 @@ RewriterTransaction::RewriterTransaction() : m_valid(false) RewriterTransaction::RewriterTransaction(AbstractView *_view) : m_view(_view), m_valid(true) { Q_ASSERT(view()); - view()->emitCustomNotification("__start rewriter transaction__"); + view()->emitRewriterBeginTransaction(); } RewriterTransaction::~RewriterTransaction() @@ -61,7 +61,7 @@ void RewriterTransaction::commit() { if (m_valid) { m_valid = false; - view()->emitCustomNotification("__end rewriter transaction__"); + view()->emitRewriterEndTransaction(); } }