From ff611c1b394001a17fb8f90b175f5d122191dbe7 Mon Sep 17 00:00:00 2001 From: Konstantinos Sideris Date: Thu, 11 May 2017 01:28:06 +0300 Subject: [PATCH] Highlight URLs in TimelineView --- include/TimelineItem.h | 4 ++-- src/TimelineItem.cc | 21 +++++++++++++++++---- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/include/TimelineItem.h b/include/TimelineItem.h index f23ad2c9..5c4ce792 100644 --- a/include/TimelineItem.h +++ b/include/TimelineItem.h @@ -41,8 +41,8 @@ public: TimelineItem(const events::MessageEvent &e, bool with_sender, const QString &color, QWidget *parent = 0); // For local messages. - TimelineItem(const QString &userid, const QString &color, const QString &body, QWidget *parent = 0); - TimelineItem(const QString &body, QWidget *parent = 0); + TimelineItem(const QString &userid, const QString &color, QString body, QWidget *parent = 0); + TimelineItem(QString body, QWidget *parent = 0); TimelineItem(ImageItem *img, const events::MessageEvent &e, const QString &color, QWidget *parent); TimelineItem(ImageItem *img, const events::MessageEvent &e, QWidget *parent); diff --git a/src/TimelineItem.cc b/src/TimelineItem.cc index c16293b8..b1c58e6a 100644 --- a/src/TimelineItem.cc +++ b/src/TimelineItem.cc @@ -17,25 +17,33 @@ #include #include +#include #include "ImageItem.h" #include "TimelineItem.h" #include "TimelineViewManager.h" +static const QRegExp URL_REGEX("((?:https?|ftp)://\\S+)"); +static const QString URL_HTML = "\\1"; + namespace events = matrix::events; namespace msgs = matrix::events::messages; -TimelineItem::TimelineItem(const QString &userid, const QString &color, const QString &body, QWidget *parent) +TimelineItem::TimelineItem(const QString &userid, const QString &color, QString body, QWidget *parent) : QWidget(parent) { + body.replace(URL_REGEX, URL_HTML); + generateTimestamp(QDateTime::currentDateTime()); generateBody(TimelineViewManager::displayName(userid), color, body); setupLayout(); } -TimelineItem::TimelineItem(const QString &body, QWidget *parent) +TimelineItem::TimelineItem(QString body, QWidget *parent) : QWidget(parent) { + body.replace(URL_REGEX, URL_HTML); + generateTimestamp(QDateTime::currentDateTime()); generateBody(body); setupLayout(); @@ -85,6 +93,7 @@ TimelineItem::TimelineItem(const events::MessageEvent &event, bool generateTimestamp(timestamp); + body.replace(URL_REGEX, URL_HTML); body = "" + body + ""; if (with_sender) @@ -103,6 +112,8 @@ TimelineItem::TimelineItem(const events::MessageEvent &event, bool w generateTimestamp(timestamp); + body.replace(URL_REGEX, URL_HTML); + if (with_sender) generateBody(TimelineViewManager::displayName(event.sender()), color, body); else @@ -127,7 +138,8 @@ void TimelineItem::generateBody(const QString &body) "" ""); content_label_->setText(content.arg(replaceEmoji(body))); - content_label_->setTextInteractionFlags(Qt::TextSelectableByMouse); + content_label_->setTextInteractionFlags(Qt::TextSelectableByMouse | Qt::TextBrowserInteraction); + content_label_->setOpenExternalLinks(true); } void TimelineItem::generateBody(const QString &userid, const QString &color, const QString &body) @@ -155,7 +167,8 @@ void TimelineItem::generateBody(const QString &userid, const QString &color, con "" ""); content_label_->setText(content.arg(color).arg(sender).arg(replaceEmoji(body))); - content_label_->setTextInteractionFlags(Qt::TextSelectableByMouse); + content_label_->setTextInteractionFlags(Qt::TextSelectableByMouse | Qt::TextBrowserInteraction); + content_label_->setOpenExternalLinks(true); } void TimelineItem::generateTimestamp(const QDateTime &time)