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