diff options
author | Max Horn | 2008-10-11 22:14:47 +0000 |
---|---|---|
committer | Max Horn | 2008-10-11 22:14:47 +0000 |
commit | c39175d2ec482c745d04fe56744eaa01df2bae8f (patch) | |
tree | acc2063f48a70d48c89b4d745ad31efeaf59dd72 /gui | |
parent | 8920f6849c8d4d6d7fbfeffe4708da3d68b0ab7c (diff) | |
download | scummvm-rg350-c39175d2ec482c745d04fe56744eaa01df2bae8f.tar.gz scummvm-rg350-c39175d2ec482c745d04fe56744eaa01df2bae8f.tar.bz2 scummvm-rg350-c39175d2ec482c745d04fe56744eaa01df2bae8f.zip |
GUI ThemeEngine changes:
- removed unused typedefs
- fixed some typos
- got rid of pointless parser() method
- unified theme XML loading code for Zip files and regular directories
svn-id: r34774
Diffstat (limited to 'gui')
-rw-r--r-- | gui/ThemeEngine.cpp | 135 | ||||
-rw-r--r-- | gui/ThemeEngine.h | 13 |
2 files changed, 59 insertions, 89 deletions
diff --git a/gui/ThemeEngine.cpp b/gui/ThemeEngine.cpp index 42ffbcbc02..98b3aa20fa 100644 --- a/gui/ThemeEngine.cpp +++ b/gui/ThemeEngine.cpp @@ -508,14 +508,14 @@ bool ThemeEngine::loadDefaultXML() { #include "themes/default.inc" ; - if (!parser()->loadBuffer((const byte*)defaultXML, strlen(defaultXML), false)) + if (!_parser->loadBuffer((const byte*)defaultXML, strlen(defaultXML), false)) return false; _themeName = "ScummVM Classic Theme (Builtin Version)"; _themeFileName = "builtin"; - result = parser()->parse(); - parser()->close(); + result = _parser->parse(); + _parser->close(); return result; #else @@ -524,94 +524,71 @@ bool ThemeEngine::loadDefaultXML() { #endif } -bool ThemeEngine::loadThemeXML(Common::String themeName) { +bool ThemeEngine::loadThemeXML(const Common::String &themeName) { assert(_parser); _themeName.clear(); - char fileNameBuffer[32]; - Common::String stxHeader; - int parseCount = 0; - bool failed = false; - FSNode node(themeName); if (!node.exists() || !node.isReadable()) return false; - + + Common::ArchivePtr archive; + + if (node.getName().hasSuffix(".zip") && !node.isDirectory()) { #ifdef USE_ZLIB - if (node.getPath().hasSuffix(".zip") && !node.isDirectory()) { - Common::ZipArchive zipFile(node); - Common::ArchiveMemberList zipContents; - - if (zipFile.isOpen() && zipFile.listMembers(zipContents)) { - for (Common::ArchiveMemberList::iterator za = zipContents.begin(); za != zipContents.end(); ++za) { - if (!failed && (*za)->getName().hasSuffix(".stx")) { - if (parser()->loadStream((*za)->open()) == false) { - warning("Failed to load stream for zipped file '%s'", fileNameBuffer); - failed = true; - } - - if (parser()->parse() == false) { - warning("Theme parsing failed on zipped file '%s'.", fileNameBuffer); - failed = true; - } - - parser()->close(); - parseCount++; - } else if ((*za)->getName() == "THEMERC") { - Common::SeekableReadStream *stream = (*za)->open(); - stxHeader = stream->readLine(); - - if (!themeConfigParseHeader(stxHeader, _themeName)) { - warning("Corrupted 'THEMERC' file in theme '%s'", _themeFileName.c_str()); - failed = true; - } - - delete stream; - } - } - } else { - warning("Failed to open Zip archive '%s'.\n", themeName.c_str()); + Common::ZipArchive *zipArchive = new Common::ZipArchive(node); + archive = Common::ArchivePtr(zipArchive); + + if (!zipArchive || !zipArchive->isOpen()) { + warning("Failed to open Zip archive '%s'.", themeName.c_str()); return false; } - } else { + #endif - if (node.isDirectory()) { - FSList fslist; - if (!node.getChildren(fslist, FSNode::kListFilesOnly)) - return false; - - for (FSList::const_iterator i = fslist.begin(); i != fslist.end(); ++i) { - if (!failed && i->getName().hasSuffix(".stx")) { - parseCount++; - - if (parser()->loadFile(*i) == false) { - warning("Failed to load STX file '%s'", i->getName().c_str()); - failed = true; - } - - if (parser()->parse() == false) { - warning("Failed to parse STX file '%s'", i->getName().c_str()); - failed = true; - } - - parser()->close(); - } else if (i->getName() == "THEMERC") { - Common::File f; - f.open(*i); - stxHeader = f.readLine(); - - if (!themeConfigParseHeader(stxHeader, _themeName)) { - warning("Corrupted 'THEMERC' file in theme '%s'", _themeFileName.c_str()); - failed = true; - } - } - } + } else if (node.isDirectory()) { + archive = Common::ArchivePtr(new Common::FSDirectory(node)); + } + + Common::File themercFile; + themercFile.open("THEMERC", *archive); + if (!themercFile.isOpen()) { + warning("Theme '%s' contains no 'THEMERC' file.", themeName.c_str()); + return false; + } + + Common::String stxHeader = themercFile.readLine(); + if (!themeConfigParseHeader(stxHeader, _themeName) || _themeName.empty()) { + warning("Corrupted 'THEMERC' file in theme '%s'", _themeFileName.c_str()); + return false; + } + + Common::ArchiveMemberList members; + if (0 == archive->listMatchingMembers(members, "*.stx")) { + warning("Found no STX files for theme '%s'.", themeName.c_str()); + return false; + } + + // Loop over all STX files + for (Common::ArchiveMemberList::iterator i = members.begin(); i != members.end(); ++i) { + assert((*i)->getName().hasSuffix(".stx")); + + if (_parser->loadStream((*i)->open()) == false) { + warning("Failed to load STX file '%s'", (*i)->getName().c_str()); + _parser->close(); + return false; } -#ifdef USE_ZLIB - } -#endif + + if (_parser->parse() == false) { + warning("Failed to parse STX file '%s'", (*i)->getName().c_str()); + _parser->close(); + return false; + } + + _parser->close(); + } - return (parseCount > 0 && _themeName.empty() == false && failed == false); + assert(!_themeName.empty()); + return true; } diff --git a/gui/ThemeEngine.h b/gui/ThemeEngine.h index 8f8b06def4..2298b894a6 100644 --- a/gui/ThemeEngine.h +++ b/gui/ThemeEngine.h @@ -144,8 +144,6 @@ protected: class ThemeEngine : public Theme { protected: - typedef Common::String String; - typedef GUI::Dialog Dialog; typedef Common::HashMap<Common::String, Graphics::Surface*> ImagesMap; friend class GUI::Dialog; @@ -458,11 +456,6 @@ public: */ bool addTextData(const Common::String &drawDataId, const Common::String &textDataId, TextAlign alignH, TextAlignVertical alignV); - /** Interface to the new Theme XML parser */ - ThemeParser *parser() { - return _parser; - } - /** * Returns if the Theme is ready to draw stuff on screen. * Must be called instead of just checking _initOk, because @@ -559,12 +552,12 @@ protected: * Note that ThemeName is an identifier, not a filename. * * @param ThemeName Theme identifier. - * @returns True if the theme was succesfully loaded. + * @returns true if the theme was successfully loaded. */ - bool loadThemeXML(Common::String themeName); + bool loadThemeXML(const Common::String &themeName); /** - * Loads the default theme file (the embeded XML file found + * Loads the default theme file (the embedded XML file found * in ThemeDefaultXML.cpp). * Called only when no other themes are available. */ |