summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2016-12-15 22:23:03 +0300
committerAndrei Karas <akaras@inbox.ru>2016-12-15 22:23:03 +0300
commitf39bae9825936b3205396ee32fc50393c48d608f (patch)
treeb10525ff11669bb639a3db751508a4b9942ecc55 /src
parent1a934c4064abc2675fe199ff906dd08e6fcc0a85 (diff)
downloadmanaplus-f39bae9825936b3205396ee32fc50393c48d608f.tar.gz
manaplus-f39bae9825936b3205396ee32fc50393c48d608f.tar.bz2
manaplus-f39bae9825936b3205396ee32fc50393c48d608f.tar.xz
manaplus-f39bae9825936b3205396ee32fc50393c48d608f.zip
Dont show on start skill tabs without skills.
Diffstat (limited to 'src')
-rw-r--r--src/gui/windows/skilldialog.cpp77
-rw-r--r--src/gui/windows/skilldialog.h2
-rw-r--r--src/resources/skill/skillinfo.cpp1
-rw-r--r--src/resources/skill/skillinfo.h2
4 files changed, 53 insertions, 29 deletions
diff --git a/src/gui/windows/skilldialog.cpp b/src/gui/windows/skilldialog.cpp
index f1c81e0bb..291836f48 100644
--- a/src/gui/windows/skilldialog.cpp
+++ b/src/gui/windows/skilldialog.cpp
@@ -93,7 +93,8 @@ SkillDialog::SkillDialog() :
mUseButton(new Button(this, _("Use"), "use", this)),
// TRANSLATORS: skills dialog button
mIncreaseButton(new Button(this, _("Up"), "inc", this)),
- mDefaultModel(nullptr)
+ mDefaultModel(nullptr),
+ mDefaultTab(nullptr)
{
setWindowName("Skills");
setCloseButton(true);
@@ -333,27 +334,10 @@ void SkillDialog::loadXmlFile(const std::string &fileName,
setType = SkillSetType::Rectangle;
}
+ bool alwaysVisible = false;
SkillModel *const model = new SkillModel;
- if (!mDefaultModel)
- mDefaultModel = model;
-
- for_each_xml_child_node(node, set)
- {
- if (xmlNameEqual(node, "skill"))
- {
- SkillInfo *const skill = loadSkill(node, model);
- if (skill == nullptr)
- continue;
- for_each_xml_child_node(levelNode, node)
- {
- if (!xmlNameEqual(levelNode, "level"))
- continue;
- loadSkillData(node, skill);
- }
- }
- }
-
- model->updateVisibilities();
+ SkillTab *tab = nullptr;
+ ScrollArea *scroll = nullptr;
switch (setType)
{
@@ -364,14 +348,12 @@ void SkillDialog::loadXmlFile(const std::string &fileName,
model);
listbox->setActionEventId("sel");
listbox->addActionListener(this);
- ScrollArea *const scroll = new ScrollArea(this,
+ scroll = new ScrollArea(this,
listbox,
Opaque_false);
scroll->setHorizontalScrollPolicy(ScrollArea::SHOW_NEVER);
scroll->setVerticalScrollPolicy(ScrollArea::SHOW_ALWAYS);
- SkillTab *const tab = new SkillTab(this, setName, listbox);
- mDeleteTabs.push_back(tab);
- mTabs->addTab(tab, scroll);
+ tab = new SkillTab(this, setName, listbox);
break;
}
case SkillSetType::Rectangle:
@@ -381,21 +363,54 @@ void SkillDialog::loadXmlFile(const std::string &fileName,
model);
listbox->setActionEventId("sel");
listbox->addActionListener(this);
- ScrollArea *const scroll = new ScrollArea(this,
+ scroll = new ScrollArea(this,
listbox,
Opaque_false);
scroll->setHorizontalScrollPolicy(ScrollArea::SHOW_NEVER);
scroll->setVerticalScrollPolicy(ScrollArea::SHOW_ALWAYS);
- SkillTab *const tab = new SkillTab(this, setName, listbox);
- mDeleteTabs.push_back(tab);
- mTabs->addTab(tab, scroll);
+ tab = new SkillTab(this, setName, listbox);
break;
}
default:
reportAlways("Unsupported skillset type: %s",
setTypeStr.c_str());
+ return;
break;
}
+ if (!mDefaultModel)
+ {
+ mDefaultModel = model;
+ mDefaultTab = tab;
+ }
+
+ if (alwaysVisible == true)
+ tab->setVisible(Visible_true);
+ else
+ tab->setVisible(Visible_false);
+ mDeleteTabs.push_back(tab);
+ mTabs->addTab(tab, scroll);
+
+ for_each_xml_child_node(node, set)
+ {
+ if (xmlNameEqual(node, "skill"))
+ {
+ SkillInfo *const skill = loadSkill(node, model);
+ if (skill == nullptr)
+ continue;
+ if (skill->alwaysVisible == Visible_true)
+ alwaysVisible = true;
+ skill->tab = tab;
+ for_each_xml_child_node(levelNode, node)
+ {
+ if (!xmlNameEqual(levelNode, "level"))
+ continue;
+ loadSkillData(node, skill);
+ }
+ }
+ }
+
+ model->updateVisibilities();
+
}
}
}
@@ -566,6 +581,8 @@ bool SkillDialog::updateSkill(const int id,
info->type = type;
info->sp = sp;
info->update();
+ if (info->tab)
+ info->tab->setVisible(Visible_true);
}
return true;
}
@@ -615,7 +632,9 @@ void SkillDialog::addSkill(const SkillOwner::Type owner,
skill->useButton = _("Use");
// TRANSLATORS: skill error message
skill->errorText = strprintf(_("Failed skill: %s"), name.c_str());
+ skill->tab = mDefaultTab;
mDefaultModel->addSkill(skill);
+ mDefaultTab->setVisible(Visible_true);
mSkills[id] = skill;
mDefaultModel->updateVisibilities();
diff --git a/src/gui/windows/skilldialog.h b/src/gui/windows/skilldialog.h
index cf0bf2f62..5a28d5a74 100644
--- a/src/gui/windows/skilldialog.h
+++ b/src/gui/windows/skilldialog.h
@@ -40,6 +40,7 @@ class Being;
class Button;
class Label;
class SkillModel;
+class SkillTab;
class Tab;
class TabbedArea;
@@ -223,6 +224,7 @@ class SkillDialog final : public Window,
Button *mUseButton A_NONNULLPOINTER;
Button *mIncreaseButton A_NONNULLPOINTER;
SkillModel *mDefaultModel;
+ SkillTab *mDefaultTab;
};
extern SkillDialog *skillDialog;
diff --git a/src/resources/skill/skillinfo.cpp b/src/resources/skill/skillinfo.cpp
index b4dcc6600..c4efbff71 100644
--- a/src/resources/skill/skillinfo.cpp
+++ b/src/resources/skill/skillinfo.cpp
@@ -44,6 +44,7 @@ SkillInfo::SkillInfo() :
castingWaterAction(),
dataMap(),
model(nullptr),
+ tab(nullptr),
data(nullptr),
level(0),
customSelectedLevel(0),
diff --git a/src/resources/skill/skillinfo.h b/src/resources/skill/skillinfo.h
index f9712f9d8..3697eb826 100644
--- a/src/resources/skill/skillinfo.h
+++ b/src/resources/skill/skillinfo.h
@@ -39,6 +39,7 @@
struct SkillData;
class SkillModel;
+class SkillTab;
typedef std::map<int, SkillData*> SkillDataMap;
typedef SkillDataMap::iterator SkillDataMapIter;
@@ -56,6 +57,7 @@ struct SkillInfo final
std::string castingWaterAction;
SkillDataMap dataMap;
SkillModel *model;
+ SkillTab *tab;
SkillData *data;
int level;
int customSelectedLevel;