Cockatrice
2026-10-19-Development-3.1.2-beta.2
A virtual tabletop for multiplayer card games
Toggle main menu visibility
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 "
user_list_painter.h
"
5
6
#include <QColor>
7
#include <QFrame>
8
#include <QPalette>
9
#include <QPixmap>
10
#include <QString>
11
#include <QWidget>
12
#include <functional>
13
#include <libcockatrice/protocol/pb/serverinfo_user.pb.h>
14
#include <qnamespace.h>
15
#include <qtmetamacros.h>
16
#include <utility>
17
18
class
AbstractClient
;
19
class
QLabel;
20
class
QPushButton;
21
class
TabSupervisor
;
22
class
QListView;
23
class
QPoint;
24
class
QStandardItemModel;
25
class
Response
;
26
template
<
class
Key,
class
T>
class
QMap
;
27
28
// ── Roles ─────────────────────────────────────────────────────────────────────
29
30
namespace
PopupRoles
31
{
32
constexpr
int
GameData
= Qt::UserRole + 10;
33
}
34
35
// Popup theme
36
42
struct
PopupTheme
43
{
44
bool
dark
=
false
;
45
QColor
bg
;
46
QColor
border
;
47
QColor
text
;
48
QColor
subText
;
49
QColor
buttonBg
;
50
QColor
buttonBorder
;
51
QColor
buttonHover
;
52
QColor
buttonPressed
;
53
QColor
buttonDisabled
;
54
QColor
closeBg
;
55
QColor
closeHover
;
56
QColor
gamesRow
;
57
QColor
gamesSelected
;
58
QColor
gamesSeparator
;
59
QColor
statusText
;
60
61
static
PopupTheme
fromPalette
(
const
QPalette &palette,
bool
dark
);
62
};
63
64
// ── Header widget ─────────────────────────────────────────────────────────────
65
76
class
UserInfoHeaderWidget
:
public
QWidget
77
{
78
Q_OBJECT
79
80
static
constexpr
int
HeaderHeight
= 130;
81
static
constexpr
int
AvatarSize
= 68;
82
static
constexpr
int
AvatarPawnSize
= 46;
83
static
constexpr
int
LeftPad
= 14;
84
static
constexpr
int
AvatarToTextGap
= 10;
85
86
public
:
87
explicit
UserInfoHeaderWidget
(QWidget *parent =
nullptr
);
88
89
void
setUserData
(
const
ServerInfo_User
&_user,
90
bool
_online,
91
const
QPixmap &_avatar,
92
const
QPixmap &_cardArt,
93
const
CardArtParams
&_params);
94
95
protected
:
96
void
paintEvent
(QPaintEvent *e)
override
;
97
98
private
:
99
ServerInfo_User
user
;
100
bool
online
=
false
;
101
QPixmap
avatar
;
102
QPixmap
cardArt
;
103
CardArtParams
params
;
104
QString
attribution
;
105
};
106
107
// ── Main popup ────────────────────────────────────────────────────────────────
108
125
class
UserInfoPopup
:
public
QFrame
126
{
127
Q_OBJECT
128
129
static
constexpr
int
PopupWidth
= 316;
130
131
public
:
132
explicit
UserInfoPopup
(
TabSupervisor
*_ts,
133
AbstractClient
*_client,
134
const
QMap<QString, QPixmap>
*_avatarCache,
135
const
QMap<QString, QPixmap>
*_cardArtCache,
136
const
QMap<QString, CardArtParams>
*_cardArtParamsMap,
137
QWidget *parent);
138
143
void
144
showForUser
(
const
QString &userName,
const
ServerInfo_User
&userInfo,
bool
online,
bool
isBuddy,
bool
isIgnored);
145
void
fetchGames
();
146
147
[[nodiscard]] QString
getCurrentUser
()
const
148
{
149
return
currentUser
;
150
}
151
153
void
updateActionButtons
(
const
ServerInfo_User
&userInfo,
bool
online,
bool
isBuddy,
bool
isIgnored);
154
156
void
refreshHeader
();
157
164
void
setGameInviteAvailable
(std::function<
bool
(
const
QString &userName)> available)
165
{
166
gameInviteAvailable
= std::move(available);
167
}
168
169
signals:
170
void
mouseEnteredPopup
();
171
void
mouseLeftPopup
();
172
void
closeRequested
();
173
175
void
joinGameRequested
(
int
gameId,
int
roomId,
bool
asSpectator);
176
177
// ── Action signals — connect to UserContextMenu::exec*() ──────────────────
178
void
chatRequested
(
const
QString &userName);
179
void
inviteRequested
(
const
QString &userName);
180
void
detailsRequested
(
const
QString &userName);
181
void
showGamesRequested
(
const
QString &userName);
182
void
addBuddyRequested
(
const
QString &userName);
183
void
removeBuddyRequested
(
const
QString &userName);
184
void
addIgnoreRequested
(
const
QString &userName);
185
void
removeIgnoreRequested
(
const
QString &userName);
186
void
banRequested
(
const
QString &userName);
187
void
warnRequested
(
const
QString &userName);
188
void
banHistoryRequested
(
const
QString &userName);
189
void
warnHistoryRequested
(
const
QString &userName);
190
void
adminNotesRequested
(
const
QString &userName);
191
void
promoteToModRequested
(
const
QString &userName);
192
void
demoteFromModRequested
(
const
QString &userName);
193
void
promoteToJudgeRequested
(
const
QString &userName);
194
void
demoteFromJudgeRequested
(
const
QString &userName);
195
196
protected
:
197
void
enterEvent
(QEnterEvent *e)
override
;
198
void
leaveEvent
(QEvent *e)
override
;
199
200
private
slots:
201
void
refreshGames
();
202
void
onGamesReceived
(
const
Response
&r,
const
QString &forUser);
203
void
onGamesContextMenu
(
const
QPoint &pos);
204
205
private
:
206
void
buildUi
();
207
void
applyTheme
();
208
void
rebuildActionButtons
(
const
ServerInfo_User
&userInfo,
bool
online,
bool
isBuddy,
bool
isIgnored);
209
210
TabSupervisor
*
ts
;
211
AbstractClient
*
client
;
212
const
QMap<QString, QPixmap>
*
avatarCache
;
213
const
QMap<QString, QPixmap>
*
cardArtCache
;
214
const
QMap<QString, CardArtParams>
*
cardArtParamsMap
;
215
216
PopupTheme
theme
;
217
218
QString
currentUser
;
219
ServerInfo_User
currentUserInfo
;
220
bool
currentOnline
=
false
;
221
std::function<bool(
const
QString &userName)>
gameInviteAvailable
;
222
223
UserInfoHeaderWidget
*
header
;
224
QWidget *
actionArea
;
225
QLabel *
gamesLabel
;
226
QFrame *
separator
;
227
QListView *
gamesView
;
228
QStandardItemModel *
gamesModel
;
229
QLabel *
gamesStatus
;
230
QPushButton *
closeBtn
;
231
QPushButton *
refreshBtn
;
232
};
233
234
#endif
// COCKATRICE_USER_INFO_POPUP_H
AbstractClient
Definition
abstract_client.h:73
QMap
Definition
game.h:18
TabSupervisor
Definition
tab_supervisor.h:92
UserInfoHeaderWidget
Paints the enlarged banner card art + circular avatar section at the top of the UserInfoPopup.
Definition
user_info_popup.h:77
UserInfoHeaderWidget::online
bool online
Definition
user_info_popup.h:100
UserInfoHeaderWidget::AvatarToTextGap
static constexpr int AvatarToTextGap
Definition
user_info_popup.h:84
UserInfoHeaderWidget::HeaderHeight
static constexpr int HeaderHeight
Definition
user_info_popup.h:80
UserInfoHeaderWidget::setUserData
void setUserData(const ServerInfo_User &_user, bool _online, const QPixmap &_avatar, const QPixmap &_cardArt, const CardArtParams &_params)
Definition
user_info_popup.cpp:180
UserInfoHeaderWidget::cardArt
QPixmap cardArt
Definition
user_info_popup.h:102
UserInfoHeaderWidget::AvatarSize
static constexpr int AvatarSize
Definition
user_info_popup.h:81
UserInfoHeaderWidget::params
CardArtParams params
Definition
user_info_popup.h:103
UserInfoHeaderWidget::UserInfoHeaderWidget
UserInfoHeaderWidget(QWidget *parent=nullptr)
Definition
user_info_popup.cpp:174
UserInfoHeaderWidget::AvatarPawnSize
static constexpr int AvatarPawnSize
Definition
user_info_popup.h:82
UserInfoHeaderWidget::LeftPad
static constexpr int LeftPad
Definition
user_info_popup.h:83
UserInfoHeaderWidget::paintEvent
void paintEvent(QPaintEvent *e) override
Definition
user_info_popup.cpp:204
UserInfoHeaderWidget::avatar
QPixmap avatar
Definition
user_info_popup.h:101
UserInfoHeaderWidget::attribution
QString attribution
Definition
user_info_popup.h:104
UserInfoHeaderWidget::user
ServerInfo_User user
Definition
user_info_popup.h:99
UserInfoPopup::getCurrentUser
QString getCurrentUser() const
Definition
user_info_popup.h:147
UserInfoPopup::gamesStatus
QLabel * gamesStatus
Definition
user_info_popup.h:229
UserInfoPopup::warnHistoryRequested
void warnHistoryRequested(const QString &userName)
UserInfoPopup::separator
QFrame * separator
Definition
user_info_popup.h:226
UserInfoPopup::warnRequested
void warnRequested(const QString &userName)
UserInfoPopup::currentUser
QString currentUser
Definition
user_info_popup.h:218
UserInfoPopup::setGameInviteAvailable
void setGameInviteAvailable(std::function< bool(const QString &userName)> available)
Definition
user_info_popup.h:164
UserInfoPopup::currentUserInfo
ServerInfo_User currentUserInfo
Definition
user_info_popup.h:219
UserInfoPopup::gameInviteAvailable
std::function< bool(const QString &userName)> gameInviteAvailable
Definition
user_info_popup.h:221
UserInfoPopup::enterEvent
void enterEvent(QEnterEvent *e) override
Definition
user_info_popup.cpp:814
UserInfoPopup::cardArtParamsMap
const QMap< QString, CardArtParams > * cardArtParamsMap
Definition
user_info_popup.h:214
UserInfoPopup::gamesView
QListView * gamesView
Definition
user_info_popup.h:227
UserInfoPopup::currentOnline
bool currentOnline
Definition
user_info_popup.h:220
UserInfoPopup::PopupWidth
static constexpr int PopupWidth
Definition
user_info_popup.h:129
UserInfoPopup::gamesModel
QStandardItemModel * gamesModel
Definition
user_info_popup.h:228
UserInfoPopup::banHistoryRequested
void banHistoryRequested(const QString &userName)
UserInfoPopup::applyTheme
void applyTheme()
Definition
user_info_popup.cpp:463
UserInfoPopup::avatarCache
const QMap< QString, QPixmap > * avatarCache
Definition
user_info_popup.h:212
UserInfoPopup::UserInfoPopup
UserInfoPopup(TabSupervisor *_ts, AbstractClient *_client, const QMap< QString, QPixmap > *_avatarCache, const QMap< QString, QPixmap > *_cardArtCache, const QMap< QString, CardArtParams > *_cardArtParamsMap, QWidget *parent)
Definition
user_info_popup.cpp:383
UserInfoPopup::leaveEvent
void leaveEvent(QEvent *e) override
Definition
user_info_popup.cpp:819
UserInfoPopup::onGamesContextMenu
void onGamesContextMenu(const QPoint &pos)
Definition
user_info_popup.cpp:653
UserInfoPopup::refreshGames
void refreshGames()
Definition
user_info_popup.cpp:803
UserInfoPopup::gamesLabel
QLabel * gamesLabel
Definition
user_info_popup.h:225
UserInfoPopup::client
AbstractClient * client
Definition
user_info_popup.h:211
UserInfoPopup::onGamesReceived
void onGamesReceived(const Response &r, const QString &forUser)
Definition
user_info_popup.cpp:759
UserInfoPopup::refreshHeader
void refreshHeader()
Definition
user_info_popup.cpp:696
UserInfoPopup::removeIgnoreRequested
void removeIgnoreRequested(const QString &userName)
UserInfoPopup::buildUi
void buildUi()
Definition
user_info_popup.cpp:403
UserInfoPopup::refreshBtn
QPushButton * refreshBtn
Definition
user_info_popup.h:231
UserInfoPopup::theme
PopupTheme theme
Definition
user_info_popup.h:216
UserInfoPopup::header
UserInfoHeaderWidget * header
Definition
user_info_popup.h:223
UserInfoPopup::closeBtn
QPushButton * closeBtn
Definition
user_info_popup.h:230
UserInfoPopup::chatRequested
void chatRequested(const QString &userName)
UserInfoPopup::banRequested
void banRequested(const QString &userName)
UserInfoPopup::inviteRequested
void inviteRequested(const QString &userName)
UserInfoPopup::updateActionButtons
void updateActionButtons(const ServerInfo_User &userInfo, bool online, bool isBuddy, bool isIgnored)
Definition
user_info_popup.cpp:647
UserInfoPopup::demoteFromJudgeRequested
void demoteFromJudgeRequested(const QString &userName)
UserInfoPopup::promoteToModRequested
void promoteToModRequested(const QString &userName)
UserInfoPopup::adminNotesRequested
void adminNotesRequested(const QString &userName)
UserInfoPopup::detailsRequested
void detailsRequested(const QString &userName)
UserInfoPopup::demoteFromModRequested
void demoteFromModRequested(const QString &userName)
UserInfoPopup::addIgnoreRequested
void addIgnoreRequested(const QString &userName)
UserInfoPopup::mouseLeftPopup
void mouseLeftPopup()
UserInfoPopup::ts
TabSupervisor * ts
Definition
user_info_popup.h:210
UserInfoPopup::fetchGames
void fetchGames()
Definition
user_info_popup.cpp:743
UserInfoPopup::showForUser
void showForUser(const QString &userName, const ServerInfo_User &userInfo, bool online, bool isBuddy, bool isIgnored)
Definition
user_info_popup.cpp:711
UserInfoPopup::mouseEnteredPopup
void mouseEnteredPopup()
UserInfoPopup::joinGameRequested
void joinGameRequested(int gameId, int roomId, bool asSpectator)
UserInfoPopup::removeBuddyRequested
void removeBuddyRequested(const QString &userName)
UserInfoPopup::actionArea
QWidget * actionArea
rebuilt per user
Definition
user_info_popup.h:224
UserInfoPopup::addBuddyRequested
void addBuddyRequested(const QString &userName)
UserInfoPopup::cardArtCache
const QMap< QString, QPixmap > * cardArtCache
Definition
user_info_popup.h:213
UserInfoPopup::promoteToJudgeRequested
void promoteToJudgeRequested(const QString &userName)
UserInfoPopup::showGamesRequested
void showGamesRequested(const QString &userName)
UserInfoPopup::closeRequested
void closeRequested()
UserInfoPopup::rebuildActionButtons
void rebuildActionButtons(const ServerInfo_User &userInfo, bool online, bool isBuddy, bool isIgnored)
Definition
user_info_popup.cpp:522
PopupRoles
Definition
user_info_popup.h:31
PopupRoles::GameData
constexpr int GameData
Definition
user_info_popup.h:32
CardArtParams
Definition
user_list_painter.h:23
PopupTheme
Definition
user_info_popup.h:43
PopupTheme::gamesSeparator
QColor gamesSeparator
Definition
user_info_popup.h:58
PopupTheme::closeBg
QColor closeBg
Definition
user_info_popup.h:54
PopupTheme::fromPalette
static PopupTheme fromPalette(const QPalette &palette, bool dark)
Definition
user_info_popup.cpp:69
PopupTheme::buttonHover
QColor buttonHover
Definition
user_info_popup.h:51
PopupTheme::bg
QColor bg
Definition
user_info_popup.h:45
PopupTheme::gamesSelected
QColor gamesSelected
Definition
user_info_popup.h:57
PopupTheme::statusText
QColor statusText
Definition
user_info_popup.h:59
PopupTheme::buttonDisabled
QColor buttonDisabled
Definition
user_info_popup.h:53
PopupTheme::buttonBorder
QColor buttonBorder
Definition
user_info_popup.h:50
PopupTheme::border
QColor border
Definition
user_info_popup.h:46
PopupTheme::buttonPressed
QColor buttonPressed
Definition
user_info_popup.h:52
PopupTheme::gamesRow
QColor gamesRow
Definition
user_info_popup.h:56
PopupTheme::dark
bool dark
Definition
user_info_popup.h:44
PopupTheme::buttonBg
QColor buttonBg
Definition
user_info_popup.h:49
PopupTheme::closeHover
QColor closeHover
Definition
user_info_popup.h:55
PopupTheme::subText
QColor subText
Definition
user_info_popup.h:48
PopupTheme::text
QColor text
Definition
user_info_popup.h:47
Response
Definition
response.proto:11
ServerInfo_User
Definition
serverinfo_user.proto:2
user_list_painter.h
cockatrice
src
interface
widgets
server
user
user_info_popup.h
Generated by
1.18.0