diff options
author | Orgad Shaneh <orgad.shaneh@audiocodes.com> | 2020-02-25 21:13:39 +0200 |
---|---|---|
committer | Orgad Shaneh <orgads@gmail.com> | 2020-02-28 09:53:51 +0000 |
commit | ba87fb20831dc00ae18484b0994fa553cfdc2194 (patch) | |
tree | 90bd7606137f7bcac96f2a6c4be6a08258eb8c5a /src/plugins/vcsbase | |
parent | ab3e2ac0fcb33d6b145cff08463437100171330a (diff) |
Git: Add actions for changes in output window context menu
Change-Id: I5aa46f87b82670286ac225d71a3a045133976e86
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
Reviewed-by: André Hartmann <aha_1980@gmx.de>
Diffstat (limited to 'src/plugins/vcsbase')
-rw-r--r-- | src/plugins/vcsbase/vcsoutputformatter.cpp | 18 | ||||
-rw-r--r-- | src/plugins/vcsbase/vcsoutputformatter.h | 3 | ||||
-rw-r--r-- | src/plugins/vcsbase/vcsoutputwindow.cpp | 18 |
3 files changed, 35 insertions, 4 deletions
diff --git a/src/plugins/vcsbase/vcsoutputformatter.cpp b/src/plugins/vcsbase/vcsoutputformatter.cpp index 4b09ed06eb..9e454da544 100644 --- a/src/plugins/vcsbase/vcsoutputformatter.cpp +++ b/src/plugins/vcsbase/vcsoutputformatter.cpp @@ -23,7 +23,11 @@ ****************************************************************************/ #include "vcsoutputformatter.h" +#include <coreplugin/iversioncontrol.h> +#include <coreplugin/vcsmanager.h> + #include <QDesktopServices> +#include <QMenu> #include <QPlainTextEdit> #include <QTextCursor> #include <QUrl> @@ -68,4 +72,18 @@ void VcsOutputFormatter::handleLink(const QString &href) emit referenceClicked(href); } +void VcsOutputFormatter::fillLinkContextMenu( + QMenu *menu, const QString &workingDirectory, const QString &href) +{ + if (href.isEmpty() || href.startsWith("http://") || href.startsWith("https://")) { + QAction *action = menu->addAction( + tr("&Open \"%1\"").arg(href), + [href] { QDesktopServices::openUrl(QUrl(href)); }); + menu->setDefaultAction(action); + return; + } + if (Core::IVersionControl *vcs = Core::VcsManager::findVersionControlForDirectory(workingDirectory)) + vcs->fillLinkContextMenu(menu, workingDirectory, href); +} + } diff --git a/src/plugins/vcsbase/vcsoutputformatter.h b/src/plugins/vcsbase/vcsoutputformatter.h index d1d508b895..b9fd8c6c7e 100644 --- a/src/plugins/vcsbase/vcsoutputformatter.h +++ b/src/plugins/vcsbase/vcsoutputformatter.h @@ -27,6 +27,8 @@ #include <QRegularExpression> +QT_FORWARD_DECLARE_CLASS(QMenu) + namespace VcsBase { class VcsOutputFormatter : public Utils::OutputFormatter @@ -37,6 +39,7 @@ public: ~VcsOutputFormatter() override = default; void appendMessage(const QString &text, Utils::OutputFormat format) override; void handleLink(const QString &href) override; + void fillLinkContextMenu(QMenu *menu, const QString &workingDirectory, const QString &href); signals: void referenceClicked(const QString &reference); diff --git a/src/plugins/vcsbase/vcsoutputwindow.cpp b/src/plugins/vcsbase/vcsoutputwindow.cpp index e468adcc30..1cff2dc4b7 100644 --- a/src/plugins/vcsbase/vcsoutputwindow.cpp +++ b/src/plugins/vcsbase/vcsoutputwindow.cpp @@ -175,10 +175,17 @@ QString OutputWindowPlainTextEdit::identifierUnderCursor(const QPoint &widgetPos void OutputWindowPlainTextEdit::contextMenuEvent(QContextMenuEvent *event) { - QMenu *menu = createStandardContextMenu(); + const QString href = anchorAt(event->pos()); + QMenu *menu = href.isEmpty() ? createStandardContextMenu(event->pos()) : new QMenu; // Add 'open file' QString repository; const QString token = identifierUnderCursor(event->pos(), &repository); + if (!repository.isEmpty()) { + if (VcsOutputFormatter *f = formatter()) { + if (!href.isEmpty()) + f->fillLinkContextMenu(menu, repository, href); + } + } QAction *openAction = nullptr; if (!token.isEmpty()) { // Check for a file, expand via repository if relative @@ -192,9 +199,12 @@ void OutputWindowPlainTextEdit::contextMenuEvent(QContextMenuEvent *event) openAction->setData(fi.absoluteFilePath()); } } - // Add 'clear' - menu->addSeparator(); - QAction *clearAction = menu->addAction(VcsOutputWindow::tr("Clear")); + QAction *clearAction = nullptr; + if (href.isEmpty()) { + // Add 'clear' + menu->addSeparator(); + clearAction = menu->addAction(VcsOutputWindow::tr("Clear")); + } // Run QAction *action = menu->exec(event->globalPos()); |