Cockatrice 2026-10-19-Development-3.1.2-beta.2
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 "libcockatrice/protocol/pb/serverinfo_user.pb.h"
12
13#include <QColor>
14#include <QDateTime>
15#include <QList>
16#include <QMap>
17#include <QString>
18#include <QStringList>
19#include <QTextBlock>
20#include <QTextBrowser>
21#include <QTextCharFormat>
22#include <QTextCursor>
23#include <QTextFragment>
24#include <QVector>
27#include <qtmetamacros.h>
28
29class AbstractGame;
30class UserContextMenu;
31class UserListProxy;
32class QAction;
33class QPoint;
34class QUrl;
35class QWidget;
36class TabSupervisor;
37struct CardRef;
38template <typename Enum> class QFlags;
39
41{
42public:
43 UserMessagePosition(QTextCursor &cursor);
45 QTextBlock block;
46};
47
49{
50 QString userName;
51 QString message;
52 QDateTime timestamp;
53};
54
55class ChatView : public QTextBrowser
56{
57 Q_OBJECT
58protected:
61
62private:
72 QString lastSender;
73 QString ownUserName;
74 QString mention;
75 QTextCharFormat mentionFormat;
76 QTextCharFormat highlightFormat;
77 QTextCharFormat mentionFormatOtherUser;
78 QTextCharFormat defaultFormat;
79 QStringList highlightedWords;
82 bool stickToBottom = false;
88 static constexpr int MAX_CHAT_HISTORY = 200;
89
90 [[nodiscard]] QTextFragment getFragmentUnderMouse(const QPoint &pos) const;
91 QTextCursor prepareBlock(bool same = false);
92 void scrollToBottom();
93 void appendCardTag(QTextCursor &cursor, const QString &cardName);
94 void appendUrlTag(QTextCursor &cursor, QString url);
95 void appendGameLinkTag(QTextCursor &cursor, const QString &url);
96 static QColor getCustomMentionColor();
97 static QColor getCustomHighlightColor();
98 void showSystemPopup(const QString &userName);
99 bool isModeratorSendingGlobal(QFlags<ServerInfo_User::UserLevelFlag> userLevelFlag, QString message);
100 void checkTag(QTextCursor &cursor, QString &message);
101 void checkMention(QTextCursor &cursor, QString &message, const QString &userName, UserLevelFlags userLevel);
102 void checkWord(QTextCursor &cursor, QString &message);
103 QString extractNextWord(QString &message, QString &rest);
104
105 QColor otherUserColor = QColor(0, 65, 255); // dark blue
106 QColor serverMessageColor = QColor(0x85, 0x15, 0x15);
107 QColor linkColor;
109
110private slots:
111 void openLink(const QUrl &link);
112 void actMessageClicked();
114 void refreshBlockColors();
116 void onScrollBarValueChanged(int value);
117
118public:
119 ChatView(TabSupervisor *_tabSupervisor, AbstractGame *_game, bool _showTimestamps, QWidget *parent = nullptr);
120 void retranslateUi();
121 void appendHtml(const QString &html);
122 virtual void
123 appendHtmlServerMessage(const QString &html, bool optionalIsBold = false, QString optionalFontColor = QString());
124 void appendMessage(QString message,
125 RoomMessageTypeFlags messageType = {},
126 const ServerInfo_User &userInfo = {},
127 bool playerBold = false);
128 void clearChat();
129 void redactMessages(const QString &userName, int amount);
130 QString getRecentChatLog(int maxMessages = 50) const;
131
132protected:
133 [[nodiscard]] virtual QString getCurrentTime() const;
134 void enterEvent(QEnterEvent *event) override;
135 void leaveEvent(QEvent *event) override;
136 void mouseMoveEvent(QMouseEvent *event) override;
137 void mousePressEvent(QMouseEvent *event) override;
138 void mouseReleaseEvent(QMouseEvent *event) override;
139signals:
140 void openMessageDialog(const QString &userName, bool focus);
141 void cardNameHovered(QString cardName);
142 void showCardInfoPopup(const QPoint &pos, const CardRef &cardRef);
143 void deleteCardInfoPopup(QString cardName);
144 void addMentionTag(QString mentionTag);
146 void showMentionPopup(const QString &userName);
147 void cockatriceLinkActivated(const QString &url);
148};
149
150#endif
Definition abstract_game.h:23
void appendCardTag(QTextCursor &cursor, const QString &cardName)
Definition chat_view.cpp:207
bool showTimestamps
Definition chat_view.h:81
bool evenNumber
Definition chat_view.h:80
HoveredItemType
Definition chat_view.h:64
@ HoveredNothing
Definition chat_view.h:65
@ HoveredUrl
Definition chat_view.h:66
@ HoveredCard
Definition chat_view.h:67
@ HoveredUser
Definition chat_view.h:68
ChatView(TabSupervisor *_tabSupervisor, AbstractGame *_game, bool _showTimestamps, QWidget *parent=nullptr)
Definition chat_view.cpp:57
void showSystemPopup(const QString &userName)
Definition chat_view.cpp:665
void checkWord(QTextCursor &cursor, QString &message)
Definition chat_view.cpp:577
void mousePressEvent(QMouseEvent *event) override
Definition chat_view.cpp:790
void scrollToBottom()
Definition chat_view.cpp:441
QList< ChatLogEntry > chatHistory
Definition chat_view.h:87
AbstractGame *const game
Definition chat_view.h:60
void onScrollBarValueChanged(int value)
Definition chat_view.cpp:457
QTextFragment getFragmentUnderMouse(const QPoint &pos) const
Definition chat_view.cpp:747
HoveredItemType hoveredItemType
Definition chat_view.h:83
QString ownUserName
Definition chat_view.h:73
bool stickToBottom
Definition chat_view.h:82
QAction * messageClicked
Definition chat_view.h:85
QString mention
Definition chat_view.h:74
void openMessageDialog(const QString &userName, bool focus)
void mouseReleaseEvent(QMouseEvent *event) override
Definition chat_view.cpp:829
void appendMessage(QString message, RoomMessageTypeFlags messageType={}, const ServerInfo_User &userInfo={}, bool playerBold=false)
Definition chat_view.cpp:292
void addMentionTag(QString mentionTag)
static QColor getCustomHighlightColor()
Definition chat_view.cpp:684
void showMentionPopup(const QString &userName)
QTextCursor prepareBlock(bool same=false)
Definition chat_view.cpp:143
QString getRecentChatLog(int maxMessages=50) const
Definition chat_view.cpp:703
TabSupervisor *const tabSupervisor
Definition chat_view.h:59
QString extractNextWord(QString &message, QString &rest)
Definition chat_view.cpp:624
UserContextMenu * userContextMenu
Definition chat_view.h:71
void retranslateUi()
Definition chat_view.cpp:138
void onScrollBarRangeChanged()
Definition chat_view.cpp:450
static QColor getCustomMentionColor()
Definition chat_view.cpp:673
QTextCharFormat mentionFormat
Definition chat_view.h:75
bool isModeratorSendingGlobal(QFlags< ServerInfo_User::UserLevelFlag > userLevelFlag, QString message)
Definition chat_view.cpp:649
virtual void appendHtmlServerMessage(const QString &html, bool optionalIsBold=false, QString optionalFontColor=QString())
Definition chat_view.cpp:184
void enterEvent(QEnterEvent *event) override
Definition chat_view.cpp:737
void appendGameLinkTag(QTextCursor &cursor, const QString &url)
Definition chat_view.cpp:252
void cockatriceLinkActivated(const QString &url)
void clearChat()
Definition chat_view.cpp:695
QTextCharFormat mentionFormatOtherUser
Definition chat_view.h:77
void adjustColorsToPalette()
Definition chat_view.cpp:88
void mouseMoveEvent(QMouseEvent *event) override
Definition chat_view.cpp:761
QStringList highlightedWords
Definition chat_view.h:79
const UserListProxy *const userListProxy
Definition chat_view.h:70
void deleteCardInfoPopup(QString cardName)
QColor unresolvedCardTagColor
Definition chat_view.h:108
static constexpr int MAX_CHAT_HISTORY
Definition chat_view.h:88
QMap< QString, QVector< UserMessagePosition > > userMessagePositions
Definition chat_view.h:86
void showCardInfoPopup(const QPoint &pos, const CardRef &cardRef)
QColor linkColor
Definition chat_view.h:107
QColor otherUserColor
Definition chat_view.h:105
void redactMessages(const QString &userName, int amount)
Definition chat_view.cpp:715
void cardNameHovered(QString cardName)
QString hoveredContent
Definition chat_view.h:84
virtual QString getCurrentTime() const
Definition chat_view.cpp:202
void leaveEvent(QEvent *event) override
Definition chat_view.cpp:742
void checkMention(QTextCursor &cursor, QString &message, const QString &userName, UserLevelFlags userLevel)
Definition chat_view.cpp:512
void messageClickedSignal()
void checkTag(QTextCursor &cursor, QString &message)
Definition chat_view.cpp:464
void refreshBlockColors()
Definition chat_view.cpp:105
QString lastSender
Definition chat_view.h:72
void openLink(const QUrl &link)
Definition chat_view.cpp:838
QTextCharFormat defaultFormat
Definition chat_view.h:78
void appendUrlTag(QTextCursor &cursor, QString url)
Definition chat_view.cpp:233
void actMessageClicked()
Definition chat_view.cpp:660
QTextCharFormat highlightFormat
Definition chat_view.h:76
void appendHtml(const QString &html)
Definition chat_view.cpp:175
QColor serverMessageColor
Definition chat_view.h:106
Definition chat_view.h:38
Definition remote_connection_controller.h:20
Definition game.h:18
Definition tab_supervisor.h:92
Definition user_context_menu.h:32
Definition user_list_proxy.h:19
int relativePosition
Definition chat_view.h:44
UserMessagePosition(QTextCursor &cursor)
Definition chat_view.cpp:51
QTextBlock block
Definition chat_view.h:45
Definition card_ref.h:14
Definition chat_view.h:49
QDateTime timestamp
Definition chat_view.h:52
QString message
Definition chat_view.h:51
QString userName
Definition chat_view.h:50
Definition serverinfo_user.proto:2