aboutsummaryrefslogtreecommitdiff
path: root/backends/common/keymapper.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'backends/common/keymapper.cpp')
-rw-r--r--backends/common/keymapper.cpp40
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