diff --git a/src/plugins/cppeditor/cppeditor.cpp b/src/plugins/cppeditor/cppeditor.cpp index cc4238013a0aad6f7bb4eb618b1d8158d55d2fb2..1fe876451be053f766f64d13270e507e504b8466 100644 --- a/src/plugins/cppeditor/cppeditor.cpp +++ b/src/plugins/cppeditor/cppeditor.cpp @@ -1417,6 +1417,11 @@ SemanticInfo CPPEditor::semanticInfo() const return m_lastSemanticInfo; } +CPlusPlus::OverviewModel *CPPEditor::overviewModel() const +{ + return m_overviewModel; +} + bool CPPEditor::isElectricCharacter(QChar ch) const { if (ch == QLatin1Char('{') || diff --git a/src/plugins/cppeditor/cppeditor.h b/src/plugins/cppeditor/cppeditor.h index 488bcfd9e275f61b429f230e03c415967844a375..76553ec5e4d27621a7e167d03c2e2487cece0d38 100644 --- a/src/plugins/cppeditor/cppeditor.h +++ b/src/plugins/cppeditor/cppeditor.h @@ -165,6 +165,7 @@ public: unsigned editorRevision() const; bool isOutdated() const; SemanticInfo semanticInfo() const; + CPlusPlus::OverviewModel *overviewModel() const; virtual void paste(); // reimplemented from BaseTextEditor virtual void cut(); // reimplemented from BaseTextEditor diff --git a/src/plugins/cppeditor/cppoutline.cpp b/src/plugins/cppeditor/cppoutline.cpp index b6ee497c51667ffca19a895df8b7b3d86df94792..a1be1e756d4cae0da9dd3663839f0bf307f80a56 100644 --- a/src/plugins/cppeditor/cppoutline.cpp +++ b/src/plugins/cppeditor/cppoutline.cpp @@ -6,8 +6,9 @@ #include <coreplugin/ifile.h> #include <cplusplus/OverviewModel.h> -#include <QtGui/QVBoxLayout> #include <QtCore/QDebug> +#include <QtGui/QVBoxLayout> +#include <QtCore/QTimer> using namespace CppEditor::Internal; @@ -49,7 +50,7 @@ CppOutlineWidget::CppOutlineWidget(CPPEditor *editor) : TextEditor::IOutlineWidget(), m_editor(editor), m_treeView(new CppOutlineTreeView(this)), - m_model(new CPlusPlus::OverviewModel(this)), + m_model(m_editor->overviewModel()), m_proxyModel(new CppOutlineFilterModel(this)), m_enableCursorSync(true), m_blockCursorSync(false) @@ -63,14 +64,8 @@ CppOutlineWidget::CppOutlineWidget(CPPEditor *editor) : m_proxyModel->setSourceModel(m_model); m_treeView->setModel(m_proxyModel); - CppTools::CppModelManagerInterface *modelManager = CppTools::CppModelManagerInterface::instance(); - - connect(modelManager, SIGNAL(documentUpdated(CPlusPlus::Document::Ptr)), - this, SLOT(updateOutline(CPlusPlus::Document::Ptr))); - - if (modelManager->snapshot().contains(editor->file()->fileName())) { - updateOutline(modelManager->snapshot().document(editor->file()->fileName())); - } + connect(m_model, SIGNAL(modelReset()), this, SLOT(modelUpdated())); + modelUpdated(); connect(m_editor, SIGNAL(cursorPositionChanged()), this, SLOT(updateSelectionInTree())); @@ -85,18 +80,10 @@ void CppOutlineWidget::setCursorSynchronization(bool syncWithCursor) updateSelectionInTree(); } -void CppOutlineWidget::updateOutline(CPlusPlus::Document::Ptr document) +void CppOutlineWidget::modelUpdated() { - m_document = document; - if (document && m_editor - && (document->fileName() == m_editor->file()->fileName()) - && (document->editorRevision() == m_editor->editorRevision())) { - if (debug) - qDebug() << "CppOutline - rebuilding model"; - m_model->rebuild(document); - m_treeView->expandAll(); - updateSelectionInTree(); - } + m_treeView->expandAll(); + updateSelectionInTree(); } void CppOutlineWidget::updateSelectionInTree() @@ -130,7 +117,8 @@ void CppOutlineWidget::updateSelectionInText(const QItemSelection &selection) if (symbol) { m_blockCursorSync = true; unsigned line, column; - m_document->translationUnit()->getPosition(symbol->startOffset(), &line, &column); + + m_model->document()->translationUnit()->getPosition(symbol->startOffset(), &line, &column); if (debug) qDebug() << "CppOutline - moving cursor to" << line << column - 1; @@ -161,9 +149,9 @@ QModelIndex CppOutlineWidget::indexForPosition(const QModelIndex &rootIndex, int bool CppOutlineWidget::positionInsideSymbol(unsigned cursorLine, unsigned cursorColumn, CPlusPlus::Symbol *symbol) const { - if (!m_document) + if (!m_model->document()) return false; - CPlusPlus::TranslationUnit *translationUnit = m_document->translationUnit(); + CPlusPlus::TranslationUnit *translationUnit = m_model->document()->translationUnit(); unsigned symbolStartLine = -1; unsigned symbolStartColumn = -1; diff --git a/src/plugins/cppeditor/cppoutline.h b/src/plugins/cppeditor/cppoutline.h index 96443811cc0d1e7e9488ae1b89ef659bd590b61a..4174026eae884b0a009995e5ef79b97863096c8b 100644 --- a/src/plugins/cppeditor/cppoutline.h +++ b/src/plugins/cppeditor/cppoutline.h @@ -38,7 +38,7 @@ public: virtual void setCursorSynchronization(bool syncWithCursor); private slots: - void updateOutline(CPlusPlus::Document::Ptr document); + void modelUpdated(); void updateSelectionInTree(); void updateSelectionInText(const QItemSelection &selection); @@ -52,7 +52,6 @@ private: CppOutlineTreeView *m_treeView; CPlusPlus::OverviewModel *m_model; CppOutlineFilterModel *m_proxyModel; - CPlusPlus::Document::Ptr m_document; bool m_enableCursorSync; bool m_blockCursorSync;