e88374c52d5cec7ded63cfd31a64502e0821d584
[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& input_manager) :
26   m_input_manager(input_manager)
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->developer_mode || g_config->console_enabled) {
41     add_controlfield(Controller::CONSOLE, _("Console"));
42   }
43   if (g_config->developer_mode) {
44     add_controlfield(Controller::CHEAT_MENU, _("Cheat Menu"));
45   }
46   add_toggle(Controller::CONTROLCOUNT, _("Jump with Up"), g_config->keyboard_config.jump_with_up_kbd);
47   add_hl();
48   add_back(_("Back"));
49   refresh();
50 }
51
52 KeyboardMenu::~KeyboardMenu()
53 {}
54
55 std::string
56 KeyboardMenu::get_key_name(SDL_Keycode key)
57 {
58   switch(key) {
59     case SDLK_UNKNOWN:
60       return _("None");
61     case SDLK_UP:
62       return _("Up cursor");
63     case SDLK_DOWN:
64       return _("Down cursor");
65     case SDLK_LEFT:
66       return _("Left cursor");
67     case SDLK_RIGHT:
68       return _("Right cursor");
69     case SDLK_RETURN:
70       return _("Return");
71     case SDLK_SPACE:
72       return _("Space");
73     case SDLK_RSHIFT:
74       return _("Right Shift");
75     case SDLK_LSHIFT:
76       return _("Left Shift");
77     case SDLK_RCTRL:
78       return _("Right Control");
79     case SDLK_LCTRL:
80       return _("Left Control");
81     case SDLK_RALT:
82       return _("Right Alt");
83     case SDLK_LALT:
84       return _("Left Alt");
85     case SDLK_RGUI:
86       return _("Right Command");
87     case SDLK_LGUI:
88       return _("Left Command");
89     default:
90       return SDL_GetKeyName(static_cast<SDL_Keycode>(key));
91   }
92 }
93
94 void
95 KeyboardMenu::menu_action(MenuItem* item)
96 {
97   if(item->id >= 0 && item->id < Controller::CONTROLCOUNT){
98     item->change_input(_("Press Key"));
99     m_input_manager.keyboard_manager->wait_for_key = item->id;
100   } else if( item->id == Controller::CONTROLCOUNT) {
101     g_config->keyboard_config.jump_with_up_kbd = item->toggled;
102   }
103 }
104
105 void
106 KeyboardMenu::refresh()
107 {
108   KeyboardConfig& kbd_cfg = g_config->keyboard_config;
109
110   get_item_by_id((int) Controller::UP)
111     .change_input(get_key_name(kbd_cfg.reversemap_key(Controller::UP)));
112   get_item_by_id((int) Controller::DOWN)
113     .change_input(get_key_name(kbd_cfg.reversemap_key(Controller::DOWN)));
114   get_item_by_id((int) Controller::LEFT)
115     .change_input(get_key_name(kbd_cfg.reversemap_key(Controller::LEFT)));
116   get_item_by_id((int) Controller::RIGHT)
117     .change_input(get_key_name(kbd_cfg.reversemap_key(Controller::RIGHT)));
118   get_item_by_id((int) Controller::JUMP)
119     .change_input(get_key_name(kbd_cfg.reversemap_key(Controller::JUMP)));
120   get_item_by_id((int) Controller::ACTION)
121     .change_input(get_key_name(kbd_cfg.reversemap_key(Controller::ACTION)));
122   get_item_by_id((int) Controller::PEEK_LEFT)
123     .change_input(get_key_name(kbd_cfg.reversemap_key(Controller::PEEK_LEFT)));
124   get_item_by_id((int) Controller::PEEK_RIGHT)
125     .change_input(get_key_name(kbd_cfg.reversemap_key(Controller::PEEK_RIGHT)));
126   get_item_by_id((int) Controller::PEEK_UP)
127     .change_input(get_key_name(kbd_cfg.reversemap_key(Controller::PEEK_UP)));
128   get_item_by_id((int) Controller::PEEK_DOWN)
129     .change_input(get_key_name(kbd_cfg.reversemap_key(Controller::PEEK_DOWN)));
130
131   if (g_config->developer_mode) {
132     get_item_by_id((int) Controller::CHEAT_MENU)
133       .change_input(get_key_name(kbd_cfg.reversemap_key(Controller::CHEAT_MENU)));
134   }
135
136   if (g_config->developer_mode || g_config->console_enabled) {
137     get_item_by_id((int) Controller::CONSOLE).change_input(get_key_name(
138                                                              kbd_cfg.reversemap_key(Controller::CONSOLE)));
139   }
140   get_item_by_id(Controller::CONTROLCOUNT).toggled = kbd_cfg.jump_with_up_kbd;
141 }
142
143 /* EOF */