From dcc632e0d438e9420ec065c61a439da876248429 Mon Sep 17 00:00:00 2001 From: Zach H Date: Thu, 18 Jan 2018 11:53:57 -0500 Subject: [PATCH] Fix a crash (#3011) --- cockatrice/src/cardframe.cpp | 20 +++++++++++---- cockatrice/src/cardframe.h | 40 +++++++++++++++--------------- cockatrice/src/cardinfopicture.cpp | 8 +++++- cockatrice/src/cardinfotext.cpp | 6 +++-- 4 files changed, 46 insertions(+), 28 deletions(-) diff --git a/cockatrice/src/cardframe.cpp b/cockatrice/src/cardframe.cpp index 5ec09e7d..3421457f 100644 --- a/cockatrice/src/cardframe.cpp +++ b/cockatrice/src/cardframe.cpp @@ -10,8 +10,7 @@ #include #include -CardFrame::CardFrame(const QString &cardName, QWidget *parent) - : QTabWidget(parent), info(nullptr), cardTextOnly(false) +CardFrame::CardFrame(const QString &cardName, QWidget *parent) : QTabWidget(parent), info(nullptr), cardTextOnly(false) { setContentsMargins(3, 3, 3, 3); pic = new CardInfoPicture(); @@ -72,7 +71,7 @@ void CardFrame::setViewMode(int mode) if(currentIndex() != mode) setCurrentIndex(mode); - switch(mode) + switch (mode) { case ImageOnlyView: case TextOnlyView: @@ -83,6 +82,8 @@ void CardFrame::setViewMode(int mode) splitter->addWidget(pic); splitter->addWidget(text); break; + default: + break; } settingsCache->setCardInfoViewMode(mode); @@ -91,10 +92,16 @@ void CardFrame::setViewMode(int mode) void CardFrame::setCard(CardInfo *card) { if (info) + { disconnect(info, nullptr, this, nullptr); + } + info = card; - if(info) + + if (info) + { connect(info, SIGNAL(destroyed()), this, SLOT(clear())); + } text->setCard(info); pic->setCard(info); @@ -107,7 +114,10 @@ void CardFrame::setCard(const QString &cardName) void CardFrame::setCard(AbstractCardItem *card) { - setCard(card->getInfo()); + if (card) + { + setCard(card->getInfo()); + } } void CardFrame::clear() diff --git a/cockatrice/src/cardframe.h b/cockatrice/src/cardframe.h index cbd776c0..97a0b3a8 100644 --- a/cockatrice/src/cardframe.h +++ b/cockatrice/src/cardframe.h @@ -10,29 +10,29 @@ class CardInfoText; class QVBoxLayout; class QSplitter; -class CardFrame : public QTabWidget { +class CardFrame : public QTabWidget +{ Q_OBJECT + private: + CardInfo *info; + CardInfoPicture *pic; + CardInfoText *text; + bool cardTextOnly; + QWidget *tab1, *tab2, *tab3; + QVBoxLayout *tab1Layout, *tab2Layout, *tab3Layout; + QSplitter *splitter; -private: - CardInfo *info; - CardInfoPicture *pic; - CardInfoText *text; - bool cardTextOnly; - QWidget *tab1, *tab2, *tab3; - QVBoxLayout *tab1Layout, *tab2Layout, *tab3Layout; - QSplitter *splitter; -public: - enum ViewMode { ImageOnlyView, TextOnlyView, ImageAndTextView }; + public: + enum ViewMode { ImageOnlyView, TextOnlyView, ImageAndTextView }; + explicit CardFrame(const QString &cardName = QString(), QWidget *parent = nullptr); + void retranslateUi(); - CardFrame(const QString &cardName = QString(), - QWidget *parent = 0); - void retranslateUi(); -public slots: - void setCard(CardInfo *card); - void setCard(const QString &cardName); - void setCard(AbstractCardItem *card); - void clear(); - void setViewMode(int mode); + public slots: + void setCard(CardInfo *card); + void setCard(const QString &cardName); + void setCard(AbstractCardItem *card); + void clear(); + void setViewMode(int mode); }; #endif diff --git a/cockatrice/src/cardinfopicture.cpp b/cockatrice/src/cardinfopicture.cpp index e9f2293e..44b2dd9c 100644 --- a/cockatrice/src/cardinfopicture.cpp +++ b/cockatrice/src/cardinfopicture.cpp @@ -20,10 +20,16 @@ CardInfoPicture::CardInfoPicture(QWidget *parent) void CardInfoPicture::setCard(CardInfo *card) { if (info) + { disconnect(info, nullptr, this, nullptr); + } + info = card; - if(info) + + if (info) + { connect(info, SIGNAL(pixmapUpdated()), this, SLOT(updatePixmap())); + } updatePixmap(); } diff --git a/cockatrice/src/cardinfotext.cpp b/cockatrice/src/cardinfotext.cpp index 005fa320..fd06c5c2 100644 --- a/cockatrice/src/cardinfotext.cpp +++ b/cockatrice/src/cardinfotext.cpp @@ -59,7 +59,7 @@ CardInfoText::CardInfoText(QWidget *parent) void CardInfoText::setCard(CardInfo *card) { - if(card) + if (card) { nameLabel2->setText(card->getName()); manacostLabel2->setText(card->getManaCost()); @@ -68,7 +68,9 @@ void CardInfoText::setCard(CardInfo *card) powtoughLabel2->setText(card->getPowTough()); loyaltyLabel2->setText(card->getLoyalty() > 0 ? QString::number(card->getLoyalty()) : QString()); textLabel->setText(card->getText()); - } else { + } + else + { nameLabel2->setText(""); manacostLabel2->setText(""); colorLabel2->setText("");