forked from qt-creator/qt-creator
		
	Cache the UTF-8 encoded contents of the text editors, and some cleanup in updateEditorSelections().
This commit is contained in:
		@@ -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;
 | 
			
		||||
 | 
			
		||||
        ed.widget->setIfdefedOutBlocks(ed.ifdefedOutBlocks);
 | 
			
		||||
        editor->setExtraSelections(TextEditor::BaseTextEditor::CodeWarningsSelection,
 | 
			
		||||
                                   ed.selections);
 | 
			
		||||
 | 
			
		||||
        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
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user