forked from qt-creator/qt-creator
Make http(s) urls clickable in the VCS output pane
Fixes: QTCREATORBUG-23536 Fixes: QTCREATORBUG-19171 Change-Id: Ibf6d632031068c7f52cb15f534960e8238bdb21d Reviewed-by: Orgad Shaneh <orgads@gmail.com>
This commit is contained in:
committed by
Miklós Márton
parent
adcea96868
commit
8f88b89d81
@@ -25,6 +25,7 @@ add_qtc_plugin(VcsBase
|
||||
vcsbaseplugin.cpp vcsbaseplugin.h
|
||||
vcsbasesubmiteditor.cpp vcsbasesubmiteditor.h
|
||||
vcscommand.cpp vcscommand.h
|
||||
vcsoutputformatter.cpp vcsoutputformatter.h
|
||||
vcsoutputwindow.cpp vcsoutputwindow.h
|
||||
vcsplugin.cpp vcsplugin.h
|
||||
wizard/vcscommandpage.cpp wizard/vcscommandpage.h
|
||||
|
@@ -2,6 +2,7 @@ DEFINES += VCSBASE_LIBRARY
|
||||
include(../../qtcreatorplugin.pri)
|
||||
HEADERS += vcsbase_global.h \
|
||||
vcsbaseconstants.h \
|
||||
vcsoutputformatter.h \
|
||||
wizard/vcsconfigurationpage.h \
|
||||
wizard/vcscommandpage.h \
|
||||
wizard/vcsjsextension.h \
|
||||
@@ -30,6 +31,7 @@ HEADERS += vcsbase_global.h \
|
||||
|
||||
SOURCES += vcsplugin.cpp \
|
||||
vcsbaseplugin.cpp \
|
||||
vcsoutputformatter.cpp \
|
||||
wizard/vcsconfigurationpage.cpp \
|
||||
wizard/vcscommandpage.cpp \
|
||||
wizard/vcsjsextension.cpp \
|
||||
|
@@ -66,6 +66,8 @@ QtcPlugin {
|
||||
"vcsbasesubmiteditor.h",
|
||||
"vcscommand.cpp",
|
||||
"vcscommand.h",
|
||||
"vcsoutputformatter.cpp",
|
||||
"vcsoutputformatter.h",
|
||||
"vcsoutputwindow.cpp",
|
||||
"vcsoutputwindow.h",
|
||||
"vcsplugin.cpp",
|
||||
|
67
src/plugins/vcsbase/vcsoutputformatter.cpp
Normal file
67
src/plugins/vcsbase/vcsoutputformatter.cpp
Normal file
@@ -0,0 +1,67 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2020 Miklos Marton <martonmiklosqdev@gmail.com>
|
||||
**
|
||||
** This file is part of Qt Creator.
|
||||
**
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and The Qt Company. For licensing terms
|
||||
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at https://www.qt.io/contact-us.
|
||||
**
|
||||
** GNU General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU
|
||||
** General Public License version 3 as published by the Free Software
|
||||
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
|
||||
** included in the packaging of this file. Please review the following
|
||||
** information to ensure the GNU General Public License requirements will
|
||||
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
|
||||
**
|
||||
****************************************************************************/
|
||||
#include "vcsoutputformatter.h"
|
||||
|
||||
#include <QDesktopServices>
|
||||
#include <QPlainTextEdit>
|
||||
#include <QRegularExpression>
|
||||
#include <QTextCursor>
|
||||
#include <QUrl>
|
||||
|
||||
namespace VcsBase {
|
||||
|
||||
VcsOutputFormatter::VcsOutputFormatter()
|
||||
{
|
||||
m_urlRegexp = new QRegularExpression("https?://\\S*");
|
||||
}
|
||||
|
||||
void VcsOutputFormatter::appendMessage(const QString &text, Utils::OutputFormat format)
|
||||
{
|
||||
QString out = text;
|
||||
const QRegularExpressionMatch match = m_urlRegexp->match(text);
|
||||
if (match.hasMatch()) {
|
||||
const QTextCharFormat normalFormat = charFormat(format);
|
||||
OutputFormatter::appendMessage(text.left(match.capturedStart()), format);
|
||||
QTextCursor tc = plainTextEdit()->textCursor();
|
||||
QStringRef url = match.capturedRef();
|
||||
int end = match.capturedEnd();
|
||||
while (url.rbegin()->isPunct()) {
|
||||
url.chop(1);
|
||||
--end;
|
||||
}
|
||||
tc.movePosition(QTextCursor::End, QTextCursor::MoveAnchor);
|
||||
tc.insertText(url.toString(), linkFormat(normalFormat, url.toString()));
|
||||
tc.movePosition(QTextCursor::End, QTextCursor::MoveAnchor);
|
||||
OutputFormatter::appendMessage(text.mid(end), format);
|
||||
} else {
|
||||
OutputFormatter::appendMessage(text, format);
|
||||
}
|
||||
}
|
||||
|
||||
void VcsOutputFormatter::handleLink(const QString &href)
|
||||
{
|
||||
QDesktopServices::openUrl(QUrl(href));
|
||||
}
|
||||
|
||||
}
|
44
src/plugins/vcsbase/vcsoutputformatter.h
Normal file
44
src/plugins/vcsbase/vcsoutputformatter.h
Normal file
@@ -0,0 +1,44 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2020 Miklos Marton <martonmiklosqdev@gmail.com>
|
||||
**
|
||||
** This file is part of Qt Creator.
|
||||
**
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and The Qt Company. For licensing terms
|
||||
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at https://www.qt.io/contact-us.
|
||||
**
|
||||
** GNU General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU
|
||||
** General Public License version 3 as published by the Free Software
|
||||
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
|
||||
** included in the packaging of this file. Please review the following
|
||||
** information to ensure the GNU General Public License requirements will
|
||||
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
|
||||
**
|
||||
****************************************************************************/
|
||||
#pragma once
|
||||
|
||||
#include <utils/outputformatter.h>
|
||||
|
||||
QT_FORWARD_DECLARE_CLASS(QRegularExpression);
|
||||
|
||||
namespace VcsBase {
|
||||
|
||||
class VcsOutputFormatter : public Utils::OutputFormatter
|
||||
{
|
||||
public:
|
||||
VcsOutputFormatter();
|
||||
~VcsOutputFormatter() override = default;
|
||||
void appendMessage(const QString &text, Utils::OutputFormat format) override;
|
||||
void handleLink(const QString &href) override;
|
||||
|
||||
private:
|
||||
QRegularExpression *m_urlRegexp = nullptr;
|
||||
};
|
||||
|
||||
}
|
@@ -37,6 +37,7 @@
|
||||
#include <texteditor/fontsettings.h>
|
||||
#include <texteditor/texteditorsettings.h>
|
||||
#include <utils/theme/theme.h>
|
||||
#include <vcsbase/vcsoutputformatter.h>
|
||||
|
||||
#include <QAction>
|
||||
#include <QContextMenuEvent>
|
||||
@@ -110,7 +111,7 @@ private:
|
||||
QString identifierUnderCursor(const QPoint &pos, QString *repository = nullptr) const;
|
||||
|
||||
Utils::OutputFormat m_format;
|
||||
OutputFormatter *m_formatter = nullptr;
|
||||
VcsOutputFormatter *m_formatter = nullptr;
|
||||
};
|
||||
|
||||
OutputWindowPlainTextEdit::OutputWindowPlainTextEdit(QWidget *parent) :
|
||||
@@ -119,9 +120,9 @@ OutputWindowPlainTextEdit::OutputWindowPlainTextEdit(QWidget *parent) :
|
||||
setReadOnly(true);
|
||||
setUndoRedoEnabled(false);
|
||||
setFrameStyle(QFrame::NoFrame);
|
||||
m_formatter = new OutputFormatter;
|
||||
m_formatter = new VcsOutputFormatter;
|
||||
m_formatter->setBoldFontEnabled(false);
|
||||
m_formatter->setPlainTextEdit(this);
|
||||
setFormatter(m_formatter);
|
||||
auto agg = new Aggregation::Aggregate;
|
||||
agg->add(this);
|
||||
agg->add(new Core::BaseTextFind(this));
|
||||
|
Reference in New Issue
Block a user