std::string SkillDialog::update(int id) { SkillMap::iterator i = mSkills.find(id); if (i != mSkills.end()) { SkillInfo *info = i->second; info->update(); return info->name; } return std::string(); }
void SkillDialog::loadSkills() { clearSkills(); XML::Document doc(SKILLS_FILE); xmlNodePtr root = doc.rootNode(); int setCount = 0; std::string setName; ScrollArea *scroll; SkillListBox *listbox; SkillTab *tab; if (!root || !xmlStrEqual(root->name, BAD_CAST "skills")) { logger->log("Error loading skills file: %s", SKILLS_FILE); if (Net::getNetworkType() == ServerInfo::TMWATHENA) { SkillModel *model = new SkillModel(); SkillInfo *skill = new SkillInfo; skill->id = 1; skill->name = "basic"; skill->setIcon(""); skill->modifiable = true; skill->visible = true; skill->model = model; skill->update(); model->addSkill(skill); mSkills[1] = skill; model->updateVisibilities(); listbox = new SkillListBox(model); scroll = new ScrollArea(listbox); scroll->setOpaque(false); scroll->setHorizontalScrollPolicy(ScrollArea::SHOW_NEVER); scroll->setVerticalScrollPolicy(ScrollArea::SHOW_ALWAYS); tab = new SkillTab("Skills", listbox); mTabs->addTab(tab, scroll); update(); } return; } for_each_xml_child_node(set, root) { if (xmlStrEqual(set->name, BAD_CAST "set")) { setCount++; setName = XML::getProperty(set, "name", strprintf(_("Skill Set %d"), setCount)); SkillModel *model = new SkillModel(); for_each_xml_child_node(node, set) { if (xmlStrEqual(node->name, BAD_CAST "skill")) { int id = atoi(XML::getProperty(node, "id", "-1").c_str()); std::string name = XML::getProperty(node, "name", strprintf(_("Skill %d"), id)); std::string icon = XML::getProperty(node, "icon", ""); SkillInfo *skill = new SkillInfo; skill->id = id; skill->name = name; skill->setIcon(icon); skill->modifiable = false; skill->visible = false; skill->model = model; skill->update(); model->addSkill(skill); mSkills[id] = skill; } } model->updateVisibilities(); listbox = new SkillListBox(model); scroll = new ScrollArea(listbox); scroll->setOpaque(false); scroll->setHorizontalScrollPolicy(ScrollArea::SHOW_NEVER); scroll->setVerticalScrollPolicy(ScrollArea::SHOW_ALWAYS); tab = new SkillTab(setName, listbox); mTabs->addTab(tab, scroll); } }