From e3376b6d8d62fac914e208f5fd2088470f16074c Mon Sep 17 00:00:00 2001 From: Marco Bubke Date: Thu, 10 Feb 2011 15:44:40 +0100 Subject: [PATCH] QmlDesigner: Change importAdded and importRemoved in importsChanged --- .../components/formeditor/dragtool.cpp | 5 +- .../components/formeditor/formeditorview.cpp | 7 +- .../components/formeditor/formeditorview.h | 3 +- .../components/integration/componentview.cpp | 2 +- .../components/integration/componentview.h | 1 + .../integration/designdocumentcontroller.cpp | 7 +- .../designdocumentcontrollerview.cpp | 5 ++ .../designdocumentcontrollerview.h | 2 + .../itemlibrary/itemlibraryview.cpp | 7 +- .../components/itemlibrary/itemlibraryview.h | 3 +- .../itemlibrary/itemlibrarywidget.cpp | 10 +-- .../components/navigator/navigatorview.cpp | 8 +-- .../components/navigator/navigatorview.h | 3 +- .../stateseditor/stateseditorview.cpp | 2 +- .../designercore/include/abstractview.h | 3 +- .../designercore/include/forwardview.h | 10 +-- .../qmldesigner/designercore/include/model.h | 3 +- .../designercore/include/nodeinstanceview.h | 3 +- .../designercore/include/qmlmodelview.h | 1 + .../designercore/include/rewriterview.h | 1 + .../instances/nodeinstanceview.cpp | 8 +-- .../designercore/model/abstractview.cpp | 16 ----- .../qmldesigner/designercore/model/model.cpp | 69 ++++++------------- .../qmldesigner/designercore/model/model_p.h | 4 +- .../designercore/model/modelmerger.cpp | 8 +-- .../designercore/model/qmlmodelview.cpp | 8 ++- .../designercore/model/rewriterview.cpp | 9 +++ .../designercore/model/texttomodelmerger.cpp | 4 +- .../designercore/model/viewlogger.cpp | 12 ++-- .../designercore/model/viewlogger.h | 2 +- 30 files changed, 90 insertions(+), 136 deletions(-) diff --git a/src/plugins/qmldesigner/components/formeditor/dragtool.cpp b/src/plugins/qmldesigner/components/formeditor/dragtool.cpp index deaf760fa4..07ed48d1e8 100644 --- a/src/plugins/qmldesigner/components/formeditor/dragtool.cpp +++ b/src/plugins/qmldesigner/components/formeditor/dragtool.cpp @@ -262,6 +262,7 @@ void DragTool::dragEnterEvent(QGraphicsSceneDragDropEvent * event) { if (event->mimeData()->hasFormat("application/vnd.bauhaus.itemlibraryinfo") || event->mimeData()->hasFormat("application/vnd.bauhaus.libraryresource")) { + QList importToBeAddedList; m_blockMove = false; if (event->mimeData()->hasFormat("application/vnd.bauhaus.itemlibraryinfo")) { Q_ASSERT(!event->mimeData()->data("application/vnd.bauhaus.itemlibraryinfo").isEmpty()); @@ -272,12 +273,14 @@ void DragTool::dragEnterEvent(QGraphicsSceneDragDropEvent * event) Import newImport = Import::createLibraryImport(newImportUrl, newImportVersion); if (!view()->model()->imports().contains(newImport)) { - view()->model()->addImport(newImport); + importToBeAddedList.append(newImport); } } } + view()->model()->changeImports(importToBeAddedList, QList()); + if (!m_rewriterTransaction.isValid()) { view()->clearSelectedModelNodes(); m_rewriterTransaction = view()->beginRewriterTransaction(); diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp b/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp index 880a650ee1..c07f0c48d1 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp +++ b/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp @@ -148,12 +148,7 @@ void FormEditorView::modelAboutToBeDetached(Model *model) QmlModelView::modelAboutToBeDetached(model); } -void FormEditorView::importAdded(const Import &) -{ - reset(); -} - -void FormEditorView::importRemoved(const Import &) +void FormEditorView::importsChanged(const QList &/*addedImports*/, const QList &/*removedImports*/) { reset(); } diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorview.h b/src/plugins/qmldesigner/components/formeditor/formeditorview.h index 2c286fda7f..b8a4c57d19 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditorview.h +++ b/src/plugins/qmldesigner/components/formeditor/formeditorview.h @@ -70,8 +70,7 @@ public: void modelAttached(Model *model); void modelAboutToBeDetached(Model *model); - void importAdded(const Import &import); - void importRemoved(const Import &import); + void importsChanged(const QList &addedImports, const QList &removedImports); void nodeCreated(const ModelNode &createdNode); void nodeAboutToBeRemoved(const ModelNode &removedNode); diff --git a/src/plugins/qmldesigner/components/integration/componentview.cpp b/src/plugins/qmldesigner/components/integration/componentview.cpp index fd1c4b132e..214f0484ed 100644 --- a/src/plugins/qmldesigner/components/integration/componentview.cpp +++ b/src/plugins/qmldesigner/components/integration/componentview.cpp @@ -185,6 +185,6 @@ void ComponentView::nodeOrderChanged(const NodeListProperty &/*listProperty*/, c void ComponentView::auxiliaryDataChanged(const ModelNode &/*node*/, const QString &/*name*/, const QVariant &/*data*/) {} void ComponentView::customNotification(const AbstractView * /*view*/, const QString &/*identifier*/, const QList &/*nodeList*/, const QList &/*data*/) {} - +void ComponentView::importsChanged(const QList &/*addedImports*/, const QList &/*removedImports*/) {} } // namespace QmlDesigner diff --git a/src/plugins/qmldesigner/components/integration/componentview.h b/src/plugins/qmldesigner/components/integration/componentview.h index cb542ed172..db99d61dd9 100644 --- a/src/plugins/qmldesigner/components/integration/componentview.h +++ b/src/plugins/qmldesigner/components/integration/componentview.h @@ -95,6 +95,7 @@ public: void customNotification(const AbstractView *view, const QString &identifier, const QList &nodeList, const QList &data); + void importsChanged(const QList &addedImports, const QList &removedImports); QStandardItemModel *standardItemModel() const; diff --git a/src/plugins/qmldesigner/components/integration/designdocumentcontroller.cpp b/src/plugins/qmldesigner/components/integration/designdocumentcontroller.cpp index 1bc64542b5..34c04b9b1e 100644 --- a/src/plugins/qmldesigner/components/integration/designdocumentcontroller.cpp +++ b/src/plugins/qmldesigner/components/integration/designdocumentcontroller.cpp @@ -481,8 +481,7 @@ void DesignDocumentController::copySelected() QScopedPointer model(Model::create("Qt/Rectangle")); model->setMetaInfo(m_d->model->metaInfo()); model->setFileUrl(m_d->model->fileUrl()); - foreach (const Import &import, m_d->model->imports()) - model->addImport(import); + model->changeImports(m_d->model->imports(), QList()); Q_ASSERT(model); @@ -578,8 +577,8 @@ void DesignDocumentController::paste() QScopedPointer model(Model::create("empty")); model->setMetaInfo(m_d->model->metaInfo()); model->setFileUrl(m_d->model->fileUrl()); - foreach (const Import &import, m_d->model->imports()) - model->addImport(import); + model->changeImports(m_d->model->imports(), QList()); + Q_ASSERT(model); if (!m_d->model) diff --git a/src/plugins/qmldesigner/components/integration/designdocumentcontrollerview.cpp b/src/plugins/qmldesigner/components/integration/designdocumentcontrollerview.cpp index 11e646a5ef..7f1c0ac057 100644 --- a/src/plugins/qmldesigner/components/integration/designdocumentcontrollerview.cpp +++ b/src/plugins/qmldesigner/components/integration/designdocumentcontrollerview.cpp @@ -107,6 +107,11 @@ void DesignDocumentControllerView::actualStateChanged(const ModelNode &/*node*/) { } +void DesignDocumentControllerView::importsChanged(const QList &/*addedImports*/, const QList &/*removedImports*/) +{ + +} + 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 586c196a0b..30dbf9a7f6 100644 --- a/src/plugins/qmldesigner/components/integration/designdocumentcontrollerview.h +++ b/src/plugins/qmldesigner/components/integration/designdocumentcontrollerview.h @@ -75,6 +75,8 @@ public: void actualStateChanged(const ModelNode &node); + void importsChanged(const QList &addedImports, const QList &removedImports); + ModelNode insertModel(const ModelNode &modelNode) { return m_modelMerger.insertModel(modelNode); } void replaceModel(const ModelNode &modelNode) diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.cpp index d7dc82e8a3..a04709af98 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.cpp +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.cpp @@ -32,12 +32,7 @@ void ItemLibraryView::modelAboutToBeDetached(Model *model) m_widget->setModel(0); } -void ItemLibraryView::importAdded(const Import &) -{ - updateImports(); -} - -void ItemLibraryView::importRemoved(const Import &) +void ItemLibraryView::importsChanged(const QList &/*addedImports*/, const QList &/*removedImports*/) { updateImports(); } diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.h b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.h index 7bc936c97d..3f11f9a513 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.h +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.h @@ -58,8 +58,7 @@ public: void modelAttached(Model *model); void modelAboutToBeDetached(Model *model); - void importAdded(const Import &import); - void importRemoved(const Import &import); + void importsChanged(const QList &addedImports, const QList &removedImports); void nodeCreated(const ModelNode &createdNode); void nodeRemoved(const ModelNode &removedNode, const NodeAbstractProperty &parentProperty, PropertyChangeFlags propertyChange); diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.cpp index 4eeaac24dc..9c38729bbd 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.cpp +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.cpp @@ -500,18 +500,20 @@ void ItemLibraryWidget::wheelEvent(QWheelEvent *event) { if (!m_d->model) return; + + QList toBeRemovedImportList; foreach (const Import &import, m_d->model->imports()) if (import.isLibraryImport() && import.url().compare(name, Qt::CaseInsensitive) == 0) - m_d->model->removeImport(import); + toBeRemovedImportList.append(import); + + m_d->model->changeImports(QList(), toBeRemovedImportList); } void ItemLibraryWidget::addImport(const QString &name, const QString &version) { if (!m_d->model) return; - - m_d->model->addImport(Import::createLibraryImport(name, version)); - + m_d->model->changeImports(QList() << Import::createLibraryImport(name, version), QList()); } } diff --git a/src/plugins/qmldesigner/components/navigator/navigatorview.cpp b/src/plugins/qmldesigner/components/navigator/navigatorview.cpp index 65ebb49e7d..bbf2c04db9 100644 --- a/src/plugins/qmldesigner/components/navigator/navigatorview.cpp +++ b/src/plugins/qmldesigner/components/navigator/navigatorview.cpp @@ -111,17 +111,11 @@ void NavigatorView::modelAboutToBeDetached(Model *model) AbstractView::modelAboutToBeDetached(model); } -void NavigatorView::importAdded(const Import &) +void NavigatorView::importsChanged(const QList &/*addedImports*/, const QList &/*removedImports*/) { treeWidget()->update(); } -void NavigatorView::importRemoved(const Import &) -{ - treeWidget()->update(); -} - - void NavigatorView::nodeCreated(const ModelNode & /*createdNode*/) { } diff --git a/src/plugins/qmldesigner/components/navigator/navigatorview.h b/src/plugins/qmldesigner/components/navigator/navigatorview.h index c39a6f74ef..11b889975d 100644 --- a/src/plugins/qmldesigner/components/navigator/navigatorview.h +++ b/src/plugins/qmldesigner/components/navigator/navigatorview.h @@ -66,8 +66,7 @@ public: void modelAttached(Model *model); void modelAboutToBeDetached(Model *model); - void importAdded(const Import &import); - void importRemoved(const Import &import); + void importsChanged(const QList &addedImports, const QList &removedImports); void nodeCreated(const ModelNode &createdNode); void nodeRemoved(const ModelNode &removedNode, const NodeAbstractProperty &parentProperty, PropertyChangeFlags propertyChange); diff --git a/src/plugins/qmldesigner/components/stateseditor/stateseditorview.cpp b/src/plugins/qmldesigner/components/stateseditor/stateseditorview.cpp index 3162b86cfe..547db24550 100644 --- a/src/plugins/qmldesigner/components/stateseditor/stateseditorview.cpp +++ b/src/plugins/qmldesigner/components/stateseditor/stateseditorview.cpp @@ -141,7 +141,7 @@ void StatesEditorView::addState() try { if (rootStateGroup().allStates().count() < 1) - model()->addImport(Import::createLibraryImport("QtQuick", "1.0")); + model()->changeImports(QList() << Import::createLibraryImport("QtQuick", "1.0"), QList()); ModelNode newState = rootStateGroup().addState(newStateName); setCurrentState(newState); } catch (RewritingException &e) { diff --git a/src/plugins/qmldesigner/designercore/include/abstractview.h b/src/plugins/qmldesigner/designercore/include/abstractview.h index 188f7e36af..461f6dc778 100644 --- a/src/plugins/qmldesigner/designercore/include/abstractview.h +++ b/src/plugins/qmldesigner/designercore/include/abstractview.h @@ -154,8 +154,7 @@ public: virtual void nodeOrderChanged(const NodeListProperty &listProperty, const ModelNode &movedNode, int oldIndex) = 0; - virtual void importAdded(const Import &import); - virtual void importRemoved(const Import &import); + virtual void importsChanged(const QList &addedImports, const QList &removedImports) = 0; virtual void auxiliaryDataChanged(const ModelNode &node, const QString &name, const QVariant &data); diff --git a/src/plugins/qmldesigner/designercore/include/forwardview.h b/src/plugins/qmldesigner/designercore/include/forwardview.h index d1358e7458..d90dee3b51 100644 --- a/src/plugins/qmldesigner/designercore/include/forwardview.h +++ b/src/plugins/qmldesigner/designercore/include/forwardview.h @@ -74,9 +74,7 @@ public: void fileUrlChanged(const QUrl &oldUrl, const QUrl &newUrl); void nodeOrderChanged(const NodeListProperty &listProperty, const ModelNode &movedNode, int oldIndex); - - void importAdded(const Import &import); - void importRemoved(const Import &import); + void importsChanged(const QList &addedImports, const QList &removedImports); void auxiliaryDataChanged(const ModelNode &node, const QString &name, const QVariant &data); @@ -224,12 +222,10 @@ void ForwardView::nodeOrderChanged(const NodeListProperty &listPropert } template -void ForwardView::importAdded(const Import &import) +void ForwardView::importChanged(const QList &addedImports, const QList &removedImports) { - AbstractView::importAdded(import); - foreach (const ViewTypePointer &view, m_targetViewList) - view->importAdded(import); + view->importChanged(addedImport, removedImport); } template diff --git a/src/plugins/qmldesigner/designercore/include/model.h b/src/plugins/qmldesigner/designercore/include/model.h index 49b6521373..2445a7389d 100644 --- a/src/plugins/qmldesigner/designercore/include/model.h +++ b/src/plugins/qmldesigner/designercore/include/model.h @@ -105,8 +105,7 @@ public: // Imports: QList imports() const; - void addImport(const Import &import); - void removeImport(const Import &import); + void changeImports(const QList &importsToBeAdded, const QList &importsToBeRemoved); RewriterView *rewriterView() const; diff --git a/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h b/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h index 9430a19026..038e700016 100644 --- a/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h +++ b/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h @@ -103,8 +103,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); + void importsChanged(const QList &addedImports, const QList &removedImports); void instanceInformationsChange(const QVector &nodeList); void instancesRenderImageChanged(const QVector &nodeList); void instancesPreviewImageChanged(const QVector &nodeList); diff --git a/src/plugins/qmldesigner/designercore/include/qmlmodelview.h b/src/plugins/qmldesigner/designercore/include/qmlmodelview.h index 2fe58761cd..33e9b86cfb 100644 --- a/src/plugins/qmldesigner/designercore/include/qmlmodelview.h +++ b/src/plugins/qmldesigner/designercore/include/qmlmodelview.h @@ -119,6 +119,7 @@ public: void scriptFunctionsChanged(const ModelNode &node, const QStringList &scriptFunctionList); void selectedNodesChanged(const QList &selectedNodeList, const QList &lastSelectedNodeList); + void importsChanged(const QList &addedImports, const QList &removedImports); protected: NodeInstance instanceForModelNode(const ModelNode &modelNode); diff --git a/src/plugins/qmldesigner/designercore/include/rewriterview.h b/src/plugins/qmldesigner/designercore/include/rewriterview.h index 2ae356ebef..3a03ca4b0d 100644 --- a/src/plugins/qmldesigner/designercore/include/rewriterview.h +++ b/src/plugins/qmldesigner/designercore/include/rewriterview.h @@ -152,6 +152,7 @@ public: void importAdded(const Import &import); void importRemoved(const Import &import); + void importsChanged(const QList &addedImports, const QList &removedImports); void fileUrlChanged(const QUrl &oldUrl, const QUrl &newUrl); diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp b/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp index aa375a34ce..f4c555f6e1 100644 --- a/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp +++ b/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp @@ -443,13 +443,7 @@ void NodeInstanceView::instancesCompleted(const QVector &/*completedN { } -void NodeInstanceView::importAdded(const Import & /*import*/) -{ - restartProcess(); -} - - -void NodeInstanceView::importRemoved(const Import &/*import*/) +void NodeInstanceView::importsChanged(const QList &/*addedImports*/, const QList &/*removedImports*/) { restartProcess(); } diff --git a/src/plugins/qmldesigner/designercore/model/abstractview.cpp b/src/plugins/qmldesigner/designercore/model/abstractview.cpp index b002c7c7e6..dfd8576688 100644 --- a/src/plugins/qmldesigner/designercore/model/abstractview.cpp +++ b/src/plugins/qmldesigner/designercore/model/abstractview.cpp @@ -206,22 +206,6 @@ void AbstractView::fileUrlChanged(const QUrl &/*oldUrl*/, const QUrl &/*newUrl*/ { } -/*! -\fn AbstractView::importAdded(const Import &import) -\brief Called when an import has been added to the model -*/ -void AbstractView::importAdded(const Import &/*import*/) -{ -} - -/*! -\fn AbstractView::importRemoved(const Import &import) -\brief Called when an import has been removed from the model -*/ -void AbstractView::importRemoved(const Import &/*import*/) -{ -} - /*! \fn void AbstractView::nodeAboutToBeRemoved(const ModelNode &) \brief this is called if a node will be removed diff --git a/src/plugins/qmldesigner/designercore/model/model.cpp b/src/plugins/qmldesigner/designercore/model/model.cpp index 5e8a1721bd..5a3afcaa81 100644 --- a/src/plugins/qmldesigner/designercore/model/model.cpp +++ b/src/plugins/qmldesigner/designercore/model/model.cpp @@ -132,58 +132,36 @@ Model *ModelPrivate::create(QString type, int major, int minor) return model; } -void ModelPrivate::addImport(const Import &import) +void ModelPrivate::changeImports(const QList &toBeAddedImportList, const QList &toBeRemovedImportList) { - if (m_imports.contains(import)) - return; - - m_imports.append(import); - notifyImportAdded(import); -} - -void ModelPrivate::removeImport(const Import &import) -{ - if (!m_imports.removeOne(import)) - return; - - notifyImportRemoved(import); -} - -void ModelPrivate::notifyImportAdded(const Import &import) -{ - bool resetModel = false; - QString description; - - try { - if (rewriterView()) { - rewriterView()->importAdded(import); + QList removedImportList; + foreach (const Import &import, toBeRemovedImportList) { + if (m_imports.contains(import)) { + removedImportList.append(import); + m_imports.removeOne(import); } - } catch (RewritingException &e) { - description = e.description(); - resetModel = true; } - NodeMetaInfo::clearCache(); - - if (nodeInstanceView()) - nodeInstanceView()->importAdded(import); - - foreach (const QWeakPointer &view, m_viewList) - view->importAdded(import); - - if (resetModel) { - resetModelByRewriter(description); + QList addedImportList; + foreach (const Import &import, toBeAddedImportList) { + if (!m_imports.contains(import)) { + addedImportList.append(import); + m_imports.append(import); + } } + + if (!removedImportList.isEmpty() || !addedImportList.isEmpty()) + notifyImportsChanged(addedImportList, removedImportList); } -void ModelPrivate::notifyImportRemoved(const Import &import) +void ModelPrivate::notifyImportsChanged(const QList &addedImports, const QList &removedImports) { bool resetModel = false; QString description; try { if (rewriterView()) { - rewriterView()->importRemoved(import); + rewriterView()->importsChanged(addedImports, removedImports); } } catch (RewritingException &e) { description = e.description(); @@ -193,10 +171,10 @@ void ModelPrivate::notifyImportRemoved(const Import &import) NodeMetaInfo::clearCache(); if (nodeInstanceView()) - nodeInstanceView()->importRemoved(import); + nodeInstanceView()->importsChanged(addedImports, removedImports); foreach (const QWeakPointer &view, m_viewList) - view->importRemoved(import); + view->importsChanged(addedImports, removedImports); if (resetModel) { resetModelByRewriter(description); @@ -1698,14 +1676,9 @@ QList Model::imports() const return m_d->imports(); } -void Model::addImport(const Import &import) -{ - m_d->addImport(import); -} - -void Model::removeImport(const Import &import) +void Model::changeImports(const QList &importsToBeAdded, const QList &importsToBeRemoved) { - m_d->removeImport(import); + m_d->changeImports(importsToBeAdded, importsToBeRemoved); } RewriterView *Model::rewriterView() const diff --git a/src/plugins/qmldesigner/designercore/model/model_p.h b/src/plugins/qmldesigner/designercore/model/model_p.h index 8e4df9947a..2f15c18082 100644 --- a/src/plugins/qmldesigner/designercore/model/model_p.h +++ b/src/plugins/qmldesigner/designercore/model/model_p.h @@ -175,8 +175,8 @@ public: QList imports() const { return m_imports; } void addImport(const Import &import); void removeImport(const Import &import); - void notifyImportAdded(const Import &import); - void notifyImportRemoved(const Import &import); + void changeImports(const QList &importsToBeAdded, const QList &importToBeRemoved); + void notifyImportsChanged(const QList &addedImports, const QList &removedImports); //node state property manipulation diff --git a/src/plugins/qmldesigner/designercore/model/modelmerger.cpp b/src/plugins/qmldesigner/designercore/model/modelmerger.cpp index 1193d8c88e..b87d831ee6 100644 --- a/src/plugins/qmldesigner/designercore/model/modelmerger.cpp +++ b/src/plugins/qmldesigner/designercore/model/modelmerger.cpp @@ -158,10 +158,9 @@ static ModelNode createNodeFromNode(const ModelNode &modelNode,const QHashbeginRewriterTransaction()); + RewriterTransaction transaction(view()->beginRewriterTransaction()); - foreach (const Import &import, modelNode.model()->imports()) - view()->model()->addImport(import); + view()->model()->changeImports(modelNode.model()->imports(), QList()); QHash idRenamingHash; setupIdRenamingHash(modelNode, idRenamingHash, view()); @@ -176,8 +175,7 @@ void ModelMerger::replaceModel(const ModelNode &modelNode) try { RewriterTransaction transaction(view()->beginRewriterTransaction()); - foreach (const Import &import, modelNode.model()->imports()) - view()->model()->addImport(import); + view()->model()->changeImports(modelNode.model()->imports(), QList()); view()->model()->setFileUrl(modelNode.model()->fileUrl()); ModelNode rootNode(view()->rootModelNode()); diff --git a/src/plugins/qmldesigner/designercore/model/qmlmodelview.cpp b/src/plugins/qmldesigner/designercore/model/qmlmodelview.cpp index 469172cc4e..88936964c2 100644 --- a/src/plugins/qmldesigner/designercore/model/qmlmodelview.cpp +++ b/src/plugins/qmldesigner/designercore/model/qmlmodelview.cpp @@ -117,7 +117,7 @@ QmlItemNode QmlModelView::createQmlItemNodeFromImage(const QString &imageName, c } if (!model()->imports().contains(newImport)) { - model()->addImport(newImport); + model()->changeImports(QList() << newImport, QList()); } QList > propertyPairList; @@ -187,7 +187,7 @@ QmlItemNode QmlModelView::createQmlItemNode(const ItemLibraryEntry &itemLibraryE } if (!model()->imports().contains(newImport)) { - model()->addImport(newImport); + model()->changeImports(QList() << newImport, QList()); } } @@ -372,6 +372,10 @@ void QmlModelView::instancesChildrenChanged(const QVector &/*nodeList } +void QmlModelView::importsChanged(const QList &/*addedImports*/, const QList &/*removedImports*/) +{ + +} void QmlModelView::rewriterBeginTransaction() { diff --git a/src/plugins/qmldesigner/designercore/model/rewriterview.cpp b/src/plugins/qmldesigner/designercore/model/rewriterview.cpp index 69059c44f8..fb77a03f2f 100644 --- a/src/plugins/qmldesigner/designercore/model/rewriterview.cpp +++ b/src/plugins/qmldesigner/designercore/model/rewriterview.cpp @@ -283,6 +283,15 @@ void RewriterView::nodeAboutToBeReparented(const ModelNode &/*node*/, const Node { } +void RewriterView::importsChanged(const QList &addedImports, const QList &removedImports) +{ + foreach (const Import &import, addedImports) + importAdded(import); + + foreach (const Import &import, removedImports) + importRemoved(import); + +} void RewriterView::importAdded(const Import &import) { diff --git a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp index 454f2203f7..39c3d9c33b 100644 --- a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp +++ b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp @@ -1152,12 +1152,12 @@ void ModelValidator::idsDiffer(ModelNode &modelNode, const QString &qmlId) void ModelAmender::modelMissesImport(const Import &import) { - m_merger->view()->model()->addImport(import); + m_merger->view()->model()->changeImports(QList() << import, QList()); } void ModelAmender::importAbsentInQMl(const Import &import) { - m_merger->view()->model()->removeImport(import); + m_merger->view()->model()->changeImports(QList(), QList() << import); } void ModelAmender::bindingExpressionsDiffer(BindingProperty &modelProperty, diff --git a/src/plugins/qmldesigner/designercore/model/viewlogger.cpp b/src/plugins/qmldesigner/designercore/model/viewlogger.cpp index 0ed9e9d442..253ed1f28f 100644 --- a/src/plugins/qmldesigner/designercore/model/viewlogger.cpp +++ b/src/plugins/qmldesigner/designercore/model/viewlogger.cpp @@ -183,14 +183,18 @@ void ViewLogger::nodeOrderChanged(const NodeListProperty &listProperty, const Mo m_output << time() << indent("nodeOrderChanged:") << listProperty << movedNode << oldIndex << endl; } -void ViewLogger::importsChanged() +void ViewLogger::auxiliaryDataChanged(const ModelNode &node, const QString &name, const QVariant &data) { - m_output << time() << indent("importsChanged:") << endl; + m_output << time() << indent("auxiliaryDataChanged:") << node << "\t" << name << "\t" << data.toString() << endl; } -void ViewLogger::auxiliaryDataChanged(const ModelNode &node, const QString &name, const QVariant &data) +void ViewLogger::importsChanged(const QList &addedImports, const QList &removedImports) { - m_output << time() << indent("auxiliaryDataChanged:") << node << "\t" << name << "\t" << data.toString() << endl; + m_output << time() << indent("importsChanged:") << endl; + foreach(const Import &import, addedImports) + m_output << time() << indent("import added: ") << import.toString() << endl; + foreach(const Import &import, removedImports) + m_output << time() << indent("import removed: ") << import.toString() << endl; } void ViewLogger::customNotification(const AbstractView *view, const QString &identifier, const QList &nodeList, const QList &data) diff --git a/src/plugins/qmldesigner/designercore/model/viewlogger.h b/src/plugins/qmldesigner/designercore/model/viewlogger.h index 2841e03c3b..004fc398bd 100644 --- a/src/plugins/qmldesigner/designercore/model/viewlogger.h +++ b/src/plugins/qmldesigner/designercore/model/viewlogger.h @@ -70,7 +70,7 @@ public: void nodeOrderChanged(const NodeListProperty &listProperty, const ModelNode &movedNode, int oldIndex); - void importsChanged(); + void importsChanged(const QList &addedImports, const QList &removedImports); void auxiliaryDataChanged(const ModelNode &node, const QString &name, const QVariant &data); -- GitLab