From 37be713ea07bbe8ddcea10c77bf1bfa2cd74b989 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Thu, 1 Jan 2015 19:20:41 +0300 Subject: Fix crash with completly broken themes. --- src/gui/widgets/characterviewnormal.cpp | 26 ++++++++++++++++++++------ src/gui/widgets/characterviewsmall.cpp | 25 ++++++++++++++++++++----- 2 files changed, 40 insertions(+), 11 deletions(-) diff --git a/src/gui/widgets/characterviewnormal.cpp b/src/gui/widgets/characterviewnormal.cpp index a8f676af0..ba25e2753 100644 --- a/src/gui/widgets/characterviewnormal.cpp +++ b/src/gui/widgets/characterviewnormal.cpp @@ -43,13 +43,25 @@ CharacterViewNormal::CharacterViewNormal(CharSelectDialog *const widget, add(character); character->setVisible(true); } - if (mSelected >= 0) - (*mCharacterEntries)[mSelected]->setSelect(false); - mSelected = 0; - (*mCharacterEntries)[0]->setSelect(true); + const size_t sz = mCharacterEntries->size(); + if (mSelected >= 0 && mSelected < sz) + { + CharacterDisplay *const display = (*mCharacterEntries)[mSelected]; + if (display) + display->setSelect(false); + } + if (sz > 0) + { + mSelected = 0; + CharacterDisplay *const display = (*mCharacterEntries)[0]; + display->setSelect(true); + setWidth(display->getWidth() * 5 + mPadding * 2); + } + else + { + mSelected = -1; + } - const CharacterDisplay *const firtChar = (*mCharacterEntries)[0]; - setWidth(firtChar->getWidth() * 5 + mPadding * 2); } setHeight(210 + config.getIntValue("fontSize") * 2); } @@ -74,6 +86,8 @@ void CharacterViewNormal::show(const int i) void CharacterViewNormal::resize() { const int sz = static_cast(mCharacterEntries->size()); + if (sz <= 0) + return; const CharacterDisplay *const firtChar = (*mCharacterEntries)[0]; int y = 0; const int width = firtChar->getWidth(); diff --git a/src/gui/widgets/characterviewsmall.cpp b/src/gui/widgets/characterviewsmall.cpp index b68c0171a..7e327c29f 100644 --- a/src/gui/widgets/characterviewsmall.cpp +++ b/src/gui/widgets/characterviewsmall.cpp @@ -48,11 +48,21 @@ CharacterViewSmall::CharacterViewSmall(CharSelectDialog *const widget, add(*it); } const int sz = static_cast(mCharacterEntries->size()); - mSelected = 0; - mSelectedEntry = (*mCharacterEntries)[mSelected]; - mSelectedEntry->setVisible(true); - mNumber->setCaption(strprintf("%d / %d", mSelected + 1, sz)); - mNumber->adjustSize(); + if (sz > 0) + { + mSelected = 0; + mSelectedEntry = (*mCharacterEntries)[mSelected]; + mSelectedEntry->setVisible(true); + mNumber->setCaption(strprintf("%d / %d", mSelected + 1, sz)); + mNumber->adjustSize(); + } + else + { + mSelected = -1; + mSelectedEntry = nullptr; + mNumber->setCaption("0 / 0"); + mNumber->adjustSize(); + } } add(mPrevious); add(mNext); @@ -69,6 +79,8 @@ CharacterViewSmall::~CharacterViewSmall() void CharacterViewSmall::show(const int i) { const int sz = static_cast(mCharacterEntries->size()); + if (sz <= 0) + return; if (mSelectedEntry) mSelectedEntry->setVisible(false); if (i >= sz) @@ -85,6 +97,9 @@ void CharacterViewSmall::show(const int i) void CharacterViewSmall::resize() { + const int sz = static_cast(mCharacterEntries->size()); + if (sz <= 0) + return; const CharacterDisplay *const firtChar = (*mCharacterEntries)[0]; const int x = (getWidth() - firtChar->getWidth()) / 2; const int y = (getHeight() - firtChar->getHeight()) / 2; -- cgit v1.2.3-60-g2f50