trying to get rid of ZoneViewLayout
This commit is contained in:
parent
e9a0203880
commit
8295b49634
10 changed files with 62 additions and 148 deletions
|
@ -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 \
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
};
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
|
@ -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
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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:
|
||||
|
|
Loading…
Reference in a new issue