Cockatrice 2026-06-27-Development-3.1.0-beta.3
A virtual tabletop for multiplayer card games
Loading...
Searching...
No Matches
user_info_popup.h
Go to the documentation of this file.
1#ifndef COCKATRICE_USER_INFO_POPUP_H
2#define COCKATRICE_USER_INFO_POPUP_H
3
4#include "../../interface/widgets/server/game_type_map.h"
5#include "user_list_painter.h"
6
7#include <QFrame>
8#include <QListView>
9#include <QMap>
10#include <QPixmap>
11#include <QStandardItemModel>
13#include <libcockatrice/protocol/pb/response.pb.h>
14#include <libcockatrice/protocol/pb/serverinfo_game.pb.h>
15#include <libcockatrice/protocol/pb/serverinfo_user.pb.h>
16
17class AbstractClient;
18class QLabel;
19class QPushButton;
20class TabSupervisor;
21
22// ── Roles ─────────────────────────────────────────────────────────────────────
23
24namespace PopupRoles
25{
26constexpr int GameData = Qt::UserRole + 10;
27}
28
29// ── Header widget ─────────────────────────────────────────────────────────────
30
41class UserInfoHeaderWidget : public QWidget
42{
43 Q_OBJECT
44
45 static constexpr int HeaderHeight = 130;
46 static constexpr int AvatarSize = 68;
47 static constexpr int AvatarPawnSize = 46;
48 static constexpr int LeftPad = 14;
49 static constexpr int AvatarToTextGap = 10;
50
51public:
52 explicit UserInfoHeaderWidget(QWidget *parent = nullptr);
53
54 void setUserData(const ServerInfo_User &user,
55 bool online,
56 const QPixmap &avatar,
57 const QPixmap &cardArt,
58 const CardArtParams &params);
59
60protected:
61 void paintEvent(QPaintEvent *e) override;
62
63private:
64 ServerInfo_User m_user;
65 bool m_online = false;
66 QPixmap m_avatar;
67 QPixmap m_cardArt;
69};
70
71// ── Main popup ────────────────────────────────────────────────────────────────
72
89class UserInfoPopup : public QFrame
90{
91 Q_OBJECT
92
93 static constexpr int PopupWidth = 316;
94
95public:
96 explicit UserInfoPopup(TabSupervisor *tabSupervisor,
97 AbstractClient *client,
98 const QMap<QString, QPixmap> *avatarCache,
99 const QMap<QString, QPixmap> *cardArtCache,
100 const QMap<QString, CardArtParams> *cardArtParamsMap,
101 QWidget *parent);
102
107 void
108 showForUser(const QString &userName, const ServerInfo_User &userInfo, bool online, bool isBuddy, bool isIgnored);
109 void fetchGames();
110
111 [[nodiscard]] QString currentUser() const
112 {
113 return m_currentUser;
114 }
115
117 void updateActionButtons(const ServerInfo_User &userInfo, bool online, bool isBuddy, bool isIgnored);
118
119signals:
123
125 void joinGameRequested(int gameId, int roomId, bool asSpectator);
126
127 // ── Action signals — connect to UserContextMenu::exec*() ──────────────────
128 void chatRequested(const QString &userName);
129 void detailsRequested(const QString &userName);
130 void showGamesRequested(const QString &userName);
131 void addBuddyRequested(const QString &userName);
132 void removeBuddyRequested(const QString &userName);
133 void addIgnoreRequested(const QString &userName);
134 void removeIgnoreRequested(const QString &userName);
135 void banRequested(const QString &userName);
136 void warnRequested(const QString &userName);
137 void banHistoryRequested(const QString &userName);
138 void warnHistoryRequested(const QString &userName);
139 void adminNotesRequested(const QString &userName);
140 void promoteToModRequested(const QString &userName);
141 void demoteFromModRequested(const QString &userName);
142 void promoteToJudgeRequested(const QString &userName);
143 void demoteFromJudgeRequested(const QString &userName);
144
145protected:
146#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
147 void enterEvent(QEnterEvent *e) override;
148#else
149 void enterEvent(QEvent *e) override;
150#endif
151 void leaveEvent(QEvent *e) override;
152
153private slots:
154 void refreshGames();
155 void onGamesReceived(const Response &r, const QString &forUser);
156 void onGamesContextMenu(const QPoint &pos);
157
158private:
159 void buildUi();
160 void rebuildActionButtons(const ServerInfo_User &userInfo, bool online, bool isBuddy, bool isIgnored);
161
164 const QMap<QString, QPixmap> *m_avatarCache;
165 const QMap<QString, QPixmap> *m_cardArtCache;
166 const QMap<QString, CardArtParams> *m_cardArtParamsMap;
167
169 ServerInfo_User m_currentUserInfo;
170 bool m_currentOnline = false;
171
173 QWidget *m_actionArea;
174 QListView *m_gamesView;
175 QStandardItemModel *m_gamesModel;
177 QPushButton *m_closeBtn;
178 QPushButton *m_refreshBtn;
179};
180
181#endif // COCKATRICE_USER_INFO_POPUP_H
Definition abstract_client.h:51
Definition tab_supervisor.h:84
Paints the enlarged banner card art + circular avatar section at the top of the UserInfoPopup.
Definition user_info_popup.h:42
QPixmap m_cardArt
Definition user_info_popup.h:67
static constexpr int AvatarToTextGap
Definition user_info_popup.h:49
static constexpr int HeaderHeight
Definition user_info_popup.h:45
void setUserData(const ServerInfo_User &user, bool online, const QPixmap &avatar, const QPixmap &cardArt, const CardArtParams &params)
Definition user_info_popup.cpp:98
static constexpr int AvatarSize
Definition user_info_popup.h:46
bool m_online
Definition user_info_popup.h:65
ServerInfo_User m_user
Definition user_info_popup.h:64
UserInfoHeaderWidget(QWidget *parent=nullptr)
Definition user_info_popup.cpp:92
static constexpr int AvatarPawnSize
Definition user_info_popup.h:47
static constexpr int LeftPad
Definition user_info_popup.h:48
CardArtParams m_params
Definition user_info_popup.h:68
QPixmap m_avatar
Definition user_info_popup.h:66
void paintEvent(QPaintEvent *e) override
Definition user_info_popup.cpp:112
void warnHistoryRequested(const QString &userName)
void warnRequested(const QString &userName)
TabSupervisor * m_ts
Definition user_info_popup.h:162
UserInfoPopup(TabSupervisor *tabSupervisor, AbstractClient *client, const QMap< QString, QPixmap > *avatarCache, const QMap< QString, QPixmap > *cardArtCache, const QMap< QString, CardArtParams > *cardArtParamsMap, QWidget *parent)
Definition user_info_popup.cpp:255
void enterEvent(QEnterEvent *e) override
Definition user_info_popup.cpp:640
bool m_currentOnline
Definition user_info_popup.h:170
static constexpr int PopupWidth
Definition user_info_popup.h:93
const QMap< QString, QPixmap > * m_avatarCache
Definition user_info_popup.h:164
QLabel * m_gamesStatus
Definition user_info_popup.h:176
void banHistoryRequested(const QString &userName)
const QMap< QString, QPixmap > * m_cardArtCache
Definition user_info_popup.h:165
void leaveEvent(QEvent *e) override
Definition user_info_popup.cpp:652
void onGamesContextMenu(const QPoint &pos)
Definition user_info_popup.cpp:489
void refreshGames()
Definition user_info_popup.cpp:628
QPushButton * m_refreshBtn
Definition user_info_popup.h:178
QString currentUser() const
Definition user_info_popup.h:111
QWidget * m_actionArea
rebuilt per user
Definition user_info_popup.h:173
void onGamesReceived(const Response &r, const QString &forUser)
Definition user_info_popup.cpp:584
AbstractClient * m_client
Definition user_info_popup.h:163
QStandardItemModel * m_gamesModel
Definition user_info_popup.h:175
QString m_currentUser
Definition user_info_popup.h:168
UserInfoHeaderWidget * m_header
Definition user_info_popup.h:172
void removeIgnoreRequested(const QString &userName)
void buildUi()
Definition user_info_popup.cpp:270
ServerInfo_User m_currentUserInfo
Definition user_info_popup.h:169
const QMap< QString, CardArtParams > * m_cardArtParamsMap
Definition user_info_popup.h:166
void chatRequested(const QString &userName)
void banRequested(const QString &userName)
QPushButton * m_closeBtn
Definition user_info_popup.h:177
void updateActionButtons(const ServerInfo_User &userInfo, bool online, bool isBuddy, bool isIgnored)
Definition user_info_popup.cpp:483
void demoteFromJudgeRequested(const QString &userName)
void promoteToModRequested(const QString &userName)
void adminNotesRequested(const QString &userName)
void detailsRequested(const QString &userName)
void demoteFromModRequested(const QString &userName)
void addIgnoreRequested(const QString &userName)
void mouseLeftPopup()
QListView * m_gamesView
Definition user_info_popup.h:174
void fetchGames()
Definition user_info_popup.cpp:568
void showForUser(const QString &userName, const ServerInfo_User &userInfo, bool online, bool isBuddy, bool isIgnored)
Definition user_info_popup.cpp:530
void mouseEnteredPopup()
void joinGameRequested(int gameId, int roomId, bool asSpectator)
void removeBuddyRequested(const QString &userName)
void addBuddyRequested(const QString &userName)
void promoteToJudgeRequested(const QString &userName)
void showGamesRequested(const QString &userName)
void closeRequested()
void rebuildActionButtons(const ServerInfo_User &userInfo, bool online, bool isBuddy, bool isIgnored)
Definition user_info_popup.cpp:365
Definition user_info_popup.h:25
constexpr int GameData
Definition user_info_popup.h:26
Definition user_list_painter.h:19