From 364beabcf19e963d79b7e37513304367cb0ac6b6 Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Mon, 5 Aug 2024 12:01:13 +0200 Subject: [PATCH] DiffEditorController: Add an option to set a syntax highlighter MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I66fc252e7ccc168fd32ed7100cc9af7f940dc3e0 Reviewed-by: André Hartmann --- src/plugins/diffeditor/diffeditor.cpp | 10 ++++++++++ src/plugins/diffeditor/diffeditorcontroller.cpp | 6 ++++++ src/plugins/diffeditor/diffeditorcontroller.h | 3 +++ src/plugins/diffeditor/diffeditordocument.cpp | 7 +++++++ src/plugins/diffeditor/diffeditordocument.h | 9 +++++++++ 5 files changed, 35 insertions(+) diff --git a/src/plugins/diffeditor/diffeditor.cpp b/src/plugins/diffeditor/diffeditor.cpp index ce950889612..a80e0cfb44a 100644 --- a/src/plugins/diffeditor/diffeditor.cpp +++ b/src/plugins/diffeditor/diffeditor.cpp @@ -146,6 +146,7 @@ private: void documentHasChanged(); void toggleDescription(); void updateDescription(); + void updateDescriptionHighlighter(); void contextLineCountHasChanged(int lines); void ignoreWhitespaceHasChanged(); void prepareForReload(); @@ -298,6 +299,8 @@ void DiffEditor::setDocument(std::shared_ptr doc) this, &DiffEditor::documentHasChanged); connect(m_document.get(), &DiffEditorDocument::descriptionChanged, this, &DiffEditor::updateDescription); + connect(m_document.get(), &DiffEditorDocument::descriptionHighlighterChanged, + this, &DiffEditor::updateDescriptionHighlighter); connect(m_document.get(), &DiffEditorDocument::aboutToReload, this, &DiffEditor::prepareForReload); connect(m_document.get(), &DiffEditorDocument::reloadFinished, @@ -451,6 +454,13 @@ void DiffEditor::updateDescription() m_toggleDescriptionAction->setVisible(!description.isEmpty()); } +void DiffEditor::updateDescriptionHighlighter() +{ + const auto creator = m_document->descriptionSyntaxHighlighterCreator(); + if (creator) + m_descriptionWidget->textDocument()->resetSyntaxHighlighter(creator); +} + void DiffEditor::contextLineCountHasChanged(int lines) { QTC_ASSERT(!m_document->isContextLineCountForced(), return); diff --git a/src/plugins/diffeditor/diffeditorcontroller.cpp b/src/plugins/diffeditor/diffeditorcontroller.cpp index ccd1ca165b1..c172c9f0971 100644 --- a/src/plugins/diffeditor/diffeditorcontroller.cpp +++ b/src/plugins/diffeditor/diffeditorcontroller.cpp @@ -87,6 +87,12 @@ void DiffEditorController::setDescription(const QString &description) m_document->setDescription(description); } +void DiffEditorController::setDescriptionSyntaxHighlighterCreator( + const std::function &creator) +{ + m_document->setDescriptionSyntaxHighlighterCreator(creator); +} + /** * @brief Force the lines of context to the given number. * diff --git a/src/plugins/diffeditor/diffeditorcontroller.h b/src/plugins/diffeditor/diffeditorcontroller.h index 73722266a39..e4fc4e4c31b 100644 --- a/src/plugins/diffeditor/diffeditorcontroller.h +++ b/src/plugins/diffeditor/diffeditorcontroller.h @@ -16,6 +16,7 @@ class QMenu; QT_END_NAMESPACE namespace Core { class IDocument; } +namespace TextEditor { class SyntaxHighlighter; } namespace Utils { class FilePath; } namespace DiffEditor { @@ -63,6 +64,8 @@ protected: // Optional: void setDisplayName(const QString &name) { m_displayName = name; } void setDescription(const QString &description); + void setDescriptionSyntaxHighlighterCreator( + const std::function &creator); void setStartupFile(const QString &startupFile); void forceContextLineCount(int lines); diff --git a/src/plugins/diffeditor/diffeditordocument.cpp b/src/plugins/diffeditor/diffeditordocument.cpp index 9b456a152df..d5b010c3d8a 100644 --- a/src/plugins/diffeditor/diffeditordocument.cpp +++ b/src/plugins/diffeditor/diffeditordocument.cpp @@ -179,6 +179,13 @@ void DiffEditorDocument::setDescription(const QString &description) emit descriptionChanged(); } +void DiffEditorDocument::setDescriptionSyntaxHighlighterCreator( + const std::function &creator) +{ + m_descriptionHighlighter = creator; + emit descriptionHighlighterChanged(); +} + QString DiffEditorDocument::description() const { return m_description; diff --git a/src/plugins/diffeditor/diffeditordocument.h b/src/plugins/diffeditor/diffeditordocument.h index 287e53de592..8d38c4e2ea8 100644 --- a/src/plugins/diffeditor/diffeditordocument.h +++ b/src/plugins/diffeditor/diffeditordocument.h @@ -8,6 +8,8 @@ #include #include +namespace TextEditor { class SyntaxHighlighter; } + namespace DiffEditor { class DiffEditorController; @@ -45,6 +47,11 @@ public: void setDescription(const QString &description); QString description() const; + void setDescriptionSyntaxHighlighterCreator( + const std::function &creator); + std::function descriptionSyntaxHighlighterCreator() const { + return m_descriptionHighlighter; + } void setContextLineCount(int lines); int contextLineCount() const; @@ -71,6 +78,7 @@ signals: void temporaryStateChanged(); void documentChanged(); void descriptionChanged(); + void descriptionHighlighterChanged(); protected: bool saveImpl(QString *errorString, const Utils::FilePath &filePath, bool autoSave) override; @@ -85,6 +93,7 @@ private: Utils::FilePath m_workingDirectory; QString m_startupFile; QString m_description; + std::function m_descriptionHighlighter = {}; int m_contextLineCount = 3; bool m_isContextLineCountForced = false; bool m_ignoreWhitespace = false;