Commit 95cd293b authored by Max-Wilhelm Bruker's avatar Max-Wilhelm Bruker
Browse files

context menu for a message sender's name in chat; also display the user level...

context menu for a message sender's name in chat; also display the user level icon next to the name; minor consistency and type-safety changes
parent f9e0b6fe
......@@ -2,7 +2,7 @@
#define USER_CONTEXT_MENU_H
#include <QObject>
#include "pb/serverinfo_user.pb.h"
#include "user_level.h"
class QAction;
class TabSupervisor;
......@@ -16,7 +16,7 @@ class UserContextMenu : public QObject {
Q_OBJECT
private:
AbstractClient *client;
TabSupervisor *tabSupervisor;
const TabSupervisor *tabSupervisor;
TabGame *game;
QAction *aUserName;
......@@ -34,8 +34,8 @@ private slots:
void banUser_dialogFinished();
void gamesOfUserReceived(const Response &resp, const CommandContainer &commandContainer);
public:
UserContextMenu(TabSupervisor *_tabSupervisor, QWidget *_parent, TabGame *_game = 0);
void showContextMenu(const QPoint &pos, const QString &userName, ServerInfo_User::UserLevelFlags userLevel, int playerId = -1);
UserContextMenu(const TabSupervisor *_tabSupervisor, QWidget *_parent, TabGame *_game = 0);
void showContextMenu(const QPoint &pos, const QString &userName, UserLevelFlags userLevel, int playerId = -1);
};
#endif
......@@ -56,7 +56,7 @@ void UserInfoBox::retranslateUi()
void UserInfoBox::updateInfo(const ServerInfo_User &user)
{
const int userLevel = user.user_level();
const UserLevelFlags userLevel(user.user_level());
QPixmap avatarPixmap;
const std::string bmp = user.avatar_bmp();
......@@ -70,11 +70,11 @@ void UserInfoBox::updateInfo(const ServerInfo_User &user)
countryLabel2->setPixmap(CountryPixmapGenerator::generatePixmap(15, QString::fromStdString(user.country())));
userLevelLabel2->setPixmap(UserLevelPixmapGenerator::generatePixmap(15, userLevel));
QString userLevelText;
if (userLevel & ServerInfo_User::IsAdmin)
if (userLevel.testFlag(ServerInfo_User::IsAdmin))
userLevelText = tr("Administrator");
else if (userLevel & ServerInfo_User::IsModerator)
else if (userLevel.testFlag(ServerInfo_User::IsModerator))
userLevelText = tr("Moderator");
else if (userLevel & ServerInfo_User::IsRegistered)
else if (userLevel.testFlag(ServerInfo_User::IsRegistered))
userLevelText = tr("Registered user");
else
userLevelText = tr("Unregistered user");
......
......@@ -170,19 +170,27 @@ bool UserListItemDelegate::editorEvent(QEvent *event, QAbstractItemModel *model,
return QStyledItemDelegate::editorEvent(event, model, option, index);
}
UserListTWI::UserListTWI()
UserListTWI::UserListTWI(const ServerInfo_User &_userInfo)
: QTreeWidgetItem(Type)
{
setUserInfo(_userInfo);
}
QString UserListTWI::getUserName() const
void UserListTWI::setUserInfo(const ServerInfo_User &_userInfo)
{
return data(2, Qt::UserRole).toString();
userInfo = _userInfo;
setData(0, Qt::UserRole, userInfo.user_level());
setIcon(0, QIcon(UserLevelPixmapGenerator::generatePixmap(12, UserLevelFlags(userInfo.user_level()))));
setIcon(1, QIcon(CountryPixmapGenerator::generatePixmap(12, QString::fromStdString(userInfo.country()))));
setData(2, Qt::UserRole, QString::fromStdString(userInfo.name()));
setData(2, Qt::DisplayRole, QString::fromStdString(userInfo.name()));
}
int UserListTWI::getUserLevel() const
void UserListTWI::setOnline(bool online)
{
return data(0, Qt::UserRole).toInt();
setData(0, Qt::UserRole + 1, online);
setData(2, Qt::ForegroundRole, online ? QBrush() : QBrush(Qt::gray));
}
bool UserListTWI::operator<(const QTreeWidgetItem &other) const
......@@ -239,25 +247,17 @@ void UserList::processUserInfo(const ServerInfo_User &user, bool online)
{
const QString userName = QString::fromStdString(user.name());
UserListTWI *item = users.value(userName);
if (!item) {
item = new UserListTWI;
if (item)
item->setUserInfo(user);
else {
item = new UserListTWI(user);
users.insert(userName, item);
userTree->addTopLevelItem(item);
if (online)
++onlineCount;
updateCount();
}
item->setData(0, Qt::UserRole, user.user_level());
item->setIcon(0, QIcon(UserLevelPixmapGenerator::generatePixmap(12, user.user_level())));
item->setIcon(1, QIcon(CountryPixmapGenerator::generatePixmap(12, QString::fromStdString(user.country()))));
item->setData(2, Qt::UserRole, QString::fromStdString(user.name()));
item->setData(2, Qt::DisplayRole, QString::fromStdString(user.name()));
item->setData(0, Qt::UserRole + 1, online);
if (online)
item->setData(2, Qt::ForegroundRole, QBrush());
else
item->setData(2, Qt::ForegroundRole, QBrush(Qt::gray));
item->setOnline(online);
}
bool UserList::deleteUser(const QString &userName)
......@@ -276,27 +276,20 @@ bool UserList::deleteUser(const QString &userName)
return false;
}
void UserList::setUserOnline(QTreeWidgetItem *item, bool online)
void UserList::setUserOnline(const QString &userName, bool online)
{
item->setData(0, Qt::UserRole + 1, online);
UserListTWI *twi = users.value(userName);
if (!twi)
return;
if (online) {
item->setData(2, Qt::ForegroundRole, QBrush());
twi->setOnline(online);
if (online)
++onlineCount;
} else {
item->setData(2, Qt::ForegroundRole, QBrush(Qt::gray));
else
--onlineCount;
}
updateCount();
}
void UserList::setUserOnline(const QString &userName, bool online)
{
UserListTWI *twi = users.value(userName);
if (twi)
setUserOnline(twi, online);
}
void UserList::updateCount()
{
QString str = titleStr;
......@@ -312,11 +305,9 @@ void UserList::userClicked(QTreeWidgetItem *item, int /*column*/)
void UserList::showContextMenu(const QPoint &pos, const QModelIndex &index)
{
UserListTWI *twi = static_cast<UserListTWI *>(userTree->topLevelItem(index.row()));
const QString &userName = twi->getUserName();
ServerInfo_User::UserLevelFlags userLevel = static_cast<ServerInfo_User::UserLevelFlags>(twi->getUserLevel());
const ServerInfo_User &userInfo = static_cast<UserListTWI *>(userTree->topLevelItem(index.row()))->getUserInfo();
userContextMenu->showContextMenu(pos, userName, userLevel);
userContextMenu->showContextMenu(pos, QString::fromStdString(userInfo.name()), UserLevelFlags(userInfo.user_level()));
}
void UserList::sortItems()
......
......@@ -5,6 +5,7 @@
#include <QGroupBox>
#include <QTreeWidgetItem>
#include <QStyledItemDelegate>
#include "user_level.h"
class QTreeWidget;
class ServerInfo_User;
......@@ -47,10 +48,13 @@ public:
};
class UserListTWI : public QTreeWidgetItem {
private:
ServerInfo_User userInfo;
public:
UserListTWI();
QString getUserName() const;
int getUserLevel() const;
UserListTWI(const ServerInfo_User &_userInfo);
const ServerInfo_User &getUserInfo() const { return userInfo; }
void setUserInfo(const ServerInfo_User &_userInfo);
void setOnline(bool online);
bool operator<(const QTreeWidgetItem &other) const;
};
......@@ -69,7 +73,6 @@ private:
int onlineCount;
QString titleStr;
void updateCount();
void setUserOnline(QTreeWidgetItem *user, bool online);
private slots:
void userClicked(QTreeWidgetItem *item, int column);
signals:
......
......@@ -176,7 +176,7 @@ void MainWindow::actWatchReplay()
GameReplay *replay = new GameReplay;
replay->ParseFromArray(buf.data(), buf.size());
TabGame *replayWatcher = new TabGame(replay);
TabGame *replayWatcher = new TabGame(0, replay);
replayWatcher->show();
}
......
message ServerInfo_User {
enum UserLevelFlags {
IsNothing = 0;
IsUser = 1;
enum UserLevelFlag {
IsNothing = 0;
IsUser = 1;
IsRegistered = 2;
IsModerator = 4;
IsAdmin = 8;
......
......@@ -387,7 +387,7 @@ void Server_Game::addPlayer(Server_AbstractUserInterface *userInterface, Respons
newPlayer->moveToThread(thread());
Event_Join joinEvent;
joinEvent.mutable_player_properties()->CopyFrom(newPlayer->getProperties(true));
newPlayer->getProperties(*joinEvent.mutable_player_properties(), true);
sendGameEventContainer(prepareGameEvent(joinEvent, -1));
const QString playerName = QString::fromStdString(newPlayer->getUserInfo()->name());
......
......@@ -240,9 +240,8 @@ void Server_Player::clearZones()
lastDrawList.clear();
}
ServerInfo_PlayerProperties Server_Player::getProperties(bool withUserInfo)
void Server_Player::getProperties(ServerInfo_PlayerProperties &result, bool withUserInfo)
{
ServerInfo_PlayerProperties result;
result.set_player_id(playerId);
if (withUserInfo)
result.mutable_user_info()->CopyFrom(*userInfo);
......@@ -253,8 +252,6 @@ ServerInfo_PlayerProperties Server_Player::getProperties(bool withUserInfo)
if (deck)
result.set_deck_hash(deck->getDeckHash().toStdString());
result.set_ping_seconds(pingTime);
return result;
}
void Server_Player::addZone(Server_CardZone *zone)
......@@ -1668,7 +1665,7 @@ void Server_Player::disconnectClient()
void Server_Player::getInfo(ServerInfo_Player *info, Server_Player *playerWhosAsking, bool omniscient, bool withUserInfo)
{
info->mutable_properties()->CopyFrom(getProperties(withUserInfo));
getProperties(*info->mutable_properties(), withUserInfo);
if (playerWhosAsking == this)
if (deck)
info->set_deck_list(deck->writeToString_Native().toStdString());
......
......@@ -105,7 +105,7 @@ public:
int getPingTime() const { return pingTime; }
void setPingTime(int _pingTime) { pingTime = _pingTime; }
ServerInfo_PlayerProperties getProperties(bool withUserInfo);
void getProperties(ServerInfo_PlayerProperties &result, bool withUserInfo);
int newCardId();
int newCounterId() const;
......
#ifndef USER_LEVEL_H
#define USER_LEVEL_H
#include "pb/serverinfo_user.pb.h"
#include <QFlags>
Q_DECLARE_FLAGS(UserLevelFlags, ServerInfo_User::UserLevelFlag)
Q_DECLARE_OPERATORS_FOR_FLAGS(UserLevelFlags)
#endif
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment