1 // SPDX-FileCopyrightText: 2021 Nheko Contributors 2 // 3 // SPDX-License-Identifier: GPL-3.0-or-later 4 5 #pragma once 6 7 #include <QSize> 8 #include <QString> 9 #include <QTextBrowser> 10 #include <QUrl> 11 12 class QMouseEvent; 13 class QFocusEvent; 14 class QWheelEvent; 15 16 class ContextMenuFilter : public QObject 17 { 18 Q_OBJECT 19 20 public: ContextMenuFilter(QWidget * parent)21 explicit ContextMenuFilter(QWidget *parent) 22 : QObject(parent) 23 {} 24 25 signals: 26 void contextMenuIsOpening(); 27 28 protected: 29 bool eventFilter(QObject *obj, QEvent *event) override; 30 }; 31 32 class TextLabel : public QTextBrowser 33 { 34 Q_OBJECT 35 36 public: 37 TextLabel(const QString &text, QWidget *parent = nullptr); 38 TextLabel(QWidget *parent = nullptr); 39 40 void wheelEvent(QWheelEvent *event) override; clearLinks()41 void clearLinks() { link_.clear(); } 42 43 protected: 44 void mousePressEvent(QMouseEvent *e) override; 45 void mouseReleaseEvent(QMouseEvent *e) override; 46 void focusOutEvent(QFocusEvent *e) override; 47 48 private slots: adjustHeight(const QSizeF & size)49 void adjustHeight(const QSizeF &size) { setFixedHeight(size.height()); } 50 void handleLinkActivation(const QUrl &link); 51 52 signals: 53 void userProfileTriggered(const QString &user_id); 54 void linkActivated(const QUrl &link); 55 56 private: 57 QString link_; 58 bool contextMenuRequested_ = false; 59 }; 60