[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