diff options
author | Ulf Hermann <ulf.hermann@theqtcompany.com> | 2016-01-22 11:58:37 +0100 |
---|---|---|
committer | Ulf Hermann <ulf.hermann@theqtcompany.com> | 2016-02-16 12:53:20 +0000 |
commit | 8643877c337e3ab4f3ec57570ba5441c1fa7c619 (patch) | |
tree | fdaf55c301271c712638093b0c7b56f68931564e /src/plugins/projectexplorer/extracompiler.cpp | |
parent | 2b48a4fa27c1d6a16d105656a7f8b2ec8cb50933 (diff) |
ProjectExplorer: Allow extra compilers to post compile issues
If we have a text editor for the source document the errors will be
highlighted in the editor then.
Change-Id: I02ed24783e7079c3d2cb308d8111b399cd77adb1
Reviewed-by: Tobias Hunger <tobias.hunger@theqtcompany.com>
Diffstat (limited to 'src/plugins/projectexplorer/extracompiler.cpp')
-rw-r--r-- | src/plugins/projectexplorer/extracompiler.cpp | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/src/plugins/projectexplorer/extracompiler.cpp b/src/plugins/projectexplorer/extracompiler.cpp index 0d34aece7e..fee682c2e7 100644 --- a/src/plugins/projectexplorer/extracompiler.cpp +++ b/src/plugins/projectexplorer/extracompiler.cpp @@ -30,12 +30,17 @@ #include "buildconfiguration.h" #include "kitinformation.h" +#include <texteditor/texteditor.h> +#include <texteditor/texteditorsettings.h> +#include <texteditor/texteditorconstants.h> +#include <texteditor/fontsettings.h> #include <utils/qtcassert.h> #include <coreplugin/idocument.h> #include <coreplugin/editormanager/editormanager.h> #include <QDateTime> #include <QTimer> +#include <QTextBlock> namespace ProjectExplorer { @@ -48,6 +53,7 @@ public: Utils::FileName source; Utils::FileNameList targets; QVector<QString> contents; + QList<Task> issues; QDateTime compileTime; Core::IEditor *lastEditor = 0; QMetaObject::Connection activeBuildConfigConnection; @@ -55,6 +61,7 @@ public: bool dirty = false; QTimer timer; + void updateIssues(); }; ExtraCompiler::ExtraCompiler(const Project *project, const Utils::FileName &source, @@ -207,6 +214,7 @@ void ExtraCompiler::onEditorChanged(Core::IEditor *editor) if (editor && editor->document()->filePath() == d->source) { d->lastEditor = editor; + d->updateIssues(); // Handle new editor connect(d->lastEditor->document(), &Core::IDocument::contentsChanged, @@ -291,6 +299,41 @@ Utils::Environment ExtraCompiler::buildEnvironment() const return Utils::Environment::systemEnvironment(); } +void ExtraCompiler::setCompileIssues(const QList<Task> &issues) +{ + d->issues = issues; + d->updateIssues(); +} + +void ExtraCompilerPrivate::updateIssues() +{ + if (!lastEditor) + return; + + TextEditor::TextEditorWidget *widget = + qobject_cast<TextEditor::TextEditorWidget *>(lastEditor->widget()); + if (!widget) + return; + + QList<QTextEdit::ExtraSelection> selections; + const QTextDocument *document = widget->document(); + foreach (const Task &issue, issues) { + QTextEdit::ExtraSelection selection; + QTextCursor cursor(document->findBlockByNumber(issue.line - 1)); + cursor.movePosition(QTextCursor::StartOfLine); + cursor.movePosition(QTextCursor::EndOfLine, QTextCursor::KeepAnchor); + selection.cursor = cursor; + + const auto fontSettings = TextEditor::TextEditorSettings::instance()->fontSettings(); + selection.format = fontSettings.toTextCharFormat(issue.type == Task::Warning ? + TextEditor::C_WARNING : TextEditor::C_ERROR); + selection.format.setToolTip(issue.description); + selections.append(selection); + } + + widget->setExtraSelections(TextEditor::TextEditorWidget::CodeWarningsSelection, selections); +} + void ExtraCompiler::setContent(const Utils::FileName &file, const QString &contents) { for (int i = 0; i < d->targets.length(); ++i) { |