From b74fcb77029245d0b7e49fc2e5b2d525496d99f9 Mon Sep 17 00:00:00 2001 From: Roberto Raggi Date: Mon, 2 Mar 2009 16:30:25 +0100 Subject: [PATCH] Cache the UTF-8 encoded contents of the text editors, and some cleanup in updateEditorSelections(). --- src/plugins/cpptools/cppmodelmanager.cpp | 20 ++++++++++++------- src/plugins/cpptools/cppmodelmanager.h | 2 +- .../cpptools/cpptoolseditorsupport.cpp | 10 ++++++---- src/plugins/cpptools/cpptoolseditorsupport.h | 4 ++-- 4 files changed, 22 insertions(+), 14 deletions(-) diff --git a/src/plugins/cpptools/cppmodelmanager.cpp b/src/plugins/cpptools/cppmodelmanager.cpp index c8c8b867145..1283699787e 100644 --- a/src/plugins/cpptools/cppmodelmanager.cpp +++ b/src/plugins/cpptools/cppmodelmanager.cpp @@ -662,7 +662,7 @@ QMap CppModelManager::buildWorkingCopyList() TextEditor::ITextEditor *textEditor = it.key(); CppEditorSupport *editorSupport = it.value(); QString fileName = textEditor->file()->fileName(); - workingCopy[fileName] = editorSupport->contents().toUtf8(); + workingCopy[fileName] = editorSupport->contents(); } // add the project configuration file @@ -846,12 +846,12 @@ void CppModelManager::onDocumentUpdated(Document::Ptr doc) QList todo; foreach (const Editor &e, todo) { - if (e.widget != ed) + if (e.textEditor != textEditor) todo.append(e); } Editor e; - e.widget = ed; + e.textEditor = textEditor; e.selections = selections; e.ifdefedOutBlocks = blockRanges; todo.append(e); @@ -870,16 +870,22 @@ void CppModelManager::postEditorUpdate() void CppModelManager::updateEditorSelections() { foreach (const Editor &ed, m_todo) { - if (! ed.widget) + if (! ed.textEditor) continue; - ed.widget->setExtraSelections(TextEditor::BaseTextEditor::CodeWarningsSelection, - ed.selections); + TextEditor::ITextEditor *textEditor = ed.textEditor; + TextEditor::BaseTextEditor *editor = qobject_cast(textEditor->widget()); + if (! editor) + continue; - ed.widget->setIfdefedOutBlocks(ed.ifdefedOutBlocks); + editor->setExtraSelections(TextEditor::BaseTextEditor::CodeWarningsSelection, + ed.selections); + + editor->setIfdefedOutBlocks(ed.ifdefedOutBlocks); } m_todo.clear(); + } void CppModelManager::onProjectAdded(ProjectExplorer::Project *) diff --git a/src/plugins/cpptools/cppmodelmanager.h b/src/plugins/cpptools/cppmodelmanager.h index 63b414c1c05..fc38f13b6d5 100644 --- a/src/plugins/cpptools/cppmodelmanager.h +++ b/src/plugins/cpptools/cppmodelmanager.h @@ -167,7 +167,7 @@ private: mutable QMutex mutex; struct Editor { - QPointer widget; + QPointer textEditor; QList selections; QList ifdefedOutBlocks; }; diff --git a/src/plugins/cpptools/cpptoolseditorsupport.cpp b/src/plugins/cpptools/cpptoolseditorsupport.cpp index 5eba9158e72..63c926dbfaa 100644 --- a/src/plugins/cpptools/cpptoolseditorsupport.cpp +++ b/src/plugins/cpptools/cpptoolseditorsupport.cpp @@ -66,12 +66,12 @@ void CppEditorSupport::setTextEditor(TextEditor::ITextEditor *textEditor) updateDocument(); } -QString CppEditorSupport::contents() +QByteArray CppEditorSupport::contents() { if (! _textEditor) - return QString(); + return QByteArray(); else if (! _cachedContents.isEmpty()) - _cachedContents = _textEditor->contents(); + _cachedContents = _textEditor->contents().toUtf8(); return _cachedContents; } @@ -96,13 +96,15 @@ void CppEditorSupport::updateDocument() void CppEditorSupport::updateDocumentNow() { + qDebug() << "*** update document now"; + if (_documentParser.isRunning()) { _updateDocumentTimer->start(_updateDocumentInterval); } else { _updateDocumentTimer->stop(); QStringList sourceFiles(_textEditor->file()->fileName()); - _cachedContents = _textEditor->contents(); + _cachedContents = _textEditor->contents().toUtf8(); _documentParser = _modelManager->refreshSourceFiles(sourceFiles); } } diff --git a/src/plugins/cpptools/cpptoolseditorsupport.h b/src/plugins/cpptools/cpptoolseditorsupport.h index ef91da43e0e..4df23c7b256 100644 --- a/src/plugins/cpptools/cpptoolseditorsupport.h +++ b/src/plugins/cpptools/cpptoolseditorsupport.h @@ -61,7 +61,7 @@ public: int updateDocumentInterval() const; void setUpdateDocumentInterval(int updateDocumentInterval); - QString contents(); + QByteArray contents(); // UTF-8 encoded Q_SIGNALS: void contentsChanged(); @@ -78,7 +78,7 @@ private: QTimer *_updateDocumentTimer; int _updateDocumentInterval; QFuture _documentParser; - QString _cachedContents; + QByteArray _cachedContents; }; } // namespace Internal