[Scummvm-cvs-logs] SF.net SVN: scummvm:[33699] scummvm/branches/gsoc2008-vkeybd

kenny-d at users.sourceforge.net kenny-d at users.sourceforge.net
Fri Aug 8 16:24:01 CEST 2008


Revision: 33699
          http://scummvm.svn.sourceforge.net/scummvm/?rev=33699&view=rev
Author:   kenny-d
Date:     2008-08-08 14:23:59 +0000 (Fri, 08 Aug 2008)

Log Message:
-----------
Keymapper WIP:
* Got rid of default keymaps as they over-complicated the API
* Remapping dialog WIP

Modified Paths:
--------------
    scummvm/branches/gsoc2008-vkeybd/backends/events/default/default-events.cpp
    scummvm/branches/gsoc2008-vkeybd/backends/keymapper/keymap-manager.cpp
    scummvm/branches/gsoc2008-vkeybd/backends/keymapper/keymap-manager.h
    scummvm/branches/gsoc2008-vkeybd/backends/keymapper/keymap.cpp
    scummvm/branches/gsoc2008-vkeybd/backends/keymapper/keymap.h
    scummvm/branches/gsoc2008-vkeybd/backends/keymapper/keymapper.cpp
    scummvm/branches/gsoc2008-vkeybd/backends/keymapper/keymapper.h
    scummvm/branches/gsoc2008-vkeybd/backends/module.mk
    scummvm/branches/gsoc2008-vkeybd/backends/platform/sdl/events.cpp
    scummvm/branches/gsoc2008-vkeybd/dists/msvc8/scummvm.vcproj
    scummvm/branches/gsoc2008-vkeybd/gui/theme-config.cpp

Added Paths:
-----------
    scummvm/branches/gsoc2008-vkeybd/backends/keymapper/remap-dialog.cpp
    scummvm/branches/gsoc2008-vkeybd/backends/keymapper/remap-dialog.h

Property Changed:
----------------
    scummvm/branches/gsoc2008-vkeybd/backends/keymapper/
    scummvm/branches/gsoc2008-vkeybd/backends/keymapper/action.cpp
    scummvm/branches/gsoc2008-vkeybd/backends/keymapper/action.h
    scummvm/branches/gsoc2008-vkeybd/backends/keymapper/hardware-key.h
    scummvm/branches/gsoc2008-vkeybd/backends/keymapper/keymap-manager.cpp
    scummvm/branches/gsoc2008-vkeybd/backends/keymapper/keymap-manager.h
    scummvm/branches/gsoc2008-vkeybd/backends/keymapper/keymap.cpp
    scummvm/branches/gsoc2008-vkeybd/backends/keymapper/keymap.h
    scummvm/branches/gsoc2008-vkeybd/backends/keymapper/keymapper.cpp
    scummvm/branches/gsoc2008-vkeybd/backends/keymapper/keymapper.h
    scummvm/branches/gsoc2008-vkeybd/backends/vkeybd/
    scummvm/branches/gsoc2008-vkeybd/backends/vkeybd/image-map.cpp
    scummvm/branches/gsoc2008-vkeybd/backends/vkeybd/image-map.h
    scummvm/branches/gsoc2008-vkeybd/backends/vkeybd/polygon.cpp
    scummvm/branches/gsoc2008-vkeybd/backends/vkeybd/polygon.h
    scummvm/branches/gsoc2008-vkeybd/backends/vkeybd/virtual-keyboard-gui.cpp
    scummvm/branches/gsoc2008-vkeybd/backends/vkeybd/virtual-keyboard-gui.h
    scummvm/branches/gsoc2008-vkeybd/backends/vkeybd/virtual-keyboard-parser.cpp
    scummvm/branches/gsoc2008-vkeybd/backends/vkeybd/virtual-keyboard-parser.h
    scummvm/branches/gsoc2008-vkeybd/backends/vkeybd/virtual-keyboard.cpp
    scummvm/branches/gsoc2008-vkeybd/backends/vkeybd/virtual-keyboard.h

Modified: scummvm/branches/gsoc2008-vkeybd/backends/events/default/default-events.cpp
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/backends/events/default/default-events.cpp	2008-08-08 13:30:01 UTC (rev 33698)
+++ scummvm/branches/gsoc2008-vkeybd/backends/events/default/default-events.cpp	2008-08-08 14:23:59 UTC (rev 33699)
@@ -29,6 +29,7 @@
 #include "common/config-manager.h"
 #include "backends/events/default/default-events.h"
 #include "backends/keymapper/keymapper.h"
+#include "backends/keymapper/remap-dialog.h"
 #include "backends/vkeybd/virtual-keyboard.h"
 
 #include "engines/engine.h"
@@ -427,6 +428,9 @@
 					if (!isPaused) g_engine->pauseEngine(false);
 					result = false;
 				}
+			} else if (event.kbd.keycode == Common::KEYCODE_F7 && event.kbd.flags == 0) {
+				Common::RemapDialog dialog;
+				dialog.runModal();
 			}
 
 			break;


Property changes on: scummvm/branches/gsoc2008-vkeybd/backends/keymapper
___________________________________________________________________
Added: svn:ignore
   + .deps



Property changes on: scummvm/branches/gsoc2008-vkeybd/backends/keymapper/action.cpp
___________________________________________________________________
Deleted: svn:mergeinfo
   - 


Property changes on: scummvm/branches/gsoc2008-vkeybd/backends/keymapper/action.h
___________________________________________________________________
Deleted: svn:mergeinfo
   - 


Property changes on: scummvm/branches/gsoc2008-vkeybd/backends/keymapper/hardware-key.h
___________________________________________________________________
Deleted: svn:mergeinfo
   - 

Modified: scummvm/branches/gsoc2008-vkeybd/backends/keymapper/keymap-manager.cpp
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/backends/keymapper/keymap-manager.cpp	2008-08-08 13:30:01 UTC (rev 33698)
+++ scummvm/branches/gsoc2008-vkeybd/backends/keymapper/keymap-manager.cpp	2008-08-08 14:23:59 UTC (rev 33699)
@@ -28,16 +28,11 @@
 
 namespace Common {
 
-void KeymapManager::Domain::setDefaultKeymap(Keymap *map) {
-	delete _defaultKeymap;
-	_defaultKeymap = map;
-}
-
-void KeymapManager::Domain::addKeymap(const String& name, Keymap *map) {
-	KeymapMap::iterator it = _keymaps.find(name);
+void KeymapManager::Domain::addKeymap(Keymap *map) {
+	KeymapMap::iterator it = _keymaps.find(map->getName());
 	if (it != _keymaps.end())
-		delete _keymaps[name];
-	_keymaps[name] = map;
+		delete _keymaps[map->getName()];
+	_keymaps[map->getName()] = map;
 }
 
 void KeymapManager::Domain::deleteAllKeyMaps() {
@@ -47,16 +42,8 @@
 		delete it->_value;
 	}
 	_keymaps.clear();
-	if (_defaultKeymap) {
-		//_defaultKeymap->saveMappings(_configDomain, "default");
-		delete _defaultKeymap;
-	}
 }
 
-Keymap *KeymapManager::Domain::getDefaultKeymap() {
-	return _defaultKeymap;
-}
-
 Keymap *KeymapManager::Domain::getKeymap(const String& name) {
 	KeymapMap::iterator it = _keymaps.find(name);
 	if (it != _keymaps.end())
@@ -80,22 +67,11 @@
 	_hardwareKeys = keys;
 }
 
-void KeymapManager::registerDefaultGlobalKeymap(Keymap *map) {
-	ConfigManager::Domain *dom = ConfMan.getDomain(ConfigManager::kApplicationDomain);
-	assert(dom);
-
-	initKeymap(dom, "default", map);
-	_globalDomain.setDefaultKeymap(map);
+void KeymapManager::registerGlobalKeymap(Keymap *map) {
+	initKeymap(_globalDomain.getConfigDomain(), map);
+	_globalDomain.addKeymap(map);
 }
 
-void KeymapManager::registerGlobalKeymap(const String& name, Keymap *map) {
-	ConfigManager::Domain *dom = ConfMan.getDomain(ConfigManager::kApplicationDomain);
-	assert(dom);
-
-	initKeymap(dom, name, map);
-	_globalDomain.addKeymap(name, map);
-}
-
 void KeymapManager::refreshGameDomain() {
 	if (_gameDomain.getConfigDomain() != ConfMan.getActiveDomain()) {
 		_gameDomain.deleteAllKeyMaps();
@@ -103,22 +79,15 @@
 	}
 }
 
-void KeymapManager::registerDefaultGameKeymap(Keymap *map) {
+void KeymapManager::registerGameKeymap(Keymap *map) {
 	refreshGameDomain();
-	initKeymap(_gameDomain.getConfigDomain(), "default", map);
-	_gameDomain.setDefaultKeymap(map);
+	initKeymap(_gameDomain.getConfigDomain(), map);
+	_gameDomain.addKeymap(map);
 }
 
-void KeymapManager::registerGameKeymap(const String& name, Keymap *map) {
-	refreshGameDomain();
-	initKeymap(_gameDomain.getConfigDomain(), name, map);
-	_gameDomain.addKeymap(name, map);
-}
-
 void KeymapManager::initKeymap(ConfigManager::Domain *domain, 
-							   const String& name, 
 							   Keymap *map) {
-	map->loadMappings(domain, name, _hardwareKeys);
+	map->loadMappings(domain, _hardwareKeys);
 	if (map->isComplete(_hardwareKeys) == false)
 		automaticMap(map);
 }
@@ -161,7 +130,7 @@
 Keymap *KeymapManager::getKeymap(const String& name) {
 	Keymap *keymap = _gameDomain.getKeymap(name);
 	if (!keymap)
-		_globalDomain.getKeymap(name);
+		keymap = _globalDomain.getKeymap(name);
 	return keymap;
 }
 


Property changes on: scummvm/branches/gsoc2008-vkeybd/backends/keymapper/keymap-manager.cpp
___________________________________________________________________
Deleted: svn:mergeinfo
   - 

Modified: scummvm/branches/gsoc2008-vkeybd/backends/keymapper/keymap-manager.h
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/backends/keymapper/keymap-manager.h	2008-08-08 13:30:01 UTC (rev 33698)
+++ scummvm/branches/gsoc2008-vkeybd/backends/keymapper/keymap-manager.h	2008-08-08 14:23:59 UTC (rev 33699)
@@ -37,8 +37,11 @@
 public:
 
 	class Domain {
+		typedef HashMap<String, Keymap*, 
+			IgnoreCase_Hash, IgnoreCase_EqualTo> KeymapMap;
+
 	public:
-		Domain() : _defaultKeymap(0), _configDomain(0) {}
+		Domain() : _configDomain(0) {}
 		~Domain() { 
 			deleteAllKeyMaps();
 		}
@@ -50,20 +53,22 @@
 			return _configDomain;
 		}
 
-		void setDefaultKeymap(Keymap *map);
-		void addKeymap(const String& name, Keymap *map);
+		void addKeymap(Keymap *map);
 
 		void deleteAllKeyMaps();
 
-		Keymap *getDefaultKeymap();
 		Keymap *getKeymap(const String& name);
+		
+		typedef KeymapMap::iterator iterator;
+		typedef KeymapMap::const_iterator const_iterator;
+		iterator begin() { return _keymaps.begin(); }
+		const_iterator begin() const { return _keymaps.begin(); }
+		iterator end() { return _keymaps.end(); }
+		const_iterator end() const { return _keymaps.end(); }
 
+		uint32 count() { return _keymaps.size(); }
 	private:
-		typedef HashMap<String, Keymap*, 
-			IgnoreCase_Hash, IgnoreCase_EqualTo> KeymapMap;
-
 		ConfigManager::Domain *_configDomain;
-		Keymap *_defaultKeymap;
 		KeymapMap _keymaps;
 	};
 
@@ -71,19 +76,21 @@
 	~KeymapManager();
 
 	void registerHardwareKeySet(HardwareKeySet *keys);
+	HardwareKeySet *getHardwareKeySet() { return _hardwareKeys; }
 
-	void registerDefaultGlobalKeymap(Keymap *map);
-	void registerGlobalKeymap(const String& name, Keymap *map);
+	void registerGlobalKeymap(Keymap *map);
 
 	void refreshGameDomain();
-	void registerDefaultGameKeymap(Keymap *map);
-	void registerGameKeymap(const String& name, Keymap *map);
+	void registerGameKeymap(Keymap *map);
 
 	Keymap *getKeymap(const String& name);
 
+	Domain& getGlobalDomain() { return _globalDomain; }
+	Domain& getGameDomain() { return _gameDomain; }
+
 private:
 
-	void initKeymap(ConfigManager::Domain *domain, const String& name, Keymap *keymap);
+	void initKeymap(ConfigManager::Domain *domain, Keymap *keymap);
 	void automaticMap(Keymap *map);
 
 	Domain _globalDomain;


Property changes on: scummvm/branches/gsoc2008-vkeybd/backends/keymapper/keymap-manager.h
___________________________________________________________________
Deleted: svn:mergeinfo
   - 

Modified: scummvm/branches/gsoc2008-vkeybd/backends/keymapper/keymap.cpp
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/backends/keymapper/keymap.cpp	2008-08-08 13:30:01 UTC (rev 33698)
+++ scummvm/branches/gsoc2008-vkeybd/backends/keymapper/keymap.cpp	2008-08-08 14:23:59 UTC (rev 33699)
@@ -48,17 +48,23 @@
 void Keymap::registerMapping(Action *action, const HardwareKey *hwKey) {
 	HashMap<KeyState, Action*>::iterator it;
 	it = _keymap.find(hwKey->key);
-	// if key is already mapped to an action then un-map it
-	if (it != _keymap.end())
+	// if key is already mapped to a different action then un-map it
+	if (it != _keymap.end() && action != it->_value) {
+		HashMap<KeyState, Action*>::iterator it2;
+		for (it2 = _keymap.begin(); it2 != _keymap.end(); it2++) {
+			printf("%d\n", it2->_value);
+		}
 		it->_value->mapKey(0);
+	}
 
 	_keymap[hwKey->key] = action;
 }
 
 void Keymap::unregisterMapping(Action *action) {
 	const HardwareKey *hwKey = action->getMappedKey();
-	if (hwKey)
-		_keymap[hwKey->key] = 0;
+	if (hwKey) {
+		_keymap.erase(hwKey->key);
+	}
 }
 
 Action *Keymap::getAction(int32 id) {
@@ -92,9 +98,9 @@
 		return it->_value;
 }
 
-void Keymap::loadMappings(ConfigManager::Domain *domain, const String& name, const HardwareKeySet *hwKeys) {
+void Keymap::loadMappings(ConfigManager::Domain *domain, const HardwareKeySet *hwKeys) {
 	ConfigManager::Domain::iterator it;	
-	String prefix = "km_" + name + "_";
+	String prefix = "km_" + _name + "_";
 	for (it = domain->begin(); it != domain->end(); it++) {
 		const String& key = it->_key;
 		if (!key.hasPrefix(prefix.c_str()))
@@ -111,7 +117,7 @@
 		Action *ua = getAction(actionId);
 		if (!ua) {
 			warning("'%s' keymap does not contain Action with ID %d", 
-				name.c_str(), (int)actionId);
+				_name.c_str(), (int)actionId);
 			continue;
 		}
 
@@ -131,14 +137,14 @@
 	}
 }
 
-void Keymap::saveMappings(ConfigManager::Domain *domain, const String& name) {
+void Keymap::saveMappings(ConfigManager::Domain *domain) {
 	if (!domain) return;
 	List<Action*>::const_iterator it;
-	char buf[11];
+	char buf[12];
+	String prefix = "km_" + _name + "_";
 	for (it = _actions.begin(); it != _actions.end(); it++) {
-		String key("km_");
 		sprintf(buf, "%d", (*it)->id);
-		key += name + "_" + buf;
+		String key = prefix + buf;
 		if ((*it)->getMappedKey())
 			sprintf(buf, "%d", (*it)->getMappedKey()->id);
 		else


Property changes on: scummvm/branches/gsoc2008-vkeybd/backends/keymapper/keymap.cpp
___________________________________________________________________
Deleted: svn:mergeinfo
   - 

Modified: scummvm/branches/gsoc2008-vkeybd/backends/keymapper/keymap.h
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/backends/keymapper/keymap.h	2008-08-08 13:30:01 UTC (rev 33698)
+++ scummvm/branches/gsoc2008-vkeybd/backends/keymapper/keymap.h	2008-08-08 14:23:59 UTC (rev 33699)
@@ -51,7 +51,7 @@
 
 class Keymap {
 public:
-	Keymap() {}
+	Keymap(const String& na) : _name(na) {}
 	Keymap(const Keymap& km);
 
 public:
@@ -70,9 +70,9 @@
 	Action *getAction(int32 id);
 
 	/**
-	 * Get a read-only array of all the Actions contained in this Keymap
+	 * Get the list of all the Actions contained in this Keymap
 	 */
-	const List<Action*>& getActions() const { return _actions; }
+	List<Action*>& getActions() { return _actions; }
 
 	/**
 	 * Find the Action that a key is mapped to
@@ -84,17 +84,15 @@
 	/**
 	 * Load this keymap's mappings from the given config domain and hardware key set
 	 * @param domain	config domain to load keymap from
-	 * @param name		name of the keymap to load
 	 * @param hwKeys	the set to retrieve hardware key pointers from
 	 */
-	void loadMappings(ConfigManager::Domain *domain, const String& name, const HardwareKeySet *hwKeys);
+	void loadMappings(ConfigManager::Domain *domain, const HardwareKeySet *hwKeys);
 
 	/**
 	 * Save this keymap's mappings to the given config domain
 	 * @param domain	config domain to save keymap to
-	 * @param name		name to save the keymap under
 	 */
-	void saveMappings(ConfigManager::Domain *domain, const String& name);
+	void saveMappings(ConfigManager::Domain *domain);
 
 	/**
 	 * Returns true if all UserAction's in Keymap are mapped, or,
@@ -102,6 +100,8 @@
 	 */
 	bool isComplete(const HardwareKeySet *hwKeys);
 
+	const String& getName() { return _name; }
+
 private:
 	friend struct Action;
 	/**
@@ -124,6 +124,7 @@
 
 	void internalMapKey(Action *action, HardwareKey *hwKey);
 
+	String _name;
 	List<Action*> _actions;
 	HashMap<KeyState, Action*> _keymap; 
 


Property changes on: scummvm/branches/gsoc2008-vkeybd/backends/keymapper/keymap.h
___________________________________________________________________
Deleted: svn:mergeinfo
   - 

Modified: scummvm/branches/gsoc2008-vkeybd/backends/keymapper/keymapper.cpp
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/backends/keymapper/keymapper.cpp	2008-08-08 13:30:01 UTC (rev 33698)
+++ scummvm/branches/gsoc2008-vkeybd/backends/keymapper/keymapper.cpp	2008-08-08 14:23:59 UTC (rev 33699)
@@ -30,6 +30,7 @@
 Keymapper::Keymapper(EventManager *evtMgr) {
 	_eventMan = evtMgr;
 	_keymapMan = new KeymapManager();
+	_enabled = true;
 }
 
 Keymapper::~Keymapper() {
@@ -40,30 +41,17 @@
 	_keymapMan->registerHardwareKeySet(keys);
 }
 
-void Keymapper::addGlobalKeymap(const String& name, Keymap *keymap) {
-	_keymapMan->registerGlobalKeymap(name, keymap);
+void Keymapper::addGlobalKeymap(Keymap *keymap) {
+	_keymapMan->registerGlobalKeymap(keymap);
 }
 
-void Keymapper::setDefaultGlobalKeymap(Keymap *keymap) {
-	_keymapMan->registerDefaultGlobalKeymap(keymap);
-	pushKeymap(keymap, false);
-}
-
-void Keymapper::addGameKeymap(const String& name, Keymap *keymap) {
+void Keymapper::addGameKeymap(Keymap *keymap) {
 	if (ConfMan.getActiveDomain() == 0)
-		error("Call to Keymapper::initGame when no game loaded");
+		error("Call to Keymapper::addGameKeymap when no game loaded");
 		
-	_keymapMan->registerGameKeymap(name, keymap);
+	_keymapMan->registerGameKeymap(keymap);
 }
 
-void Keymapper::setDefaultGameKeymap(Keymap *keymap) {
-	if (ConfMan.getActiveDomain() == 0)
-		error("Call to Keymapper::initGame when no game loaded");
-	
-	_keymapMan->registerDefaultGameKeymap(keymap);
-	pushKeymap(keymap, true);
-}
-
 bool Keymapper::pushKeymap(const String& name, bool inherit) {
 	Keymap *newMap = _keymapMan->getKeymap(name);
 	if (!newMap) {
@@ -95,6 +83,7 @@
 }
 
 bool Keymapper::mapKey(const KeyState& key, bool isKeyDown) {
+	if (!_enabled) return false;
 	if (_activeMaps.empty()) return false;
 
 	Action *action = 0;
@@ -143,4 +132,10 @@
 	return true;
 }
 
+const HardwareKey *Keymapper::getHardwareKey(const KeyState& key) {
+	HardwareKeySet *keyset = _keymapMan->getHardwareKeySet();
+	if (!keyset) return 0;
+	return keyset->findHardwareKey(key);
+}
+
 } // end of namespace Common


Property changes on: scummvm/branches/gsoc2008-vkeybd/backends/keymapper/keymapper.cpp
___________________________________________________________________
Deleted: svn:mergeinfo
   - 

Modified: scummvm/branches/gsoc2008-vkeybd/backends/keymapper/keymapper.h
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/backends/keymapper/keymapper.h	2008-08-08 13:30:01 UTC (rev 33698)
+++ scummvm/branches/gsoc2008-vkeybd/backends/keymapper/keymapper.h	2008-08-08 14:23:59 UTC (rev 33699)
@@ -36,6 +36,8 @@
 namespace Common {
 
 class Keymapper {
+	friend class RemapDialog;
+
 public:
 
 	Keymapper(EventManager *eventMan);
@@ -49,39 +51,31 @@
 
 
 	/**
-	 * Add a general keymap to the global domain.
+	 * Add a keymap to the global domain.
 	 * If a saved key setup exists for it in the ini file it will be used.
 	 * Else, the key setup will be automatically mapped.
 	 */
-	void addGlobalKeymap(const String& name, Keymap *keymap);
+	void addGlobalKeymap(Keymap *keymap);
 
 	/**
-	* Sets the default keymap for the global domain.
-	*/
-	void setDefaultGlobalKeymap(Keymap *keymap);
-
-	/**
-	* Add a general keymap to the game domain.
+	* Add a keymap to the game domain.
 	* @see addGlobalKeyMap
 	* @note initGame() should be called before any game keymaps are added.
 	*/
-	void addGameKeymap(const String& name, Keymap *keymap);
+	void addGameKeymap(Keymap *keymap);
 
 	/**
-	* Sets the default keymap for the game domain.
-	*/
-	void setDefaultGameKeymap(Keymap *keymap);
-
-	/**
-	 * Push a new keymap to the top of the active stack, activating it for use.
+	 * 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 
-	 * @return true if successful
+	 * @param inherit	if true keymapper will iterate down the 
+	 *					stack it cannot find a key in the new map
+	 * @return			true if succesful
 	 */
 	bool pushKeymap(const String& name, bool inherit = false);
 
 	/**
-	 * Pop the active keymap off the stack.
+	 * Pop the top keymap off the active stack.
 	 */
 	void popKeymap();
 
@@ -107,6 +101,10 @@
 	*/
 	bool mapKeyUp(const KeyState& key);
 
+	const HardwareKey *getHardwareKey(const KeyState& key);
+
+	void setEnabled(bool enabled) { _enabled = enabled; }
+
 private:
 
 	void pushKeymap(Keymap *newMap, bool inherit);
@@ -116,6 +114,7 @@
 	EventManager *_eventMan;
 	KeymapManager *_keymapMan;
 
+	bool _enabled;
 
 	struct MapRecord {
 		Keymap* keymap;


Property changes on: scummvm/branches/gsoc2008-vkeybd/backends/keymapper/keymapper.h
___________________________________________________________________
Deleted: svn:mergeinfo
   - 

Added: scummvm/branches/gsoc2008-vkeybd/backends/keymapper/remap-dialog.cpp
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/backends/keymapper/remap-dialog.cpp	                        (rev 0)
+++ scummvm/branches/gsoc2008-vkeybd/backends/keymapper/remap-dialog.cpp	2008-08-08 14:23:59 UTC (rev 33699)
@@ -0,0 +1,174 @@
+#include "backends/keymapper/remap-dialog.h"
+#include "gui/eval.h"
+#include "gui/newgui.h"
+#include "gui/PopUpWidget.h"
+
+namespace Common {
+
+enum {
+	kRemapCmd = 'REMP'
+};
+
+RemapDialog::RemapDialog()
+	: Dialog("remap"), _activeRemap(0) {
+
+	const int screenW = g_system->getOverlayWidth();
+	const int screenH = g_system->getOverlayHeight();
+
+	_keymapper = g_system->getEventManager()->getKeymapper();
+	assert(_keymapper);
+	_activeKeymaps = &_keymapper->_activeMaps;
+
+	int keymapCount = 0;
+	_globalKeymaps = &_keymapper->_keymapMan->getGlobalDomain();
+	if (_globalKeymaps->count() == 0)
+		_globalKeymaps = 0;
+	else
+		keymapCount += _globalKeymaps->count();
+	if (ConfMan.getActiveDomain() != 0) {
+		_gameKeymaps = &_keymapper->_keymapMan->getGameDomain();
+		if (_gameKeymaps->count() == 0)
+			_gameKeymaps = 0;
+		else
+			keymapCount += _gameKeymaps->count();
+	} else
+		_gameKeymaps = 0;
+
+	_keymapTable = (Keymap**)malloc(sizeof(Keymap*) * keymapCount);
+
+	int labelWidth = g_gui.evaluator()->getVar("remap_popup_labelW");
+	_kmPopUp = new GUI::PopUpWidget(this, "remap_popup", "Keymap:", labelWidth);
+
+	if (_activeKeymaps->size() > 0) {
+		_kmPopUp->appendEntry(_activeKeymaps->top().keymap->getName() + " (Active)");
+	}
+	KeymapManager::Domain::iterator it;
+	uint32 idx = 0;
+
+	if (_globalKeymaps) {
+		_kmPopUp->appendEntry("");
+		for (it = _globalKeymaps->begin(); it != _globalKeymaps->end(); it++) {
+			_kmPopUp->appendEntry(it->_value->getName() + " (Global)", idx);
+			_keymapTable[idx++] = it->_value;
+		}
+	}
+	if (_gameKeymaps) {
+		_kmPopUp->appendEntry("");
+		for (it = _gameKeymaps->begin(); it != _gameKeymaps->end(); it++) {
+			_kmPopUp->appendEntry(it->_value->getName() + " (Game)", idx);
+			_keymapTable[idx++] = it->_value;
+		}
+	}
+
+	_w = screenW - 2 * 20;
+	_h = screenH - 2 * 20;
+	// Center the dialog
+	_x = (screenW - _w) / 2;
+	_y = (screenH - _h) / 2;
+	
+	_colCount = 2;
+	_spacing = 10;
+	_colWidth = (_w - (_colCount - 1) * _spacing) / _colCount;
+	_widgetsY = g_gui.evaluator()->getVar("remap_widgetsY");
+	if (g_gui.getWidgetSize() == GUI::kBigWidgetSize)
+		_buttonHeight = GUI::kBigButtonHeight;
+	else
+		_buttonHeight = GUI::kButtonHeight;
+	
+}
+
+RemapDialog::~RemapDialog() {
+	free(_keymapTable);
+}
+
+void RemapDialog::open() {
+	Dialog::open();
+	
+	_kmPopUp->setSelected(0);
+	refreshKeymap();
+}
+
+void RemapDialog::handleCommand(GUI::CommandSender *sender, uint32 cmd, uint32 data) {
+	if (cmd >= kRemapCmd && cmd < kRemapCmd + _keymapMappings.size()) {
+		startRemapping(&_keymapMappings[cmd - kRemapCmd]);
+	} else if (cmd == GUI::kPopUpItemSelectedCmd) {
+		refreshKeymap();
+	} else {
+		GUI::Dialog::handleCommand(sender, cmd, data);
+	}
+}
+
+void RemapDialog::startRemapping(Mapping *remap) {
+	_activeRemap = remap;
+	_activeRemap->keyButton->setLabel("...");
+	_keymapper->setEnabled(false);
+}
+
+void RemapDialog::stopRemapping() {
+	refreshKeymap();
+	_activeRemap = 0;
+	_keymapper->setEnabled(true);
+}
+
+void RemapDialog::handleKeyDown(Common::KeyState state) {
+	if (_activeRemap) {
+		const HardwareKey *hwkey = _keymapper->getHardwareKey(state);
+		if (hwkey) {
+			_activeRemap->action->mapKey(hwkey);
+			stopRemapping();
+		}
+	} else {
+		GUI::Dialog::handleKeyDown(state);
+	}
+
+}
+
+void RemapDialog::refreshKeymap() {
+	if (_activeKeymaps->size() > 0 && _kmPopUp->getSelected() == 0) {
+		// TODO: show active keymaps (with inherited mappings)
+	} else {
+		Keymap *km = _keymapTable[_kmPopUp->getSelectedTag()];
+		List<Action*>& actions = km->getActions();
+		setNumOfWidgets(actions.size());
+		uint idx = 0;
+		List<Action*>::iterator it;
+		for (it = actions.begin(); it != actions.end(); it++, idx++) {
+			Mapping& ma = _keymapMappings[idx];
+			ma.action = *it;
+			ma.actionText->setLabel(ma.action->description + ":");
+			ma.keyButton->setLabel(ma.action->getMappedKey()->description);
+		}
+	}
+
+}
+
+void RemapDialog::setNumOfWidgets(uint newNum) {
+	uint num = _keymapMappings.size();
+	if (num < newNum) {
+		uint textYOff = (_buttonHeight - kLineHeight) / 2;
+		while (num < newNum) {
+			uint x = (num % _colCount) * (_colWidth + _spacing);
+			uint y = _widgetsY + (num / _colCount) * (_buttonHeight + _spacing);
+			Mapping ma;
+			ma.action = 0;
+			ma.actionText = new GUI::StaticTextWidget(this, x, y + textYOff, 
+				_colWidth / 2, kLineHeight, "", Graphics::kTextAlignRight);
+			ma.keyButton = new GUI::ButtonWidget(this, x + _colWidth / 2,
+				y, _colWidth / 2, _buttonHeight, "", kRemapCmd + num);
+			_keymapMappings.push_back(ma);
+			num++;
+		}
+	} else {
+		while (num > newNum) {
+			Mapping ma = _keymapMappings.remove_at(num - 1);
+			removeWidget(ma.actionText);
+			delete ma.actionText;
+			removeWidget(ma.keyButton);
+			delete ma.keyButton;
+			num--;
+		}
+	}
+
+}
+
+} // end of namespace Common


Property changes on: scummvm/branches/gsoc2008-vkeybd/backends/keymapper/remap-dialog.cpp
___________________________________________________________________
Added: svn:mime-type
   + text/plain
Added: svn:keywords
   + Date Rev Author URL Id
Added: svn:eol-style
   + native

Added: scummvm/branches/gsoc2008-vkeybd/backends/keymapper/remap-dialog.h
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/backends/keymapper/remap-dialog.h	                        (rev 0)
+++ scummvm/branches/gsoc2008-vkeybd/backends/keymapper/remap-dialog.h	2008-08-08 14:23:59 UTC (rev 33699)
@@ -0,0 +1,78 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL$
+ * $Id$
+ */
+
+#ifndef REMAP_DIALOG_H
+#define REMAP_DIALOG_H
+
+#include "backends/keymapper/keymapper.h"
+#include "gui/dialog.h"
+
+namespace GUI {
+	class PopupWidget;
+}
+
+namespace Common {
+
+class RemapDialog : public GUI::Dialog {
+public:
+	RemapDialog();
+	virtual ~RemapDialog();
+	virtual void open();
+	virtual void handleCommand(GUI::CommandSender *sender, uint32 cmd, uint32 data);
+	virtual void handleKeyDown(Common::KeyState state);
+
+protected:
+	struct Mapping {
+		Action *action;
+		GUI::StaticTextWidget *actionText;
+		GUI::ButtonWidget *keyButton;
+	};
+
+	void refreshKeymap();
+	void setNumOfWidgets(uint num);
+	void startRemapping(Mapping *remap);
+	void stopRemapping();
+
+	Keymapper *_keymapper;
+	Stack<Keymapper::MapRecord> *_activeKeymaps;
+	KeymapManager::Domain *_globalKeymaps;
+	KeymapManager::Domain *_gameKeymaps;
+
+	GUI::PopUpWidget *_kmPopUp;
+	Keymap** _keymapTable;
+
+	uint _colWidth;
+	uint _colCount;
+	uint _spacing;
+	uint _widgetsY;
+	uint _buttonHeight;
+
+	Mapping *_activeRemap;
+	Array<Mapping> _keymapMappings;
+
+};
+
+} // end of namespace Common
+
+#endif


Property changes on: scummvm/branches/gsoc2008-vkeybd/backends/keymapper/remap-dialog.h
___________________________________________________________________
Added: svn:mime-type
   + text/plain
Added: svn:keywords
   + Date Rev Author URL Id
Added: svn:eol-style
   + native

Modified: scummvm/branches/gsoc2008-vkeybd/backends/module.mk
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/backends/module.mk	2008-08-08 13:30:01 UTC (rev 33698)
+++ scummvm/branches/gsoc2008-vkeybd/backends/module.mk	2008-08-08 14:23:59 UTC (rev 33699)
@@ -29,6 +29,7 @@
 	saves/compressed/compressed-saves.o \
 	timer/default/default-timer.o \
 	keymapper/action.o \
+	keymapper/remap-dialog.o \
 	keymapper/keymap.o \
 	keymapper/keymap-manager.o \
 	keymapper/keymapper.o \

Modified: scummvm/branches/gsoc2008-vkeybd/backends/platform/sdl/events.cpp
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/backends/platform/sdl/events.cpp	2008-08-08 13:30:01 UTC (rev 33698)
+++ scummvm/branches/gsoc2008-vkeybd/backends/platform/sdl/events.cpp	2008-08-08 14:23:59 UTC (rev 33699)
@@ -532,7 +532,7 @@
 	keySet->addHardwareKey(new HardwareKey( 'f', KeyState(KEYCODE_f), "f" ));
 	mapper->registerHardwareKeySet(keySet);
 
-	Keymap *global = new Keymap();
+	Keymap *global = new Keymap("global");
 	Action *act;
 	Event evt;
 
@@ -551,6 +551,7 @@
 
 	#undef ADD_KEYDOWN_EVENT
 
-	mapper->setDefaultGlobalKeymap(global);
+	mapper->addGlobalKeymap(global);
+	mapper->pushKeymap("global");
 }
 


Property changes on: scummvm/branches/gsoc2008-vkeybd/backends/vkeybd
___________________________________________________________________
Added: svn:ignore
   + .deps



Property changes on: scummvm/branches/gsoc2008-vkeybd/backends/vkeybd/image-map.cpp
___________________________________________________________________
Deleted: svn:mergeinfo
   - 


Property changes on: scummvm/branches/gsoc2008-vkeybd/backends/vkeybd/image-map.h
___________________________________________________________________
Deleted: svn:mergeinfo
   - 


Property changes on: scummvm/branches/gsoc2008-vkeybd/backends/vkeybd/polygon.cpp
___________________________________________________________________
Deleted: svn:mergeinfo
   - 


Property changes on: scummvm/branches/gsoc2008-vkeybd/backends/vkeybd/polygon.h
___________________________________________________________________
Deleted: svn:mergeinfo
   - 


Property changes on: scummvm/branches/gsoc2008-vkeybd/backends/vkeybd/virtual-keyboard-gui.cpp
___________________________________________________________________
Deleted: svn:mergeinfo
   - 


Property changes on: scummvm/branches/gsoc2008-vkeybd/backends/vkeybd/virtual-keyboard-gui.h
___________________________________________________________________
Deleted: svn:mergeinfo
   - 


Property changes on: scummvm/branches/gsoc2008-vkeybd/backends/vkeybd/virtual-keyboard-parser.cpp
___________________________________________________________________
Deleted: svn:mergeinfo
   - 


Property changes on: scummvm/branches/gsoc2008-vkeybd/backends/vkeybd/virtual-keyboard-parser.h
___________________________________________________________________
Deleted: svn:mergeinfo
   - 


Property changes on: scummvm/branches/gsoc2008-vkeybd/backends/vkeybd/virtual-keyboard.cpp
___________________________________________________________________
Deleted: svn:mergeinfo
   - 


Property changes on: scummvm/branches/gsoc2008-vkeybd/backends/vkeybd/virtual-keyboard.h
___________________________________________________________________
Deleted: svn:mergeinfo
   - 

Modified: scummvm/branches/gsoc2008-vkeybd/dists/msvc8/scummvm.vcproj
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/dists/msvc8/scummvm.vcproj	2008-08-08 13:30:01 UTC (rev 33698)
+++ scummvm/branches/gsoc2008-vkeybd/dists/msvc8/scummvm.vcproj	2008-08-08 14:23:59 UTC (rev 33699)
@@ -1116,6 +1116,14 @@
 					RelativePath="..\..\backends\keymapper\keymapper.h"
 					>
 				</File>
+				<File
+					RelativePath="..\..\backends\keymapper\remap-dialog.cpp"
+					>
+				</File>
+				<File
+					RelativePath="..\..\backends\keymapper\remap-dialog.h"
+					>
+				</File>
 			</Filter>
 		</Filter>
 		<Filter

Modified: scummvm/branches/gsoc2008-vkeybd/gui/theme-config.cpp
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/gui/theme-config.cpp	2008-08-08 13:30:01 UTC (rev 33698)
+++ scummvm/branches/gsoc2008-vkeybd/gui/theme-config.cpp	2008-08-08 14:23:59 UTC (rev 33699)
@@ -373,6 +373,11 @@
 "scummsaveload_choose=(prev.x2 + 10) prev.y prev.w prev.h\n"
 "scummsaveload_extinfo.visible=true\n"
 "\n"
+"# Keymapper remap dialog\n"
+"remap=8 8 (w - 16) (h - 16)\n"
+"remap_popup_labelW=buttonWidth\n"
+"remap_popup=0 0 parent.w (kLineHeight + 2)\n"
+"remap_widgetsY=(remap_popup.h + 10)\n"
 "############################################\n"
 "[chooser]\n"
 "chooserW=(w - 2 * 8)\n"


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