diff --git a/cockatrice/cockatrice.pro b/cockatrice/cockatrice.pro index a1e5d183..6348efed 100644 --- a/cockatrice/cockatrice.pro +++ b/cockatrice/cockatrice.pro @@ -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 \ diff --git a/cockatrice/src/gamescene.cpp b/cockatrice/src/gamescene.cpp index 93f7e2f3..f885dd69 100644 --- a/cockatrice/src/gamescene.cpp +++ b/cockatrice/src/gamescene.cpp @@ -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(); +} diff --git a/cockatrice/src/gamescene.h b/cockatrice/src/gamescene.h index bd62e7d0..13c1d43b 100644 --- a/cockatrice/src/gamescene.h +++ b/cockatrice/src/gamescene.h @@ -5,7 +5,7 @@ #include class Player; -class ZoneViewLayout; +class ZoneViewWidget; class GameScene : public QGraphicsScene { Q_OBJECT @@ -13,14 +13,18 @@ private: static const int playerAreaSpacing = 5; QList players; - ZoneViewLayout *zvLayout; QRectF playersRect; + QList 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(); }; diff --git a/cockatrice/src/player.cpp b/cockatrice/src/player.cpp index 6aeaaaba..846665c8 100644 --- a/cockatrice/src/player.cpp +++ b/cockatrice/src/player.cpp @@ -379,7 +379,7 @@ void Player::initSayMenu() void Player::actViewLibrary() { - emit toggleZoneView(this, "deck", -1); + static_cast(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(scene())->toggleZoneView(this, "deck", number); } } void Player::actViewGraveyard() { - emit toggleZoneView(this, "grave", -1); + static_cast(scene())->toggleZoneView(this, "grave", -1); } void Player::actViewRfg() { - emit toggleZoneView(this, "rfg", -1); + static_cast(scene())->toggleZoneView(this, "rfg", -1); } void Player::actViewSideboard() { - emit toggleZoneView(this, "sb", -1); + static_cast(scene())->toggleZoneView(this, "sb", -1); } void Player::actShuffle() diff --git a/cockatrice/src/player.h b/cockatrice/src/player.h index 5e5e5de8..e19093b1 100644 --- a/cockatrice/src/player.h +++ b/cockatrice/src/player.h @@ -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); diff --git a/cockatrice/src/tab_game.cpp b/cockatrice/src/tab_game.cpp index a0695611..54eabd46 100644 --- a/cockatrice/src/tab_game.cpp +++ b/cockatrice/src/tab_game.cpp @@ -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 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(); } diff --git a/cockatrice/src/zoneviewlayout.cpp b/cockatrice/src/zoneviewlayout.cpp deleted file mode 100644 index 7601ec05..00000000 --- a/cockatrice/src/zoneviewlayout.cpp +++ /dev/null @@ -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(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(); -} diff --git a/cockatrice/src/zoneviewlayout.h b/cockatrice/src/zoneviewlayout.h deleted file mode 100644 index e6579271..00000000 --- a/cockatrice/src/zoneviewlayout.h +++ /dev/null @@ -1,28 +0,0 @@ -#ifndef ZONEVIEWLAYOUT_H -#define ZONEVIEWLAYOUT_H - -#include - -class ZoneViewWidget; -class ZoneViewZone; -class Player; - -class ZoneViewLayout : public QGraphicsWidget { - Q_OBJECT -signals: - void sizeChanged(); -private: - QList 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 diff --git a/cockatrice/src/zoneviewwidget.cpp b/cockatrice/src/zoneviewwidget.cpp index 9581fff1..65f2476d 100644 --- a/cockatrice/src/zoneviewwidget.cpp +++ b/cockatrice/src/zoneviewwidget.cpp @@ -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(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) { diff --git a/cockatrice/src/zoneviewwidget.h b/cockatrice/src/zoneviewwidget.h index 8affa5bd..63cb1038 100644 --- a/cockatrice/src/zoneviewwidget.h +++ b/cockatrice/src/zoneviewwidget.h @@ -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: