From 83981f76348655507d225aca220893e668b09bdc Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Tue, 26 Jul 2016 22:47:45 +0300 Subject: Add support for loading stats pages from stats.xml --- src/gui/widgets/statspage.cpp | 5 +++-- src/gui/widgets/statspage.h | 3 ++- src/gui/windows/statuswindow.cpp | 11 ++++++++--- src/resources/db/statdb.cpp | 16 ++++++++++++---- src/resources/db/statdb.h | 4 +++- 5 files changed, 28 insertions(+), 11 deletions(-) diff --git a/src/gui/widgets/statspage.cpp b/src/gui/widgets/statspage.cpp index b41cc6224..1f30f2862 100644 --- a/src/gui/widgets/statspage.cpp +++ b/src/gui/widgets/statspage.cpp @@ -37,7 +37,8 @@ #include "debug.h" -StatsPage::StatsPage(const Widget2 *const widget) : +StatsPage::StatsPage(const Widget2 *const widget, + const std::string &page) : Container(widget), WidgetListener(), StatListener(), @@ -51,7 +52,7 @@ StatsPage::StatsPage(const Widget2 *const widget) : mAttrScroll->setVerticalScrollPolicy(ScrollArea::SHOW_AUTO); add(mAttrScroll); - const std::vector &basicStats = StatDb::getExtendedStats(); + const std::vector &basicStats = StatDb::getStats(page); FOR_EACH (std::vector::const_iterator, it, basicStats) { const BasicStat &stat = *it; diff --git a/src/gui/widgets/statspage.h b/src/gui/widgets/statspage.h index 2bfb144d2..b9ab37df5 100644 --- a/src/gui/widgets/statspage.h +++ b/src/gui/widgets/statspage.h @@ -35,7 +35,8 @@ class StatsPage final : public Container, public StatListener { public: - StatsPage(const Widget2 *const widget); + StatsPage(const Widget2 *const widget, + const std::string &page); A_DELETE_COPY(StatsPage) diff --git a/src/gui/windows/statuswindow.cpp b/src/gui/windows/statuswindow.cpp index 461d5e01d..57ca97206 100644 --- a/src/gui/windows/statuswindow.cpp +++ b/src/gui/windows/statuswindow.cpp @@ -48,6 +48,8 @@ #include "net/inventoryhandler.h" #include "net/playerhandler.h" +#include "resources/db/statdb.h" + #include "resources/item/item.h" #include "utils/gettext.h" @@ -213,15 +215,18 @@ void StatusWindow::addTabs() { // TRANSLATORS: status window tab name addTabBasic(_("Basic")); - // TRANSLATORS: status window tab name - addTab(_("Extended")); + const std::vector &pages = StatDb::getPages(); + FOR_EACH(std::vector::const_iterator, it, pages) + { + addTab(*it); + } mTabs->adjustSize(); } void StatusWindow::addTab(const std::string &name) { mTabs->addTab(name, - new StatsPage(this)); + new StatsPage(this, name)); } void StatusWindow::addTabBasic(const std::string &name) diff --git a/src/resources/db/statdb.cpp b/src/resources/db/statdb.cpp index b68ee9576..0e7175310 100644 --- a/src/resources/db/statdb.cpp +++ b/src/resources/db/statdb.cpp @@ -35,6 +35,7 @@ namespace bool mLoaded = false; static std::vector mBasicStats; static std::map > mStats; + static std::vector mPages; } // namespace void StatDb::addDefaultStats() @@ -70,9 +71,14 @@ const std::vector &StatDb::getBasicStats() return mBasicStats; } -const std::vector &StatDb::getExtendedStats() +const std::vector &StatDb::getStats(const std::string &page) { - return mStats["extended"]; + return mStats[page]; +} + +const std::vector &StatDb::getPages() +{ + return mPages; } void StatDb::load() @@ -116,6 +122,7 @@ static void loadStats(const XmlNodePtr rootNode, { const int maxAttr = static_cast(Attributes::MAX_ATTRIBUTE); std::vector &stats = mStats[page]; + mPages.push_back(page); for_each_xml_child_node(node, rootNode) { if (xmlNameEqual(node, "stat")) @@ -167,11 +174,12 @@ void StatDb::loadXmlFile(const std::string &fileName, } else if (xmlNameEqual(node, "extended")) { - loadStats(node, "extended"); + // TRANSLATORS: stats page name + loadStats(node, _("Extended")); } else if (xmlNameEqual(node, "page")) { - std::string page = XML::getProperty(node, "name", ""); + std::string page = XML::langProperty(node, "name", ""); if (page.empty()) { reportAlways("Page without name in stats.xml"); diff --git a/src/resources/db/statdb.h b/src/resources/db/statdb.h index 96392d06f..f98eac111 100644 --- a/src/resources/db/statdb.h +++ b/src/resources/db/statdb.h @@ -42,7 +42,9 @@ namespace StatDb const std::vector &getBasicStats(); - const std::vector &getExtendedStats(); + const std::vector &getStats(const std::string &page); + + const std::vector &getPages(); } // namespace StatDb #endif // RESOURCES_DB_STATDB_H -- cgit v1.2.3-60-g2f50