From 5c9916478f77b6daff4bcb422965a584c178e654 Mon Sep 17 00:00:00 2001
From: dt <qtc-committer@nokia.com>
Date: Tue, 12 May 2009 13:45:24 +0200
Subject: [PATCH] First step towards dynamic ui completion. Add hooks in
 cppmodelmanager

This adds a way for plugins to tell the cppmodel that for certain files,
the actual contents come from it, instead of reading from the disk.
(For texteditors the cppmodel does that automatically.)

Reviewed-By: Roberto Raggi <roberto.raggi@nokia.com>
---
 src/plugins/cpptools/cppmodelmanager.cpp      | 16 ++++++++++++++
 src/plugins/cpptools/cppmodelmanager.h        |  5 +++++
 .../cpptools/cppmodelmanagerinterface.h       | 21 +++++++++++++++++++
 3 files changed, 42 insertions(+)

diff --git a/src/plugins/cpptools/cppmodelmanager.cpp b/src/plugins/cpptools/cppmodelmanager.cpp
index 2aec0daa0cc..0967cfdd092 100644
--- a/src/plugins/cpptools/cppmodelmanager.cpp
+++ b/src/plugins/cpptools/cppmodelmanager.cpp
@@ -648,6 +648,16 @@ QByteArray CppModelManager::internalDefinedMacros() const
     return macros;
 }
 
+void CppModelManager::addEditorSupport(AbstractEditorSupport *editorSupport)
+{
+    m_addtionalEditorSupport.insert(editorSupport);
+}
+
+void CppModelManager::removeEditorSupport(AbstractEditorSupport *editorSupport)
+{
+    m_addtionalEditorSupport.remove(editorSupport);
+}
+
 QMap<QString, QByteArray> CppModelManager::buildWorkingCopyList()
 {
     QMap<QString, QByteArray> workingCopy;
@@ -660,6 +670,12 @@ QMap<QString, QByteArray> CppModelManager::buildWorkingCopyList()
         workingCopy[fileName] = editorSupport->contents();
     }
 
+    QSetIterator<AbstractEditorSupport *> jt(m_addtionalEditorSupport);
+    while (jt.hasNext()) {
+        AbstractEditorSupport *es =  jt.next();
+        workingCopy[es->fileName()] = es->contents();
+    }
+
     // add the project configuration file
     QByteArray conf(pp_configuration);
     conf += definedMacros();
diff --git a/src/plugins/cpptools/cppmodelmanager.h b/src/plugins/cpptools/cppmodelmanager.h
index 9f2c2f221e2..30569890e2e 100644
--- a/src/plugins/cpptools/cppmodelmanager.h
+++ b/src/plugins/cpptools/cppmodelmanager.h
@@ -91,6 +91,9 @@ public:
     void stopEditorSelectionsUpdate()
     { m_updateEditorSelectionsTimer->stop(); }
 
+    virtual void addEditorSupport(AbstractEditorSupport *editorSupport);
+    virtual void removeEditorSupport(AbstractEditorSupport *editorSupport);
+
 Q_SIGNALS:
     void projectPathChanged(const QString &projectPath);
 
@@ -161,6 +164,8 @@ private:
     // editor integration
     QMap<TextEditor::ITextEditor *, CppEditorSupport *> m_editorSupport;
 
+    QSet<AbstractEditorSupport *> m_addtionalEditorSupport;
+
     // project integration
     QMap<ProjectExplorer::Project *, ProjectInfo> m_projects;
 
diff --git a/src/plugins/cpptools/cppmodelmanagerinterface.h b/src/plugins/cpptools/cppmodelmanagerinterface.h
index b3da1aa03c7..bb926905d09 100644
--- a/src/plugins/cpptools/cppmodelmanagerinterface.h
+++ b/src/plugins/cpptools/cppmodelmanagerinterface.h
@@ -41,6 +41,8 @@ namespace ProjectExplorer {
 }
 
 namespace CppTools {
+    
+class AbstractEditorSupport;
 
 class CPPTOOLS_EXPORT CppModelManagerInterface : public QObject
 {
@@ -87,6 +89,25 @@ public:
     virtual QList<ProjectInfo> projectInfos() const = 0;
     virtual ProjectInfo projectInfo(ProjectExplorer::Project *project) const = 0;
     virtual void updateProjectInfo(const ProjectInfo &pinfo) = 0;
+
+    virtual void addEditorSupport(AbstractEditorSupport *editorSupport) = 0;
+    virtual void removeEditorSupport(AbstractEditorSupport *editorSupport) = 0;
+};
+
+class CPPTOOLS_EXPORT AbstractEditorSupport
+{
+public:
+    AbstractEditorSupport(CppModelManagerInterface *modelmanager)
+        : m_modelmanager(modelmanager)  {}
+    virtual ~AbstractEditorSupport() {}
+    virtual QByteArray contents() const = 0;
+    virtual QString fileName() const = 0;
+
+    void updateDocument()
+    { m_modelmanager->updateSourceFiles(QStringList() << fileName()); }
+
+private:
+    CppModelManagerInterface *m_modelmanager;
 };
 
 } // namespace CppTools
-- 
GitLab