forked from qt-creator/qt-creator
C++: handle file type changes for choosing highlighters.
If the file type (mime type) of an editor changes, it might need a different kind of highlighter/highlighting-support. Change-Id: I470dbf69e71856c9593d201416c4d4bd2958aaec Reviewed-by: Nikolai Kosjar <nikolai.kosjar@digia.com>
This commit is contained in:
committed by
Nikolai Kosjar
parent
dc4822d123
commit
033ad8875b
@@ -1166,7 +1166,7 @@ void CPPEditorWidget::finishHighlightSymbolUsages()
|
|||||||
if (editorRevision() != m_highlightRevision)
|
if (editorRevision() != m_highlightRevision)
|
||||||
return; // outdated
|
return; // outdated
|
||||||
|
|
||||||
else if (m_highlighter.isCanceled())
|
if (m_highlighter.isCanceled())
|
||||||
return; // aborted
|
return; // aborted
|
||||||
|
|
||||||
TextEditor::SyntaxHighlighter *highlighter = baseTextDocument()->syntaxHighlighter();
|
TextEditor::SyntaxHighlighter *highlighter = baseTextDocument()->syntaxHighlighter();
|
||||||
@@ -1174,11 +1174,6 @@ void CPPEditorWidget::finishHighlightSymbolUsages()
|
|||||||
|
|
||||||
TextEditor::SemanticHighlighter::clearExtraAdditionalFormatsUntilEnd(
|
TextEditor::SemanticHighlighter::clearExtraAdditionalFormatsUntilEnd(
|
||||||
highlighter, m_highlighter);
|
highlighter, m_highlighter);
|
||||||
|
|
||||||
if (m_modelManager)
|
|
||||||
m_modelManager->setExtraDiagnostics(m_lastSemanticInfo.doc->fileName(),
|
|
||||||
QLatin1String("CppEditor.SemanticsDiagnostics"),
|
|
||||||
m_lastSemanticInfo.doc->diagnosticMessages());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CPPEditorWidget::switchDeclarationDefinition(bool inNextSplit)
|
void CPPEditorWidget::switchDeclarationDefinition(bool inNextSplit)
|
||||||
|
|||||||
@@ -115,16 +115,10 @@ CppEditorSupport::CppEditorSupport(CppModelManager *modelManager, BaseTextEditor
|
|||||||
, m_cachedContentsEditorRevision(-1)
|
, m_cachedContentsEditorRevision(-1)
|
||||||
, m_initialized(false)
|
, m_initialized(false)
|
||||||
, m_lastHighlightRevision(0)
|
, m_lastHighlightRevision(0)
|
||||||
, m_highlightingSupport(modelManager->highlightingSupport(textEditor))
|
|
||||||
{
|
{
|
||||||
connect(m_modelManager, SIGNAL(documentUpdated(CPlusPlus::Document::Ptr)),
|
connect(m_modelManager, SIGNAL(documentUpdated(CPlusPlus::Document::Ptr)),
|
||||||
this, SLOT(onDocumentUpdated(CPlusPlus::Document::Ptr)));
|
this, SLOT(onDocumentUpdated(CPlusPlus::Document::Ptr)));
|
||||||
|
|
||||||
if (m_highlightingSupport && m_highlightingSupport->requiresSemanticInfo()) {
|
|
||||||
connect(this, SIGNAL(semanticInfoUpdated(CppTools::SemanticInfo)),
|
|
||||||
this, SLOT(startHighlighting()));
|
|
||||||
}
|
|
||||||
|
|
||||||
m_updateDocumentTimer = new QTimer(this);
|
m_updateDocumentTimer = new QTimer(this);
|
||||||
m_updateDocumentTimer->setSingleShot(true);
|
m_updateDocumentTimer->setSingleShot(true);
|
||||||
m_updateDocumentTimer->setInterval(m_updateDocumentInterval);
|
m_updateDocumentTimer->setInterval(m_updateDocumentInterval);
|
||||||
@@ -139,7 +133,8 @@ CppEditorSupport::CppEditorSupport(CppModelManager *modelManager, BaseTextEditor
|
|||||||
connect(m_textEditor, SIGNAL(contentsChanged()), this, SLOT(updateDocument()));
|
connect(m_textEditor, SIGNAL(contentsChanged()), this, SLOT(updateDocument()));
|
||||||
connect(this, SIGNAL(diagnosticsChanged()), this, SLOT(onDiagnosticsChanged()));
|
connect(this, SIGNAL(diagnosticsChanged()), this, SLOT(onDiagnosticsChanged()));
|
||||||
|
|
||||||
updateDocument();
|
connect(m_textEditor->document(), SIGNAL(mimeTypeChanged()),
|
||||||
|
this, SLOT(onMimeTypeChanged()));
|
||||||
}
|
}
|
||||||
|
|
||||||
CppEditorSupport::~CppEditorSupport()
|
CppEditorSupport::~CppEditorSupport()
|
||||||
@@ -486,3 +481,19 @@ void CppEditorSupport::recalculateSemanticInfoDetached_helper(QFutureInterface<v
|
|||||||
TLDProc tldProc(future);
|
TLDProc tldProc(future);
|
||||||
recalculateSemanticInfoNow(source, true, &tldProc);
|
recalculateSemanticInfoNow(source, true, &tldProc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CppEditorSupport::onMimeTypeChanged()
|
||||||
|
{
|
||||||
|
m_highlighter.cancel();
|
||||||
|
m_highlighter.waitForFinished();
|
||||||
|
|
||||||
|
m_highlightingSupport.reset(m_modelManager->highlightingSupport(m_textEditor));
|
||||||
|
|
||||||
|
disconnect(this, SIGNAL(semanticInfoUpdated(CppTools::SemanticInfo)),
|
||||||
|
this, SLOT(startHighlighting()));
|
||||||
|
if (m_highlightingSupport && m_highlightingSupport->requiresSemanticInfo())
|
||||||
|
connect(this, SIGNAL(semanticInfoUpdated(CppTools::SemanticInfo)),
|
||||||
|
this, SLOT(startHighlighting()));
|
||||||
|
|
||||||
|
updateDocumentNow();
|
||||||
|
}
|
||||||
|
|||||||
@@ -119,6 +119,8 @@ signals:
|
|||||||
void highlighterStarted(QFuture<TextEditor::HighlightingResult> *, unsigned revision);
|
void highlighterStarted(QFuture<TextEditor::HighlightingResult> *, unsigned revision);
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
|
void onMimeTypeChanged();
|
||||||
|
|
||||||
void updateDocument();
|
void updateDocument();
|
||||||
void updateDocumentNow();
|
void updateDocumentNow();
|
||||||
|
|
||||||
|
|||||||
@@ -113,7 +113,10 @@ QString BaseTextDocument::mimeType() const
|
|||||||
|
|
||||||
void BaseTextDocument::setMimeType(const QString &mt)
|
void BaseTextDocument::setMimeType(const QString &mt)
|
||||||
{
|
{
|
||||||
d->m_mimeType = mt;
|
if (d->m_mimeType != mt) {
|
||||||
|
d->m_mimeType = mt;
|
||||||
|
emit mimeTypeChanged();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void BaseTextDocument::setTypingSettings(const TypingSettings &typingSettings)
|
void BaseTextDocument::setTypingSettings(const TypingSettings &typingSettings)
|
||||||
|
|||||||
@@ -105,6 +105,7 @@ public:
|
|||||||
|
|
||||||
signals:
|
signals:
|
||||||
void titleChanged(QString title);
|
void titleChanged(QString title);
|
||||||
|
void mimeTypeChanged();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void cleanWhitespace(QTextCursor &cursor, bool cleanIndentation, bool inEntireDocument);
|
void cleanWhitespace(QTextCursor &cursor, bool cleanIndentation, bool inEntireDocument);
|
||||||
|
|||||||
Reference in New Issue
Block a user