From b9c7ca0096ddabffc093f6b662e4957d6388612e Mon Sep 17 00:00:00 2001 From: hjk Date: Fri, 28 May 2021 12:04:56 +0200 Subject: [PATCH] Utils: Use Utils::Link instead of TaskView::Location Same layout, effectively the same purpose Change-Id: I742d85ed06c07009ebb9696734f00894275859a3 Reviewed-by: Christian Kandeler --- src/libs/utils/outputformatter.cpp | 22 +++++++-------- src/libs/utils/outputformatter.h | 5 ++-- src/plugins/coreplugin/outputwindow.cpp | 5 ++-- src/plugins/projectexplorer/taskwindow.cpp | 31 +++++++++------------- 4 files changed, 27 insertions(+), 36 deletions(-) diff --git a/src/libs/utils/outputformatter.cpp b/src/libs/utils/outputformatter.cpp index 050db4bbab7..f0012314c2b 100644 --- a/src/libs/utils/outputformatter.cpp +++ b/src/libs/utils/outputformatter.cpp @@ -28,6 +28,7 @@ #include "algorithm.h" #include "ansiescapecodehandler.h" #include "fileinprojectfinder.h" +#include "link.h" #include "qtcassert.h" #include "qtcprocess.h" #include "theme/theme.h" @@ -72,15 +73,14 @@ bool OutputLineParser::isLinkTarget(const QString &target) return target.startsWith(*linkPrefix()); } -void OutputLineParser::parseLinkTarget(const QString &target, FilePath &filePath, int &line, - int &column) +Link OutputLineParser::parseLinkTarget(const QString &target) { const QStringList parts = target.mid(linkPrefix()->length()).split(*linkSep()); if (parts.isEmpty()) - return; - filePath = FilePath::fromString(parts.first()); - line = parts.length() > 1 ? parts.at(1).toInt() : 0; - column = parts.length() > 2 ? parts.at(2).toInt() : 0; + return {}; + return Link(FilePath::fromString(parts.first()), + parts.length() > 1 ? parts.at(1).toInt() : 0, + parts.length() > 2 ? parts.at(2).toInt() : 0); } // The redirection mechanism is needed for broken build tools (e.g. xcodebuild) that get invoked @@ -528,12 +528,10 @@ bool OutputFormatter::handleFileLink(const QString &href) { if (!OutputLineParser::isLinkTarget(href)) return false; - FilePath filePath; - int line; - int column; - OutputLineParser::parseLinkTarget(href, filePath, line, column); - QTC_ASSERT(!filePath.isEmpty(), return false); - emit openInEditorRequested(filePath, line, column); + + Link link = OutputLineParser::parseLinkTarget(href); + QTC_ASSERT(!link.targetFilePath.isEmpty(), return false); + emit openInEditorRequested(link); return true; } diff --git a/src/libs/utils/outputformatter.h b/src/libs/utils/outputformatter.h index 10ec2049f4c..76fbc273fab 100644 --- a/src/libs/utils/outputformatter.h +++ b/src/libs/utils/outputformatter.h @@ -44,6 +44,7 @@ QT_END_NAMESPACE namespace Utils { class FileInProjectFinder; class FormattedText; +class Link; class QTCREATOR_UTILS_EXPORT OutputLineParser : public QObject { @@ -72,7 +73,7 @@ public: }; static bool isLinkTarget(const QString &target); - static void parseLinkTarget(const QString &target, FilePath &filePath, int &line, int &column); + static Utils::Link parseLinkTarget(const QString &target); void addSearchDir(const Utils::FilePath &dir); void dropSearchDir(const Utils::FilePath &dir); @@ -172,7 +173,7 @@ private: static QTextCharFormat linkFormat(const QTextCharFormat &inputFormat, const QString &href); signals: - void openInEditorRequested(const FilePath &filePath, int line, int column); + void openInEditorRequested(const Utils::Link &link); private: void doAppendMessage(const QString &text, OutputFormat format); diff --git a/src/plugins/coreplugin/outputwindow.cpp b/src/plugins/coreplugin/outputwindow.cpp index 1e69c475f73..e04c3cd71d6 100644 --- a/src/plugins/coreplugin/outputwindow.cpp +++ b/src/plugins/coreplugin/outputwindow.cpp @@ -148,9 +148,8 @@ OutputWindow::OutputWindow(Context context, const QString &settingsKey, QWidget Core::ICore::settings()->setValueWithDefault(d->settingsKey, fontZoom(), 0.f); }); - connect(outputFormatter(), &OutputFormatter::openInEditorRequested, this, - [](const Utils::FilePath &fp, int line, int column) { - EditorManager::openEditorAt(fp.toString(), line, column); + connect(outputFormatter(), &OutputFormatter::openInEditorRequested, this, [](const Link &link) { + EditorManager::openEditorAt(link); }); connect(verticalScrollBar(), &QAbstractSlider::actionTriggered, diff --git a/src/plugins/projectexplorer/taskwindow.cpp b/src/plugins/projectexplorer/taskwindow.cpp index 26b147c0d37..eabe4c2e181 100644 --- a/src/plugins/projectexplorer/taskwindow.cpp +++ b/src/plugins/projectexplorer/taskwindow.cpp @@ -52,6 +52,8 @@ #include #include +using namespace Utils; + namespace { const int ELLIPSIS_GRADIENT_WIDTH = 16; const char SESSION_FILTER_CATEGORIES[] = "TaskWindow.Categories"; @@ -86,13 +88,7 @@ private: void mouseReleaseEvent(QMouseEvent *e) override; void mouseMoveEvent(QMouseEvent *e) override; - class Location { - public: - Utils::FilePath file; - int line; - int column; - }; - Location locationForPos(const QPoint &pos); + Utils::Link locationForPos(const QPoint &pos); bool m_linksActive = true; Qt::MouseButton m_mouseButtonPressed = Qt::NoButton; @@ -229,9 +225,9 @@ void TaskView::mousePressEvent(QMouseEvent *e) void TaskView::mouseReleaseEvent(QMouseEvent *e) { if (m_linksActive && m_mouseButtonPressed == Qt::LeftButton) { - const Location loc = locationForPos(e->pos()); - if (!loc.file.isEmpty()) { - Core::EditorManager::openEditorAt(loc.file.toString(), loc.line, loc.column, {}, + const Link loc = locationForPos(e->pos()); + if (!loc.targetFilePath.isEmpty()) { + Core::EditorManager::openEditorAt(loc, {}, Core::EditorManager::SwitchSplitIfAlreadyVisible); } } @@ -248,23 +244,20 @@ void TaskView::mouseMoveEvent(QMouseEvent *e) if (m_mouseButtonPressed != Qt::NoButton) m_linksActive = false; - viewport()->setCursor(m_linksActive && !locationForPos(e->pos()).file.isEmpty() + viewport()->setCursor(m_linksActive && !locationForPos(e->pos()).targetFilePath.isEmpty() ? Qt::PointingHandCursor : Qt::ArrowCursor); ListView::mouseMoveEvent(e); } -TaskView::Location TaskView::locationForPos(const QPoint &pos) +Link TaskView::locationForPos(const QPoint &pos) { const auto delegate = qobject_cast(itemDelegate(indexAt(pos))); if (!delegate) return {}; - Utils::OutputFormatter formatter; - Location loc; - connect(&formatter, &Utils::OutputFormatter::openInEditorRequested, this, - [&loc](const Utils::FilePath &fp, int line, int column) { - loc.file = fp; - loc.line = line; - loc.column = column; + OutputFormatter formatter; + Link loc; + connect(&formatter, &OutputFormatter::openInEditorRequested, this, [&loc](const Link &link) { + loc = link; }); const QString href = delegate->hrefForPos(pos);