mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-07-04 20:43:54 -07:00
more buddy&ignore code, added missing file
This commit is contained in:
parent
9e34c9c985
commit
4149f78001
18 changed files with 459 additions and 141 deletions
|
|
@ -32,6 +32,8 @@ void AbstractClient::processProtocolItem(ProtocolItem *item)
|
|||
GenericEvent *genericEvent = qobject_cast<GenericEvent *>(item);
|
||||
if (genericEvent) {
|
||||
switch (genericEvent->getItemId()) {
|
||||
case ItemId_Event_AddToList: emit addToListEventReceived(qobject_cast<Event_AddToList *>(item)); break;
|
||||
case ItemId_Event_RemoveFromList: emit removeFromListEventReceived(qobject_cast<Event_RemoveFromList *>(item)); break;
|
||||
case ItemId_Event_UserJoined: emit userJoinedEventReceived(qobject_cast<Event_UserJoined *>(item)); break;
|
||||
case ItemId_Event_UserLeft: emit userLeftEventReceived(qobject_cast<Event_UserLeft *>(item)); break;
|
||||
case ItemId_Event_ServerMessage: emit serverMessageEventReceived(qobject_cast<Event_ServerMessage *>(item)); break;
|
||||
|
|
|
|||
|
|
@ -12,7 +12,8 @@ class TopLevelProtocolItem;
|
|||
class CommandContainer;
|
||||
class RoomEvent;
|
||||
class GameEventContainer;
|
||||
class Event_ListGames;
|
||||
class Event_AddToList;
|
||||
class Event_RemoveFromList;
|
||||
class Event_UserJoined;
|
||||
class Event_UserLeft;
|
||||
class Event_ServerMessage;
|
||||
|
|
@ -40,6 +41,8 @@ signals:
|
|||
// Game events
|
||||
void gameEventContainerReceived(GameEventContainer *event);
|
||||
// Generic events
|
||||
void addToListEventReceived(Event_AddToList *event);
|
||||
void removeFromListEventReceived(Event_RemoveFromList *event);
|
||||
void userJoinedEventReceived(Event_UserJoined *event);
|
||||
void userLeftEventReceived(Event_UserLeft *event);
|
||||
void serverMessageEventReceived(Event_ServerMessage *event);
|
||||
|
|
|
|||
|
|
@ -10,6 +10,8 @@ class LocalServerInterface : public Server_ProtocolHandler
|
|||
Q_OBJECT
|
||||
private:
|
||||
DeckList *getDeckFromDatabase(int /*deckId*/) { return 0; }
|
||||
ResponseCode cmdAddToList(Command_AddToList * /*cmd*/, CommandContainer * /*cont*/) { return RespFunctionNotAllowed; }
|
||||
ResponseCode cmdRemoveFromList(Command_RemoveFromList * /*cmd*/, CommandContainer * /*cont*/) { return RespFunctionNotAllowed; }
|
||||
ResponseCode cmdDeckList(Command_DeckList * /*cmd*/, CommandContainer * /*cont*/) { return RespFunctionNotAllowed; }
|
||||
ResponseCode cmdDeckNewDir(Command_DeckNewDir * /*cmd*/, CommandContainer * /*cont*/) { return RespFunctionNotAllowed; }
|
||||
ResponseCode cmdDeckDelDir(Command_DeckDelDir * /*cmd*/, CommandContainer * /*cont*/) { return RespFunctionNotAllowed; }
|
||||
|
|
|
|||
142
cockatrice/src/tab_userlists.cpp
Normal file
142
cockatrice/src/tab_userlists.cpp
Normal file
|
|
@ -0,0 +1,142 @@
|
|||
#include "tab_userlists.h"
|
||||
#include "userlist.h"
|
||||
#include "userinfobox.h"
|
||||
#include "protocol_items.h"
|
||||
#include "abstractclient.h"
|
||||
#include <QDebug>
|
||||
#include <QHBoxLayout>
|
||||
#include <QVBoxLayout>
|
||||
|
||||
TabUserLists::TabUserLists(TabSupervisor *_tabSupervisor, AbstractClient *_client, ServerInfo_User *userInfo, QWidget *parent)
|
||||
: Tab(_tabSupervisor, parent), client(_client)
|
||||
{
|
||||
allUsersList = new UserList(this, client, UserList::AllUsersList);
|
||||
buddyList = new UserList(this, client, UserList::BuddyList);
|
||||
ignoreList = new UserList(this, client, UserList::IgnoreList);
|
||||
userInfoBox = new UserInfoBox(client, false);
|
||||
userInfoBox->updateInfo(userInfo);
|
||||
|
||||
connect(allUsersList, SIGNAL(openMessageDialog(const QString &, bool)), this, SIGNAL(openMessageDialog(const QString &, bool)));
|
||||
connect(buddyList, SIGNAL(openMessageDialog(const QString &, bool)), this, SIGNAL(openMessageDialog(const QString &, bool)));
|
||||
connect(ignoreList, SIGNAL(openMessageDialog(const QString &, bool)), this, SIGNAL(openMessageDialog(const QString &, bool)));
|
||||
|
||||
connect(client, SIGNAL(userJoinedEventReceived(Event_UserJoined *)), this, SLOT(processUserJoinedEvent(Event_UserJoined *)));
|
||||
connect(client, SIGNAL(userLeftEventReceived(Event_UserLeft *)), this, SLOT(processUserLeftEvent(Event_UserLeft *)));
|
||||
connect(client, SIGNAL(buddyListReceived(const QList<ServerInfo_User *> &)), this, SLOT(buddyListReceived(const QList<ServerInfo_User *> &)));
|
||||
connect(client, SIGNAL(ignoreListReceived(const QList<ServerInfo_User *> &)), this, SLOT(ignoreListReceived(const QList<ServerInfo_User *> &)));
|
||||
connect(client, SIGNAL(addToListEventReceived(Event_AddToList *)), this, SLOT(processAddToListEvent(Event_AddToList *)));
|
||||
connect(client, SIGNAL(removeFromListEventReceived(Event_RemoveFromList *)), this, SLOT(processRemoveFromListEvent(Event_RemoveFromList *)));
|
||||
|
||||
Command_ListUsers *cmd = new Command_ListUsers;
|
||||
connect(cmd, SIGNAL(finished(ProtocolResponse *)), this, SLOT(processListUsersResponse(ProtocolResponse *)));
|
||||
client->sendCommand(cmd);
|
||||
|
||||
QVBoxLayout *vbox = new QVBoxLayout;
|
||||
vbox->addWidget(userInfoBox);
|
||||
vbox->addWidget(allUsersList);
|
||||
|
||||
QHBoxLayout *mainLayout = new QHBoxLayout;
|
||||
mainLayout->addWidget(buddyList);
|
||||
mainLayout->addWidget(ignoreList);
|
||||
mainLayout->addLayout(vbox);
|
||||
|
||||
setLayout(mainLayout);
|
||||
}
|
||||
|
||||
void TabUserLists::retranslateUi()
|
||||
{
|
||||
allUsersList->retranslateUi();
|
||||
buddyList->retranslateUi();
|
||||
ignoreList->retranslateUi();
|
||||
userInfoBox->retranslateUi();
|
||||
}
|
||||
|
||||
void TabUserLists::processListUsersResponse(ProtocolResponse *response)
|
||||
{
|
||||
Response_ListUsers *resp = qobject_cast<Response_ListUsers *>(response);
|
||||
if (!resp)
|
||||
return;
|
||||
|
||||
const QList<ServerInfo_User *> &respList = resp->getUserList();
|
||||
for (int i = 0; i < respList.size(); ++i) {
|
||||
allUsersList->processUserInfo(respList[i], true);
|
||||
ignoreList->setUserOnline(respList[i]->getName(), true);
|
||||
buddyList->setUserOnline(respList[i]->getName(), true);
|
||||
}
|
||||
|
||||
allUsersList->sortItems();
|
||||
ignoreList->sortItems();
|
||||
buddyList->sortItems();
|
||||
}
|
||||
|
||||
void TabUserLists::processUserJoinedEvent(Event_UserJoined *event)
|
||||
{
|
||||
ServerInfo_User *info = event->getUserInfo();
|
||||
allUsersList->processUserInfo(info, true);
|
||||
ignoreList->setUserOnline(info->getName(), true);
|
||||
buddyList->setUserOnline(info->getName(), true);
|
||||
|
||||
allUsersList->sortItems();
|
||||
ignoreList->sortItems();
|
||||
buddyList->sortItems();
|
||||
|
||||
emit userJoined(event->getUserInfo()->getName());
|
||||
}
|
||||
|
||||
void TabUserLists::processUserLeftEvent(Event_UserLeft *event)
|
||||
{
|
||||
QString userName = event->getUserName();
|
||||
if (allUsersList->deleteUser(userName)) {
|
||||
ignoreList->setUserOnline(userName, false);
|
||||
buddyList->setUserOnline(userName, false);
|
||||
ignoreList->sortItems();
|
||||
buddyList->sortItems();
|
||||
|
||||
emit userLeft(userName);
|
||||
}
|
||||
}
|
||||
|
||||
void TabUserLists::buddyListReceived(const QList<ServerInfo_User *> &_buddyList)
|
||||
{
|
||||
for (int i = 0; i < _buddyList.size(); ++i)
|
||||
buddyList->processUserInfo(_buddyList[i], false);
|
||||
buddyList->sortItems();
|
||||
}
|
||||
|
||||
void TabUserLists::ignoreListReceived(const QList<ServerInfo_User *> &_ignoreList)
|
||||
{
|
||||
for (int i = 0; i < _ignoreList.size(); ++i)
|
||||
ignoreList->processUserInfo(_ignoreList[i], false);
|
||||
ignoreList->sortItems();
|
||||
}
|
||||
|
||||
void TabUserLists::processAddToListEvent(Event_AddToList *event)
|
||||
{
|
||||
ServerInfo_User *info = event->getUserInfo();
|
||||
bool online = allUsersList->userInList(info->getName());
|
||||
QString list = event->getList();
|
||||
UserList *userList = 0;
|
||||
if (list == "buddy")
|
||||
userList = buddyList;
|
||||
else if (list == "ignore")
|
||||
userList = ignoreList;
|
||||
if (!userList)
|
||||
return;
|
||||
|
||||
userList->processUserInfo(info, online);
|
||||
userList->sortItems();
|
||||
}
|
||||
|
||||
void TabUserLists::processRemoveFromListEvent(Event_RemoveFromList *event)
|
||||
{
|
||||
QString list = event->getList();
|
||||
QString user = event->getUserName();
|
||||
UserList *userList = 0;
|
||||
if (list == "buddy")
|
||||
userList = buddyList;
|
||||
else if (list == "ignore")
|
||||
userList = ignoreList;
|
||||
if (!userList)
|
||||
return;
|
||||
userList->deleteUser(user);
|
||||
}
|
||||
46
cockatrice/src/tab_userlists.h
Normal file
46
cockatrice/src/tab_userlists.h
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
#ifndef TAB_USERLISTS_H
|
||||
#define TAB_USERLISTS_H
|
||||
|
||||
#include "tab.h"
|
||||
|
||||
class AbstractClient;
|
||||
class UserList;
|
||||
class UserInfoBox;
|
||||
|
||||
class Event_ListRooms;
|
||||
class Event_UserJoined;
|
||||
class Event_UserLeft;
|
||||
class ProtocolResponse;
|
||||
class ServerInfo_User;
|
||||
class Event_AddToList;
|
||||
class Event_RemoveFromList;
|
||||
|
||||
class TabUserLists : public Tab {
|
||||
Q_OBJECT
|
||||
signals:
|
||||
void openMessageDialog(const QString &userName, bool focus);
|
||||
void userLeft(const QString &userName);
|
||||
void userJoined(const QString &userName);
|
||||
private slots:
|
||||
void processListUsersResponse(ProtocolResponse *response);
|
||||
void processUserJoinedEvent(Event_UserJoined *event);
|
||||
void processUserLeftEvent(Event_UserLeft *event);
|
||||
void buddyListReceived(const QList<ServerInfo_User *> &_buddyList);
|
||||
void ignoreListReceived(const QList<ServerInfo_User *> &_ignoreList);
|
||||
void processAddToListEvent(Event_AddToList *event);
|
||||
void processRemoveFromListEvent(Event_RemoveFromList *event);
|
||||
private:
|
||||
AbstractClient *client;
|
||||
UserList *allUsersList;
|
||||
UserList *buddyList;
|
||||
UserList *ignoreList;
|
||||
UserInfoBox *userInfoBox;
|
||||
public:
|
||||
TabUserLists(TabSupervisor *_tabSupervisor, AbstractClient *_client, ServerInfo_User *userInfo, QWidget *parent = 0);
|
||||
void retranslateUi();
|
||||
QString getTabText() const { return tr("User lists"); }
|
||||
UserList *getBuddyList() const { return buddyList; }
|
||||
UserList *getIgnoreList() const { return ignoreList; }
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
@ -3,6 +3,7 @@
|
|||
#include "abstractclient.h"
|
||||
#include "pixmapgenerator.h"
|
||||
#include "userinfobox.h"
|
||||
#include "protocol_items.h"
|
||||
#include <QHeaderView>
|
||||
#include <QVBoxLayout>
|
||||
#include <QMouseEvent>
|
||||
|
|
@ -90,7 +91,9 @@ void UserList::processUserInfo(ServerInfo_User *user, bool online)
|
|||
if (!item) {
|
||||
item = new UserListTWI;
|
||||
userTree->addTopLevelItem(item);
|
||||
retranslateUi();
|
||||
if (online)
|
||||
++onlineCount;
|
||||
updateCount();
|
||||
}
|
||||
item->setData(0, Qt::UserRole, user->getUserLevel());
|
||||
item->setIcon(0, QIcon(UserLevelPixmapGenerator::generatePixmap(12, user->getUserLevel())));
|
||||
|
|
@ -109,7 +112,10 @@ bool UserList::deleteUser(const QString &userName)
|
|||
{
|
||||
for (int i = 0; i < userTree->topLevelItemCount(); ++i)
|
||||
if (userTree->topLevelItem(i)->data(2, Qt::UserRole) == userName) {
|
||||
delete userTree->takeTopLevelItem(i);
|
||||
QTreeWidgetItem *item = userTree->takeTopLevelItem(i);
|
||||
if (item->data(0, Qt::UserRole + 1).toBool())
|
||||
--onlineCount;
|
||||
delete item;
|
||||
updateCount();
|
||||
return true;
|
||||
}
|
||||
|
|
@ -165,7 +171,7 @@ void UserList::showContextMenu(const QPoint &pos, const QModelIndex &index)
|
|||
QAction *aChat = new QAction(tr("Direct &chat"), this);
|
||||
QAction *aAddToBuddyList = new QAction(tr("Add to &buddy list"), this);
|
||||
QAction *aRemoveFromBuddyList = new QAction(tr("Remove from &buddy list"), this);
|
||||
QAction *aAddToIgnoreList = new QAction(tr("Remove from &ignore list"), this);
|
||||
QAction *aAddToIgnoreList = new QAction(tr("Add to &ignore list"), this);
|
||||
QAction *aRemoveFromIgnoreList = new QAction(tr("Remove from &ignore list"), this);
|
||||
|
||||
QMenu *menu = new QMenu(this);
|
||||
|
|
@ -191,18 +197,22 @@ void UserList::showContextMenu(const QPoint &pos, const QModelIndex &index)
|
|||
} else if (actionClicked == aChat)
|
||||
emit openMessageDialog(userName, true);
|
||||
else if (actionClicked == aAddToBuddyList)
|
||||
emit addBuddy(userName);
|
||||
client->sendCommand(new Command_AddToList("buddy", userName));
|
||||
else if (actionClicked == aRemoveFromBuddyList)
|
||||
emit removeBuddy(userName);
|
||||
client->sendCommand(new Command_RemoveFromList("buddy", userName));
|
||||
else if (actionClicked == aAddToIgnoreList)
|
||||
emit addIgnore(userName);
|
||||
client->sendCommand(new Command_AddToList("ignore", userName));
|
||||
else if (actionClicked == aRemoveFromIgnoreList)
|
||||
emit removeIgnore(userName);
|
||||
client->sendCommand(new Command_RemoveFromList("ignore", userName));
|
||||
|
||||
delete menu;
|
||||
delete aUserName;
|
||||
delete aDetails;
|
||||
delete aChat;
|
||||
delete aAddToBuddyList;
|
||||
delete aRemoveFromBuddyList;
|
||||
delete aAddToIgnoreList;
|
||||
delete aRemoveFromIgnoreList;
|
||||
}
|
||||
|
||||
bool UserList::userInList(const QString &userName) const
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue