diff options
Diffstat (limited to 'backends/common/keymapper.cpp')
-rw-r--r-- | backends/common/keymapper.cpp | 40 |
1 files changed, 35 insertions, 5 deletions
diff --git a/backends/common/keymapper.cpp b/backends/common/keymapper.cpp index 4edd64aa44..a70a691907 100644 --- a/backends/common/keymapper.cpp +++ b/backends/common/keymapper.cpp @@ -1,6 +1,6 @@ #include "backends/common/keymapper.h" #include "backends/common/keymap-manager.h" - +#include "common/config-manager.h" namespace Common { Keymapper::Keymapper(EventManager *evtMgr) { @@ -16,16 +16,46 @@ void Keymapper::registerHardwareKeySet(HardwareKeySet *keys) { _hardwareKeys = keys; } -const HardwareKeySet *Keymapper::getHardwareKeySet() { +const HardwareKeySet *Keymapper::getHardwareKeySet() const { return _hardwareKeys; } -void Keymapper::addGlobalKeyMap(const String& name, Keymap& keymap) { +void Keymapper::addGlobalKeyMap(const String& name, Keymap *keymap) { _keymapMan->registerGlobalKeymap(name, keymap); } -void Keymapper::addGameKeyMap(const String& gameid, const String& name, Keymap& keymap) { - _keymapMan->registerKeymap(name, gameid, keymap); +void Keymapper::addGameKeyMap(const String& name, Keymap *keymap) { + if (_gameId.size() == 0) { + initGame(); + if (_gameId.size() == 0) + return; + } + _keymapMan->registerGameKeymap(name, keymap); +} + +void Keymapper::initGame() { + if (ConfMan.getActiveDomain() == 0) + error("Call to Keymapper::initGame when no game loaded\n"); + + if (_gameId.size() > 0) + deInitGame(); + _gameId = ConfMan.getActiveDomainName(); +} + +void Keymapper::deInitGame() { + _keymapMan->unregisterAllGameKeymaps(); + _gameId.clear(); +} + + +bool Keymapper::switchKeymap(const String& name) { + Keymap *new_map = _keymapMan->getKeymap(name); + if (!new_map) { + warning("Keymap '%s' could not be found\n", name.c_str()); + return false; + } + _currentMap = new_map; + return true; } } // end of namespace Common |