Cockatrice 2026-06-27-Development-3.1.0-beta.3
A virtual tabletop for multiplayer card games
Loading...
Searching...
No Matches
user_list_widget.h
Go to the documentation of this file.
1
6
7#ifndef USERLIST_H
8#define USERLIST_H
9
13#include "user_info_popup.h"
14#include "user_list_manager.h"
15#include "user_list_painter.h"
16
17#include <QComboBox>
18#include <QDialog>
19#include <QGroupBox>
20#include <QQueue>
21#include <QStyledItemDelegate>
22#include <QTextEdit>
23#include <QTreeWidgetItem>
25#include <libcockatrice/protocol/pb/moderator_commands.pb.h>
26
27class QTreeWidget;
28class ServerInfo_User;
29class AbstractClient;
30class TabSupervisor;
31class QLabel;
32class QCheckBox;
33class QSpinBox;
34class QRadioButton;
35class QPlainTextEdit;
36class Response;
37class CommandContainer;
38class UserContextMenu;
39
40class BanDialog : public QDialog
41{
42 Q_OBJECT
43private:
49 QPlainTextEdit *reasonEdit, *visibleReasonEdit;
50private slots:
51 void okClicked();
52 void enableTemporaryEdits(bool enabled);
53
54public:
55 explicit BanDialog(const ServerInfo_User &info, QWidget *parent = nullptr);
56 [[nodiscard]] QString getBanName() const;
57 [[nodiscard]] QString getBanIP() const;
58 [[nodiscard]] QString getBanId() const;
59 [[nodiscard]] int getMinutes() const;
60 [[nodiscard]] QString getReason() const;
61 [[nodiscard]] QString getVisibleReason() const;
62 [[nodiscard]] int getDeleteMessages() const;
63};
64
65class WarningDialog : public QDialog
66{
67 Q_OBJECT
68private:
70 QLineEdit *nameWarning;
71 QComboBox *warningOption;
72 QLineEdit *warnClientID;
73 QCheckBox *deleteMessages;
74private slots:
75 void okClicked();
76
77public:
78 WarningDialog(const QString userName, const QString clientID, QWidget *parent = nullptr);
79 [[nodiscard]] QString getName() const;
80 [[nodiscard]] QString getWarnID() const;
81 [[nodiscard]] QString getReason() const;
82 [[nodiscard]] int getDeleteMessages() const;
83 void addWarningOption(const QString warning);
84};
85
86class AdminNotesDialog : public QDialog
87{
88 Q_OBJECT
89
90private:
91 QString userName;
92 QPlainTextEdit *notes;
93
94public:
95 explicit AdminNotesDialog(const QString &_userName, const QString &_notes, QWidget *_parent = nullptr);
96 [[nodiscard]] QString getName() const
97 {
98 return userName;
99 }
100 [[nodiscard]] QString getNotes() const;
101};
102
103class UserListItemDelegate : public QStyledItemDelegate
104{
105 const QMap<QString, QPixmap> *avatarCache;
106 const QMap<QString, QPixmap> *cardArtCache;
107 const QMap<QString, CardArtParams> *cardArtParamsMap;
108
109public:
110 explicit UserListItemDelegate(QObject *const parent,
111 const QMap<QString, QPixmap> *avatarCache,
112 const QMap<QString, QPixmap> *cardArtCache,
113 const QMap<QString, CardArtParams> *cardArtParamsMap);
114 bool editorEvent(QEvent *event,
115 QAbstractItemModel *model,
116 const QStyleOptionViewItem &option,
117 const QModelIndex &index) override;
118 void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override;
119 QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const override;
120};
121
122class UserListTWI : public QTreeWidgetItem
123{
124private:
125 ServerInfo_User userInfo;
126
127public:
128 explicit UserListTWI(const ServerInfo_User &_userInfo);
129 const ServerInfo_User &getUserInfo() const
130 {
131 return userInfo;
132 }
133 void setUserInfo(const ServerInfo_User &_userInfo);
134 void setOnline(bool online);
135 bool operator<(const QTreeWidgetItem &other) const override;
136};
137
138class UserListWidget : public QGroupBox
139{
140 Q_OBJECT
141public:
149
150private:
154 QMap<QString, CardArtParams> cardArtParamsMap;
155 // ── Hover popup ───────────────────────────────────────────────────────────
157 QTimer *m_showPopupTimer = nullptr;
158 QTimer *m_hidePopupTimer = nullptr;
160 bool m_popupPinned = false;
161
162 void showPopupForUser(const QString &userName);
163 void hidePopup(bool immediate = false);
164 void positionPopup(const QString &userName);
165 void connectPopupSignals();
166
167 QMap<QString, UserListTWI *> users;
171 QTreeWidget *userTree;
175 QString titleStr;
176 void updateCount();
177 void refreshPopupButtons(const QString &userName);
178private slots:
179 void userClicked(QTreeWidgetItem *item, int column);
180signals:
181 void openMessageDialog(const QString &userName, bool focus);
182 void addBuddy(const QString &userName);
183 void removeBuddy(const QString &userName);
184 void addIgnore(const QString &userName);
185 void removeIgnore(const QString &userName);
186 void joinGameRequested(int gameId, int roomId, bool asSpectator);
187
188public:
189 UserListWidget(TabSupervisor *_tabSupervisor,
190 AbstractClient *_client,
191 UserListType _type,
192 QWidget *parent = nullptr);
193 void bind(UserListManager *mgr);
194 void applyDisplayMode();
195 bool eventFilter(QObject *obj, QEvent *event) override;
196 void retranslateUi();
197 void rebuild();
198 void processUserInfo(const ServerInfo_User &user, bool online);
199 bool deleteUser(const QString &userName);
200 void setUserOnline(const QString &userName, bool online);
201 [[nodiscard]] const QMap<QString, UserListTWI *> &getUsers() const
202 {
203 return users;
204 }
205 void showContextMenu(const QPoint &pos, const QModelIndex &index);
206 void sortItems();
207
208protected:
209 void hideEvent(QHideEvent *e) override;
210};
211
212#endif
Definition abstract_client.h:51
QString userName
Definition user_list_widget.h:91
AdminNotesDialog(const QString &_userName, const QString &_notes, QWidget *_parent=nullptr)
Definition user_list_widget.cpp:293
QString getName() const
Definition user_list_widget.h:96
QString getNotes() const
Definition user_list_widget.cpp:314
QPlainTextEdit * notes
Definition user_list_widget.h:92
QString getBanName() const
Definition user_list_widget.cpp:262
QRadioButton * temporaryRadio
Definition user_list_widget.h:48
QSpinBox * minutesEdit
Definition user_list_widget.h:47
BanDialog(const ServerInfo_User &info, QWidget *parent=nullptr)
Definition user_list_widget.cpp:35
QCheckBox * idBanCheckBox
Definition user_list_widget.h:45
void enableTemporaryEdits(bool enabled)
Definition user_list_widget.cpp:247
QLineEdit * nameBanEdit
Definition user_list_widget.h:46
QRadioButton * permanentRadio
Definition user_list_widget.h:48
QLineEdit * idBanEdit
Definition user_list_widget.h:46
int getMinutes() const
Definition user_list_widget.cpp:272
QSpinBox * daysEdit
Definition user_list_widget.h:47
QLabel * minutesLabel
Definition user_list_widget.h:44
QCheckBox * deleteMessages
Definition user_list_widget.h:45
QPlainTextEdit * visibleReasonEdit
Definition user_list_widget.h:49
QLineEdit * ipBanEdit
Definition user_list_widget.h:46
QString getVisibleReason() const
Definition user_list_widget.cpp:283
QLabel * hoursLabel
Definition user_list_widget.h:44
QString getBanId() const
Definition user_list_widget.cpp:257
void okClicked()
Definition user_list_widget.cpp:210
QSpinBox * hoursEdit
Definition user_list_widget.h:47
QCheckBox * ipBanCheckBox
Definition user_list_widget.h:45
QPlainTextEdit * reasonEdit
Definition user_list_widget.h:49
QString getBanIP() const
Definition user_list_widget.cpp:267
QString getReason() const
Definition user_list_widget.cpp:278
QLabel * daysLabel
Definition user_list_widget.h:44
int getDeleteMessages() const
Definition user_list_widget.cpp:288
QCheckBox * nameBanCheckBox
Definition user_list_widget.h:45
Definition tab_supervisor.h:84
Definition user_avatar_provider.h:12
Definition user_card_art_provider.h:11
Definition user_context_menu.h:26
Floating panel showing an enlarged user card, quick action buttons, and a live scrollable games list.
Definition user_info_popup.h:90
Definition user_list_widget.h:104
const QMap< QString, QPixmap > * cardArtCache
Definition user_list_widget.h:106
void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override
Definition user_list_widget.cpp:361
const QMap< QString, QPixmap > * avatarCache
Definition user_list_widget.h:105
UserListItemDelegate(QObject *const parent, const QMap< QString, QPixmap > *avatarCache, const QMap< QString, QPixmap > *cardArtCache, const QMap< QString, CardArtParams > *cardArtParamsMap)
Definition user_list_widget.cpp:325
bool editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index) override
Definition user_list_widget.cpp:334
QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const override
Definition user_list_widget.cpp:353
const QMap< QString, CardArtParams > * cardArtParamsMap
Definition user_list_widget.h:107
Definition user_list_manager.h:27
bool operator<(const QTreeWidgetItem &other) const override
Definition user_list_widget.cpp:416
void setOnline(bool online)
Definition user_list_widget.cpp:398
ServerInfo_User userInfo
Definition user_list_widget.h:125
void setUserInfo(const ServerInfo_User &_userInfo)
Definition user_list_widget.cpp:384
const ServerInfo_User & getUserInfo() const
Definition user_list_widget.h:129
UserListTWI(const ServerInfo_User &_userInfo)
Definition user_list_widget.cpp:379
const QMap< QString, UserListTWI * > & getUsers() const
Definition user_list_widget.h:201
UserCardArtProvider * cardArtProvider
Definition user_list_widget.h:153
void userClicked(QTreeWidgetItem *item, int column)
Definition user_list_widget.cpp:994
UserInfoPopup * m_userInfoPopup
Definition user_list_widget.h:156
QTreeWidget * userTree
Definition user_list_widget.h:171
UserAvatarProvider * avatarProvider
Definition user_list_widget.h:152
UserListWidget(TabSupervisor *_tabSupervisor, AbstractClient *_client, UserListType _type, QWidget *parent=nullptr)
Definition user_list_widget.cpp:461
bool m_popupPinned
Definition user_list_widget.h:160
void bind(UserListManager *mgr)
Definition user_list_widget.cpp:570
TabSupervisor * tabSupervisor
Definition user_list_widget.h:168
QTimer * m_showPopupTimer
Definition user_list_widget.h:157
UserListManager * manager
Definition user_list_widget.h:151
QMap< QString, CardArtParams > cardArtParamsMap
Definition user_list_widget.h:154
void showPopupForUser(const QString &userName)
Definition user_list_widget.cpp:756
UserListType type
Definition user_list_widget.h:170
void connectPopupSignals()
Definition user_list_widget.cpp:681
void applyDisplayMode()
Definition user_list_widget.cpp:662
void rebuild()
Definition user_list_widget.cpp:880
QString m_hoveredUser
Definition user_list_widget.h:159
int onlineCount
Definition user_list_widget.h:174
void openMessageDialog(const QString &userName, bool focus)
void removeBuddy(const QString &userName)
void showContextMenu(const QPoint &pos, const QModelIndex &index)
Definition user_list_widget.cpp:999
void processUserInfo(const ServerInfo_User &user, bool online)
Definition user_list_widget.cpp:913
void setUserOnline(const QString &userName, bool online)
Definition user_list_widget.cpp:969
void removeIgnore(const QString &userName)
void refreshPopupButtons(const QString &userName)
Definition user_list_widget.cpp:638
QString titleStr
Definition user_list_widget.h:175
UserContextMenu * userContextMenu
Definition user_list_widget.h:173
UserListItemDelegate * itemDelegate
Definition user_list_widget.h:172
void addBuddy(const QString &userName)
void retranslateUi()
Definition user_list_widget.cpp:860
QMap< QString, UserListTWI * > users
Definition user_list_widget.h:167
UserListType
Definition user_list_widget.h:143
@ AllUsersList
Definition user_list_widget.h:144
@ RoomList
Definition user_list_widget.h:145
@ BuddyList
Definition user_list_widget.h:146
@ IgnoreList
Definition user_list_widget.h:147
void hidePopup(bool immediate=false)
Definition user_list_widget.cpp:838
bool eventFilter(QObject *obj, QEvent *event) override
Definition user_list_widget.cpp:719
void joinGameRequested(int gameId, int roomId, bool asSpectator)
QTimer * m_hidePopupTimer
Definition user_list_widget.h:158
void positionPopup(const QString &userName)
Definition user_list_widget.cpp:788
void addIgnore(const QString &userName)
void hideEvent(QHideEvent *e) override
Definition user_list_widget.cpp:654
bool deleteUser(const QString &userName)
Definition user_list_widget.cpp:952
void sortItems()
Definition user_list_widget.cpp:1008
AbstractClient * client
Definition user_list_widget.h:169
void updateCount()
Definition user_list_widget.cpp:985
void addWarningOption(const QString warning)
Definition user_list_widget.cpp:205
QLabel * descriptionLabel
Definition user_list_widget.h:69
QString getReason() const
Definition user_list_widget.cpp:195
QLineEdit * nameWarning
Definition user_list_widget.h:70
QLineEdit * warnClientID
Definition user_list_widget.h:72
WarningDialog(const QString userName, const QString clientID, QWidget *parent=nullptr)
Definition user_list_widget.cpp:134
void okClicked()
Definition user_list_widget.cpp:168
QString getWarnID() const
Definition user_list_widget.cpp:190
int getDeleteMessages() const
Definition user_list_widget.cpp:200
QCheckBox * deleteMessages
Definition user_list_widget.h:73
QString getName() const
Definition user_list_widget.cpp:185
QComboBox * warningOption
Definition user_list_widget.h:71