aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/vcsbase
diff options
context:
space:
mode:
authorOrgad Shaneh <orgad.shaneh@audiocodes.com>2020-02-25 21:13:39 +0200
committerOrgad Shaneh <orgads@gmail.com>2020-02-28 09:53:51 +0000
commitba87fb20831dc00ae18484b0994fa553cfdc2194 (patch)
tree90bd7606137f7bcac96f2a6c4be6a08258eb8c5a /src/plugins/vcsbase
parentab3e2ac0fcb33d6b145cff08463437100171330a (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.cpp18
-rw-r--r--src/plugins/vcsbase/vcsoutputformatter.h3
-rw-r--r--src/plugins/vcsbase/vcsoutputwindow.cpp18
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());