[Scummvm-cvs-logs] SF.net SVN: scummvm:[41705] scummvm/trunk/backends/vkeybd
dhewg at users.sourceforge.net
dhewg at users.sourceforge.net
Sat Jun 20 13:48:42 CEST 2009
Revision: 41705
http://scummvm.svn.sourceforge.net/scummvm/?rev=41705&view=rev
Author: dhewg
Date: 2009-06-20 11:48:42 +0000 (Sat, 20 Jun 2009)
Log Message:
-----------
split loadKeyboardPack(), fallback to the current dir when searching for packs, and free memory in the case of an error.
Modified Paths:
--------------
scummvm/trunk/backends/vkeybd/virtual-keyboard.cpp
scummvm/trunk/backends/vkeybd/virtual-keyboard.h
Modified: scummvm/trunk/backends/vkeybd/virtual-keyboard.cpp
===================================================================
--- scummvm/trunk/backends/vkeybd/virtual-keyboard.cpp 2009-06-20 10:52:55 UTC (rev 41704)
+++ scummvm/trunk/backends/vkeybd/virtual-keyboard.cpp 2009-06-20 11:48:42 UTC (rev 41705)
@@ -31,7 +31,6 @@
#include "backends/vkeybd/virtual-keyboard-parser.h"
#include "backends/vkeybd/keycode-descriptions.h"
#include "common/config-manager.h"
-#include "common/fs.h"
#include "common/unzip.h"
#define KEY_START_CHAR ('[')
@@ -77,51 +76,77 @@
_kbdGUI->reset();
}
-bool VirtualKeyboard::loadKeyboardPack(String packName) {
+bool VirtualKeyboard::openPack(const String &packName, const FSNode &node) {
+ if (node.getChild(packName + ".xml").exists()) {
+ _fileArchive = new FSDirectory(node, 1);
+
+ // uncompressed keyboard pack
+ if (!_parser->loadFile(node.getChild(packName + ".xml"))) {
+ delete _fileArchive;
+ _fileArchive = 0;
+ return false;
+ }
+
+ return true;
+ }
+
+#ifdef USE_ZLIB
+ if (node.getChild(packName + ".zip").exists()) {
+ // compressed keyboard pack
+ _fileArchive = new ZipArchive(node.getChild(packName + ".zip"));
+ if (_fileArchive->hasFile(packName + ".xml")) {
+ if (!_parser->loadStream(_fileArchive->createReadStreamForMember(packName + ".xml"))) {
+ delete _fileArchive;
+ _fileArchive = 0;
+ return false;
+ }
+ } else {
+ warning("Could not find %s.xml file in %s.zip keyboard pack", packName.c_str(), packName.c_str());
+ delete _fileArchive;
+ _fileArchive = 0;
+ return false;
+ }
+
+ return true;
+ }
+#endif
+
+ return false;
+}
+
+bool VirtualKeyboard::loadKeyboardPack(const String &packName) {
_kbdGUI->initSize(_system->getOverlayWidth(), _system->getOverlayHeight());
delete _fileArchive;
_fileArchive = 0;
+ _loaded = false;
- FSNode vkDir;
+ bool opened = false;
if (ConfMan.hasKey("vkeybdpath"))
- vkDir = FSNode(ConfMan.get("vkeybdpath"));
+ opened = openPack(packName, FSNode(ConfMan.get("vkeybdpath")));
else if (ConfMan.hasKey("extrapath"))
- vkDir = FSNode(ConfMan.get("extrapath"));
- else // use current directory
- vkDir = FSNode(".");
+ opened = openPack(packName, FSNode(ConfMan.get("extrapath")));
- if (vkDir.getChild(packName + ".xml").exists()) {
- _fileArchive = new FSDirectory(vkDir, 1);
+ // fallback to the current dir
+ if (!opened)
+ opened = openPack(packName, FSNode("."));
- // uncompressed keyboard pack
- if (!_parser->loadFile(vkDir.getChild(packName + ".xml")))
- return false;
+ if (opened) {
+ _parser->setParseMode(VirtualKeyboardParser::kParseFull);
+ _loaded = _parser->parse();
- } else if (vkDir.getChild(packName + ".zip").exists()) {
- // compressed keyboard pack
-#ifdef USE_ZLIB
- _fileArchive = new ZipArchive(vkDir.getChild(packName + ".zip"));
- if (_fileArchive->hasFile(packName + ".xml")) {
- if (!_parser->loadStream(_fileArchive->createReadStreamForMember(packName + ".xml")))
- return false;
+ if (_loaded) {
+ printf("Keyboard pack '%s' loaded successfully!\n", packName.c_str());
} else {
- warning("Could not find %s.xml file in %s.zip keyboard pack", packName.c_str(), packName.c_str());
- return false;
+ warning("Error parsing the keyboard pack '%s'", packName.c_str());
+
+ delete _fileArchive;
+ _fileArchive = 0;
}
-#else
- return false;
-#endif
} else {
warning("Keyboard pack not found");
- return false;
}
- _parser->setParseMode(VirtualKeyboardParser::kParseFull);
- _loaded = _parser->parse();
- if (_loaded)
- printf("Keyboard pack '%s' loaded successfully!\n", packName.c_str());
-
return _loaded;
}
Modified: scummvm/trunk/backends/vkeybd/virtual-keyboard.h
===================================================================
--- scummvm/trunk/backends/vkeybd/virtual-keyboard.h 2009-06-20 10:52:55 UTC (rev 41704)
+++ scummvm/trunk/backends/vkeybd/virtual-keyboard.h 2009-06-20 11:48:42 UTC (rev 41705)
@@ -37,6 +37,7 @@
#include "common/keyboard.h"
#include "common/list.h"
#include "common/str.h"
+#include "common/fs.h"
#include "backends/vkeybd/image-map.h"
#include "graphics/surface.h"
@@ -190,7 +191,7 @@
* searches for a compressed keyboard pack by looking for packName.zip.
* @param packName name of the keyboard pack
*/
- bool loadKeyboardPack(String packName);
+ bool loadKeyboardPack(const String &packName);
/**
* Shows the keyboard, starting an event loop that will intercept all
@@ -232,6 +233,7 @@
VirtualKeyboardParser *_parser;
void reset();
+ bool openPack(const String &packName, const FSNode &node);
void deleteEvents();
bool checkModeResolutions();
void switchMode(Mode *newMode);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Scummvm-git-logs
mailing list