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
|
vcsbaseplugin.cpp vcsbaseplugin.h
|
||||||
vcsbasesubmiteditor.cpp vcsbasesubmiteditor.h
|
vcsbasesubmiteditor.cpp vcsbasesubmiteditor.h
|
||||||
vcscommand.cpp vcscommand.h
|
vcscommand.cpp vcscommand.h
|
||||||
|
vcsoutputformatter.cpp vcsoutputformatter.h
|
||||||
vcsoutputwindow.cpp vcsoutputwindow.h
|
vcsoutputwindow.cpp vcsoutputwindow.h
|
||||||
vcsplugin.cpp vcsplugin.h
|
vcsplugin.cpp vcsplugin.h
|
||||||
wizard/vcscommandpage.cpp wizard/vcscommandpage.h
|
wizard/vcscommandpage.cpp wizard/vcscommandpage.h
|
||||||
|
@@ -2,6 +2,7 @@ DEFINES += VCSBASE_LIBRARY
|
|||||||
include(../../qtcreatorplugin.pri)
|
include(../../qtcreatorplugin.pri)
|
||||||
HEADERS += vcsbase_global.h \
|
HEADERS += vcsbase_global.h \
|
||||||
vcsbaseconstants.h \
|
vcsbaseconstants.h \
|
||||||
|
vcsoutputformatter.h \
|
||||||
wizard/vcsconfigurationpage.h \
|
wizard/vcsconfigurationpage.h \
|
||||||
wizard/vcscommandpage.h \
|
wizard/vcscommandpage.h \
|
||||||
wizard/vcsjsextension.h \
|
wizard/vcsjsextension.h \
|
||||||
@@ -30,6 +31,7 @@ HEADERS += vcsbase_global.h \
|
|||||||
|
|
||||||
SOURCES += vcsplugin.cpp \
|
SOURCES += vcsplugin.cpp \
|
||||||
vcsbaseplugin.cpp \
|
vcsbaseplugin.cpp \
|
||||||
|
vcsoutputformatter.cpp \
|
||||||
wizard/vcsconfigurationpage.cpp \
|
wizard/vcsconfigurationpage.cpp \
|
||||||
wizard/vcscommandpage.cpp \
|
wizard/vcscommandpage.cpp \
|
||||||
wizard/vcsjsextension.cpp \
|
wizard/vcsjsextension.cpp \
|
||||||
|
@@ -66,6 +66,8 @@ QtcPlugin {
|
|||||||
"vcsbasesubmiteditor.h",
|
"vcsbasesubmiteditor.h",
|
||||||
"vcscommand.cpp",
|
"vcscommand.cpp",
|
||||||
"vcscommand.h",
|
"vcscommand.h",
|
||||||
|
"vcsoutputformatter.cpp",
|
||||||
|
"vcsoutputformatter.h",
|
||||||
"vcsoutputwindow.cpp",
|
"vcsoutputwindow.cpp",
|
||||||
"vcsoutputwindow.h",
|
"vcsoutputwindow.h",
|
||||||
"vcsplugin.cpp",
|
"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/fontsettings.h>
|
||||||
#include <texteditor/texteditorsettings.h>
|
#include <texteditor/texteditorsettings.h>
|
||||||
#include <utils/theme/theme.h>
|
#include <utils/theme/theme.h>
|
||||||
|
#include <vcsbase/vcsoutputformatter.h>
|
||||||
|
|
||||||
#include <QAction>
|
#include <QAction>
|
||||||
#include <QContextMenuEvent>
|
#include <QContextMenuEvent>
|
||||||
@@ -110,7 +111,7 @@ private:
|
|||||||
QString identifierUnderCursor(const QPoint &pos, QString *repository = nullptr) const;
|
QString identifierUnderCursor(const QPoint &pos, QString *repository = nullptr) const;
|
||||||
|
|
||||||
Utils::OutputFormat m_format;
|
Utils::OutputFormat m_format;
|
||||||
OutputFormatter *m_formatter = nullptr;
|
VcsOutputFormatter *m_formatter = nullptr;
|
||||||
};
|
};
|
||||||
|
|
||||||
OutputWindowPlainTextEdit::OutputWindowPlainTextEdit(QWidget *parent) :
|
OutputWindowPlainTextEdit::OutputWindowPlainTextEdit(QWidget *parent) :
|
||||||
@@ -119,9 +120,9 @@ OutputWindowPlainTextEdit::OutputWindowPlainTextEdit(QWidget *parent) :
|
|||||||
setReadOnly(true);
|
setReadOnly(true);
|
||||||
setUndoRedoEnabled(false);
|
setUndoRedoEnabled(false);
|
||||||
setFrameStyle(QFrame::NoFrame);
|
setFrameStyle(QFrame::NoFrame);
|
||||||
m_formatter = new OutputFormatter;
|
m_formatter = new VcsOutputFormatter;
|
||||||
m_formatter->setBoldFontEnabled(false);
|
m_formatter->setBoldFontEnabled(false);
|
||||||
m_formatter->setPlainTextEdit(this);
|
setFormatter(m_formatter);
|
||||||
auto agg = new Aggregation::Aggregate;
|
auto agg = new Aggregation::Aggregate;
|
||||||
agg->add(this);
|
agg->add(this);
|
||||||
agg->add(new Core::BaseTextFind(this));
|
agg->add(new Core::BaseTextFind(this));
|
||||||
|
Reference in New Issue
Block a user