Changed the import notifications to distinguish between adds/removes.

This commit is contained in:
Erik Verbruggen
2010-02-02 15:23:55 +01:00
parent 1cbee8cd71
commit e5367131bb
7 changed files with 66 additions and 27 deletions

View File

@@ -120,7 +120,8 @@ public:
virtual void nodeOrderChanged(const NodeListProperty &listProperty, const ModelNode &movedNode, int oldIndex) = 0; 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); virtual void auxiliaryDataChanged(const ModelNode &node, const QString &name, const QVariant &data);

View File

@@ -71,7 +71,8 @@ public:
void nodeOrderChanged(const NodeListProperty &listProperty, const ModelNode &movedNode, int oldIndex); 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); 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> 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) 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> template <class ViewType>

View File

@@ -125,6 +125,9 @@ public:
void nodeTypeChanged(const ModelNode &node,const QString &type, int majorVersion, int minorVersion); 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 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 fileUrlChanged(const QUrl &oldUrl, const QUrl &newUrl);
void selectedNodesChanged(const QList<ModelNode> &selectedNodeList, const QList<ModelNode> &lastSelectedNodeList); void selectedNodesChanged(const QList<ModelNode> &selectedNodeList, const QList<ModelNode> &lastSelectedNodeList);

View File

@@ -203,10 +203,18 @@ void AbstractView::fileUrlChanged(const QUrl &/*oldUrl*/, const QUrl &/*newUrl*/
} }
/*! /*!
\fn AbstractView::importsChanged() \fn AbstractView::importAdded(const Import &import)
\brief Called when the imports for the model change. \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*/)
{ {
} }

View File

@@ -117,26 +117,13 @@ Model *ModelPrivate::create(QString type, int major, int minor)
return model; 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) void ModelPrivate::addImport(const Import &import)
{ {
if (m_imports.contains(import)) if (m_imports.contains(import))
return; return;
m_imports.insert(import); m_imports.insert(import);
notifyImportsChanged(); notifyImportAdded(import);
} }
void ModelPrivate::removeImport(const Import &import) void ModelPrivate::removeImport(const Import &import)
@@ -144,13 +131,19 @@ void ModelPrivate::removeImport(const Import &import)
if (!m_imports.remove(import)) if (!m_imports.remove(import))
return; return;
notifyImportsChanged(); notifyImportRemoved(import);
} }
void ModelPrivate::notifyImportsChanged() const void ModelPrivate::notifyImportAdded(const Import &import) const
{ {
foreach (const QWeakPointer<AbstractView> &view, m_viewList) foreach (const QWeakPointer<AbstractView> &view, m_viewList)
view->importsChanged(); view->importAdded(import);
}
void ModelPrivate::notifyImportRemoved(const Import &import) const
{
foreach (const QWeakPointer<AbstractView> &view, m_viewList)
view->importRemoved(import);
} }
QUrl ModelPrivate::fileUrl() const QUrl ModelPrivate::fileUrl() const

View File

@@ -155,10 +155,10 @@ public:
// Imports: // Imports:
QSet<Import> imports() const { return m_imports; } QSet<Import> imports() const { return m_imports; }
void setImports(const QSet<Import> &imports);
void addImport(const Import &import); void addImport(const Import &import);
void removeImport(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 //node state property manipulation

View File

@@ -261,6 +261,30 @@ void RewriterView::nodeReparented(const ModelNode &node, const NodeAbstractPrope
applyChanges(); 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*/) void RewriterView::fileUrlChanged(const QUrl &/*oldUrl*/, const QUrl &/*newUrl*/)
{ {
} }