Removed made public variables private in JoystickManager and KeyboardManager
[supertux.git] / src / control / keyboard_manager.cpp
index 32c947a..ca4e461 100644 (file)
@@ -19,6 +19,7 @@
 
 #include "control/controller.hpp"
 #include "control/joystick_manager.hpp"
+#include "control/keyboard_config.hpp"
 #include "gui/menu_manager.hpp"
 #include "lisp/list_iterator.hpp"
 #include "supertux/console.hpp"
 #include "supertux/menu/menu_storage.hpp"
 #include "util/writer.hpp"
 
-KeyboardManager::KeyboardManager(InputManager* parent) :
+KeyboardManager::KeyboardManager(InputManager* parent,
+                                 KeyboardConfig& keyboard_config) :
   m_parent(parent),
-  keymap(),
-  jump_with_up_kbd(false),
+  m_keyboard_config(keyboard_config),
   wait_for_key(-1)
 {
-  // initialize default keyboard map
-  keymap[SDLK_LEFT]     = Controller::LEFT;
-  keymap[SDLK_RIGHT]    = Controller::RIGHT;
-  keymap[SDLK_UP]       = Controller::UP;
-  keymap[SDLK_DOWN]     = Controller::DOWN;
-  keymap[SDLK_SPACE]    = Controller::JUMP;
-  keymap[SDLK_LCTRL]    = Controller::ACTION;
-  keymap[SDLK_LALT]     = Controller::ACTION;
-  keymap[SDLK_ESCAPE]   = Controller::PAUSE_MENU;
-  keymap[SDLK_p]        = Controller::PAUSE_MENU;
-  keymap[SDLK_PAUSE]    = Controller::PAUSE_MENU;
-  keymap[SDLK_RETURN]   = Controller::MENU_SELECT;
-  keymap[SDLK_KP_ENTER] = Controller::MENU_SELECT;
-  keymap[SDLK_CARET]    = Controller::CONSOLE;
-  keymap[SDLK_DELETE]   = Controller::PEEK_LEFT;
-  keymap[SDLK_PAGEDOWN] = Controller::PEEK_RIGHT;
-  keymap[SDLK_HOME]     = Controller::PEEK_UP;
-  keymap[SDLK_END]      = Controller::PEEK_DOWN;
-  keymap[SDLK_TAB]      = Controller::CHEAT_MENU;
 }
 
 KeyboardManager::~KeyboardManager()
@@ -61,10 +43,10 @@ KeyboardManager::~KeyboardManager()
 void
 KeyboardManager::process_key_event(const SDL_KeyboardEvent& event)
 {
-  KeyMap::iterator key_mapping = keymap.find(event.keysym.sym);
+  KeyboardConfig::KeyMap::iterator key_mapping = m_keyboard_config.keymap.find(event.keysym.sym);
 
   // if console key was pressed: toggle console
-  if (key_mapping != keymap.end() &&
+  if (key_mapping != m_keyboard_config.keymap.end() &&
       key_mapping->second == Controller::CONSOLE)
   {
     if (event.type == SDL_KEYDOWN)
@@ -82,7 +64,7 @@ KeyboardManager::process_key_event(const SDL_KeyboardEvent& event)
     // if menu mode: send key there
     process_menu_key_event(event);
   }
-  else if (key_mapping == keymap.end())
+  else if (key_mapping == m_keyboard_config.keymap.end())
   {
     // default action: update controls
     //log_debug << "Key " << event.key.SDL_Keycode.sym << " is unbound" << std::endl;
@@ -92,7 +74,7 @@ KeyboardManager::process_key_event(const SDL_KeyboardEvent& event)
     auto control = key_mapping->second;
     bool value = (event.type == SDL_KEYDOWN);
     m_parent->get_controller()->set_control(control, value);
-    if (jump_with_up_kbd && control == Controller::UP)
+    if (m_keyboard_config.jump_with_up_kbd && control == Controller::UP)
     {
       m_parent->get_controller()->set_control(Controller::JUMP, value);
     }
@@ -166,7 +148,7 @@ KeyboardManager::process_menu_key_event(const SDL_KeyboardEvent& event)
     if (event.keysym.sym != SDLK_ESCAPE &&
         event.keysym.sym != SDLK_PAUSE)
     {
-      bind_key(event.keysym.sym, static_cast<Controller::Control>(wait_for_key));
+      m_keyboard_config.bind_key(event.keysym.sym, static_cast<Controller::Control>(wait_for_key));
     }
     m_parent->reset();
     MenuManager::instance().refresh();
@@ -208,8 +190,10 @@ KeyboardManager::process_menu_key_event(const SDL_KeyboardEvent& event)
       control = Controller::MENU_SELECT;
       break;
     case SDLK_ESCAPE:
+      control = Controller::ESCAPE;
+      break;
     case SDLK_PAUSE:
-      control = Controller::PAUSE_MENU;
+      control = Controller::START;
       break;
     default:
       return;
@@ -220,90 +204,9 @@ KeyboardManager::process_menu_key_event(const SDL_KeyboardEvent& event)
 }
 
 void
-KeyboardManager::bind_key(SDL_Keycode key, Controller::Control control)
-{
-  // remove all previous mappings for that control and for that key
-  for(KeyMap::iterator i = keymap.begin();
-      i != keymap.end(); /* no ++i */) {
-    if (i->second == control) {
-      KeyMap::iterator e = i;
-      ++i;
-      keymap.erase(e);
-    } else {
-      ++i;
-    }
-  }
-
-  KeyMap::iterator i = keymap.find(key);
-  if (i != keymap.end())
-    keymap.erase(i);
-
-  // add new mapping
-  keymap[key] = control;
-}
-
-SDL_Keycode
-KeyboardManager::reversemap_key(Controller::Control c)
+KeyboardManager::bind_next_event_to(Controller::Control id)
 {
-  for(KeyMap::iterator i = keymap.begin(); i != keymap.end(); ++i)
-  {
-    if (i->second == c)
-    {
-      return i->first;
-    }
-  }
-
-  return SDLK_UNKNOWN;
-}
-
-void
-KeyboardManager::read(const lisp::Lisp* keymap_lisp)
-{
-  // keycode values changed between SDL1 and SDL2, so we skip old SDL1
-  // based values and use the defaults instead on the first read of
-  // the config file
-  bool config_is_sdl2 = false;
-  keymap_lisp->get("sdl2", config_is_sdl2);
-  if (config_is_sdl2)
-  {
-    keymap.clear();
-    keymap_lisp->get("jump-with-up", jump_with_up_kbd);
-    lisp::ListIterator iter(keymap_lisp);
-    while(iter.next()) {
-      if (iter.item() == "map") {
-        int key = -1;
-        std::string control;
-        const lisp::Lisp* map = iter.lisp();
-        map->get("key", key);
-
-        map->get("control", control);
-
-        int i = 0;
-        for(i = 0; Controller::controlNames[i] != 0; ++i) {
-          if (control == Controller::controlNames[i])
-            break;
-        }
-        if (Controller::controlNames[i] == 0) {
-          log_info << "Invalid control '" << control << "' in keymap" << std::endl;
-          continue;
-        }
-        keymap[static_cast<SDL_Keycode>(key)] = static_cast<Controller::Control>(i);
-      }
-    }
-  }
-}
-
-void
-KeyboardManager::write(Writer& writer)
-{
-  writer.write("sdl2", true);
-  writer.write("jump-with-up", jump_with_up_kbd);
-  for(KeyMap::iterator i = keymap.begin(); i != keymap.end(); ++i) {
-    writer.start_list("map");
-    writer.write("key", (int) i->first);
-    writer.write("control", Controller::controlNames[i->second]);
-    writer.end_list("map");
-  }
+  wait_for_key = id;
 }
 
 /* EOF */