remote deck loading finished

This commit is contained in:
Max-Wilhelm Bruker 2009-11-22 14:24:01 +01:00
parent cf21528a69
commit 4fac0e5b5a
14 changed files with 220 additions and 184 deletions

View file

@ -25,7 +25,7 @@ HEADERS += src/counter.h \
src/gameview.h \
src/deck_picturecacher.h \
src/decklistmodel.h \
src/dlg_startgame.h \
src/dlg_load_remote_deck.h \
src/cardinfowidget.h \
src/messagelogwidget.h \
src/zoneviewzone.h \
@ -47,6 +47,7 @@ HEADERS += src/counter.h \
src/tab_game.h \
src/tab_deck_storage.h \
src/tab_supervisor.h \
src/remotedecklist_treewidget.h \
src/deckview.h \
../common/decklist.h \
../common/protocol.h \
@ -72,7 +73,7 @@ SOURCES += src/counter.cpp \
src/gameview.cpp \
src/deck_picturecacher.cpp \
src/decklistmodel.cpp \
src/dlg_startgame.cpp \
src/dlg_load_remote_deck.cpp \
src/cardinfowidget.cpp \
src/messagelogwidget.cpp \
src/zoneviewzone.cpp \
@ -94,6 +95,7 @@ SOURCES += src/counter.cpp \
src/tab_game.cpp \
src/tab_deck_storage.cpp \
src/tab_supervisor.cpp \
src/remotedecklist_treewidget.cpp \
src/deckview.cpp \
../common/decklist.cpp \
../common/protocol.cpp \

View file

@ -0,0 +1,52 @@
#include <QPushButton>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include "remotedecklist_treewidget.h"
#include "dlg_load_remote_deck.h"
#include "main.h"
DlgLoadRemoteDeck::DlgLoadRemoteDeck(Client *_client, QWidget *parent)
: QDialog(parent), client(_client)
{
dirView = new RemoteDeckList_TreeWidget(client);
okButton = new QPushButton(tr("O&K"));
okButton->setDefault(true);
okButton->setAutoDefault(true);
okButton->setEnabled(false);
cancelButton = new QPushButton(tr("&Cancel"));
QHBoxLayout *buttonLayout = new QHBoxLayout;
buttonLayout->addStretch();
buttonLayout->addWidget(okButton);
buttonLayout->addWidget(cancelButton);
QVBoxLayout *mainLayout = new QVBoxLayout;
mainLayout->addWidget(dirView);
mainLayout->addLayout(buttonLayout);
setLayout(mainLayout);
setWindowTitle(tr("Load deck"));
setMinimumWidth(sizeHint().width());
resize(300, 500);
connect(dirView, SIGNAL(currentItemChanged(QTreeWidgetItem *, QTreeWidgetItem *)), this, SLOT(currentItemChanged(QTreeWidgetItem *, QTreeWidgetItem *)));
connect(okButton, SIGNAL(clicked()), this, SLOT(accept()));
connect(cancelButton, SIGNAL(clicked()), this, SLOT(reject()));
}
void DlgLoadRemoteDeck::currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem * /*previous*/)
{
if (!current)
okButton->setEnabled(false);
else if (current->type() == TWIDeckType)
okButton->setEnabled(true);
else
okButton->setEnabled(false);
}
int DlgLoadRemoteDeck::getDeckId() const
{
return dirView->currentItem()->data(1, Qt::DisplayRole).toInt();
}

View file

@ -0,0 +1,24 @@
#ifndef DLG_STARTGAME_H
#define DLG_STARTGAME_H
#include <QDialog>
class RemoteDeckList_TreeWidget;
class QTreeWidgetItem;
class Client;
class QPushButton;
class DlgLoadRemoteDeck: public QDialog {
Q_OBJECT
private:
Client *client;
RemoteDeckList_TreeWidget *dirView;
QPushButton *okButton, *cancelButton;
private slots:
void currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous);
public:
DlgLoadRemoteDeck(Client *_client, QWidget *parent = 0);
int getDeckId() const;
};
#endif

View file

@ -1,65 +0,0 @@
#include <QtGui>
#include <QFileDialog>
#include "dlg_startgame.h"
#include "decklistmodel.h"
#include "carddatabase.h"
#include "main.h"
DlgStartGame::DlgStartGame(QWidget *parent)
: QDialog(parent)
{
deckView = new QTreeView;
deckModel = new DeckListModel(this);
deckView->setModel(deckModel);
deckView->setUniformRowHeights(true);
loadButton = new QPushButton(tr("&Load..."));
okButton = new QPushButton(tr("&OK"));
okButton->setDefault(true);
QHBoxLayout *buttonLayout = new QHBoxLayout;
buttonLayout->addWidget(loadButton);
buttonLayout->addStretch();
buttonLayout->addWidget(okButton);
QVBoxLayout *mainLayout = new QVBoxLayout;
mainLayout->addWidget(deckView);
mainLayout->addLayout(buttonLayout);
setLayout(mainLayout);
setWindowTitle(tr("Start game"));
setMinimumWidth(sizeHint().width());
resize(300, 500);
connect(loadButton, SIGNAL(clicked()), this, SLOT(actLoad()));
connect(okButton, SIGNAL(clicked()), this, SLOT(accept()));
}
void DlgStartGame::actLoad()
{
// if (!deckModel->getDeckList()->loadDialog(this))
// return;
deckView->reset();
deckModel->sort(1);
deckView->expandAll();
deckView->resizeColumnToContents(0);
emit newDeckLoaded(getDeckList());
}
QStringList DlgStartGame::getDeckList() const
{
QStringList result;
DeckList *deckList = deckModel->getDeckList();
for (int i = 0; i < deckList->getRoot()->size(); i++) {
InnerDecklistNode *node = dynamic_cast<InnerDecklistNode *>(deckList->getRoot()->at(i));
for (int j = 0; j < node->size(); j++) {
DecklistCardNode *card = dynamic_cast<DecklistCardNode *>(node->at(j));
for (int k = 0; k < card->getNumber(); k++)
result << QString("%1%2").arg(node->getName() == "side" ? "SB: " : "").arg(card->getName());
}
}
return result;
}

View file

@ -1,27 +0,0 @@
#ifndef DLG_STARTGAME_H
#define DLG_STARTGAME_H
#include <QDialog>
class QTreeView;
class QPushButton;
class CardDatabase;
class DeckListModel;
class DlgStartGame: public QDialog {
Q_OBJECT
public:
DlgStartGame(QWidget *parent = 0);
QStringList getDeckList() const;
signals:
void newDeckLoaded(const QStringList &cards);
private slots:
void actLoad();
private:
QTreeView *deckView;
DeckListModel *deckModel;
QPushButton *loadButton, *okButton;
};
#endif

View file

@ -8,7 +8,6 @@
#include "tablezone.h"
#include "handzone.h"
#include "carddatabase.h"
#include "dlg_startgame.h"
#include "counter.h"
#include "gamescene.h"
#include "player.h"
@ -80,10 +79,6 @@ Game::Game(Client *_client, GameScene *_scene, QMenuBar *menuBar, QObject *paren
connect(i.key(), SIGNAL(triggered()), this, SLOT(cardMenuAction()));
}
dlgStartGame = new DlgStartGame;
connect(dlgStartGame, SIGNAL(newDeckLoaded(const QStringList &)), client, SLOT(submitDeck(const QStringList &)));
connect(dlgStartGame, SIGNAL(finished(int)), this, SLOT(readyStart()));
retranslateUi();
}
@ -259,7 +254,7 @@ void Game::readyStart()
void Game::restartGameDialog()
{
dlgStartGame->show();
// dlgStartGame->show();
}
/*
void Game::gameEvent(const ServerEventData &msg)

View file

@ -11,7 +11,6 @@
class GameScene;
class Player;
class CardDatabase;
class DlgStartGame;
class CardItem;
class QMenuBar;
class CardZone;
@ -28,7 +27,6 @@ private:
QAction *aTap, *aUntap, *aDoesntUntap, *aFlip, *aAddCounter, *aRemoveCounter, *aSetCounters,
*aMoveToTopLibrary, *aMoveToBottomLibrary, *aMoveToGraveyard, *aMoveToExile,
*aNextPhase, *aNextTurn, *aRemoveLocalArrows;
DlgStartGame *dlgStartGame;
Client *client;
GameScene *scene;

View file

@ -0,0 +1,82 @@
#include <QFileIconProvider>
#include <QHeaderView>
#include "remotedecklist_treewidget.h"
#include "protocol_items.h"
#include "client.h"
RemoteDeckList_TreeWidget::RemoteDeckList_TreeWidget(Client *_client, QWidget *parent)
: QTreeWidget(parent), client(_client)
{
header()->setResizeMode(QHeaderView::ResizeToContents);
setColumnCount(3);
refreshTree();
retranslateUi();
}
void RemoteDeckList_TreeWidget::retranslateUi()
{
headerItem()->setText(0, tr("Name"));
headerItem()->setText(1, tr("ID"));
headerItem()->setText(2, tr("Upload time"));
headerItem()->setTextAlignment(1, Qt::AlignRight);
}
void RemoteDeckList_TreeWidget::addFileToTree(DeckList_File *file, QTreeWidgetItem *parent)
{
QFileIconProvider fip;
QTreeWidgetItem *newDeck = new QTreeWidgetItem(TWIDeckType);
newDeck->setIcon(0, fip.icon(QFileIconProvider::File));
newDeck->setData(0, Qt::DisplayRole, file->getName());
newDeck->setData(1, Qt::DisplayRole, file->getId());
newDeck->setTextAlignment(1, Qt::AlignRight);
newDeck->setData(2, Qt::DisplayRole, file->getUploadTime());
parent->addChild(newDeck);
}
void RemoteDeckList_TreeWidget::addFolderToTree(DeckList_Directory *folder, QTreeWidgetItem *parent)
{
QFileIconProvider fip;
QTreeWidgetItem *newItem = new QTreeWidgetItem(TWIFolderType);
newItem->setIcon(0, fip.icon(QFileIconProvider::Folder));
newItem->setText(0, parent ? folder->getName() : "/");
if (parent) {
parent->addChild(newItem);
QString path = parent->data(0, Qt::UserRole).toString();
if (path.isEmpty())
newItem->setData(0, Qt::UserRole, folder->getName());
else
newItem->setData(0, Qt::UserRole, path + "/" + folder->getName());
} else {
addTopLevelItem(newItem);
newItem->setData(0, Qt::UserRole, QString());
}
for (int i = 0; i < folder->size(); ++i) {
DeckList_Directory *subFolder = dynamic_cast<DeckList_Directory *>(folder->at(i));
if (subFolder)
addFolderToTree(subFolder, newItem);
else
addFileToTree(dynamic_cast<DeckList_File *>(folder->at(i)), newItem);
}
}
void RemoteDeckList_TreeWidget::refreshTree()
{
Command_DeckList *command = new Command_DeckList;
connect(command, SIGNAL(finished(ProtocolResponse *)), this, SLOT(deckListFinished(ProtocolResponse *)));
client->sendCommand(command);
}
void RemoteDeckList_TreeWidget::deckListFinished(ProtocolResponse *r)
{
Response_DeckList *resp = qobject_cast<Response_DeckList *>(r);
if (!resp)
return;
clear();
addFolderToTree(resp->getRoot(), 0);
expandAll();
}

View file

@ -0,0 +1,27 @@
#ifndef REMOTEDECKLIST_TREEWIDGET_H
#define REMOTEDECKLIST_TREEWIDGET_H
#include <QTreeWidget>
class ProtocolResponse;
class Client;
class DeckList_File;
class DeckList_Directory;
enum { TWIFolderType = QTreeWidgetItem::UserType + 1, TWIDeckType = QTreeWidgetItem::UserType + 2 };
class RemoteDeckList_TreeWidget : public QTreeWidget {
Q_OBJECT
private:
Client *client;
private slots:
void deckListFinished(ProtocolResponse *r);
public:
RemoteDeckList_TreeWidget(Client *_client, QWidget *parent = 0);
void retranslateUi();
void addFileToTree(DeckList_File *file, QTreeWidgetItem *parent);
void addFolderToTree(DeckList_Directory *folder, QTreeWidgetItem *parent);
void refreshTree();
};
#endif

View file

@ -1,12 +1,11 @@
#include <QtGui>
#include <QDebug>
#include "tab_deck_storage.h"
#include "remotedecklist_treewidget.h"
#include "client.h"
#include "decklist.h"
#include "protocol_items.h"
enum { TWIFolderType = QTreeWidgetItem::UserType + 1, TWIDeckType = QTreeWidgetItem::UserType + 2 };
TabDeckStorage::TabDeckStorage(Client *_client)
: QWidget(), client(_client)
{
@ -47,9 +46,7 @@ TabDeckStorage::TabDeckStorage(Client *_client)
rightToolBarLayout->addWidget(rightToolBar);
rightToolBarLayout->addStretch();
serverDirView = new QTreeWidget;
serverDirView->header()->setResizeMode(QHeaderView::ResizeToContents);
serverDirView->setColumnCount(3);
serverDirView = new RemoteDeckList_TreeWidget(client);
QVBoxLayout *rightVbox = new QVBoxLayout;
rightVbox->addWidget(serverDirView);
@ -81,8 +78,6 @@ TabDeckStorage::TabDeckStorage(Client *_client)
retranslateUi();
setLayout(hbox);
refreshServerList();
}
void TabDeckStorage::retranslateUi()
@ -94,71 +89,8 @@ void TabDeckStorage::retranslateUi()
aDownload->setText(tr("Download deck"));
aNewFolder->setText(tr("New folder"));
aDelete->setText(tr("Delete"));
QTreeWidgetItem *header = serverDirView->headerItem();
header->setText(0, tr("Name"));
header->setText(1, tr("ID"));
header->setText(2, tr("Upload time"));
header->setTextAlignment(1, Qt::AlignRight);
}
void TabDeckStorage::refreshServerList()
{
Command_DeckList *command = new Command_DeckList;
connect(command, SIGNAL(finished(ProtocolResponse *)), this, SLOT(deckListFinished(ProtocolResponse *)));
client->sendCommand(command);
}
void TabDeckStorage::addFileToTree(DeckList_File *file, QTreeWidgetItem *parent)
{
QFileIconProvider fip;
QTreeWidgetItem *newDeck = new QTreeWidgetItem(TWIDeckType);
newDeck->setIcon(0, fip.icon(QFileIconProvider::File));
newDeck->setData(0, Qt::DisplayRole, file->getName());
newDeck->setData(1, Qt::DisplayRole, file->getId());
newDeck->setTextAlignment(1, Qt::AlignRight);
newDeck->setData(2, Qt::DisplayRole, file->getUploadTime());
parent->addChild(newDeck);
}
void TabDeckStorage::populateDeckList(DeckList_Directory *folder, QTreeWidgetItem *parent)
{
QFileIconProvider fip;
QTreeWidgetItem *newItem = new QTreeWidgetItem(TWIFolderType);
newItem->setIcon(0, fip.icon(QFileIconProvider::Folder));
newItem->setText(0, parent ? folder->getName() : "/");
if (parent) {
parent->addChild(newItem);
QString path = parent->data(0, Qt::UserRole).toString();
if (path.isEmpty())
newItem->setData(0, Qt::UserRole, folder->getName());
else
newItem->setData(0, Qt::UserRole, path + "/" + folder->getName());
} else {
serverDirView->addTopLevelItem(newItem);
newItem->setData(0, Qt::UserRole, QString());
}
for (int i = 0; i < folder->size(); ++i) {
DeckList_Directory *subFolder = dynamic_cast<DeckList_Directory *>(folder->at(i));
if (subFolder)
populateDeckList(subFolder, newItem);
else
addFileToTree(dynamic_cast<DeckList_File *>(folder->at(i)), newItem);
}
}
void TabDeckStorage::deckListFinished(ProtocolResponse *r)
{
Response_DeckList *resp = qobject_cast<Response_DeckList *>(r);
if (!resp)
return;
serverDirView->clear();
populateDeckList(resp->getRoot(), 0);
serverDirView->expandAll();
serverDirView->retranslateUi();
}
void TabDeckStorage::actUpload()
@ -194,7 +126,7 @@ void TabDeckStorage::uploadFinished(ProtocolResponse *r)
QTreeWidgetItemIterator it(serverDirView);
while (*it) {
if ((*it)->data(0, Qt::UserRole) == cmd->getPath()) {
addFileToTree(resp->getFile(), *it);
serverDirView->addFileToTree(resp->getFile(), *it);
break;
}
++it;

View file

@ -13,6 +13,7 @@ class QTreeWidget;
class QTreeWidgetItem;
class QGroupBox;
class ProtocolResponse;
class RemoteDeckList_TreeWidget;
class TabDeckStorage : public QWidget {
Q_OBJECT
@ -22,16 +23,11 @@ private:
QFileSystemModel *localDirModel;
QSortFilterProxyModel *sortFilter;
QToolBar *leftToolBar, *rightToolBar;
QTreeWidget *serverDirView;
RemoteDeckList_TreeWidget *serverDirView;
QGroupBox *leftGroupBox, *rightGroupBox;
QAction *aUpload, *aDownload, *aNewFolder, *aDelete;
void addFileToTree(DeckList_File *file, QTreeWidgetItem *parent);
void populateDeckList(DeckList_Directory *folder, QTreeWidgetItem *parent);
void refreshServerList();
private slots:
void deckListFinished(ProtocolResponse *r);
void actUpload();
void uploadFinished(ProtocolResponse *r);

View file

@ -14,6 +14,7 @@
#include "decklist.h"
#include "deck_picturecacher.h"
#include "protocol_items.h"
#include "dlg_load_remote_deck.h"
#include "main.h"
TabGame::TabGame(Client *_client, int _gameId)
@ -26,10 +27,12 @@ TabGame::TabGame(Client *_client, int _gameId)
loadLocalButton = new QPushButton;
loadRemoteButton = new QPushButton;
readyStartButton = new QPushButton;
QHBoxLayout *buttonHBox = new QHBoxLayout;
buttonHBox->addWidget(loadLocalButton);
buttonHBox->addWidget(loadRemoteButton);
buttonHBox->addWidget(readyStartButton);
buttonHBox->addStretch();
deckView = new DeckView;
QVBoxLayout *deckViewLayout = new QVBoxLayout;
@ -66,6 +69,7 @@ TabGame::TabGame(Client *_client, int _gameId)
connect(loadLocalButton, SIGNAL(clicked()), this, SLOT(loadLocalDeck()));
connect(loadRemoteButton, SIGNAL(clicked()), this, SLOT(loadRemoteDeck()));
connect(readyStartButton, SIGNAL(clicked()), this, SLOT(readyStart()));
connect(sayEdit, SIGNAL(returnPressed()), this, SLOT(actSay()));
@ -93,6 +97,7 @@ void TabGame::retranslateUi()
{
loadLocalButton->setText(tr("Load &local deck"));
loadRemoteButton->setText(tr("Load deck from &server"));
readyStartButton->setText(tr("&Start game"));
sayLabel->setText(tr("&Say:"));
cardInfo->retranslateUi();
// if (game)
@ -132,7 +137,12 @@ void TabGame::loadLocalDeck()
void TabGame::loadRemoteDeck()
{
DlgLoadRemoteDeck dlg(client);
if (dlg.exec()) {
Command_DeckSelect *cmd = new Command_DeckSelect(gameId, 0, dlg.getDeckId());
connect(cmd, SIGNAL(finished(ProtocolResponse *)), this, SLOT(deckSelectFinished(ProtocolResponse *)));
client->sendCommand(cmd);
}
}
void TabGame::deckSelectFinished(ProtocolResponse *r)
@ -146,3 +156,8 @@ void TabGame::deckSelectFinished(ProtocolResponse *r)
Deck_PictureCacher::cachePictures(resp->getDeck(), this);
deckView->setDeck(resp->getDeck());
}
void TabGame::readyStart()
{
client->sendCommand(new Command_ReadyStart(gameId));
}

View file

@ -26,7 +26,7 @@ private:
Client *client;
int gameId;
QPushButton *loadLocalButton, *loadRemoteButton;
QPushButton *loadLocalButton, *loadRemoteButton, *readyStartButton;
CardInfoWidget *cardInfo;
MessageLogWidget *messageLog;
QLabel *sayLabel;
@ -41,6 +41,7 @@ private:
private slots:
void loadLocalDeck();
void loadRemoteDeck();
void readyStart();
void deckSelectFinished(ProtocolResponse *r);
public:
TabGame(Client *_client, int _gameId);

View file

@ -257,7 +257,11 @@ public:
GameEvent(const QString &_eventName, int _gameId, int _playerId);
int getGameId() const { return gameId; }
int getPlayerId() const { return playerId; }
void setGameId(int _gameId) { gameId = _gameId; }
void setGameId(int _gameId)
{
gameId = _gameId;
setParameter("game_id", gameId);
}
};
class ChatEvent : public ProtocolItem {