summaryrefslogtreecommitdiff
path: root/src/gui/skilldialog.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui/skilldialog.cpp')
-rw-r--r--src/gui/skilldialog.cpp32
1 files changed, 22 insertions, 10 deletions
diff --git a/src/gui/skilldialog.cpp b/src/gui/skilldialog.cpp
index 78c5c998..09c7ccb2 100644
--- a/src/gui/skilldialog.cpp
+++ b/src/gui/skilldialog.cpp
@@ -25,6 +25,7 @@
#include "log.h"
#include "gui/setup.h"
+#include "gui/skin.h"
#include "gui/widgets/button.h"
#include "gui/widgets/container.h"
@@ -76,7 +77,7 @@ struct SkillInfo
icon->decRef();
}
- void setIcon(std::string iconPath)
+ void setIcon(const std::string &iconPath)
{
ResourceManager *res = ResourceManager::getInstance();
if (!iconPath.empty())
@@ -85,7 +86,7 @@ struct SkillInfo
}
else
{
- icon = res->getImage("graphics/gui/unknown-item.png");
+ icon = SkinLoader::getImageFromTheme("unknown-item.png");
}
}
@@ -99,11 +100,19 @@ typedef std::vector<SkillInfo*> SkillList;
class SkillModel : public gcn::ListModel
{
public:
- int getNumberOfElements() { return mVisibleSkills.size(); }
- SkillInfo *getSkillAt(int i) { return mVisibleSkills.at(i); }
- std::string getElementAt(int i) { return getSkillAt(i)->name; }
+ int getNumberOfElements()
+ { return mVisibleSkills.size(); }
+
+ SkillInfo *getSkillAt(int i) const
+ { return mVisibleSkills.at(i); }
+
+ std::string getElementAt(int i)
+ { return getSkillAt(i)->name; }
+
void updateVisibilities();
- void addSkill(SkillInfo *info) { mSkills.push_back(info); }
+
+ void addSkill(SkillInfo *info)
+ { mSkills.push_back(info); }
private:
SkillList mSkills;
@@ -119,7 +128,11 @@ public:
SkillInfo *getSelectedInfo()
{
- return static_cast<SkillModel*>(mListModel)->getSkillAt(getSelected());
+ const int selected = getSelected();
+ if (selected < 0 || selected > mListModel->getNumberOfElements())
+ return 0;
+
+ return static_cast<SkillModel*>(mListModel)->getSkillAt(selected);
}
void draw(gcn::Graphics *gcnGraphics)
@@ -216,9 +229,8 @@ void SkillDialog::action(const gcn::ActionEvent &event)
if (tab)
{
- SkillInfo *info = tab->getSelectedInfo();
-
- Net::getPlayerHandler()->increaseSkill(info->id);
+ if (SkillInfo *info = tab->getSelectedInfo())
+ Net::getPlayerHandler()->increaseSkill(info->id);
}
}
else if (event.getId() == "close")