crash fixes; move_card fixes

This commit is contained in:
Max-Wilhelm Bruker 2009-12-18 19:03:02 +01:00
parent 2aa5c7eb3c
commit d23ece59ea
12 changed files with 43 additions and 10 deletions

View file

@ -11,6 +11,7 @@ GameScene::GameScene(ZoneViewLayout *_zvLayout, QObject *parent)
void GameScene::addPlayer(Player *player)
{
qDebug("GameScene::addPlayer");
players << player;
addItem(player);
rearrange();
@ -19,6 +20,7 @@ void GameScene::addPlayer(Player *player)
void GameScene::removePlayer(Player *player)
{
qDebug("GameScene::removePlayer");
players.removeAt(players.indexOf(player));
removeItem(player);
rearrange();

View file

@ -11,6 +11,7 @@
#include "cardlist.h"
#include "tab_game.h"
#include "protocol_items.h"
#include "gamescene.h"
#include <QSettings>
#include <QPainter>
#include <QMenu>
@ -252,6 +253,8 @@ Player::~Player()
{
qDebug("Player destructor");
static_cast<GameScene *>(scene())->removePlayer(this);
QMapIterator<QString, CardZone *> i(zones);
while (i.hasNext())
delete i.next().value();
@ -619,6 +622,7 @@ void Player::eventMoveCard(Event_MoveCard *event)
card->deleteDragItem();
card->setId(event->getNewCardId());
card->setFaceDown(event->getFaceDown());
// The log event has to be sent before the card is added to the target zone

View file

@ -120,6 +120,11 @@ TabGame::TabGame(Client *_client, int _gameId, int _localPlayerId, bool _spectat
TabGame::~TabGame()
{
QMapIterator<int, Player *> i(players);
while (i.hasNext())
delete i.next().value();
players.clear();
emit gameClosing(this);
}
@ -287,6 +292,7 @@ void TabGame::eventGameStateChanged(Event_GameStateChanged *event)
if (player->getLocal() && pl->getDeck()) {
Deck_PictureCacher::cachePictures(pl->getDeck(), this);
deckView->setDeck(new DeckList(pl->getDeck()));
readyStartButton->setEnabled(true);
}
}
}

View file

@ -52,6 +52,7 @@ ZoneViewWidget::ZoneViewWidget(Player *_player, CardZone *_origZone, int numberC
zone = new ZoneViewZone(player, _origZone, numberCards, this);
connect(zone, SIGNAL(contentsChanged()), this, SLOT(resizeToZoneContents()));
connect(zone, SIGNAL(beingDeleted()), this, SLOT(zoneDeleted()));
zone->dumpObjectInfo();
vbox->addItem(zone);
zone->initializeCards();
@ -91,6 +92,7 @@ void ZoneViewWidget::resizeToZoneContents()
void ZoneViewWidget::closeEvent(QCloseEvent *event)
{
disconnect(zone, SIGNAL(beingDeleted()), this, 0);
player->sendGameCommand(new Command_StopDumpZone(-1, player->getId(), zone->getName()));
if (shuffleCheckBox)
if (shuffleCheckBox->isChecked())
@ -99,3 +101,10 @@ void ZoneViewWidget::closeEvent(QCloseEvent *event)
deleteLater();
event->accept();
}
void ZoneViewWidget::zoneDeleted()
{
emit closePressed(this);
qDebug("foo");
deleteLater();
}

View file

@ -26,6 +26,7 @@ signals:
void sizeChanged();
private slots:
void resizeToZoneContents();
void zoneDeleted();
public:
ZoneViewWidget(Player *_player, CardZone *_origZone, int numberCards = 0, QGraphicsItem *parent = 0);
ZoneViewZone *getZone() const { return zone; }

View file

@ -12,6 +12,7 @@ ZoneViewZone::ZoneViewZone(Player *_p, CardZone *_origZone, int _numberCards, QG
ZoneViewZone::~ZoneViewZone()
{
emit beingDeleted();
qDebug("ZoneViewZone destructor");
origZone->setView(NULL);
}

View file

@ -30,6 +30,8 @@ public slots:
void setSortingEnabled(int _sortingEnabled);
private slots:
void zoneDumpReceived(ProtocolResponse *r);
signals:
void beingDeleted();
protected:
void addCardImpl(CardItem *card, int x, int y);
QSizeF sizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const;