summaryrefslogtreecommitdiff
path: root/src/gui/windows
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui/windows')
-rw-r--r--src/gui/windows/skilldialog.cpp77
-rw-r--r--src/gui/windows/skilldialog.h2
2 files changed, 50 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;