mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-09-21 09:05:10 -07:00
[Room][UserList] Introduce style delegate (#6981)
Some checks are pending
Build Desktop / Configure (push) Waiting to run
Build Desktop / Debian 13 (push) Blocked by required conditions
Build Desktop / Debian 12 (push) Blocked by required conditions
Build Desktop / Fedora 44 (push) Blocked by required conditions
Build Desktop / Fedora 43 (push) Blocked by required conditions
Build Desktop / Servatrice_Debian 12 (push) Blocked by required conditions
Build Desktop / Ubuntu 26.04 (push) Blocked by required conditions
Build Desktop / Ubuntu 24.04 (push) Blocked by required conditions
Build Desktop / Arch (push) Blocked by required conditions
Build Desktop / macOS 14 (push) Blocked by required conditions
Build Desktop / macOS 15 (push) Blocked by required conditions
Build Desktop / macOS 13 Intel (push) Blocked by required conditions
Build Desktop / macOS 15 Debug (push) Blocked by required conditions
Build Desktop / Windows 10 (push) Blocked by required conditions
Build Docker Image / amd64 & arm64 (push) Waiting to run
Some checks are pending
Build Desktop / Configure (push) Waiting to run
Build Desktop / Debian 13 (push) Blocked by required conditions
Build Desktop / Debian 12 (push) Blocked by required conditions
Build Desktop / Fedora 44 (push) Blocked by required conditions
Build Desktop / Fedora 43 (push) Blocked by required conditions
Build Desktop / Servatrice_Debian 12 (push) Blocked by required conditions
Build Desktop / Ubuntu 26.04 (push) Blocked by required conditions
Build Desktop / Ubuntu 24.04 (push) Blocked by required conditions
Build Desktop / Arch (push) Blocked by required conditions
Build Desktop / macOS 14 (push) Blocked by required conditions
Build Desktop / macOS 15 (push) Blocked by required conditions
Build Desktop / macOS 13 Intel (push) Blocked by required conditions
Build Desktop / macOS 15 Debug (push) Blocked by required conditions
Build Desktop / Windows 10 (push) Blocked by required conditions
Build Docker Image / amd64 & arm64 (push) Waiting to run
* [Room] Additionally show a tab for friends and ignored users instead of just all online users.
Took 21 minutes
Took 12 minutes
* [Room][UserList] Introduce style delegate for user list
- Allow users to set a card name and parameters as their background banner
- Allow mods to white/blacklist cards
- Allow toggling back to the old display style
Took 7 minutes
Took 28 seconds
Took 2 minutes
Took 2 minutes
* Right checkstate.
Took 14 minutes
Took 2 minutes
* Utility for test.
Took 9 minutes
Took 8 seconds
Took 2 seconds
* Lint.
Took 10 minutes
* Algorithm for sql schema migration
Took 13 minutes
* Use {prefix}, bound card name, return errors.
Took 27 seconds
* Convert queue to while loop.
Took 19 seconds
* Hover popup.
Took 36 minutes
Took 1 minute
* More granular signals, popup for user info.
Took 25 minutes
Took 8 seconds
Took 16 minutes
---------
Co-authored-by: Lukas Brübach <Bruebach.Lukas@bdosecurity.de>
This commit is contained in:
parent
c9ebdb451f
commit
2914874720
45 changed files with 3387 additions and 83 deletions
|
|
@ -5,6 +5,7 @@
|
|||
#include "../../interface/widgets/dialogs/dlg_edit_password.h"
|
||||
#include "../../interface/widgets/dialogs/dlg_edit_user.h"
|
||||
#include "../../interface/widgets/utility/get_text_with_max.h"
|
||||
#include "user_card_settings_dialog.h"
|
||||
|
||||
#include <QDateTime>
|
||||
#include <QGridLayout>
|
||||
|
|
@ -61,11 +62,13 @@ UserInfoBox::UserInfoBox(AbstractClient *_client, bool _editable, QWidget *paren
|
|||
buttonsLayout->addWidget(&editButton);
|
||||
buttonsLayout->addWidget(&passwordButton);
|
||||
buttonsLayout->addWidget(&avatarButton);
|
||||
buttonsLayout->addWidget(&bannerCardButton);
|
||||
mainLayout->addLayout(buttonsLayout, 7, 0, 1, 3);
|
||||
|
||||
connect(&editButton, &QPushButton::clicked, this, &UserInfoBox::actEdit);
|
||||
connect(&passwordButton, &QPushButton::clicked, this, &UserInfoBox::actPassword);
|
||||
connect(&avatarButton, &QPushButton::clicked, this, &UserInfoBox::actAvatar);
|
||||
connect(&bannerCardButton, &QPushButton::clicked, this, &UserInfoBox::actBannerCard);
|
||||
}
|
||||
|
||||
setWindowTitle(tr("User Information"));
|
||||
|
|
@ -83,11 +86,15 @@ void UserInfoBox::retranslateUi()
|
|||
editButton.setText(tr("Edit"));
|
||||
passwordButton.setText(tr("Change password"));
|
||||
avatarButton.setText(tr("Change avatar"));
|
||||
bannerCardButton.setText(tr("Edit Banner Card"));
|
||||
}
|
||||
|
||||
void UserInfoBox::updateInfo(const ServerInfo_User &user)
|
||||
{
|
||||
userLevel = UserLevelFlags(user.user_level());
|
||||
currentUserInfo = user;
|
||||
hasUserInfo = true;
|
||||
|
||||
const UserLevelFlags userLevel(user.user_level());
|
||||
pawnColors = user.pawn_colors();
|
||||
privLevel = QString::fromStdString(user.privlevel());
|
||||
|
||||
|
|
@ -306,6 +313,48 @@ void UserInfoBox::actAvatar()
|
|||
client->sendCommand(pend);
|
||||
}
|
||||
|
||||
void UserInfoBox::actBannerCard()
|
||||
{
|
||||
CardArtParams initial;
|
||||
if (hasUserInfo && currentUserInfo.has_card_art_params()) {
|
||||
const auto &cap = currentUserInfo.card_art_params();
|
||||
initial.cardName = QString::fromStdString(cap.card_name());
|
||||
initial.marginPctL = cap.margin_pct_l();
|
||||
initial.marginPctR = cap.margin_pct_r();
|
||||
initial.verticalOffset = cap.vertical_offset();
|
||||
initial.zoom = cap.zoom();
|
||||
}
|
||||
|
||||
UserCardArtSettingsDialog dlg(initial, this);
|
||||
if (dlg.exec() != QDialog::Accepted) {
|
||||
return;
|
||||
}
|
||||
|
||||
const CardArtParams p = dlg.params();
|
||||
|
||||
Command_SetCardArtParams cmd;
|
||||
cmd.set_card_name(p.cardName.toStdString());
|
||||
if (!p.cardName.isEmpty()) {
|
||||
cmd.set_margin_pct_l(p.marginPctL);
|
||||
cmd.set_margin_pct_r(p.marginPctR);
|
||||
cmd.set_vertical_offset(p.verticalOffset);
|
||||
cmd.set_zoom(p.zoom);
|
||||
}
|
||||
|
||||
PendingCommand *pend = client->prepareSessionCommand(cmd);
|
||||
connect(pend, &PendingCommand::finished, this, [p, this](const Response &r) {
|
||||
if (r.response_code() != Response::RespOk) {
|
||||
QMessageBox::critical(this, tr("Error"),
|
||||
tr("The selected card is blacklisted on this server or another error occurred."));
|
||||
} else {
|
||||
updateInfo(nameLabel.text()); // re-fetch so currentUserInfo reflects the change
|
||||
QMessageBox::information(this, tr("Information"),
|
||||
p.cardName.isEmpty() ? tr("Banner card removed.") : tr("Banner card updated."));
|
||||
}
|
||||
});
|
||||
client->sendCommand(pend);
|
||||
}
|
||||
|
||||
void UserInfoBox::processEditResponse(const Response &r)
|
||||
{
|
||||
switch (r.response_code()) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue