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.cpp133
1 files changed, 73 insertions, 60 deletions
diff --git a/src/gui/skilldialog.cpp b/src/gui/skilldialog.cpp
index 97e2fbdf1..6cce3b85e 100644
--- a/src/gui/skilldialog.cpp
+++ b/src/gui/skilldialog.cpp
@@ -75,7 +75,7 @@ class SkillModel final : public gcn::ListModel
std::string getElementAt(int i)
{
if (getSkillAt(i))
- return getSkillAt(i)->name;
+ return getSkillAt(i)->data.name;
else
return "";
}
@@ -178,7 +178,7 @@ class SkillListBox final : public ListBox
return;
mPopup->show(viewport->getMouseX(), viewport->getMouseY(),
- skill->dispName);
+ skill->data.dispName);
}
void mouseExited(gcn::MouseEvent &event A_UNUSED)
@@ -337,7 +337,7 @@ std::string SkillDialog::update(const int id)
if (info)
{
info->update();
- return info->name;
+ return info->data.name;
}
}
@@ -396,9 +396,9 @@ void SkillDialog::loadSkills()
SkillInfo *const skill = new SkillInfo;
skill->id = 1;
- skill->name = _("basic");
- skill->dispName = _("Skill: basic, Id: 1");
- skill->shortName = "bas";
+ skill->data.name = _("basic");
+ skill->data.dispName = _("Skill: basic, Id: 1");
+ skill->data.shortName = "bas";
skill->setIcon("");
skill->modifiable = true;
skill->visible = true;
@@ -451,17 +451,20 @@ void SkillDialog::loadSkills()
SkillInfo *const skill = new SkillInfo;
skill->id = static_cast<short unsigned>(id);
- skill->name = name;
- skill->dispName = strprintf(_("Skill: %s, Id: %d"),
+ skill->data.name = name;
+ skill->data.dispName = strprintf(_("Skill: %s, Id: %d"),
name.c_str(), skill->id);
- skill->shortName = XML::langProperty(node,
+ skill->data.shortName = XML::langProperty(node,
"shortName", name.substr(0, 3));
skill->setIcon(icon);
skill->modifiable = false;
skill->visible = false;
- skill->particle = XML::getProperty(node, "particle", "");
- skill->soundHit = XML::getProperty(node, "soundHit", "");
- skill->soundMiss = XML::getProperty(node, "soundMiss", "");
+ skill->data.particle = XML::getProperty(
+ node, "particle", "");
+ skill->data.soundHit = XML::getProperty(
+ node, "soundHit", "");
+ skill->data.soundMiss = XML::getProperty(
+ node, "soundMiss", "");
skill->model = model;
skill->update();
@@ -516,8 +519,8 @@ void SkillDialog::addSkill(const int id, const int level, const int range,
{
SkillInfo *const skill = new SkillInfo;
skill->id = static_cast<short unsigned>(id);
- skill->name = "Unknown skill Id: " + toString(id);
- skill->dispName = "Unknown skill Id: " + toString(id);
+ skill->data.name = "Unknown skill Id: " + toString(id);
+ skill->data.dispName = "Unknown skill Id: " + toString(id);
skill->setIcon("");
skill->modifiable = modifiable;
skill->visible = false;
@@ -547,34 +550,69 @@ void SkillModel::updateVisibilities()
}
}
-SkillInfo::SkillInfo() :
- id(0), name(""), shortName(""), dispName(""), icon(nullptr),
- modifiable(false), visible(false), model(nullptr), level(0),
- skillLevel(""), skillLevelWidth(0), skillExp(""), progress(0.0f), range(0),
- particle(""), soundHit(""), soundMiss("")
+
+SkillInfo* SkillDialog::getSkill(int id)
{
+ return mSkills[id];
}
-SkillInfo::~SkillInfo()
+void SkillDialog::widgetResized(const gcn::Event &event)
{
- if (icon)
+ Window::widgetResized(event);
+
+ if (mTabs)
+ mTabs->fixSize();
+}
+
+void SkillDialog::useItem(const int itemId)
+{
+ const SkillInfo *const info = mSkills[itemId - SKILL_MIN_ID];
+ if (info && player_node && player_node->getTarget())
{
- icon->decRef();
- icon = nullptr;
+ const Being *const being = player_node->getTarget();
+ if (being)
+ {
+ Net::getSpecialHandler()->useBeing(info->level,
+ info->id, being->getId());
+ }
}
}
+void SkillDialog::updateTabSelection()
+{
+ const SkillTab *const tab = static_cast<SkillTab*>(
+ mTabs->getSelectedTab());
+ if (tab)
+ {
+ if (const SkillInfo *const info = tab->getSelectedInfo())
+ mUseButton->setEnabled(info->range > 0);
+ else
+ mUseButton->setEnabled(false);
+ }
+}
+
+SkillInfo::SkillInfo() :
+ level(0), skillLevel(""), skillLevelWidth(0), id(0),
+ modifiable(false), visible(false), model(nullptr),
+ skillExp(""), progress(0.0f), range(0)
+{
+}
+
+SkillInfo::~SkillInfo()
+{
+}
+
void SkillInfo::setIcon(const std::string &iconPath)
{
ResourceManager *const res = ResourceManager::getInstance();
if (!iconPath.empty())
{
- icon = res->getImage(iconPath);
+ data.icon = res->getImage(iconPath);
}
- if (!icon)
+ if (!data.icon)
{
- icon = Theme::getImageFromTheme(
+ data.icon = Theme::getImageFromTheme(
paths.getStringValue("unknownItemFile"));
}
}
@@ -641,8 +679,8 @@ void SkillInfo::draw(Graphics *const graphics, const int padding,
const int paddingText, const int y, const int width)
{
const int yPad = y + padding;
- graphics->drawImage(icon, padding, yPad);
- graphics->drawText(name, paddingText, yPad);
+ graphics->drawImage(data.icon, padding, yPad);
+ graphics->drawText(data.name, paddingText, yPad);
if (skillLevelWidth < 0)
{
@@ -653,42 +691,17 @@ void SkillInfo::draw(Graphics *const graphics, const int padding,
graphics->drawText(skillLevel, width - skillLevelWidth, yPad);
}
-SkillInfo* SkillDialog::getSkill(int id)
-{
- return mSkills[id];
-}
-
-void SkillDialog::widgetResized(const gcn::Event &event)
+SkillData::SkillData() :
+ name(""), shortName(""), dispName(""), icon(nullptr),
+ particle(""), soundHit(""), soundMiss("")
{
- Window::widgetResized(event);
-
- if (mTabs)
- mTabs->fixSize();
}
-void SkillDialog::useItem(const int itemId)
+SkillData::~SkillData()
{
- const SkillInfo *const info = mSkills[itemId - SKILL_MIN_ID];
- if (info && player_node && player_node->getTarget())
- {
- const Being *const being = player_node->getTarget();
- if (being)
- {
- Net::getSpecialHandler()->useBeing(info->level,
- info->id, being->getId());
- }
- }
-}
-
-void SkillDialog::updateTabSelection()
-{
- const SkillTab *const tab = static_cast<SkillTab*>(
- mTabs->getSelectedTab());
- if (tab)
+ if (icon)
{
- if (const SkillInfo *const info = tab->getSelectedInfo())
- mUseButton->setEnabled(info->range > 0);
- else
- mUseButton->setEnabled(false);
+ icon->decRef();
+ icon = nullptr;
}
}