diff --git a/src/plugins/qmldesigner/core/include/abstractview.h b/src/plugins/qmldesigner/core/include/abstractview.h index 3d24c6bff033345100ab634024897300528a4a1e..7a087086b1e88b8b34a28afd6064f33275b1e5e7 100644 --- a/src/plugins/qmldesigner/core/include/abstractview.h +++ b/src/plugins/qmldesigner/core/include/abstractview.h @@ -120,7 +120,8 @@ public: virtual void nodeOrderChanged(const NodeListProperty &listProperty, const ModelNode &movedNode, int oldIndex) = 0; - virtual void importsChanged(); + virtual void importAdded(const Import &import); + virtual void importRemoved(const Import &import); virtual void auxiliaryDataChanged(const ModelNode &node, const QString &name, const QVariant &data); diff --git a/src/plugins/qmldesigner/core/include/forwardview.h b/src/plugins/qmldesigner/core/include/forwardview.h index f7c74ce3fafbef614b372b7d01b95749df130040..dd9a42555f8e03d86850f5a7668c2b257274f9a6 100644 --- a/src/plugins/qmldesigner/core/include/forwardview.h +++ b/src/plugins/qmldesigner/core/include/forwardview.h @@ -71,7 +71,8 @@ public: void nodeOrderChanged(const NodeListProperty &listProperty, const ModelNode &movedNode, int oldIndex); - void importsChanged(); + void importAdded(const Import &import); + void importRemoved(const Import &import); void auxiliaryDataChanged(const ModelNode &node, const QString &name, const QVariant &data); @@ -218,12 +219,21 @@ void ForwardView<ViewType>::nodeOrderChanged(const NodeListProperty &listPropert } template <class ViewType> -void ForwardView<ViewType>::importsChanged() +void ForwardView<ViewType>::importAdded(const Import &import) { - AbstractView::importsChanged(); + AbstractView::importAdded(import); foreach (const ViewTypePointer &view, m_targetViewList) - view->importsChanged(); + view->importAdded(import); +} + +template <class ViewType> +void ForwardView<ViewType>::importRemoved(const Import &import) +{ + AbstractView::importRemoved(import); + + foreach (const ViewTypePointer &view, m_targetViewList) + view->importRemoved(import); } template <class ViewType> diff --git a/src/plugins/qmldesigner/core/include/rewriterview.h b/src/plugins/qmldesigner/core/include/rewriterview.h index 73d663045c4927f5314d5ce242bd262da6d7d9c2..1724fbab1b7140392f0fa033ccb507caf4846624 100644 --- a/src/plugins/qmldesigner/core/include/rewriterview.h +++ b/src/plugins/qmldesigner/core/include/rewriterview.h @@ -125,6 +125,9 @@ public: void nodeTypeChanged(const ModelNode &node,const QString &type, int majorVersion, int minorVersion); void customNotification(const AbstractView *view, const QString &identifier, const QList<ModelNode> &nodeList, const QList<QVariant> &data); + void importAdded(const Import &import); + void importRemoved(const Import &import); + void fileUrlChanged(const QUrl &oldUrl, const QUrl &newUrl); void selectedNodesChanged(const QList<ModelNode> &selectedNodeList, const QList<ModelNode> &lastSelectedNodeList); diff --git a/src/plugins/qmldesigner/core/model/abstractview.cpp b/src/plugins/qmldesigner/core/model/abstractview.cpp index ff1c3c185fa4ad64401116fec3f579194db0d0ee..ec8c5162e0434afeba141e58f812ac7a769f6302 100644 --- a/src/plugins/qmldesigner/core/model/abstractview.cpp +++ b/src/plugins/qmldesigner/core/model/abstractview.cpp @@ -203,10 +203,18 @@ void AbstractView::fileUrlChanged(const QUrl &/*oldUrl*/, const QUrl &/*newUrl*/ } /*! -\fn AbstractView::importsChanged() -\brief Called when the imports for the model change. +\fn AbstractView::importAdded(const Import &import) +\brief Called when an import has been added to the model */ -void AbstractView::importsChanged() +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*/) { } diff --git a/src/plugins/qmldesigner/core/model/model.cpp b/src/plugins/qmldesigner/core/model/model.cpp index 4a5d4c4710c454872a725f9ad94a4da60a0a3220..6368a894a9716c70978d1023960d7ae8fa5d9372 100644 --- a/src/plugins/qmldesigner/core/model/model.cpp +++ b/src/plugins/qmldesigner/core/model/model.cpp @@ -117,26 +117,13 @@ Model *ModelPrivate::create(QString type, int major, int minor) return model; } -void ModelPrivate::setImports(const QSet<Import> &imports) -{ - QList<Import> added = QSet<Import>(imports).subtract(m_imports).toList(); - QList<Import> removed = QSet<Import>(m_imports).subtract(imports).toList(); - - if (added.isEmpty() && removed.isEmpty()) - return; - - m_imports = imports; - - notifyImportsChanged(); -} - void ModelPrivate::addImport(const Import &import) { if (m_imports.contains(import)) return; m_imports.insert(import); - notifyImportsChanged(); + notifyImportAdded(import); } void ModelPrivate::removeImport(const Import &import) @@ -144,13 +131,19 @@ void ModelPrivate::removeImport(const Import &import) if (!m_imports.remove(import)) return; - notifyImportsChanged(); + notifyImportRemoved(import); +} + +void ModelPrivate::notifyImportAdded(const Import &import) const +{ + foreach (const QWeakPointer<AbstractView> &view, m_viewList) + view->importAdded(import); } -void ModelPrivate::notifyImportsChanged() const +void ModelPrivate::notifyImportRemoved(const Import &import) const { foreach (const QWeakPointer<AbstractView> &view, m_viewList) - view->importsChanged(); + view->importRemoved(import); } QUrl ModelPrivate::fileUrl() const diff --git a/src/plugins/qmldesigner/core/model/model_p.h b/src/plugins/qmldesigner/core/model/model_p.h index 4f3dd49addab4b800807df99957bdd5275508f39..f99c49e2953ad62ae492cb301c6a71a5044424ae 100644 --- a/src/plugins/qmldesigner/core/model/model_p.h +++ b/src/plugins/qmldesigner/core/model/model_p.h @@ -155,10 +155,10 @@ public: // Imports: QSet<Import> imports() const { return m_imports; } - void setImports(const QSet<Import> &imports); void addImport(const Import &import); void removeImport(const Import &import); - void notifyImportsChanged() const; + void notifyImportAdded(const Import &import) const; + void notifyImportRemoved(const Import &import) const; //node state property manipulation diff --git a/src/plugins/qmldesigner/core/model/rewriterview.cpp b/src/plugins/qmldesigner/core/model/rewriterview.cpp index 8eae32e8d54bb29ade18ba695347bd2a8a7d3eae..61194d1e609c63718476f2d0f5819b7f80a1c4d6 100644 --- a/src/plugins/qmldesigner/core/model/rewriterview.cpp +++ b/src/plugins/qmldesigner/core/model/rewriterview.cpp @@ -261,6 +261,30 @@ void RewriterView::nodeReparented(const ModelNode &node, const NodeAbstractPrope applyChanges(); } +void RewriterView::importAdded(const Import &import) +{ + Q_ASSERT(textModifier()); + if (textToModelMerger()->isActive()) + return; + + modelToTextMerger()->addImport(import); + + if (!isModificationGroupActive()) + applyChanges(); +} + +void RewriterView::importRemoved(const Import &import) +{ + Q_ASSERT(textModifier()); + if (textToModelMerger()->isActive()) + return; + + modelToTextMerger()->removeImport(import); + + if (!isModificationGroupActive()) + applyChanges(); +} + void RewriterView::fileUrlChanged(const QUrl &/*oldUrl*/, const QUrl &/*newUrl*/) { }