trying to get rid of ZoneViewLayout

This commit is contained in:
Max-Wilhelm Bruker 2010-03-06 23:37:49 +01:00
parent e9a0203880
commit 8295b49634
10 changed files with 62 additions and 148 deletions

View file

@ -31,7 +31,6 @@ HEADERS += src/counter.h \
src/zoneviewwidget.h \
src/pilezone.h \
src/carddragitem.h \
src/zoneviewlayout.h \
src/carddatabasemodel.h \
src/window_deckeditor.h \
src/setsmodel.h \
@ -85,7 +84,6 @@ SOURCES += src/counter.cpp \
src/zoneviewwidget.cpp \
src/pilezone.cpp \
src/carddragitem.cpp \
src/zoneviewlayout.cpp \
src/carddatabasemodel.cpp \
src/window_deckeditor.cpp \
src/setsmodel.cpp \

View file

@ -1,12 +1,17 @@
#include "gamescene.h"
#include "player.h"
#include "zoneviewlayout.h"
#include "zoneviewwidget.h"
#include "zoneviewzone.h"
GameScene::GameScene(ZoneViewLayout *_zvLayout, QObject *parent)
: QGraphicsScene(parent), zvLayout(_zvLayout)
GameScene::GameScene(QObject *parent)
: QGraphicsScene(parent)
{
connect(zvLayout, SIGNAL(sizeChanged()), this, SLOT(rearrange()));
addItem(zvLayout);
}
void GameScene::retranslateUi()
{
for (int i = 0; i < views.size(); ++i)
views[i]->retranslateUi();
}
void GameScene::addPlayer(Player *player)
@ -57,11 +62,36 @@ void GameScene::rearrange()
playersRect = QRectF(0, 0, sceneWidth, sceneHeight);
zvLayout->setPos(QPointF(sceneWidth, 0));
sceneWidth += zvLayout->size().width();
if (zvLayout->size().height() > sceneHeight)
sceneHeight = zvLayout->size().height();
setSceneRect(sceneRect().x(), sceneRect().y(), sceneWidth, sceneHeight);
qDebug(QString("rearrange(): w=%1 h=%2").arg(sceneWidth).arg(sceneHeight).toLatin1());
}
void GameScene::toggleZoneView(Player *player, const QString &zoneName, int numberCards)
{
for (int i = 0; i < views.size(); i++) {
ZoneViewZone *temp = views[i]->getZone();
if ((temp->getName() == zoneName) && (temp->getPlayer() == player)) { // view is already open
views[i]->close();
if (temp->getNumberCards() == numberCards)
return;
}
}
ZoneViewWidget *item = new ZoneViewWidget(this, player, player->getZones().value(zoneName), numberCards);
views.append(item);
connect(item, SIGNAL(closePressed(ZoneViewWidget *)), this, SLOT(removeZoneView(ZoneViewWidget *)));
addItem(item);
}
void GameScene::removeZoneView(ZoneViewWidget *item)
{
views.removeAt(views.indexOf(item));
removeItem(item);
}
void GameScene::clearViews()
{
for (int i = 0; i < views.size(); ++i)
views[i]->close();
}

View file

@ -5,7 +5,7 @@
#include <QList>
class Player;
class ZoneViewLayout;
class ZoneViewWidget;
class GameScene : public QGraphicsScene {
Q_OBJECT
@ -13,14 +13,18 @@ private:
static const int playerAreaSpacing = 5;
QList<Player *> players;
ZoneViewLayout *zvLayout;
QRectF playersRect;
QList<ZoneViewWidget *> views;
public:
GameScene(ZoneViewLayout *_zvLayout, QObject *parent = 0);
GameScene(QObject *parent = 0);
void retranslateUi();
const QRectF &getPlayersRect() const { return playersRect; }
public slots:
void toggleZoneView(Player *player, const QString &zoneName, int numberCards);
void removeZoneView(ZoneViewWidget *item);
void addPlayer(Player *player);
void removePlayer(Player *player);
void clearViews();
private slots:
void rearrange();
};

View file

@ -379,7 +379,7 @@ void Player::initSayMenu()
void Player::actViewLibrary()
{
emit toggleZoneView(this, "deck", -1);
static_cast<GameScene *>(scene())->toggleZoneView(this, "deck", -1);
}
void Player::actViewTopCards()
@ -388,23 +388,23 @@ void Player::actViewTopCards()
int number = QInputDialog::getInteger(0, tr("View top cards of library"), tr("Number of cards:"), defaultNumberTopCards, 1, 2000000000, 1, &ok);
if (ok) {
defaultNumberTopCards = number;
emit toggleZoneView(this, "deck", number);
static_cast<GameScene *>(scene())->toggleZoneView(this, "deck", number);
}
}
void Player::actViewGraveyard()
{
emit toggleZoneView(this, "grave", -1);
static_cast<GameScene *>(scene())->toggleZoneView(this, "grave", -1);
}
void Player::actViewRfg()
{
emit toggleZoneView(this, "rfg", -1);
static_cast<GameScene *>(scene())->toggleZoneView(this, "rfg", -1);
}
void Player::actViewSideboard()
{
emit toggleZoneView(this, "sb", -1);
static_cast<GameScene *>(scene())->toggleZoneView(this, "sb", -1);
}
void Player::actShuffle()

View file

@ -42,8 +42,6 @@ class Event_DrawCards;
class Player : public QObject, public QGraphicsItem {
Q_OBJECT
signals:
void closeZoneView(ZoneViewZone *zone);
void toggleZoneView(Player *player, QString zoneName, int number);
void newCardAdded(AbstractCardItem *card);
// Log events
void logSay(Player *player, QString message);

View file

@ -9,7 +9,6 @@
#include "player.h"
#include "zoneviewzone.h"
#include "zoneviewwidget.h"
#include "zoneviewlayout.h"
#include "deckview.h"
#include "decklist.h"
#include "deck_picturecacher.h"
@ -23,8 +22,7 @@
TabGame::TabGame(Client *_client, int _gameId, const QString &_gameDescription, int _localPlayerId, bool _spectator, bool _resuming)
: Tab(), client(_client), gameId(_gameId), gameDescription(_gameDescription), localPlayerId(_localPlayerId), spectator(_spectator), started(false), resuming(_resuming), currentPhase(-1)
{
zoneLayout = new ZoneViewLayout;
scene = new GameScene(zoneLayout, this);
scene = new GameScene(this);
gameView = new GameView(scene);
gameView->hide();
@ -84,7 +82,6 @@ TabGame::TabGame(Client *_client, int _gameId, const QString &_gameDescription,
}
aCloseMostRecentZoneView = new QAction(this);
connect(aCloseMostRecentZoneView, SIGNAL(triggered()), zoneLayout, SLOT(closeMostRecentZoneView()));
addAction(aCloseMostRecentZoneView);
connect(loadLocalButton, SIGNAL(clicked()), this, SLOT(loadLocalDeck()));
@ -149,13 +146,14 @@ void TabGame::retranslateUi()
readyStartButton->setText(tr("S&tart game"));
sayLabel->setText(tr("&Say:"));
cardInfo->retranslateUi();
zoneLayout->retranslateUi();
aCloseMostRecentZoneView->setText(tr("Close most recent zone view"));
aCloseMostRecentZoneView->setShortcut(tr("Esc"));
QMapIterator<int, Player *> i(players);
while (i.hasNext())
i.next().value()->retranslateUi();
scene->retranslateUi();
}
void TabGame::actConcede()
@ -217,8 +215,6 @@ Player *TabGame::addPlayer(int playerId, const QString &playerName)
scene->addPlayer(newPlayer);
connect(newPlayer, SIGNAL(newCardAdded(AbstractCardItem *)), this, SLOT(newCardAdded(AbstractCardItem *)));
connect(newPlayer, SIGNAL(toggleZoneView(Player *, QString, int)), zoneLayout, SLOT(toggleZoneView(Player *, QString, int)));
connect(newPlayer, SIGNAL(closeZoneView(ZoneViewZone *)), zoneLayout, SLOT(removeItem(ZoneViewZone *)));
messageLog->connectToPlayer(newPlayer);
tabMenu->insertMenu(playersSeparator, newPlayer->getPlayerMenu());
@ -331,7 +327,7 @@ void TabGame::eventGameStateChanged(Event_GameStateChanged *event, GameEventCont
setActivePhase(event->getActivePhase());
} else if (!event->getGameStarted() && started) {
stopGame();
zoneLayout->clear();
scene->clearViews();
}
emit userEvent();
}

View file

@ -1,85 +0,0 @@
#include "zoneviewlayout.h"
#include "zoneviewwidget.h"
#include "zoneviewzone.h"
#include "player.h"
ZoneViewLayout::ZoneViewLayout(QGraphicsItem *parent)
: QGraphicsWidget(parent)
{
resize(0, 0);
}
void ZoneViewLayout::reorganize()
{
qDebug(QString("ZoneViewLayout: activate: count=%1").arg(views.size()).toLatin1());
if (views.isEmpty()) {
resize(0, 0);
emit sizeChanged();
return;
}
qreal x, y;
views.at(0)->getWindowFrameMargins(&x, &y, 0, 0);
qreal totalWidth = x;
qreal totalHeight = 0;
for (int i = 0; i < views.size(); i++) {
QRectF viewSize = views.at(i)->windowFrameRect();
qreal w = viewSize.right() - viewSize.left();
qreal h = viewSize.bottom() - viewSize.top();
views.at(i)->setPos(totalWidth, y);
totalWidth += w;
if (h > totalHeight)
totalHeight = h;
}
resize(totalWidth, totalHeight);
emit sizeChanged();
}
void ZoneViewLayout::toggleZoneView(Player *player, const QString &zoneName, int numberCards)
{
for (int i = 0; i < views.size(); i++) {
ZoneViewZone *temp = views[i]->getZone();
if ((temp->getName() == zoneName) && (temp->getPlayer() == player)) { // view is already open
views[i]->close();
if (temp->getNumberCards() == numberCards)
return;
}
}
ZoneViewWidget *item = new ZoneViewWidget(player, player->getZones().value(zoneName), numberCards, this);
views.append(item);
connect(item, SIGNAL(closePressed(ZoneViewWidget *)), this, SLOT(removeItem(ZoneViewWidget *)));
connect(item, SIGNAL(sizeChanged()), this, SLOT(reorganize()));
reorganize();
setZValue(2);
}
void ZoneViewLayout::removeItem(ZoneViewWidget *item)
{
qDebug("ZoneViewLayout::removeItem");
views.removeAt(views.indexOf(item));
reorganize();
}
void ZoneViewLayout::removeItem(ZoneViewZone *item)
{
removeItem(dynamic_cast<ZoneViewWidget *>(item->parentItem()));
}
void ZoneViewLayout::closeMostRecentZoneView()
{
if (views.isEmpty())
return;
views.at(views.size() - 1)->close();
}
void ZoneViewLayout::clear()
{
for (int i = views.size() - 1; i >= 0; --i)
views.at(i)->close();
}
void ZoneViewLayout::retranslateUi()
{
for (int i = views.size() - 1; i >= 0; --i)
views.at(i)->retranslateUi();
}

View file

@ -1,28 +0,0 @@
#ifndef ZONEVIEWLAYOUT_H
#define ZONEVIEWLAYOUT_H
#include <QGraphicsWidget>
class ZoneViewWidget;
class ZoneViewZone;
class Player;
class ZoneViewLayout : public QGraphicsWidget {
Q_OBJECT
signals:
void sizeChanged();
private:
QList<ZoneViewWidget *> views;
public:
ZoneViewLayout(QGraphicsItem *parent = 0);
void retranslateUi();
public slots:
void toggleZoneView(Player *player, const QString &zoneName, int numberCards = 0);
void removeItem(ZoneViewWidget *item);
void removeItem(ZoneViewZone *item);
void closeMostRecentZoneView();
void reorganize();
void clear();
};
#endif

View file

@ -7,8 +7,8 @@
#include "gamescene.h"
#include "protocol_items.h"
ZoneViewWidget::ZoneViewWidget(Player *_player, CardZone *_origZone, int numberCards, QGraphicsItem *parent)
: QGraphicsWidget(parent, Qt::Tool | Qt::CustomizeWindowHint | Qt::WindowSystemMenuHint | Qt::WindowTitleHint/* | Qt::WindowCloseButtonHint*/), player(_player)
ZoneViewWidget::ZoneViewWidget(GameScene *_scene, Player *_player, CardZone *_origZone, int numberCards)
: QGraphicsWidget(0, Qt::Tool | Qt::CustomizeWindowHint | Qt::WindowSystemMenuHint | Qt::WindowTitleHint/* | Qt::WindowCloseButtonHint*/), player(_player)
{
setAttribute(Qt::WA_DeleteOnClose);
@ -38,7 +38,7 @@ ZoneViewWidget::ZoneViewWidget(Player *_player, CardZone *_origZone, int numberC
qreal left, top, right, bottom;
getWindowFrameMargins(&left, &top, &right, &bottom);
qreal h = scene()->sceneRect().height() - (top + bottom);
qreal h = _scene->sceneRect().height() - (top + bottom);
/* scrollBar = new QScrollBar(Qt::Vertical);
QGraphicsProxyWidget *scrollProxy = new QGraphicsProxyWidget(this);
@ -77,7 +77,7 @@ void ZoneViewWidget::retranslateUi()
void ZoneViewWidget::resizeToZoneContents()
{
qDebug("+++++++ bla");
/* qDebug("+++++++ bla");
int cardCount = zone->getCards().size();
const QRectF &playersRect = static_cast<GameScene *>(scene())->getPlayersRect();
int h = 0;
@ -88,7 +88,7 @@ void ZoneViewWidget::resizeToZoneContents()
qDebug(QString("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx resizing to %1").arg(h).toLatin1());
resize(size().width(), h);
emit sizeChanged();
}
*/}
void ZoneViewWidget::closeEvent(QCloseEvent *event)
{

View file

@ -11,6 +11,7 @@ class Player;
class CardDatabase;
class QScrollBar;
class QCheckBox;
class GameScene;
class ZoneViewWidget : public QGraphicsWidget {
Q_OBJECT
@ -28,7 +29,7 @@ private slots:
void resizeToZoneContents();
void zoneDeleted();
public:
ZoneViewWidget(Player *_player, CardZone *_origZone, int numberCards = 0, QGraphicsItem *parent = 0);
ZoneViewWidget(GameScene *_scene, Player *_player, CardZone *_origZone, int numberCards = 0);
ZoneViewZone *getZone() const { return zone; }
void retranslateUi();
protected: