From 1805d56733d9dbe428e95e4823ed1f9f4517b80a Mon Sep 17 00:00:00 2001 From: David Capello Date: Tue, 17 Feb 2015 11:10:43 -0300 Subject: [PATCH] Generate list of skin styles in SkinFile::Styles subclass --- src/gen/skin_class.cpp | 51 +++++++++++++++++++++++++++++++++++++----- 1 file changed, 45 insertions(+), 6 deletions(-) diff --git a/src/gen/skin_class.cpp b/src/gen/skin_class.cpp index aa9e6010e..0706f5fc9 100644 --- a/src/gen/skin_class.cpp +++ b/src/gen/skin_class.cpp @@ -15,6 +15,7 @@ void gen_skin_class(TiXmlDocument* doc, const std::string& inputFn) { std::vector colors; + std::vector styles; TiXmlHandle handle(doc); TiXmlElement* elem = handle @@ -27,6 +28,17 @@ void gen_skin_class(TiXmlDocument* doc, const std::string& inputFn) elem = elem->NextSiblingElement(); } + elem = handle + .FirstChild("skin") + .FirstChild("stylesheet") + .FirstChild("style").ToElement(); + while (elem) { + const char* id = elem->Attribute("id"); + if (!strchr(id, ':')) + styles.push_back(id); + elem = elem->NextSiblingElement(); + } + std::cout << "// Don't modify, generated file from " << inputFn << "\n" << "\n" @@ -40,48 +52,75 @@ void gen_skin_class(TiXmlDocument* doc, const std::string& inputFn) << " template\n" << " class SkinFile {\n" << " public:\n" - << "\n" + << "\n"; + + // Colors sub class + std::cout << " class Colors {\n" << " template friend class SkinFile;\n" << " public:\n"; - for (auto color : colors) { std::string id = convert_xmlid_to_cppid(color, false); std::cout << " gfx::Color " << id << "() const { return m_" << id << "; }\n"; } - std::cout << " private:\n"; - for (auto color : colors) { std::string id = convert_xmlid_to_cppid(color, false); std::cout << " gfx::Color m_" << id << ";\n"; } + std::cout + << " };\n"; + // Styles sub class + std::cout + << "\n" + << " class Styles {\n" + << " template friend class SkinFile;\n" + << " public:\n"; + for (auto style : styles) { + std::string id = convert_xmlid_to_cppid(style, false); + std::cout + << " skin::Style* " << id << "() const { return m_" << id << "; }\n"; + } + std::cout + << " private:\n"; + for (auto style : styles) { + std::string id = convert_xmlid_to_cppid(style, false); + std::cout + << " skin::Style* m_" << id << ";\n"; + } std::cout << " };\n"; std::cout << "\n" << " Colors colors;\n" + << " Styles styles;\n" << "\n" << " protected:\n" << " void updateInternals() {\n"; - for (auto color : colors) { std::string id = convert_xmlid_to_cppid(color, false); std::cout << " colors.m_" << id << " = colorById(\"" << color << "\");\n"; } - + for (auto style : styles) { + std::string id = convert_xmlid_to_cppid(style, false); + std::cout << " styles.m_" << id + << " = styleById(\"" << style << "\");\n"; + } std::cout << " }\n" << "\n" << " private:\n" << " gfx::Color colorById(const std::string& id) {\n" << " return static_cast(this)->getColorById(id);\n" + << " }\n" + << " skin::Style* styleById(const std::string& id) {\n" + << " return static_cast(this)->getStyle(id);\n" << " }\n"; std::cout