Fix a crash (#3011)

This commit is contained in:
Zach H 2018-01-18 11:53:57 -05:00 committed by GitHub
parent 7a150c558d
commit dcc632e0d4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 46 additions and 28 deletions

View file

@ -10,8 +10,7 @@
#include <QSplitter> #include <QSplitter>
#include <QVBoxLayout> #include <QVBoxLayout>
CardFrame::CardFrame(const QString &cardName, QWidget *parent) CardFrame::CardFrame(const QString &cardName, QWidget *parent) : QTabWidget(parent), info(nullptr), cardTextOnly(false)
: QTabWidget(parent), info(nullptr), cardTextOnly(false)
{ {
setContentsMargins(3, 3, 3, 3); setContentsMargins(3, 3, 3, 3);
pic = new CardInfoPicture(); pic = new CardInfoPicture();
@ -72,7 +71,7 @@ void CardFrame::setViewMode(int mode)
if(currentIndex() != mode) if(currentIndex() != mode)
setCurrentIndex(mode); setCurrentIndex(mode);
switch(mode) switch (mode)
{ {
case ImageOnlyView: case ImageOnlyView:
case TextOnlyView: case TextOnlyView:
@ -83,6 +82,8 @@ void CardFrame::setViewMode(int mode)
splitter->addWidget(pic); splitter->addWidget(pic);
splitter->addWidget(text); splitter->addWidget(text);
break; break;
default:
break;
} }
settingsCache->setCardInfoViewMode(mode); settingsCache->setCardInfoViewMode(mode);
@ -91,10 +92,16 @@ void CardFrame::setViewMode(int mode)
void CardFrame::setCard(CardInfo *card) void CardFrame::setCard(CardInfo *card)
{ {
if (info) if (info)
{
disconnect(info, nullptr, this, nullptr); disconnect(info, nullptr, this, nullptr);
}
info = card; info = card;
if(info)
if (info)
{
connect(info, SIGNAL(destroyed()), this, SLOT(clear())); connect(info, SIGNAL(destroyed()), this, SLOT(clear()));
}
text->setCard(info); text->setCard(info);
pic->setCard(info); pic->setCard(info);
@ -107,7 +114,10 @@ void CardFrame::setCard(const QString &cardName)
void CardFrame::setCard(AbstractCardItem *card) void CardFrame::setCard(AbstractCardItem *card)
{ {
setCard(card->getInfo()); if (card)
{
setCard(card->getInfo());
}
} }
void CardFrame::clear() void CardFrame::clear()

View file

@ -10,29 +10,29 @@ class CardInfoText;
class QVBoxLayout; class QVBoxLayout;
class QSplitter; class QSplitter;
class CardFrame : public QTabWidget { class CardFrame : public QTabWidget
{
Q_OBJECT Q_OBJECT
private:
CardInfo *info;
CardInfoPicture *pic;
CardInfoText *text;
bool cardTextOnly;
QWidget *tab1, *tab2, *tab3;
QVBoxLayout *tab1Layout, *tab2Layout, *tab3Layout;
QSplitter *splitter;
private: public:
CardInfo *info; enum ViewMode { ImageOnlyView, TextOnlyView, ImageAndTextView };
CardInfoPicture *pic; explicit CardFrame(const QString &cardName = QString(), QWidget *parent = nullptr);
CardInfoText *text; void retranslateUi();
bool cardTextOnly;
QWidget *tab1, *tab2, *tab3;
QVBoxLayout *tab1Layout, *tab2Layout, *tab3Layout;
QSplitter *splitter;
public:
enum ViewMode { ImageOnlyView, TextOnlyView, ImageAndTextView };
CardFrame(const QString &cardName = QString(), public slots:
QWidget *parent = 0); void setCard(CardInfo *card);
void retranslateUi(); void setCard(const QString &cardName);
public slots: void setCard(AbstractCardItem *card);
void setCard(CardInfo *card); void clear();
void setCard(const QString &cardName); void setViewMode(int mode);
void setCard(AbstractCardItem *card);
void clear();
void setViewMode(int mode);
}; };
#endif #endif

View file

@ -20,10 +20,16 @@ CardInfoPicture::CardInfoPicture(QWidget *parent)
void CardInfoPicture::setCard(CardInfo *card) void CardInfoPicture::setCard(CardInfo *card)
{ {
if (info) if (info)
{
disconnect(info, nullptr, this, nullptr); disconnect(info, nullptr, this, nullptr);
}
info = card; info = card;
if(info)
if (info)
{
connect(info, SIGNAL(pixmapUpdated()), this, SLOT(updatePixmap())); connect(info, SIGNAL(pixmapUpdated()), this, SLOT(updatePixmap()));
}
updatePixmap(); updatePixmap();
} }

View file

@ -59,7 +59,7 @@ CardInfoText::CardInfoText(QWidget *parent)
void CardInfoText::setCard(CardInfo *card) void CardInfoText::setCard(CardInfo *card)
{ {
if(card) if (card)
{ {
nameLabel2->setText(card->getName()); nameLabel2->setText(card->getName());
manacostLabel2->setText(card->getManaCost()); manacostLabel2->setText(card->getManaCost());
@ -68,7 +68,9 @@ void CardInfoText::setCard(CardInfo *card)
powtoughLabel2->setText(card->getPowTough()); powtoughLabel2->setText(card->getPowTough());
loyaltyLabel2->setText(card->getLoyalty() > 0 ? QString::number(card->getLoyalty()) : QString()); loyaltyLabel2->setText(card->getLoyalty() > 0 ? QString::number(card->getLoyalty()) : QString());
textLabel->setText(card->getText()); textLabel->setText(card->getText());
} else { }
else
{
nameLabel2->setText(""); nameLabel2->setText("");
manacostLabel2->setText(""); manacostLabel2->setText("");
colorLabel2->setText(""); colorLabel2->setText("");