aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/projectexplorer/extracompiler.cpp
diff options
context:
space:
mode:
authorUlf Hermann <ulf.hermann@theqtcompany.com>2016-01-22 11:58:37 +0100
committerUlf Hermann <ulf.hermann@theqtcompany.com>2016-02-16 12:53:20 +0000
commit8643877c337e3ab4f3ec57570ba5441c1fa7c619 (patch)
treefdaf55c301271c712638093b0c7b56f68931564e /src/plugins/projectexplorer/extracompiler.cpp
parent2b48a4fa27c1d6a16d105656a7f8b2ec8cb50933 (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.cpp43
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) {