diff options
Diffstat (limited to 'src/gui/windows')
-rw-r--r-- | src/gui/windows/skilldialog.cpp | 77 | ||||
-rw-r--r-- | src/gui/windows/skilldialog.h | 2 |
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; |