From 60f99818e1991370ce37a4555a851bc560a441bd Mon Sep 17 00:00:00 2001 From: Max-Wilhelm Bruker Date: Sat, 2 Jun 2012 18:09:19 +0200 Subject: [PATCH] fixed DlgEditTokens crash when removing a token --- cockatrice/src/carddatabasemodel.h | 1 + cockatrice/src/dlg_edit_tokens.cpp | 21 ++++++++++----------- cockatrice/src/dlg_edit_tokens.h | 2 +- cockatrice/src/tab_deck_editor.cpp | 2 +- 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/cockatrice/src/carddatabasemodel.h b/cockatrice/src/carddatabasemodel.h index fdac3f290..b2998bfee 100644 --- a/cockatrice/src/carddatabasemodel.h +++ b/cockatrice/src/carddatabasemodel.h @@ -16,6 +16,7 @@ public: int columnCount(const QModelIndex &parent = QModelIndex()) const; QVariant data(const QModelIndex &index, int role) const; QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const; + CardDatabase *getDatabase() const { return db; } CardInfo *getCard(int index) const { return cardList[index]; } private: QList cardList; diff --git a/cockatrice/src/dlg_edit_tokens.cpp b/cockatrice/src/dlg_edit_tokens.cpp index a276460fd..4e41d578d 100644 --- a/cockatrice/src/dlg_edit_tokens.cpp +++ b/cockatrice/src/dlg_edit_tokens.cpp @@ -1,6 +1,5 @@ #include "dlg_edit_tokens.h" #include "carddatabasemodel.h" -#include "main.h" #include #include #include @@ -16,8 +15,8 @@ #include #include -DlgEditTokens::DlgEditTokens(QWidget *parent) - : QDialog(parent), currentCard(0) +DlgEditTokens::DlgEditTokens(CardDatabaseModel *_cardDatabaseModel, QWidget *parent) + : QDialog(parent), currentCard(0), cardDatabaseModel(_cardDatabaseModel) { nameLabel = new QLabel(tr("&Name:")); nameEdit = new QLineEdit; @@ -59,7 +58,6 @@ DlgEditTokens::DlgEditTokens(QWidget *parent) QGroupBox *tokenDataGroupBox = new QGroupBox(tr("Token data")); tokenDataGroupBox->setLayout(grid); - cardDatabaseModel = new CardDatabaseModel(db, this); cardDatabaseDisplayModel = new CardDatabaseDisplayModel(this); cardDatabaseDisplayModel->setSourceModel(cardDatabaseModel); cardDatabaseDisplayModel->setIsToken(CardDatabaseDisplayModel::ShowTrue); @@ -113,7 +111,7 @@ DlgEditTokens::DlgEditTokens(QWidget *parent) void DlgEditTokens::tokenSelectionChanged(const QModelIndex ¤t, const QModelIndex &previous) { const QModelIndex realIndex = cardDatabaseDisplayModel->mapToSource(current); - CardInfo *cardInfo = current.row() >= 0 ? cardDatabaseModel->getCard(realIndex.row()) : db->getCard(); + CardInfo *cardInfo = current.row() >= 0 ? cardDatabaseModel->getCard(realIndex.row()) : cardDatabaseModel->getDatabase()->getCard(); if (!cardInfo->getName().isEmpty()) currentCard = cardInfo; else @@ -132,7 +130,7 @@ void DlgEditTokens::actAddToken() bool askAgain; do { name = QInputDialog::getText(this, tr("Add token"), tr("Please enter the name of the token:")); - if (!name.isEmpty() && db->getCard(name, false)) { + if (!name.isEmpty() && cardDatabaseModel->getDatabase()->getCard(name, false)) { QMessageBox::critical(this, tr("Error"), tr("The chosen name conflicts with an existing card or token.")); askAgain = true; } else @@ -142,18 +140,19 @@ void DlgEditTokens::actAddToken() if (name.isEmpty()) return; - CardInfo *card = new CardInfo(db, name, true); - card->addToSet(db->getSet("TK")); + CardInfo *card = new CardInfo(cardDatabaseModel->getDatabase(), name, true); + card->addToSet(cardDatabaseModel->getDatabase()->getSet("TK")); card->setCardType("Token"); - db->addCard(card); + cardDatabaseModel->getDatabase()->addCard(card); } void DlgEditTokens::actRemoveToken() { if (currentCard) { - db->removeCard(currentCard); - delete currentCard; + CardInfo *cardToRemove = currentCard; // the currentCard property gets modified during db->removeCard() currentCard = 0; + cardDatabaseModel->getDatabase()->removeCard(cardToRemove); + delete cardToRemove; } } diff --git a/cockatrice/src/dlg_edit_tokens.h b/cockatrice/src/dlg_edit_tokens.h index 28aa6b2d5..ac36512e6 100644 --- a/cockatrice/src/dlg_edit_tokens.h +++ b/cockatrice/src/dlg_edit_tokens.h @@ -32,7 +32,7 @@ private: QLineEdit *nameEdit, *ptEdit, *annotationEdit; QTreeView *chooseTokenView; public: - DlgEditTokens(QWidget *parent = 0); + DlgEditTokens(CardDatabaseModel *_cardDatabaseModel, QWidget *parent = 0); }; #endif diff --git a/cockatrice/src/tab_deck_editor.cpp b/cockatrice/src/tab_deck_editor.cpp index 9b8b58ceb..216958ac5 100644 --- a/cockatrice/src/tab_deck_editor.cpp +++ b/cockatrice/src/tab_deck_editor.cpp @@ -492,7 +492,7 @@ void TabDeckEditor::actEditSets() void TabDeckEditor::actEditTokens() { - DlgEditTokens dlg; + DlgEditTokens dlg(databaseModel); dlg.exec(); db->saveToFile(settingsCache->getTokenDatabasePath(), true); }