diff options
author | Eugene Sandulenko | 2009-05-10 17:18:59 +0000 |
---|---|---|
committer | Eugene Sandulenko | 2009-05-10 17:18:59 +0000 |
commit | 2cc77639715214573637375655442d2208898a38 (patch) | |
tree | 787ccf95ac9c7fc1cdbe0df86a309d26deb973bd /backends/keymapper/keymapper.cpp | |
parent | 7cd07d958193f591740c9e60225ae82833ac90c8 (diff) | |
download | scummvm-rg350-2cc77639715214573637375655442d2208898a38.tar.gz scummvm-rg350-2cc77639715214573637375655442d2208898a38.tar.bz2 scummvm-rg350-2cc77639715214573637375655442d2208898a38.zip |
whitespaces
svn-id: r40424
Diffstat (limited to 'backends/keymapper/keymapper.cpp')
-rw-r--r-- | backends/keymapper/keymapper.cpp | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/backends/keymapper/keymapper.cpp b/backends/keymapper/keymapper.cpp index c6ed0fe024..56780f49af 100644 --- a/backends/keymapper/keymapper.cpp +++ b/backends/keymapper/keymapper.cpp @@ -33,19 +33,23 @@ namespace Common { void Keymapper::Domain::addKeymap(Keymap *map) { iterator it = find(map->getName()); + if (it != end()) delete it->_value; + setVal(map->getName(), map); } void Keymapper::Domain::deleteAllKeyMaps() { for (iterator it = begin(); it != end(); it++) delete it->_value; + clear(); } Keymap *Keymapper::Domain::getKeymap(const String& name) { iterator it = find(name); + if (it != end()) return it->_value; else @@ -55,6 +59,7 @@ Keymap *Keymapper::Domain::getKeymap(const String& name) { Keymapper::Keymapper(EventManager *evtMgr) : _eventMan(evtMgr), _enabled(true), _hardwareKeys(0) { ConfigManager::Domain *confDom = ConfMan.getDomain(ConfigManager::kApplicationDomain); + _globalDomain.setConfigDomain(confDom); } @@ -65,6 +70,7 @@ Keymapper::~Keymapper() { void Keymapper::registerHardwareKeySet(HardwareKeySet *keys) { if (_hardwareKeys) error("Hardware key set already registered!"); + _hardwareKeys = keys; } @@ -82,17 +88,20 @@ void Keymapper::addGameKeymap(Keymap *keymap) { cleanupGameKeymaps(); _gameDomain.setConfigDomain(ConfMan.getActiveDomain()); } + initKeymap(_gameDomain, keymap); } void Keymapper::initKeymap(Domain &domain, Keymap *map) { map->setConfigDomain(domain.getConfigDomain()); map->loadMappings(_hardwareKeys); + if (map->isComplete(_hardwareKeys) == false) { map->automaticMapping(_hardwareKeys); map->saveMappings(); ConfMan.flushToDisk(); } + domain.addKeymap(map); } @@ -103,36 +112,44 @@ void Keymapper::cleanupGameKeymaps() { // Now restore the stack of active maps. Re-add all global keymaps, drop // the game specific (=deleted) ones. Stack<MapRecord> newStack; + for (int i = 0; i < _activeMaps.size(); i++) { if (_activeMaps[i].global) newStack.push(_activeMaps[i]); } + _activeMaps = newStack; } Keymap *Keymapper::getKeymap(const String& name, bool &global) { Keymap *keymap = _gameDomain.getKeymap(name); global = false; + if (!keymap) { keymap = _globalDomain.getKeymap(name); global = true; } + return keymap; } bool Keymapper::pushKeymap(const String& name, bool inherit) { bool global; Keymap *newMap = getKeymap(name, global); + if (!newMap) { warning("Keymap '%s' not registered", name.c_str()); return false; } + pushKeymap(newMap, inherit, global); + return true; } void Keymapper::pushKeymap(Keymap *newMap, bool inherit, bool global) { MapRecord mr = {newMap, inherit, global}; + _activeMaps.push(mr); } @@ -154,38 +171,49 @@ bool Keymapper::mapKey(const KeyState& key, bool keyDown) { return false; Action *action = 0; + if (keyDown) { // Search for key in active keymap stack for (int i = _activeMaps.size() - 1; i >= 0; --i) { MapRecord mr = _activeMaps[i]; + action = mr.keymap->getMappedAction(key); + if (action || mr.inherit == false) break; } + if (action) _keysDown[key] = action; } else { HashMap<KeyState, Action*>::iterator it = _keysDown.find(key); + if (it != _keysDown.end()) { action = it->_value; _keysDown.erase(key); } } + if (!action) return false; + executeAction(action, keyDown); + return true; } Action *Keymapper::getAction(const KeyState& key) { Action *action = 0; + return action; } void Keymapper::executeAction(const Action *action, bool keyDown) { List<Event>::const_iterator it; + for (it = action->events.begin(); it != action->events.end(); ++it) { Event evt = *it; + switch (evt.type) { case EVENT_KEYDOWN: if (!keyDown) evt.type = EVENT_KEYUP; @@ -215,6 +243,7 @@ void Keymapper::executeAction(const Action *action, bool keyDown) { // don't deliver other events on key up if (!keyDown) continue; } + evt.mouse = _eventMan->getMousePos(); _eventMan->pushEvent(evt); } |