From fa6d39d9f56e09abfb6b48bacdd66ddbad20c641 Mon Sep 17 00:00:00 2001 From: Thorbjørn Lindeijer Date: Wed, 15 Jul 2009 22:37:35 +0200 Subject: Fixed compile warnings and crash in skill dialog The crash was probably due to roaming or uninitialized pointers in the skill map. Please remember to clear it after deleting its contents, and also remember that operator[] is non-const and will insert an element when it's not already there. The proper way to see if a map contains an element is by using find(). --- src/gui/skilldialog.cpp | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) (limited to 'src/gui') diff --git a/src/gui/skilldialog.cpp b/src/gui/skilldialog.cpp index 5e700387..15f93b9c 100644 --- a/src/gui/skilldialog.cpp +++ b/src/gui/skilldialog.cpp @@ -62,7 +62,7 @@ struct SkillInfo class SkillEntry : public Container, gcn::WidgetListener { public: - SkillEntry(struct SkillInfo *info); + SkillEntry(SkillInfo *info); void widgetResized(const gcn::Event &event); @@ -70,7 +70,7 @@ class SkillEntry : public Container, gcn::WidgetListener protected: friend class SkillDialog; - struct SkillInfo *mInfo; + SkillInfo *mInfo; private: Icon *mIcon; @@ -152,15 +152,16 @@ void SkillDialog::logic() std::string SkillDialog::update(int id) { - SkillInfo *info = mSkills[id]; + SkillMap::iterator i = mSkills.find(id); - if (info) + if (i != mSkills.end()) { + SkillInfo *info = i->second; info->display->update(); return info->name; } - else - return ""; + + return std::string(); } void SkillDialog::update() @@ -180,6 +181,7 @@ void SkillDialog::loadSkills(const std::string &file) { // TODO: mTabs->clear(); delete_all(mSkills); + mSkills.clear(); XML::Document doc(file); xmlNodePtr root = doc.rootNode(); @@ -239,21 +241,23 @@ void SkillDialog::loadSkills(const std::string &file) void SkillDialog::setModifiable(int id, bool modifiable) { - SkillInfo *info = mSkills[id]; + SkillMap::iterator i = mSkills.find(id); - if (info) + if (i != mSkills.end()) { + SkillInfo *info = i->second; info->modifiable = modifiable; info->display->update(); } } -SkillEntry::SkillEntry(struct SkillInfo *info) : mInfo(info), +SkillEntry::SkillEntry(SkillInfo *info) : + mInfo(info), mIcon(NULL), mNameLabel(new Label(info->name)), - mProgress(new ProgressBar(0.0f, 200, 20, gcn::Color(150, 150, 150))), + mLevelLabel(new Label("999")), mIncrease(new Button("+", "inc", skillDialog)), - mLevelLabel(new Label("999")) + mProgress(new ProgressBar(0.0f, 200, 20, gcn::Color(150, 150, 150))) { setFrameSize(1); setOpaque(false); @@ -312,7 +316,6 @@ void SkillEntry::widgetResized(const gcn::Event &event) void SkillEntry::update() { int baseLevel = player_node->getAttributeBase(mInfo->id); - int effLevel = player_node->getAttributeEffective(mInfo->id); if (baseLevel <= 0 && !mInfo->modifiable) -- cgit v1.2.3-70-g09d2