[Scummvm-cvs-logs] SF.net SVN: scummvm:[33679] scummvm/branches/gsoc2008-vkeybd/backends/ common
kenny-d at users.sourceforge.net
kenny-d at users.sourceforge.net
Thu Aug 7 16:16:49 CEST 2008
Revision: 33679
http://scummvm.svn.sourceforge.net/scummvm/?rev=33679&view=rev
Author: kenny-d
Date: 2008-08-07 14:16:48 +0000 (Thu, 07 Aug 2008)
Log Message:
-----------
Keymapper cleanup:
*Removed need to call initGame / cleanupGame on Keymapper
Modified Paths:
--------------
scummvm/branches/gsoc2008-vkeybd/backends/common/keymap-manager.cpp
scummvm/branches/gsoc2008-vkeybd/backends/common/keymap-manager.h
scummvm/branches/gsoc2008-vkeybd/backends/common/keymap.cpp
scummvm/branches/gsoc2008-vkeybd/backends/common/keymap.h
scummvm/branches/gsoc2008-vkeybd/backends/common/keymapper.cpp
scummvm/branches/gsoc2008-vkeybd/backends/common/keymapper.h
Modified: scummvm/branches/gsoc2008-vkeybd/backends/common/keymap-manager.cpp
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/backends/common/keymap-manager.cpp 2008-08-07 13:36:02 UTC (rev 33678)
+++ scummvm/branches/gsoc2008-vkeybd/backends/common/keymap-manager.cpp 2008-08-07 14:16:48 UTC (rev 33679)
@@ -43,11 +43,14 @@
void KeymapManager::Domain::deleteAllKeyMaps() {
KeymapMap::iterator it;
for (it = _keymaps.begin(); it != _keymaps.end(); it++) {
- //it->_value->saveMappings()
+ it->_value->saveMappings(_configDomain, it->_key);
delete it->_value;
}
_keymaps.clear();
- delete _defaultKeymap;
+ if (_defaultKeymap) {
+ _defaultKeymap->saveMappings(_configDomain, "default");
+ delete _defaultKeymap;
+ }
}
Keymap *KeymapManager::Domain::getDefaultKeymap() {
@@ -64,13 +67,13 @@
KeymapManager::KeymapManager() {
_hardwareKeys = 0;
+ _globalDomain.setConfigDomain(ConfMan.getDomain(ConfigManager::kApplicationDomain));
}
KeymapManager::~KeymapManager() {
delete _hardwareKeys;
}
-
void KeymapManager::registerHardwareKeySet(HardwareKeySet *keys) {
if (_hardwareKeys)
error("Hardware key set already registered!");
@@ -80,6 +83,7 @@
void KeymapManager::registerDefaultGlobalKeymap(Keymap *map) {
ConfigManager::Domain *dom = ConfMan.getDomain(ConfigManager::kApplicationDomain);
assert(dom);
+
initKeymap(dom, "default", map);
_globalDomain.setDefaultKeymap(map);
}
@@ -92,19 +96,22 @@
_globalDomain.addKeymap(name, map);
}
-void KeymapManager::registerDefaultGameKeymap(Keymap *map) {
- ConfigManager::Domain *dom = ConfMan.getActiveDomain();
- assert(dom);
+void KeymapManager::refreshGameDomain() {
+ if (_gameDomain.getConfigDomain() != ConfMan.getActiveDomain()) {
+ _gameDomain.deleteAllKeyMaps();
+ _gameDomain.setConfigDomain(ConfMan.getActiveDomain());
+ }
+}
- initKeymap(dom, "default", map);
+void KeymapManager::registerDefaultGameKeymap(Keymap *map) {
+ refreshGameDomain();
+ initKeymap(_gameDomain.getConfigDomain(), "default", map);
_gameDomain.setDefaultKeymap(map);
}
void KeymapManager::registerGameKeymap(const String& name, Keymap *map) {
- ConfigManager::Domain *dom = ConfMan.getActiveDomain();
- assert(dom);
-
- initKeymap(dom, name, map);
+ refreshGameDomain();
+ initKeymap(_gameDomain.getConfigDomain(), name, map);
_gameDomain.addKeymap(name, map);
}
@@ -112,25 +119,10 @@
const String& name,
Keymap *map) {
map->loadMappings(domain, name, _hardwareKeys);
- if (isMapComplete(map) == false)
+ if (map->isComplete(_hardwareKeys) == false)
automaticMap(map);
}
-bool KeymapManager::isMapComplete(const Keymap *map) {
- const List<Action*>& actions = map->getActions();
- List<Action*>::const_iterator it;
- bool allMapped = true;
- uint numberMapped = 0;
- for (it = actions.begin(); it != actions.end(); it++) {
- if ((*it)->getMappedKey()) {
- numberMapped++;
- } else {
- allMapped = false;
- }
- }
- return allMapped || (numberMapped == _hardwareKeys->count());
-}
-
void KeymapManager::automaticMap(Keymap *map) {
List<Action*> actions(map->getActions()), unmapped;
List<Action*>::iterator actIt;
@@ -166,10 +158,6 @@
}
-void KeymapManager::unregisterAllGameKeymaps() {
- _gameDomain.deleteAllKeyMaps();
-}
-
Keymap *KeymapManager::getKeymap(const String& name) {
Keymap *keymap = _gameDomain.getKeymap(name);
if (!keymap)
Modified: scummvm/branches/gsoc2008-vkeybd/backends/common/keymap-manager.h
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/backends/common/keymap-manager.h 2008-08-07 13:36:02 UTC (rev 33678)
+++ scummvm/branches/gsoc2008-vkeybd/backends/common/keymap-manager.h 2008-08-07 14:16:48 UTC (rev 33679)
@@ -38,9 +38,16 @@
class Domain {
public:
- Domain() : _defaultKeymap(0) {}
+ Domain() : _defaultKeymap(0), _configDomain(0) {}
~Domain() { deleteAllKeyMaps(); }
+ void setConfigDomain(ConfigManager::Domain *confDom) {
+ _configDomain = confDom;
+ }
+ ConfigManager::Domain *getConfigDomain() {
+ return _configDomain;
+ }
+
void setDefaultKeymap(Keymap *map);
void addKeymap(const String& name, Keymap *map);
@@ -53,6 +60,7 @@
typedef HashMap<String, Keymap*,
IgnoreCase_Hash, IgnoreCase_EqualTo> KeymapMap;
+ ConfigManager::Domain *_configDomain;
Keymap *_defaultKeymap;
KeymapMap _keymaps;
};
@@ -65,18 +73,16 @@
void registerDefaultGlobalKeymap(Keymap *map);
void registerGlobalKeymap(const String& name, Keymap *map);
+ void refreshGameDomain();
void registerDefaultGameKeymap(Keymap *map);
void registerGameKeymap(const String& name, Keymap *map);
- void unregisterAllGameKeymaps();
-
Keymap *getKeymap(const String& name);
private:
void initKeymap(ConfigManager::Domain *domain, const String& name, Keymap *keymap);
void automaticMap(Keymap *map);
- bool isMapComplete(const Keymap *map);
Domain _globalDomain;
Domain _gameDomain;
Modified: scummvm/branches/gsoc2008-vkeybd/backends/common/keymap.cpp
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/backends/common/keymap.cpp 2008-08-07 13:36:02 UTC (rev 33678)
+++ scummvm/branches/gsoc2008-vkeybd/backends/common/keymap.cpp 2008-08-07 14:16:48 UTC (rev 33679)
@@ -132,6 +132,7 @@
}
void Keymap::saveMappings(ConfigManager::Domain *domain, const String& name) {
+ if (!domain) return;
List<Action*>::const_iterator it;
char buf[11];
for (it = _actions.begin(); it != _actions.end(); it++) {
@@ -146,4 +147,18 @@
}
}
+bool Keymap::isComplete(const HardwareKeySet *hwKeys) {
+ List<Action*>::iterator it;
+ bool allMapped = true;
+ uint numberMapped = 0;
+ for (it = _actions.begin(); it != _actions.end(); it++) {
+ if ((*it)->getMappedKey()) {
+ numberMapped++;
+ } else {
+ allMapped = false;
+ }
+ }
+ return allMapped || (numberMapped == hwKeys->count());
+}
+
} // end of namespace Common
Modified: scummvm/branches/gsoc2008-vkeybd/backends/common/keymap.h
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/backends/common/keymap.h 2008-08-07 13:36:02 UTC (rev 33678)
+++ scummvm/branches/gsoc2008-vkeybd/backends/common/keymap.h 2008-08-07 14:16:48 UTC (rev 33679)
@@ -96,6 +96,12 @@
*/
void saveMappings(ConfigManager::Domain *domain, const String& name);
+ /**
+ * Returns true if all UserAction's in Keymap are mapped, or,
+ * all HardwareKey'ss from the given set have been used up.
+ */
+ bool isComplete(const HardwareKeySet *hwKeys);
+
private:
friend struct Action;
/**
Modified: scummvm/branches/gsoc2008-vkeybd/backends/common/keymapper.cpp
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/backends/common/keymapper.cpp 2008-08-07 13:36:02 UTC (rev 33678)
+++ scummvm/branches/gsoc2008-vkeybd/backends/common/keymapper.cpp 2008-08-07 14:16:48 UTC (rev 33679)
@@ -50,40 +50,20 @@
}
void Keymapper::addGameKeymap(const String& name, Keymap *keymap) {
- if (checkGameInit())
- _keymapMan->registerGameKeymap(name, keymap);
+ if (ConfMan.getActiveDomain() == 0)
+ error("Call to Keymapper::initGame when no game loaded");
+
+ _keymapMan->registerGameKeymap(name, keymap);
}
void Keymapper::setDefaultGameKeymap(Keymap *keymap) {
- if (checkGameInit()) {
- _keymapMan->registerDefaultGameKeymap(keymap);
- pushKeymap(keymap, true);
- }
-}
-
-bool Keymapper::checkGameInit() {
- if (_gameId.empty()) {
- initGame();
- if (_gameId.empty())
- return false;
- }
- return true;
-}
-
-void Keymapper::initGame() {
if (ConfMan.getActiveDomain() == 0)
error("Call to Keymapper::initGame when no game loaded");
-
- if (_gameId.size() > 0)
- cleanupGame();
- _gameId = ConfMan.getActiveDomainName();
+
+ _keymapMan->registerDefaultGameKeymap(keymap);
+ pushKeymap(keymap, true);
}
-void Keymapper::cleanupGame() {
- _keymapMan->unregisterAllGameKeymaps();
- _gameId.clear();
-}
-
bool Keymapper::pushKeymap(const String& name, bool inherit) {
Keymap *newMap = _keymapMan->getKeymap(name);
if (!newMap) {
Modified: scummvm/branches/gsoc2008-vkeybd/backends/common/keymapper.h
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/backends/common/keymapper.h 2008-08-07 13:36:02 UTC (rev 33678)
+++ scummvm/branches/gsoc2008-vkeybd/backends/common/keymapper.h 2008-08-07 14:16:48 UTC (rev 33679)
@@ -73,16 +73,6 @@
void setDefaultGameKeymap(Keymap *keymap);
/**
- * Initialise the keymapper for a new game
- */
- void initGame();
-
- /**
- * Cleanup the keymapper after a game has ended
- */
- void cleanupGame();
-
- /**
* Push a new keymap to the top of the active stack, activating it for use.
* @param name name of the keymap to push
* @param inherit if true
@@ -120,14 +110,12 @@
private:
void pushKeymap(Keymap *newMap, bool inherit);
- bool checkGameInit();
typedef List<HardwareKey*>::iterator Iterator;
EventManager *_eventMan;
KeymapManager *_keymapMan;
- String _gameId;
struct MapRecord {
Keymap* keymap;
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