user level display

This commit is contained in:
Max-Wilhelm Bruker 2010-09-20 18:52:36 +02:00
parent 5b75cea661
commit 23a0080c45
16 changed files with 1030 additions and 60 deletions

View file

@ -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:"));

View file

@ -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;
}

View file

@ -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;

View file

@ -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

View file

@ -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)

View file

@ -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());

View file

@ -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)