Cockatrice 2026-09-01-Development-3.1.0-beta.10
A virtual tabletop for multiplayer card games
Loading...
Searching...
No Matches
chat_view.h
Go to the documentation of this file.
1
7
8#ifndef CHATVIEW_H
9#define CHATVIEW_H
10
11#include "../../interface/widgets/tabs/tab_supervisor.h"
13
14#include <QAction>
15#include <QColor>
16#include <QTextBrowser>
17#include <QTextCursor>
18#include <QTextFragment>
21
22class AbstractGame;
23class QTextTable;
24class QMouseEvent;
25class UserContextMenu;
26class UserListProxy;
27
29{
30public:
31 UserMessagePosition(QTextCursor &cursor);
33 QTextBlock block;
34};
35
37{
38 QString userName;
39 QString message;
40 QDateTime timestamp;
41};
42
43class ChatView : public QTextBrowser
44{
45 Q_OBJECT
46protected:
49
50private:
60 QString lastSender;
61 QString ownUserName;
62 QString mention;
63 QTextCharFormat mentionFormat;
64 QTextCharFormat highlightFormat;
65 QTextCharFormat mentionFormatOtherUser;
66 QTextCharFormat defaultFormat;
67 QStringList highlightedWords;
70 bool stickToBottom = false;
74 QMap<QString, QVector<UserMessagePosition>> userMessagePositions;
75 QList<ChatLogEntry> chatHistory;
76 static constexpr int MAX_CHAT_HISTORY = 200;
77
78 [[nodiscard]] QTextFragment getFragmentUnderMouse(const QPoint &pos) const;
79 QTextCursor prepareBlock(bool same = false);
80 void scrollToBottom();
81 void appendCardTag(QTextCursor &cursor, const QString &cardName);
82 void appendUrlTag(QTextCursor &cursor, QString url);
83 void appendGameLinkTag(QTextCursor &cursor, const QString &url);
84 static QColor getCustomMentionColor();
85 static QColor getCustomHighlightColor();
86 void showSystemPopup(const QString &userName);
87 bool isModeratorSendingGlobal(QFlags<ServerInfo_User::UserLevelFlag> userLevelFlag, QString message);
88 void checkTag(QTextCursor &cursor, QString &message);
89 void checkMention(QTextCursor &cursor, QString &message, const QString &userName, UserLevelFlags userLevel);
90 void checkWord(QTextCursor &cursor, QString &message);
91 QString extractNextWord(QString &message, QString &rest);
92
93 QColor otherUserColor = QColor(0, 65, 255); // dark blue
94 QColor serverMessageColor = QColor(0x85, 0x15, 0x15);
95 QColor linkColor;
97
98private slots:
99 void openLink(const QUrl &link);
100 void actMessageClicked();
102 void refreshBlockColors();
104 void onScrollBarValueChanged(int value);
105
106public:
107 ChatView(TabSupervisor *_tabSupervisor, AbstractGame *_game, bool _showTimestamps, QWidget *parent = nullptr);
108 void retranslateUi();
109 void appendHtml(const QString &html);
110 void virtual appendHtmlServerMessage(const QString &html,
111 bool optionalIsBold = false,
112 QString optionalFontColor = QString());
113 void appendMessage(QString message,
114 RoomMessageTypeFlags messageType = {},
115 const ServerInfo_User &userInfo = {},
116 bool playerBold = false);
117 void clearChat();
118 void redactMessages(const QString &userName, int amount);
119 QString getRecentChatLog(int maxMessages = 50) const;
120
121protected:
122 void enterEvent(QEnterEvent *event) override;
123 void leaveEvent(QEvent *event) override;
124 void mouseMoveEvent(QMouseEvent *event) override;
125 void mousePressEvent(QMouseEvent *event) override;
126 void mouseReleaseEvent(QMouseEvent *event) override;
127signals:
128 void openMessageDialog(const QString &userName, bool focus);
129 void cardNameHovered(QString cardName);
130 void showCardInfoPopup(const QPoint &pos, const CardRef &cardRef);
131 void deleteCardInfoPopup(QString cardName);
132 void addMentionTag(QString mentionTag);
134 void showMentionPopup(const QString &userName);
135 void cockatriceLinkActivated(const QString &url);
136};
137
138#endif
Definition abstract_game.h:20
void appendCardTag(QTextCursor &cursor, const QString &cardName)
Definition chat_view.cpp:176
bool showTimestamps
Definition chat_view.h:69
bool evenNumber
Definition chat_view.h:68
HoveredItemType
Definition chat_view.h:52
@ HoveredNothing
Definition chat_view.h:53
@ HoveredUrl
Definition chat_view.h:54
@ HoveredCard
Definition chat_view.h:55
@ HoveredUser
Definition chat_view.h:56
ChatView(TabSupervisor *_tabSupervisor, AbstractGame *_game, bool _showTimestamps, QWidget *parent=nullptr)
Definition chat_view.cpp:31
void showSystemPopup(const QString &userName)
Definition chat_view.cpp:620
void checkWord(QTextCursor &cursor, QString &message)
Definition chat_view.cpp:532
void mousePressEvent(QMouseEvent *event) override
Definition chat_view.cpp:745
void scrollToBottom()
Definition chat_view.cpp:396
QList< ChatLogEntry > chatHistory
Definition chat_view.h:75
AbstractGame *const game
Definition chat_view.h:48
void onScrollBarValueChanged(int value)
Definition chat_view.cpp:412
QTextFragment getFragmentUnderMouse(const QPoint &pos) const
Definition chat_view.cpp:702
HoveredItemType hoveredItemType
Definition chat_view.h:71
QString ownUserName
Definition chat_view.h:61
bool stickToBottom
Definition chat_view.h:70
QAction * messageClicked
Definition chat_view.h:73
QString mention
Definition chat_view.h:62
void openMessageDialog(const QString &userName, bool focus)
void mouseReleaseEvent(QMouseEvent *event) override
Definition chat_view.cpp:784
void appendMessage(QString message, RoomMessageTypeFlags messageType={}, const ServerInfo_User &userInfo={}, bool playerBold=false)
Definition chat_view.cpp:258
void addMentionTag(QString mentionTag)
static QColor getCustomHighlightColor()
Definition chat_view.cpp:639
void showMentionPopup(const QString &userName)
QTextCursor prepareBlock(bool same=false)
Definition chat_view.cpp:117
QString getRecentChatLog(int maxMessages=50) const
Definition chat_view.cpp:658
TabSupervisor *const tabSupervisor
Definition chat_view.h:47
QString extractNextWord(QString &message, QString &rest)
Definition chat_view.cpp:579
UserContextMenu * userContextMenu
Definition chat_view.h:59
void retranslateUi()
Definition chat_view.cpp:112
void onScrollBarRangeChanged()
Definition chat_view.cpp:405
static QColor getCustomMentionColor()
Definition chat_view.cpp:628
QTextCharFormat mentionFormat
Definition chat_view.h:63
bool isModeratorSendingGlobal(QFlags< ServerInfo_User::UserLevelFlag > userLevelFlag, QString message)
Definition chat_view.cpp:604
virtual void appendHtmlServerMessage(const QString &html, bool optionalIsBold=false, QString optionalFontColor=QString())
Definition chat_view.cpp:158
void enterEvent(QEnterEvent *event) override
Definition chat_view.cpp:692
void appendGameLinkTag(QTextCursor &cursor, const QString &url)
Definition chat_view.cpp:218
void cockatriceLinkActivated(const QString &url)
void clearChat()
Definition chat_view.cpp:650
QTextCharFormat mentionFormatOtherUser
Definition chat_view.h:65
void adjustColorsToPalette()
Definition chat_view.cpp:62
void mouseMoveEvent(QMouseEvent *event) override
Definition chat_view.cpp:716
QStringList highlightedWords
Definition chat_view.h:67
const UserListProxy *const userListProxy
Definition chat_view.h:58
void deleteCardInfoPopup(QString cardName)
QColor unresolvedCardTagColor
Definition chat_view.h:96
static constexpr int MAX_CHAT_HISTORY
Definition chat_view.h:76
QMap< QString, QVector< UserMessagePosition > > userMessagePositions
Definition chat_view.h:74
void showCardInfoPopup(const QPoint &pos, const CardRef &cardRef)
QColor linkColor
Definition chat_view.h:95
QColor otherUserColor
Definition chat_view.h:93
void redactMessages(const QString &userName, int amount)
Definition chat_view.cpp:670
void cardNameHovered(QString cardName)
QString hoveredContent
Definition chat_view.h:72
void leaveEvent(QEvent *event) override
Definition chat_view.cpp:697
void checkMention(QTextCursor &cursor, QString &message, const QString &userName, UserLevelFlags userLevel)
Definition chat_view.cpp:467
void messageClickedSignal()
void checkTag(QTextCursor &cursor, QString &message)
Definition chat_view.cpp:419
void refreshBlockColors()
Definition chat_view.cpp:79
QString lastSender
Definition chat_view.h:60
void openLink(const QUrl &link)
Definition chat_view.cpp:793
QTextCharFormat defaultFormat
Definition chat_view.h:66
void appendUrlTag(QTextCursor &cursor, QString url)
Definition chat_view.cpp:199
void actMessageClicked()
Definition chat_view.cpp:615
QTextCharFormat highlightFormat
Definition chat_view.h:64
void appendHtml(const QString &html)
Definition chat_view.cpp:149
QColor serverMessageColor
Definition chat_view.h:94
Definition tab_supervisor.h:84
Definition user_context_menu.h:29
Definition user_list_proxy.h:19
int relativePosition
Definition chat_view.h:32
UserMessagePosition(QTextCursor &cursor)
Definition chat_view.cpp:25
QTextBlock block
Definition chat_view.h:33
static constexpr int amount
Definition deck_hash_performance_test.cpp:5
Definition card_ref.h:14
Definition chat_view.h:37
QDateTime timestamp
Definition chat_view.h:40
QString message
Definition chat_view.h:39
QString userName
Definition chat_view.h:38
Definition serverinfo_user.proto:2