Commit b74fcb77 authored by Roberto Raggi's avatar Roberto Raggi

Cache the UTF-8 encoded contents of the text editors, and some cleanup in updateEditorSelections().

parent a8cfda0d
......@@ -662,7 +662,7 @@ QMap<QString, QByteArray> 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<Editor> 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::BaseTextEditor *>(textEditor->widget());
if (! editor)
continue;
editor->setExtraSelections(TextEditor::BaseTextEditor::CodeWarningsSelection,
ed.selections);
ed.widget->setIfdefedOutBlocks(ed.ifdefedOutBlocks);
editor->setIfdefedOutBlocks(ed.ifdefedOutBlocks);
}
m_todo.clear();
}
void CppModelManager::onProjectAdded(ProjectExplorer::Project *)
......
......@@ -167,7 +167,7 @@ private:
mutable QMutex mutex;
struct Editor {
QPointer<TextEditor::BaseTextEditor> widget;
QPointer<TextEditor::ITextEditor> textEditor;
QList<QTextEdit::ExtraSelection> selections;
QList<TextEditor::BaseTextEditor::BlockRange> ifdefedOutBlocks;
};
......
......@@ -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);
}
}
......
......@@ -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<void> _documentParser;
QString _cachedContents;
QByteArray _cachedContents;
};
} // namespace Internal
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment