From e5367131bb2b9c70f49e2bcfe4381a301094a84c Mon Sep 17 00:00:00 2001 From: Erik Verbruggen Date: Tue, 2 Feb 2010 15:23:55 +0100 Subject: [PATCH] Changed the import notifications to distinguish between adds/removes. --- .../qmldesigner/core/include/abstractview.h | 3 ++- .../qmldesigner/core/include/forwardview.h | 18 ++++++++++--- .../qmldesigner/core/include/rewriterview.h | 3 +++ .../qmldesigner/core/model/abstractview.cpp | 14 +++++++--- src/plugins/qmldesigner/core/model/model.cpp | 27 +++++++------------ src/plugins/qmldesigner/core/model/model_p.h | 4 +-- .../qmldesigner/core/model/rewriterview.cpp | 24 +++++++++++++++++ 7 files changed, 66 insertions(+), 27 deletions(-) diff --git a/src/plugins/qmldesigner/core/include/abstractview.h b/src/plugins/qmldesigner/core/include/abstractview.h index 3d24c6bff03..7a087086b1e 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 f7c74ce3faf..dd9a42555f8 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::nodeOrderChanged(const NodeListProperty &listPropert } template -void ForwardView::importsChanged() +void ForwardView::importAdded(const Import &import) { - AbstractView::importsChanged(); + AbstractView::importAdded(import); foreach (const ViewTypePointer &view, m_targetViewList) - view->importsChanged(); + view->importAdded(import); +} + +template +void ForwardView::importRemoved(const Import &import) +{ + AbstractView::importRemoved(import); + + foreach (const ViewTypePointer &view, m_targetViewList) + view->importRemoved(import); } template diff --git a/src/plugins/qmldesigner/core/include/rewriterview.h b/src/plugins/qmldesigner/core/include/rewriterview.h index 73d663045c4..1724fbab1b7 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 &nodeList, const QList &data); + void importAdded(const Import &import); + void importRemoved(const Import &import); + void fileUrlChanged(const QUrl &oldUrl, const QUrl &newUrl); void selectedNodesChanged(const QList &selectedNodeList, const QList &lastSelectedNodeList); diff --git a/src/plugins/qmldesigner/core/model/abstractview.cpp b/src/plugins/qmldesigner/core/model/abstractview.cpp index ff1c3c185fa..ec8c5162e04 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 4a5d4c4710c..6368a894a97 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 &imports) -{ - QList added = QSet(imports).subtract(m_imports).toList(); - QList removed = QSet(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::notifyImportsChanged() const +void ModelPrivate::notifyImportAdded(const Import &import) const { foreach (const QWeakPointer &view, m_viewList) - view->importsChanged(); + view->importAdded(import); +} + +void ModelPrivate::notifyImportRemoved(const Import &import) const +{ + foreach (const QWeakPointer &view, m_viewList) + 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 4f3dd49adda..f99c49e2953 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 imports() const { return m_imports; } - void setImports(const QSet &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 8eae32e8d54..61194d1e609 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*/) { }