Cockatrice
2026-09-01-Development-3.1.0-beta.10
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>
12
#include <functional>
13
#include <
libcockatrice/network/server/remote/user_level.h
>
14
#include <libcockatrice/protocol/pb/response.pb.h>
15
#include <libcockatrice/protocol/pb/serverinfo_game.pb.h>
16
#include <libcockatrice/protocol/pb/serverinfo_user.pb.h>
17
18
class
AbstractClient
;
19
class
QLabel;
20
class
QPushButton;
21
class
TabSupervisor
;
22
23
// ── Roles ─────────────────────────────────────────────────────────────────────
24
25
namespace
PopupRoles
26
{
27
constexpr
int
GameData
= Qt::UserRole + 10;
28
}
29
30
// Popup theme
31
37
struct
PopupTheme
38
{
39
bool
dark
=
false
;
40
QColor
bg
;
41
QColor
border
;
42
QColor
text
;
43
QColor
subText
;
44
QColor
buttonBg
;
45
QColor
buttonBorder
;
46
QColor
buttonHover
;
47
QColor
buttonPressed
;
48
QColor
buttonDisabled
;
49
QColor
closeBg
;
50
QColor
closeHover
;
51
QColor
gamesRow
;
52
QColor
gamesSelected
;
53
QColor
gamesSeparator
;
54
QColor
statusText
;
55
56
static
PopupTheme
fromPalette
(
const
QPalette &palette,
bool
dark
);
57
};
58
59
// ── Header widget ─────────────────────────────────────────────────────────────
60
71
class
UserInfoHeaderWidget
:
public
QWidget
72
{
73
Q_OBJECT
74
75
static
constexpr
int
HeaderHeight
= 130;
76
static
constexpr
int
AvatarSize
= 68;
77
static
constexpr
int
AvatarPawnSize
= 46;
78
static
constexpr
int
LeftPad
= 14;
79
static
constexpr
int
AvatarToTextGap
= 10;
80
81
public
:
82
explicit
UserInfoHeaderWidget
(QWidget *parent =
nullptr
);
83
84
void
setUserData
(
const
ServerInfo_User
&_user,
85
bool
_online,
86
const
QPixmap &_avatar,
87
const
QPixmap &_cardArt,
88
const
CardArtParams
&_params);
89
90
protected
:
91
void
paintEvent
(QPaintEvent *e)
override
;
92
93
private
:
94
ServerInfo_User
user
;
95
bool
online
=
false
;
96
QPixmap
avatar
;
97
QPixmap
cardArt
;
98
CardArtParams
params
;
99
QString
attribution
;
100
};
101
102
// ── Main popup ────────────────────────────────────────────────────────────────
103
120
class
UserInfoPopup
:
public
QFrame
121
{
122
Q_OBJECT
123
124
static
constexpr
int
PopupWidth
= 316;
125
126
public
:
127
explicit
UserInfoPopup
(
TabSupervisor
*_ts,
128
AbstractClient
*_client,
129
const
QMap<QString, QPixmap> *_avatarCache,
130
const
QMap<QString, QPixmap> *_cardArtCache,
131
const
QMap<QString, CardArtParams> *_cardArtParamsMap,
132
QWidget *parent);
133
138
void
139
showForUser
(
const
QString &userName,
const
ServerInfo_User
&userInfo,
bool
online,
bool
isBuddy,
bool
isIgnored);
140
void
fetchGames
();
141
142
[[nodiscard]] QString
getCurrentUser
()
const
143
{
144
return
currentUser
;
145
}
146
148
void
updateActionButtons
(
const
ServerInfo_User
&userInfo,
bool
online,
bool
isBuddy,
bool
isIgnored);
149
151
void
refreshHeader
();
152
159
void
setGameInviteAvailable
(std::function<
bool
(
const
QString &userName)> available)
160
{
161
gameInviteAvailable
= std::move(available);
162
}
163
164
signals:
165
void
mouseEnteredPopup
();
166
void
mouseLeftPopup
();
167
void
closeRequested
();
168
170
void
joinGameRequested
(
int
gameId,
int
roomId,
bool
asSpectator);
171
172
// ── Action signals — connect to UserContextMenu::exec*() ──────────────────
173
void
chatRequested
(
const
QString &userName);
174
void
inviteRequested
(
const
QString &userName);
175
void
detailsRequested
(
const
QString &userName);
176
void
showGamesRequested
(
const
QString &userName);
177
void
addBuddyRequested
(
const
QString &userName);
178
void
removeBuddyRequested
(
const
QString &userName);
179
void
addIgnoreRequested
(
const
QString &userName);
180
void
removeIgnoreRequested
(
const
QString &userName);
181
void
banRequested
(
const
QString &userName);
182
void
warnRequested
(
const
QString &userName);
183
void
banHistoryRequested
(
const
QString &userName);
184
void
warnHistoryRequested
(
const
QString &userName);
185
void
adminNotesRequested
(
const
QString &userName);
186
void
promoteToModRequested
(
const
QString &userName);
187
void
demoteFromModRequested
(
const
QString &userName);
188
void
promoteToJudgeRequested
(
const
QString &userName);
189
void
demoteFromJudgeRequested
(
const
QString &userName);
190
191
protected
:
192
void
enterEvent
(QEnterEvent *e)
override
;
193
void
leaveEvent
(QEvent *e)
override
;
194
195
private
slots:
196
void
refreshGames
();
197
void
onGamesReceived
(
const
Response
&r,
const
QString &forUser);
198
void
onGamesContextMenu
(
const
QPoint &pos);
199
200
private
:
201
void
buildUi
();
202
void
applyTheme
();
203
void
rebuildActionButtons
(
const
ServerInfo_User
&userInfo,
bool
online,
bool
isBuddy,
bool
isIgnored);
204
205
TabSupervisor
*
ts
;
206
AbstractClient
*
client
;
207
const
QMap<QString, QPixmap> *
avatarCache
;
208
const
QMap<QString, QPixmap> *
cardArtCache
;
209
const
QMap<QString, CardArtParams> *
cardArtParamsMap
;
210
211
PopupTheme
theme
;
212
213
QString
currentUser
;
214
ServerInfo_User
currentUserInfo
;
215
bool
currentOnline
=
false
;
216
std::function<bool(
const
QString &userName)>
gameInviteAvailable
;
217
218
UserInfoHeaderWidget
*
header
;
219
QWidget *
actionArea
;
220
QLabel *
gamesLabel
;
221
QFrame *
separator
;
222
QListView *
gamesView
;
223
QStandardItemModel *
gamesModel
;
224
QLabel *
gamesStatus
;
225
QPushButton *
closeBtn
;
226
QPushButton *
refreshBtn
;
227
};
228
229
#endif
// COCKATRICE_USER_INFO_POPUP_H
AbstractClient
Definition
abstract_client.h:57
TabSupervisor
Definition
tab_supervisor.h:84
UserInfoHeaderWidget
Paints the enlarged banner card art + circular avatar section at the top of the UserInfoPopup.
Definition
user_info_popup.h:72
UserInfoHeaderWidget::online
bool online
Definition
user_info_popup.h:95
UserInfoHeaderWidget::AvatarToTextGap
static constexpr int AvatarToTextGap
Definition
user_info_popup.h:79
UserInfoHeaderWidget::HeaderHeight
static constexpr int HeaderHeight
Definition
user_info_popup.h:75
UserInfoHeaderWidget::setUserData
void setUserData(const ServerInfo_User &_user, bool _online, const QPixmap &_avatar, const QPixmap &_cardArt, const CardArtParams &_params)
Definition
user_info_popup.cpp:145
UserInfoHeaderWidget::cardArt
QPixmap cardArt
Definition
user_info_popup.h:97
UserInfoHeaderWidget::AvatarSize
static constexpr int AvatarSize
Definition
user_info_popup.h:76
UserInfoHeaderWidget::params
CardArtParams params
Definition
user_info_popup.h:98
UserInfoHeaderWidget::UserInfoHeaderWidget
UserInfoHeaderWidget(QWidget *parent=nullptr)
Definition
user_info_popup.cpp:139
UserInfoHeaderWidget::AvatarPawnSize
static constexpr int AvatarPawnSize
Definition
user_info_popup.h:77
UserInfoHeaderWidget::LeftPad
static constexpr int LeftPad
Definition
user_info_popup.h:78
UserInfoHeaderWidget::paintEvent
void paintEvent(QPaintEvent *e) override
Definition
user_info_popup.cpp:169
UserInfoHeaderWidget::avatar
QPixmap avatar
Definition
user_info_popup.h:96
UserInfoHeaderWidget::attribution
QString attribution
Definition
user_info_popup.h:99
UserInfoHeaderWidget::user
ServerInfo_User user
Definition
user_info_popup.h:94
UserInfoPopup::getCurrentUser
QString getCurrentUser() const
Definition
user_info_popup.h:142
UserInfoPopup::gamesStatus
QLabel * gamesStatus
Definition
user_info_popup.h:224
UserInfoPopup::warnHistoryRequested
void warnHistoryRequested(const QString &userName)
UserInfoPopup::separator
QFrame * separator
Definition
user_info_popup.h:221
UserInfoPopup::warnRequested
void warnRequested(const QString &userName)
UserInfoPopup::currentUser
QString currentUser
Definition
user_info_popup.h:213
UserInfoPopup::setGameInviteAvailable
void setGameInviteAvailable(std::function< bool(const QString &userName)> available)
Definition
user_info_popup.h:159
UserInfoPopup::currentUserInfo
ServerInfo_User currentUserInfo
Definition
user_info_popup.h:214
UserInfoPopup::gameInviteAvailable
std::function< bool(const QString &userName)> gameInviteAvailable
Definition
user_info_popup.h:216
UserInfoPopup::enterEvent
void enterEvent(QEnterEvent *e) override
Definition
user_info_popup.cpp:773
UserInfoPopup::cardArtParamsMap
const QMap< QString, CardArtParams > * cardArtParamsMap
Definition
user_info_popup.h:209
UserInfoPopup::gamesView
QListView * gamesView
Definition
user_info_popup.h:222
UserInfoPopup::currentOnline
bool currentOnline
Definition
user_info_popup.h:215
UserInfoPopup::PopupWidth
static constexpr int PopupWidth
Definition
user_info_popup.h:124
UserInfoPopup::gamesModel
QStandardItemModel * gamesModel
Definition
user_info_popup.h:223
UserInfoPopup::banHistoryRequested
void banHistoryRequested(const QString &userName)
UserInfoPopup::applyTheme
void applyTheme()
Definition
user_info_popup.cpp:423
UserInfoPopup::avatarCache
const QMap< QString, QPixmap > * avatarCache
Definition
user_info_popup.h:207
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:343
UserInfoPopup::leaveEvent
void leaveEvent(QEvent *e) override
Definition
user_info_popup.cpp:778
UserInfoPopup::onGamesContextMenu
void onGamesContextMenu(const QPoint &pos)
Definition
user_info_popup.cpp:613
UserInfoPopup::refreshGames
void refreshGames()
Definition
user_info_popup.cpp:762
UserInfoPopup::gamesLabel
QLabel * gamesLabel
Definition
user_info_popup.h:220
UserInfoPopup::client
AbstractClient * client
Definition
user_info_popup.h:206
UserInfoPopup::onGamesReceived
void onGamesReceived(const Response &r, const QString &forUser)
Definition
user_info_popup.cpp:718
UserInfoPopup::refreshHeader
void refreshHeader()
Definition
user_info_popup.cpp:655
UserInfoPopup::removeIgnoreRequested
void removeIgnoreRequested(const QString &userName)
UserInfoPopup::buildUi
void buildUi()
Definition
user_info_popup.cpp:363
UserInfoPopup::refreshBtn
QPushButton * refreshBtn
Definition
user_info_popup.h:226
UserInfoPopup::theme
PopupTheme theme
Definition
user_info_popup.h:211
UserInfoPopup::header
UserInfoHeaderWidget * header
Definition
user_info_popup.h:218
UserInfoPopup::closeBtn
QPushButton * closeBtn
Definition
user_info_popup.h:225
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:607
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:205
UserInfoPopup::fetchGames
void fetchGames()
Definition
user_info_popup.cpp:702
UserInfoPopup::showForUser
void showForUser(const QString &userName, const ServerInfo_User &userInfo, bool online, bool isBuddy, bool isIgnored)
Definition
user_info_popup.cpp:670
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:219
UserInfoPopup::addBuddyRequested
void addBuddyRequested(const QString &userName)
UserInfoPopup::cardArtCache
const QMap< QString, QPixmap > * cardArtCache
Definition
user_info_popup.h:208
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:482
PopupRoles
Definition
user_info_popup.h:26
PopupRoles::GameData
constexpr int GameData
Definition
user_info_popup.h:27
CardArtParams
Definition
user_list_painter.h:20
PopupTheme
Definition
user_info_popup.h:38
PopupTheme::gamesSeparator
QColor gamesSeparator
Definition
user_info_popup.h:53
PopupTheme::closeBg
QColor closeBg
Definition
user_info_popup.h:49
PopupTheme::fromPalette
static PopupTheme fromPalette(const QPalette &palette, bool dark)
Definition
user_info_popup.cpp:34
PopupTheme::buttonHover
QColor buttonHover
Definition
user_info_popup.h:46
PopupTheme::bg
QColor bg
Definition
user_info_popup.h:40
PopupTheme::gamesSelected
QColor gamesSelected
Definition
user_info_popup.h:52
PopupTheme::statusText
QColor statusText
Definition
user_info_popup.h:54
PopupTheme::buttonDisabled
QColor buttonDisabled
Definition
user_info_popup.h:48
PopupTheme::buttonBorder
QColor buttonBorder
Definition
user_info_popup.h:45
PopupTheme::border
QColor border
Definition
user_info_popup.h:41
PopupTheme::buttonPressed
QColor buttonPressed
Definition
user_info_popup.h:47
PopupTheme::gamesRow
QColor gamesRow
Definition
user_info_popup.h:51
PopupTheme::dark
bool dark
Definition
user_info_popup.h:39
PopupTheme::buttonBg
QColor buttonBg
Definition
user_info_popup.h:44
PopupTheme::closeHover
QColor closeHover
Definition
user_info_popup.h:50
PopupTheme::subText
QColor subText
Definition
user_info_popup.h:43
PopupTheme::text
QColor text
Definition
user_info_popup.h:42
Response
Definition
response.proto:11
ServerInfo_User
Definition
serverinfo_user.proto:2
user_level.h
user_list_painter.h
cockatrice
src
interface
widgets
server
user
user_info_popup.h
Generated by
1.16.1