mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-07-02 19:43:55 -07:00
user level display
This commit is contained in:
parent
5b75cea661
commit
23a0080c45
16 changed files with 1030 additions and 60 deletions
|
|
@ -12,7 +12,8 @@ DlgCreateToken::DlgCreateToken(QWidget *parent)
|
|||
: QDialog(parent)
|
||||
{
|
||||
nameLabel = new QLabel(tr("&Name:"));
|
||||
nameEdit = new QLineEdit;
|
||||
nameEdit = new QLineEdit(tr("Token"));
|
||||
nameEdit->selectAll();
|
||||
nameLabel->setBuddy(nameEdit);
|
||||
|
||||
colorLabel = new QLabel(tr("C&olor:"));
|
||||
|
|
|
|||
|
|
@ -34,6 +34,7 @@
|
|||
#include "dlg_settings.h"
|
||||
#include "carddatabase.h"
|
||||
#include "settingscache.h"
|
||||
#include "pixmapgenerator.h"
|
||||
|
||||
//Q_IMPORT_PLUGIN(qjpeg)
|
||||
|
||||
|
|
@ -124,6 +125,9 @@ int main(int argc, char *argv[])
|
|||
|
||||
delete db;
|
||||
delete settingsCache;
|
||||
|
||||
PingPixmapGenerator::clear();
|
||||
CountryPixmapGenerator::clear();
|
||||
UserLevelPixmapGenerator::clear();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
#include "pixmapgenerator.h"
|
||||
#include "protocol_datastructures.h"
|
||||
#include <QPainter>
|
||||
#include <QSvgRenderer>
|
||||
#include <math.h>
|
||||
|
|
@ -52,4 +53,32 @@ QPixmap CountryPixmapGenerator::generatePixmap(int height, const QString &countr
|
|||
return pixmap;
|
||||
}
|
||||
|
||||
QMap<QString, QPixmap> CountryPixmapGenerator::pmCache;
|
||||
QMap<QString, QPixmap> CountryPixmapGenerator::pmCache;
|
||||
|
||||
QPixmap UserLevelPixmapGenerator::generatePixmap(int height, int userLevel)
|
||||
{
|
||||
int key = height * 10000 + userLevel;
|
||||
if (pmCache.contains(key))
|
||||
return pmCache.value(key);
|
||||
|
||||
QString levelString;
|
||||
if (userLevel & ServerInfo_User::IsAdmin)
|
||||
levelString = "judge";
|
||||
else if (userLevel & ServerInfo_User::IsJudge)
|
||||
levelString = "judge";
|
||||
else if (userLevel &ServerInfo_User::IsRegistered)
|
||||
levelString = "registered";
|
||||
else
|
||||
levelString = "normal";
|
||||
QSvgRenderer svg(QString(":/resources/userlevels/" + levelString + ".svg"));
|
||||
int width = (int) round(height * (double) svg.defaultSize().width() / (double) svg.defaultSize().height());
|
||||
QPixmap pixmap(width, height);
|
||||
pixmap.fill(Qt::transparent);
|
||||
QPainter painter(&pixmap);
|
||||
svg.render(&painter, QRectF(0, 0, width, height));
|
||||
|
||||
pmCache.insert(key, pixmap);
|
||||
return pixmap;
|
||||
}
|
||||
|
||||
QMap<int, QPixmap> UserLevelPixmapGenerator::pmCache;
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
#ifndef PINGPIXMAPGENERATOR_H
|
||||
#define PINGPIXMAPGENERATOR_H
|
||||
#ifndef PIXMAPGENERATOR_H
|
||||
#define PIXMAPGENERATOR_H
|
||||
|
||||
#include <QPixmap>
|
||||
#include <QMap>
|
||||
|
|
@ -9,6 +9,7 @@ private:
|
|||
static QMap<int, QPixmap> pmCache;
|
||||
public:
|
||||
static QPixmap generatePixmap(int size, int value, int max);
|
||||
static void clear() { pmCache.clear(); }
|
||||
};
|
||||
|
||||
class CountryPixmapGenerator {
|
||||
|
|
@ -16,6 +17,15 @@ private:
|
|||
static QMap<QString, QPixmap> pmCache;
|
||||
public:
|
||||
static QPixmap generatePixmap(int height, const QString &countryCode);
|
||||
static void clear() { pmCache.clear(); }
|
||||
};
|
||||
|
||||
class UserLevelPixmapGenerator {
|
||||
private:
|
||||
static QMap<int, QPixmap> pmCache;
|
||||
public:
|
||||
static QPixmap generatePixmap(int height, int userLevel);
|
||||
static void clear() { pmCache.clear(); }
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ PlayerListWidget::PlayerListWidget(QWidget *parent)
|
|||
spectatorIcon = QIcon(":/resources/icon_spectator.svg");
|
||||
|
||||
setIconSize(QSize(20, 15));
|
||||
setColumnCount(5);
|
||||
setColumnCount(6);
|
||||
setRootIsDecorated(false);
|
||||
setSelectionMode(NoSelection);
|
||||
header()->setResizeMode(QHeaderView::ResizeToContents);
|
||||
|
|
@ -26,8 +26,9 @@ void PlayerListWidget::retranslateUi()
|
|||
headerItem()->setText(0, QString());
|
||||
headerItem()->setText(1, QString());
|
||||
headerItem()->setText(2, QString());
|
||||
headerItem()->setText(3, tr("Player name"));
|
||||
headerItem()->setText(4, tr("Deck"));
|
||||
headerItem()->setText(3, QString());
|
||||
headerItem()->setText(4, tr("Player name"));
|
||||
headerItem()->setText(5, tr("Deck"));
|
||||
}
|
||||
|
||||
void PlayerListWidget::addPlayer(ServerInfo_PlayerProperties *player)
|
||||
|
|
@ -46,9 +47,10 @@ void PlayerListWidget::updatePlayerProperties(ServerInfo_PlayerProperties *prop)
|
|||
|
||||
player->setIcon(1, prop->getSpectator() ? spectatorIcon : playerIcon);
|
||||
player->setIcon(2, gameStarted ? (prop->getConceded() ? concededIcon : QIcon()) : (prop->getReadyStart() ? readyIcon : notReadyIcon));
|
||||
player->setText(3, prop->getUserInfo()->getName());
|
||||
player->setIcon(3, QIcon(UserLevelPixmapGenerator::generatePixmap(12, prop->getUserInfo()->getUserLevel())));
|
||||
player->setText(4, prop->getUserInfo()->getName());
|
||||
if (!prop->getUserInfo()->getCountry().isEmpty())
|
||||
player->setIcon(3, QIcon(CountryPixmapGenerator::generatePixmap(12, prop->getUserInfo()->getCountry())));
|
||||
player->setIcon(4, QIcon(CountryPixmapGenerator::generatePixmap(12, prop->getUserInfo()->getCountry())));
|
||||
|
||||
QString deckText;
|
||||
if (!prop->getSpectator())
|
||||
|
|
@ -57,7 +59,7 @@ void PlayerListWidget::updatePlayerProperties(ServerInfo_PlayerProperties *prop)
|
|||
case -1: deckText = tr("local"); break;
|
||||
default: deckText = tr("#%1").arg(prop->getDeckId());
|
||||
}
|
||||
player->setText(4, deckText);
|
||||
player->setText(5, deckText);
|
||||
}
|
||||
|
||||
void PlayerListWidget::removePlayer(int playerId)
|
||||
|
|
@ -76,7 +78,7 @@ void PlayerListWidget::setActivePlayer(int playerId)
|
|||
i.next();
|
||||
QTreeWidgetItem *twi = i.value();
|
||||
QColor c = i.key() == playerId ? QColor(150, 255, 150) : Qt::white;
|
||||
twi->setBackground(3, c);
|
||||
twi->setBackground(4, c);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -85,7 +87,7 @@ void PlayerListWidget::updatePing(int playerId, int pingTime)
|
|||
QTreeWidgetItem *twi = players.value(playerId, 0);
|
||||
if (!twi)
|
||||
return;
|
||||
twi->setIcon(0, QIcon(PingPixmapGenerator::generatePixmap(10, pingTime, 10)));
|
||||
twi->setIcon(0, QIcon(PingPixmapGenerator::generatePixmap(12, pingTime, 10)));
|
||||
}
|
||||
|
||||
void PlayerListWidget::setGameStarted(bool _gameStarted)
|
||||
|
|
|
|||
|
|
@ -553,6 +553,8 @@ void TabGame::eventPlayerPropertiesChanged(Event_PlayerPropertiesChanged *event,
|
|||
void TabGame::eventJoin(Event_Join *event, GameEventContext * /*context*/)
|
||||
{
|
||||
ServerInfo_PlayerProperties *playerInfo = event->getPlayer();
|
||||
if (players.contains(playerInfo->getPlayerId()))
|
||||
return;
|
||||
if (playerInfo->getSpectator()) {
|
||||
spectators.insert(playerInfo->getPlayerId(), playerInfo->getUserInfo()->getName());
|
||||
messageLog->logJoinSpectator(playerInfo->getUserInfo()->getName());
|
||||
|
|
|
|||
|
|
@ -241,7 +241,7 @@ UserList::UserList(AbstractClient *_client, QWidget *parent)
|
|||
: QGroupBox(parent)
|
||||
{
|
||||
userTree = new QTreeWidget;
|
||||
userTree->setColumnCount(2);
|
||||
userTree->setColumnCount(3);
|
||||
userTree->header()->setResizeMode(QHeaderView::ResizeToContents);
|
||||
userTree->setHeaderHidden(true);
|
||||
userTree->setRootIsDecorated(false);
|
||||
|
|
@ -273,7 +273,7 @@ void UserList::processUserInfo(ServerInfo_User *user)
|
|||
QTreeWidgetItem *item = 0;
|
||||
for (int i = 0; i < userTree->topLevelItemCount(); ++i) {
|
||||
QTreeWidgetItem *temp = userTree->topLevelItem(i);
|
||||
if (temp->data(1, Qt::UserRole) == user->getName()) {
|
||||
if (temp->data(2, Qt::UserRole) == user->getName()) {
|
||||
item = temp;
|
||||
break;
|
||||
}
|
||||
|
|
@ -283,9 +283,10 @@ void UserList::processUserInfo(ServerInfo_User *user)
|
|||
userTree->addTopLevelItem(item);
|
||||
retranslateUi();
|
||||
}
|
||||
item->setIcon(0, QIcon(CountryPixmapGenerator::generatePixmap(12, user->getCountry())));
|
||||
item->setData(1, Qt::UserRole, user->getName());
|
||||
item->setData(1, Qt::DisplayRole, user->getName());
|
||||
item->setIcon(0, QIcon(UserLevelPixmapGenerator::generatePixmap(12, user->getUserLevel())));
|
||||
item->setIcon(1, QIcon(CountryPixmapGenerator::generatePixmap(12, user->getCountry())));
|
||||
item->setData(2, Qt::UserRole, user->getName());
|
||||
item->setData(2, Qt::DisplayRole, user->getName());
|
||||
}
|
||||
|
||||
void UserList::processResponse(ProtocolResponse *response)
|
||||
|
|
@ -310,7 +311,7 @@ void UserList::processUserJoinedEvent(Event_UserJoined *event)
|
|||
void UserList::processUserLeftEvent(Event_UserLeft *event)
|
||||
{
|
||||
for (int i = 0; i < userTree->topLevelItemCount(); ++i)
|
||||
if (userTree->topLevelItem(i)->data(1, Qt::UserRole) == event->getUserName()) {
|
||||
if (userTree->topLevelItem(i)->data(2, Qt::UserRole) == event->getUserName()) {
|
||||
emit userLeft(event->getUserName());
|
||||
delete userTree->takeTopLevelItem(i);
|
||||
retranslateUi();
|
||||
|
|
@ -320,7 +321,7 @@ void UserList::processUserLeftEvent(Event_UserLeft *event)
|
|||
|
||||
void UserList::userClicked(QTreeWidgetItem *item, int /*column*/)
|
||||
{
|
||||
emit openMessageDialog(item->data(1, Qt::UserRole).toString(), true);
|
||||
emit openMessageDialog(item->data(2, Qt::UserRole).toString(), true);
|
||||
}
|
||||
|
||||
TabServer::TabServer(AbstractClient *_client, QWidget *parent)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue