Generate list of skin styles in SkinFile::Styles subclass

This commit is contained in:
David Capello 2015-02-17 11:10:43 -03:00
parent 881667f01b
commit 1805d56733

View File

@ -15,6 +15,7 @@
void gen_skin_class(TiXmlDocument* doc, const std::string& inputFn) void gen_skin_class(TiXmlDocument* doc, const std::string& inputFn)
{ {
std::vector<std::string> colors; std::vector<std::string> colors;
std::vector<std::string> styles;
TiXmlHandle handle(doc); TiXmlHandle handle(doc);
TiXmlElement* elem = handle TiXmlElement* elem = handle
@ -27,6 +28,17 @@ void gen_skin_class(TiXmlDocument* doc, const std::string& inputFn)
elem = elem->NextSiblingElement(); 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 std::cout
<< "// Don't modify, generated file from " << inputFn << "\n" << "// Don't modify, generated file from " << inputFn << "\n"
<< "\n" << "\n"
@ -40,48 +52,75 @@ void gen_skin_class(TiXmlDocument* doc, const std::string& inputFn)
<< " template<typename T>\n" << " template<typename T>\n"
<< " class SkinFile {\n" << " class SkinFile {\n"
<< " public:\n" << " public:\n"
<< "\n" << "\n";
// Colors sub class
std::cout
<< " class Colors {\n" << " class Colors {\n"
<< " template<typename T> friend class SkinFile;\n" << " template<typename T> friend class SkinFile;\n"
<< " public:\n"; << " public:\n";
for (auto color : colors) { for (auto color : colors) {
std::string id = convert_xmlid_to_cppid(color, false); std::string id = convert_xmlid_to_cppid(color, false);
std::cout std::cout
<< " gfx::Color " << id << "() const { return m_" << id << "; }\n"; << " gfx::Color " << id << "() const { return m_" << id << "; }\n";
} }
std::cout std::cout
<< " private:\n"; << " private:\n";
for (auto color : colors) { for (auto color : colors) {
std::string id = convert_xmlid_to_cppid(color, false); std::string id = convert_xmlid_to_cppid(color, false);
std::cout std::cout
<< " gfx::Color m_" << id << ";\n"; << " gfx::Color m_" << id << ";\n";
} }
std::cout
<< " };\n";
// Styles sub class
std::cout
<< "\n"
<< " class Styles {\n"
<< " template<typename T> 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 std::cout
<< " };\n"; << " };\n";
std::cout std::cout
<< "\n" << "\n"
<< " Colors colors;\n" << " Colors colors;\n"
<< " Styles styles;\n"
<< "\n" << "\n"
<< " protected:\n" << " protected:\n"
<< " void updateInternals() {\n"; << " void updateInternals() {\n";
for (auto color : colors) { for (auto color : colors) {
std::string id = convert_xmlid_to_cppid(color, false); std::string id = convert_xmlid_to_cppid(color, false);
std::cout << " colors.m_" << id std::cout << " colors.m_" << id
<< " = colorById(\"" << color << "\");\n"; << " = 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 std::cout
<< " }\n" << " }\n"
<< "\n" << "\n"
<< " private:\n" << " private:\n"
<< " gfx::Color colorById(const std::string& id) {\n" << " gfx::Color colorById(const std::string& id) {\n"
<< " return static_cast<T*>(this)->getColorById(id);\n" << " return static_cast<T*>(this)->getColorById(id);\n"
<< " }\n"
<< " skin::Style* styleById(const std::string& id) {\n"
<< " return static_cast<T*>(this)->getStyle(id);\n"
<< " }\n"; << " }\n";
std::cout std::cout