summaryrefslogtreecommitdiff
path: root/src/gui/skilldialog.cpp
diff options
context:
space:
mode:
authorThorbjørn Lindeijer <bjorn@lindeijer.nl>2009-07-15 22:37:35 +0200
committerThorbjørn Lindeijer <bjorn@lindeijer.nl>2009-07-15 22:37:35 +0200
commitfa6d39d9f56e09abfb6b48bacdd66ddbad20c641 (patch)
tree31a57b7a69c20454e129963e2b2c4327782a2311 /src/gui/skilldialog.cpp
parentdf52e6b900600709ab0069daacf06093c61667b1 (diff)
downloadmana-client-fa6d39d9f56e09abfb6b48bacdd66ddbad20c641.tar.gz
mana-client-fa6d39d9f56e09abfb6b48bacdd66ddbad20c641.tar.bz2
mana-client-fa6d39d9f56e09abfb6b48bacdd66ddbad20c641.tar.xz
mana-client-fa6d39d9f56e09abfb6b48bacdd66ddbad20c641.zip
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().
Diffstat (limited to 'src/gui/skilldialog.cpp')
-rw-r--r--src/gui/skilldialog.cpp27
1 files changed, 15 insertions, 12 deletions
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)