f647370a8f37649df580421e63c02a16772e1156
[supertux.git] / src / supertux / menu / keyboard_menu.cpp
1 //  SuperTux
2 //  Copyright (C) 2006 Matthias Braun <matze@braunis.de>,
3 //                2007 Ingo Ruhnke <grumbel@gmail.com>
4 //
5 //  This program is free software: you can redistribute it and/or modify
6 //  it under the terms of the GNU General Public License as published by
7 //  the Free Software Foundation, either version 3 of the License, or
8 //  (at your option) any later version.
9 //
10 //  This program is distributed in the hope that it will be useful,
11 //  but WITHOUT ANY WARRANTY; without even the implied warranty of
12 //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 //  GNU General Public License for more details.
14 //
15 //  You should have received a copy of the GNU General Public License
16 //  along with this program.  If not, see <http://www.gnu.org/licenses/>.
17
18 #include "supertux/menu/keyboard_menu.hpp"
19
20 #include "control/keyboard_manager.hpp"
21 #include "supertux/gameconfig.hpp"
22 #include "supertux/globals.hpp"
23 #include "util/gettext.hpp"
24
25 KeyboardMenu::KeyboardMenu(InputManager* _controller) :
26   controller(_controller)
27 {
28   add_label(_("Setup Keyboard"));
29   add_hl();
30   add_controlfield(Controller::UP,         _("Up"));
31   add_controlfield(Controller::DOWN,       _("Down"));
32   add_controlfield(Controller::LEFT,       _("Left"));
33   add_controlfield(Controller::RIGHT,      _("Right"));
34   add_controlfield(Controller::JUMP,       _("Jump"));
35   add_controlfield(Controller::ACTION,     _("Action"));
36   add_controlfield(Controller::PEEK_LEFT,  _("Peek Left"));
37   add_controlfield(Controller::PEEK_RIGHT, _("Peek Right"));
38   add_controlfield(Controller::PEEK_UP,    _("Peek Up"));
39   add_controlfield(Controller::PEEK_DOWN,  _("Peek Down"));
40   if (g_config->console_enabled) {
41     add_controlfield(Controller::CONSOLE, _("Console"));
42   }
43   add_toggle(Controller::CONTROLCOUNT, _("Jump with Up"), controller->keyboard_manager->jump_with_up_kbd);
44   add_hl();
45   add_back(_("Back"));
46   refresh();
47 }
48
49 KeyboardMenu::~KeyboardMenu()
50 {}
51
52 std::string
53 KeyboardMenu::get_key_name(SDL_Keycode key)
54 {
55   switch(key) {
56     case SDLK_UNKNOWN:
57       return _("None");
58     case SDLK_UP:
59       return _("Up cursor");
60     case SDLK_DOWN:
61       return _("Down cursor");
62     case SDLK_LEFT:
63       return _("Left cursor");
64     case SDLK_RIGHT:
65       return _("Right cursor");
66     case SDLK_RETURN:
67       return _("Return");
68     case SDLK_SPACE:
69       return _("Space");
70     case SDLK_RSHIFT:
71       return _("Right Shift");
72     case SDLK_LSHIFT:
73       return _("Left Shift");
74     case SDLK_RCTRL:
75       return _("Right Control");
76     case SDLK_LCTRL:
77       return _("Left Control");
78     case SDLK_RALT:
79       return _("Right Alt");
80     case SDLK_LALT:
81       return _("Left Alt");
82     default:
83       return SDL_GetKeyName((SDL_Keycode) key);
84   }
85 }
86
87 void
88 KeyboardMenu::menu_action(MenuItem* item)
89 {
90   if(item->id >= 0 && item->id < Controller::CONTROLCOUNT){
91     item->change_input(_("Press Key"));
92     controller->keyboard_manager->wait_for_key = item->id;
93   } else if( item->id == Controller::CONTROLCOUNT) {
94     controller->keyboard_manager->jump_with_up_kbd = item->toggled;
95   } 
96 }
97
98 void
99 KeyboardMenu::refresh()
100 {
101   auto& kbd_mgr = controller->keyboard_manager;
102
103   get_item_by_id((int) Controller::UP).change_input(get_key_name(
104                                                       kbd_mgr->reversemap_key(Controller::UP)));
105   get_item_by_id((int) Controller::DOWN).change_input(get_key_name(
106                                                         kbd_mgr->reversemap_key(Controller::DOWN)));
107   get_item_by_id((int) Controller::LEFT).change_input(get_key_name(
108                                                         kbd_mgr->reversemap_key(Controller::LEFT)));
109   get_item_by_id((int) Controller::RIGHT).change_input(get_key_name(
110                                                          kbd_mgr->reversemap_key(Controller::RIGHT)));
111   get_item_by_id((int) Controller::JUMP).change_input(get_key_name(
112                                                         kbd_mgr->reversemap_key(Controller::JUMP)));
113   get_item_by_id((int) Controller::ACTION).change_input(get_key_name(
114                                                           kbd_mgr->reversemap_key(Controller::ACTION)));
115   get_item_by_id((int) Controller::PEEK_LEFT).change_input(get_key_name(
116                                                              kbd_mgr->reversemap_key(Controller::PEEK_LEFT)));
117   get_item_by_id((int) Controller::PEEK_RIGHT).change_input(get_key_name(
118                                                               kbd_mgr->reversemap_key(Controller::PEEK_RIGHT)));
119   get_item_by_id((int) Controller::PEEK_UP).change_input(get_key_name(
120                                                            kbd_mgr->reversemap_key(Controller::PEEK_UP)));
121   get_item_by_id((int) Controller::PEEK_DOWN).change_input(get_key_name(
122                                                              kbd_mgr->reversemap_key(Controller::PEEK_DOWN)));
123   if (g_config->console_enabled) {
124     get_item_by_id((int) Controller::CONSOLE).change_input(get_key_name(
125                                                              kbd_mgr->reversemap_key(Controller::CONSOLE)));
126   }
127   get_item_by_id(Controller::CONTROLCOUNT).toggled = kbd_mgr->jump_with_up_kbd;
128 }
129
130 /* EOF */