summaryrefslogtreecommitdiff
path: root/src/keyboardconfig.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/keyboardconfig.cpp')
-rw-r--r--src/keyboardconfig.cpp449
1 files changed, 449 insertions, 0 deletions
diff --git a/src/keyboardconfig.cpp b/src/keyboardconfig.cpp
new file mode 100644
index 000000000..fd3c3aa09
--- /dev/null
+++ b/src/keyboardconfig.cpp
@@ -0,0 +1,449 @@
+/*
+ * Custom keyboard shortcuts configuration
+ * Copyright (C) 2007 Joshua Langley <joshlangley@optusnet.com.au>
+ *
+ * This file is part of The Mana Client.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "configuration.h"
+#include "keyboardconfig.h"
+#include "log.h"
+
+#include "gui/sdlinput.h"
+#include "gui/setup_keyboard.h"
+
+#include "utils/gettext.h"
+#include "utils/stringutils.h"
+
+struct KeyData
+{
+ const char *configField;
+ int defaultValue;
+ std::string caption;
+ int grp;
+};
+
+// keyData must be in same order as enum keyAction.
+static KeyData const keyData[KeyboardConfig::KEY_TOTAL] = {
+ {"keyMoveUp", SDLK_UP, _("Move Up"), KeyboardConfig::GRP_DEFAULT},
+ {"keyMoveDown", SDLK_DOWN, _("Move Down"), KeyboardConfig::GRP_DEFAULT},
+ {"keyMoveLeft", SDLK_LEFT, _("Move Left"), KeyboardConfig::GRP_DEFAULT},
+ {"keyMoveRight", SDLK_RIGHT, _("Move Right"), KeyboardConfig::GRP_DEFAULT},
+ {"keyAttack", SDLK_LCTRL, _("Attack"), KeyboardConfig::GRP_DEFAULT},
+ {"keyTargetAttack", SDLK_x, _("Target & Attack"),
+ KeyboardConfig::GRP_DEFAULT},
+ {"keyMoveToTarget", SDLK_v, _("Move to Target"),
+ KeyboardConfig::GRP_DEFAULT},
+ {"keyChangeMoveToTarget", SDLK_PERIOD, _("Change Move to Target type"),
+ KeyboardConfig::GRP_DEFAULT},
+ {"keyMoveToHome", SDLK_d, _("Move to Home location"),
+ KeyboardConfig::GRP_DEFAULT},
+ {"keySetHome", SDLK_KP5, _("Set home location"),
+ KeyboardConfig::GRP_DEFAULT},
+ {"keyMoveToPoint", SDLK_RSHIFT, _("Move to navigation point"),
+ KeyboardConfig::GRP_DEFAULT},
+ {"keySmilie", SDLK_LALT, _("Smilie"), KeyboardConfig::GRP_DEFAULT},
+ {"keyTalk", SDLK_t, _("Talk"), KeyboardConfig::GRP_DEFAULT},
+ {"keyTarget", SDLK_LSHIFT, _("Stop Attack"), KeyboardConfig::GRP_DEFAULT},
+ {"keyTargetClosest", SDLK_a, _("Target Closest"),
+ KeyboardConfig::GRP_DEFAULT},
+ {"keyTargetNPC", SDLK_n, _("Target NPC"), KeyboardConfig::GRP_DEFAULT},
+ {"keyTargetPlayer", SDLK_q, _("Target Player"),
+ KeyboardConfig::GRP_DEFAULT},
+ {"keyPickup", SDLK_z, _("Pickup"), KeyboardConfig::GRP_DEFAULT},
+ {"keyChangePickupType", SDLK_o, _("Change Pickup Type"),
+ KeyboardConfig::GRP_DEFAULT},
+ {"keyHideWindows", SDLK_h, _("Hide Windows"), KeyboardConfig::GRP_DEFAULT},
+ {"keyBeingSit", SDLK_s, _("Sit"), KeyboardConfig::GRP_DEFAULT},
+ {"keyScreenshot", SDLK_p, _("Screenshot"), KeyboardConfig::GRP_DEFAULT},
+ {"keyTrade", SDLK_r, _("Enable/Disable Trading"),
+ KeyboardConfig::GRP_DEFAULT},
+ {"keyPathfind", SDLK_f, _("Change Map View Mode"),
+ KeyboardConfig::GRP_DEFAULT},
+ {"keyShortcutsKey", SDLK_MENU, _("Item Shortcuts Key"),
+ KeyboardConfig::GRP_DEFAULT},
+ {"keyShortcut1", SDLK_1, strprintf(_("Item Shortcut %d"), 1),
+ KeyboardConfig::GRP_DEFAULT},
+ {"keyShortcut2", SDLK_2, strprintf(_("Item Shortcut %d"), 2),
+ KeyboardConfig::GRP_DEFAULT},
+ {"keyShortcut3", SDLK_3, strprintf(_("Item Shortcut %d"), 3),
+ KeyboardConfig::GRP_DEFAULT},
+ {"keyShortcut4", SDLK_4, strprintf(_("Item Shortcut %d"), 4),
+ KeyboardConfig::GRP_DEFAULT},
+ {"keyShortcut5", SDLK_5, strprintf(_("Item Shortcut %d"), 5),
+ KeyboardConfig::GRP_DEFAULT},
+ {"keyShortcut6", SDLK_6, strprintf(_("Item Shortcut %d"), 6),
+ KeyboardConfig::GRP_DEFAULT},
+ {"keyShortcut7", SDLK_7, strprintf(_("Item Shortcut %d"), 7),
+ KeyboardConfig::GRP_DEFAULT},
+ {"keyShortcut8", SDLK_8, strprintf(_("Item Shortcut %d"), 8),
+ KeyboardConfig::GRP_DEFAULT},
+ {"keyShortcut9", SDLK_9, strprintf(_("Item Shortcut %d"), 9),
+ KeyboardConfig::GRP_DEFAULT},
+ {"keyShortcut10", SDLK_0, strprintf(_("Item Shortcut %d"), 10),
+ KeyboardConfig::GRP_DEFAULT},
+ {"keyShortcut11", SDLK_MINUS, strprintf(_("Item Shortcut %d"), 11),
+ KeyboardConfig::GRP_DEFAULT},
+ {"keyShortcut12", SDLK_EQUALS, strprintf(_("Item Shortcut %d"), 12),
+ KeyboardConfig::GRP_DEFAULT},
+ {"keyShortcut13", SDLK_BACKSPACE, strprintf(_("Item Shortcut %d"), 13),
+ KeyboardConfig::GRP_DEFAULT},
+ {"keyShortcut14", SDLK_INSERT, strprintf(_("Item Shortcut %d"), 14),
+ KeyboardConfig::GRP_DEFAULT},
+ {"keyShortcut15", SDLK_HOME, strprintf(_("Item Shortcut %d"), 15),
+ KeyboardConfig::GRP_DEFAULT},
+ {"keyShortcut16", KeyboardConfig::KEY_NO_VALUE,
+ strprintf(_("Item Shortcut %d"), 16), KeyboardConfig::GRP_DEFAULT},
+ {"keyShortcut17", KeyboardConfig::KEY_NO_VALUE,
+ strprintf(_("Item Shortcut %d"), 17), KeyboardConfig::GRP_DEFAULT},
+ {"keyShortcut18", KeyboardConfig::KEY_NO_VALUE,
+ strprintf(_("Item Shortcut %d"), 18), KeyboardConfig::GRP_DEFAULT},
+ {"keyShortcut19", KeyboardConfig::KEY_NO_VALUE,
+ strprintf(_("Item Shortcut %d"), 19), KeyboardConfig::GRP_DEFAULT},
+ {"keyShortcut20", KeyboardConfig::KEY_NO_VALUE,
+ strprintf(_("Item Shortcut %d"), 20), KeyboardConfig::GRP_DEFAULT},
+ {"keyWindowHelp", SDLK_F1, _("Help Window"), KeyboardConfig::GRP_DEFAULT},
+ {"keyWindowStatus", SDLK_F2, _("Status Window"),
+ KeyboardConfig::GRP_DEFAULT},
+ {"keyWindowInventory", SDLK_F3, _("Inventory Window"),
+ KeyboardConfig::GRP_DEFAULT},
+ {"keyWindowEquipment", SDLK_F4, _("Equipment Window"),
+ KeyboardConfig::GRP_DEFAULT},
+ {"keyWindowSkill", SDLK_F5, _("Skill Window"),
+ KeyboardConfig::GRP_DEFAULT},
+ {"keyWindowMinimap", SDLK_F6, _("Minimap Window"),
+ KeyboardConfig::GRP_DEFAULT},
+ {"keyWindowChat", SDLK_F7, _("Chat Window"), KeyboardConfig::GRP_DEFAULT},
+ {"keyWindowShortcut", SDLK_F8, _("Item Shortcut Window"),
+ KeyboardConfig::GRP_DEFAULT},
+ {"keyWindowSetup", SDLK_F9, _("Setup Window"),
+ KeyboardConfig::GRP_DEFAULT},
+ {"keyWindowDebug", SDLK_F10, _("Debug Window"),
+ KeyboardConfig::GRP_DEFAULT},
+ {"keyWindowSocial", SDLK_F11, _("Social Window"),
+ KeyboardConfig::GRP_DEFAULT},
+ {"keyWindowEmoteBar", SDLK_F12, _("Emote Shortcut Window"),
+ KeyboardConfig::GRP_DEFAULT},
+ {"keyWindowOutfit", SDLK_BACKQUOTE, _("Outfits Window"),
+ KeyboardConfig::GRP_DEFAULT},
+ {"keyWindowShop", -1, _("Shop Window"), KeyboardConfig::GRP_DEFAULT},
+ {"keyWindowDrop", SDLK_w, _("Quick drop Window"),
+ KeyboardConfig::GRP_DEFAULT},
+ {"keyWindowKills", SDLK_e, _("Kills Stats Window"),
+ KeyboardConfig::GRP_DEFAULT},
+ {"keyWindowSpells", SDLK_j, _("Commands Window"),
+ KeyboardConfig::GRP_DEFAULT},
+ {"keyWindowBotChecker", SDLK_LEFTBRACKET, _("Bot Checker Window"),
+ KeyboardConfig::GRP_DEFAULT},
+ {"keyWindowOnline", KeyboardConfig::KEY_NO_VALUE,
+ _("Who Is Online Window"), KeyboardConfig::GRP_DEFAULT},
+ {"keySocialPrevTab", KeyboardConfig::KEY_NO_VALUE,
+ _("Previous Social Tab"), KeyboardConfig::GRP_DEFAULT},
+ {"keySocialNextTab", KeyboardConfig::KEY_NO_VALUE, _("Next Social Tab"),
+ KeyboardConfig::GRP_DEFAULT},
+ {"keyEmoteShortcut1", SDLK_1, strprintf(_("Emote Shortcut %d"), 1),
+ KeyboardConfig::GRP_EMOTION},
+ {"keyEmoteShortcut2", SDLK_2, strprintf(_("Emote Shortcut %d"), 2),
+ KeyboardConfig::GRP_EMOTION},
+ {"keyEmoteShortcut3", SDLK_3, strprintf(_("Emote Shortcut %d"), 3),
+ KeyboardConfig::GRP_EMOTION},
+ {"keyEmoteShortcut4", SDLK_4, strprintf(_("Emote Shortcut %d"), 4),
+ KeyboardConfig::GRP_EMOTION},
+ {"keyEmoteShortcut5", SDLK_5, strprintf(_("Emote Shortcut %d"), 5),
+ KeyboardConfig::GRP_EMOTION},
+ {"keyEmoteShortcut6", SDLK_6, strprintf(_("Emote Shortcut %d"), 6),
+ KeyboardConfig::GRP_EMOTION},
+ {"keyEmoteShortcut7", SDLK_7, strprintf(_("Emote Shortcut %d"), 7),
+ KeyboardConfig::GRP_EMOTION},
+ {"keyEmoteShortcut8", SDLK_8, strprintf(_("Emote Shortcut %d"), 8),
+ KeyboardConfig::GRP_EMOTION},
+ {"keyEmoteShortcut9", SDLK_9, strprintf(_("Emote Shortcut %d"), 9),
+ KeyboardConfig::GRP_EMOTION},
+ {"keyEmoteShortcut10", SDLK_0, strprintf(_("Emote Shortcut %d"), 10),
+ KeyboardConfig::GRP_EMOTION},
+ {"keyEmoteShortcut11", SDLK_MINUS, strprintf(_("Emote Shortcut %d"), 11),
+ KeyboardConfig::GRP_EMOTION},
+ {"keyEmoteShortcut12", SDLK_EQUALS, strprintf(_("Emote Shortcut %d"), 12),
+ KeyboardConfig::GRP_EMOTION},
+ {"keyEmoteShortcut13", SDLK_BACKSPACE,
+ strprintf(_("Emote Shortcut %d"), 13),
+ KeyboardConfig::GRP_EMOTION},
+ {"keyEmoteShortcut14", SDLK_INSERT, strprintf(_("Emote Shortcut %d"), 14),
+ KeyboardConfig::GRP_EMOTION},
+ {"keyEmoteShortcut15", SDLK_HOME, strprintf(_("Emote Shortcut %d"), 15),
+ KeyboardConfig::GRP_EMOTION},
+ {"keyEmoteShortcut16", SDLK_q, strprintf(_("Emote Shortcut %d"), 16),
+ KeyboardConfig::GRP_EMOTION},
+ {"keyEmoteShortcut17", SDLK_w, strprintf(_("Emote Shortcut %d"), 17),
+ KeyboardConfig::GRP_EMOTION},
+ {"keyEmoteShortcut18", SDLK_e, strprintf(_("Emote Shortcut %d"), 18),
+ KeyboardConfig::GRP_EMOTION},
+ {"keyEmoteShortcut19", SDLK_r, strprintf(_("Emote Shortcut %d"), 19),
+ KeyboardConfig::GRP_EMOTION},
+ {"keyEmoteShortcut20", SDLK_t, strprintf(_("Emote Shortcut %d"), 20),
+ KeyboardConfig::GRP_EMOTION},
+ {"keyEmoteShortcut21", SDLK_y, strprintf(_("Emote Shortcut %d"), 21),
+ KeyboardConfig::GRP_EMOTION},
+ {"keyEmoteShortcut22", SDLK_u, strprintf(_("Emote Shortcut %d"), 22),
+ KeyboardConfig::GRP_EMOTION},
+ {"keyEmoteShortcut23", SDLK_i, strprintf(_("Emote Shortcut %d"), 23),
+ KeyboardConfig::GRP_EMOTION},
+ {"keyEmoteShortcut24", SDLK_o, strprintf(_("Emote Shortcut %d"), 24),
+ KeyboardConfig::GRP_EMOTION},
+ {"keyEmoteShortcut25", SDLK_p, strprintf(_("Emote Shortcut %d"), 25),
+ KeyboardConfig::GRP_EMOTION},
+ {"keyEmoteShortcut26", SDLK_LEFTBRACKET,
+ strprintf(_("Emote Shortcut %d"), 26),
+ KeyboardConfig::GRP_EMOTION},
+ {"keyEmoteShortcut27", SDLK_RIGHTBRACKET,
+ strprintf(_("Emote Shortcut %d"), 27),
+ KeyboardConfig::GRP_EMOTION},
+ {"keyEmoteShortcut28", SDLK_BACKSLASH,
+ strprintf(_("Emote Shortcut %d"), 28),
+ KeyboardConfig::GRP_EMOTION},
+ {"keyEmoteShortcut29", SDLK_a, strprintf(_("Emote Shortcut %d"), 29),
+ KeyboardConfig::GRP_EMOTION},
+ {"keyEmoteShortcut30", SDLK_s, strprintf(_("Emote Shortcut %d"), 30),
+ KeyboardConfig::GRP_EMOTION},
+ {"keyEmoteShortcut31", SDLK_d, strprintf(_("Emote Shortcut %d"), 31),
+ KeyboardConfig::GRP_EMOTION},
+ {"keyEmoteShortcut32", SDLK_f, strprintf(_("Emote Shortcut %d"), 32),
+ KeyboardConfig::GRP_EMOTION},
+ {"keyEmoteShortcut33", SDLK_g, strprintf(_("Emote Shortcut %d"), 33),
+ KeyboardConfig::GRP_EMOTION},
+ {"keyEmoteShortcut34", SDLK_h, strprintf(_("Emote Shortcut %d"), 34),
+ KeyboardConfig::GRP_EMOTION},
+ {"keyEmoteShortcut35", SDLK_j, strprintf(_("Emote Shortcut %d"), 35),
+ KeyboardConfig::GRP_EMOTION},
+ {"keyEmoteShortcut36", SDLK_k, strprintf(_("Emote Shortcut %d"), 36),
+ KeyboardConfig::GRP_EMOTION},
+ {"keyEmoteShortcut37", SDLK_l, strprintf(_("Emote Shortcut %d"), 37),
+ KeyboardConfig::GRP_EMOTION},
+ {"keyEmoteShortcut38", SDLK_SEMICOLON,
+ strprintf(_("Emote Shortcut %d"), 38),
+ KeyboardConfig::GRP_EMOTION},
+ {"keyEmoteShortcut39", SDLK_QUOTE, strprintf(_("Emote Shortcut %d"), 39),
+ KeyboardConfig::GRP_EMOTION},
+ {"keyEmoteShortcut40", SDLK_z, strprintf(_("Emote Shortcut %d"), 40),
+ KeyboardConfig::GRP_EMOTION},
+ {"keyEmoteShortcut41", SDLK_x, strprintf(_("Emote Shortcut %d"), 41),
+ KeyboardConfig::GRP_EMOTION},
+ {"keyEmoteShortcut42", SDLK_c, strprintf(_("Emote Shortcut %d"), 42),
+ KeyboardConfig::GRP_EMOTION},
+ {"keyWearOutfit", SDLK_RCTRL, _("Wear Outfit"),
+ KeyboardConfig::GRP_DEFAULT},
+ {"keyCopyOutfit", SDLK_RALT, _("Copy Outfit"),
+ KeyboardConfig::GRP_DEFAULT},
+ {"keyCopyEquipedOutfit", SDLK_RIGHTBRACKET, _("Copy Equiped to Outfit"),
+ KeyboardConfig::GRP_DEFAULT},
+ {"keyChat", SDLK_RETURN, _("Toggle Chat"),
+ KeyboardConfig::GRP_DEFAULT | KeyboardConfig::GRP_CHAT},
+ {"keyChatScrollUp", SDLK_PAGEUP, _("Scroll Chat Up"),
+ KeyboardConfig::GRP_DEFAULT},
+ {"keyChatScrollDown", SDLK_PAGEDOWN, _("Scroll Chat Down"),
+ KeyboardConfig::GRP_DEFAULT},
+ {"keyChatPrevTab", SDLK_KP7, _("Previous Chat Tab"),
+ KeyboardConfig::GRP_DEFAULT},
+ {"keyChatNextTab", SDLK_KP9, _("Next Chat Tab"),
+ KeyboardConfig::GRP_DEFAULT},
+ {"keyChatPrevHistory", SDLK_KP7, _("Previous chat tab line"),
+ KeyboardConfig::GRP_CHAT},
+ {"keyChatNextHistory", SDLK_KP9, _("Next chat tab line"),
+ KeyboardConfig::GRP_CHAT},
+ {"keyAutoCompleteChat", SDLK_TAB, _("Chat Auto Complete"),
+ KeyboardConfig::GRP_CHAT},
+ {"keyDeActivateChat", SDLK_ESCAPE, _("Deactivate Chat Input"),
+ KeyboardConfig::GRP_CHAT},
+ {"keyOK", SDLK_SPACE, _("Select OK"), KeyboardConfig::GRP_DEFAULT},
+ {"keyQuit", SDLK_ESCAPE, _("Quit"), KeyboardConfig::GRP_DEFAULT},
+ {"keyIgnoreInput1", SDLK_LSUPER, _("Ignore input 1"),
+ KeyboardConfig::GRP_DEFAULT},
+ {"keyIgnoreInput2", SDLK_RSUPER, _("Ignore input 2"),
+ KeyboardConfig::GRP_DEFAULT},
+ {"keyDirectUp", SDLK_l, _("Direct Up"), KeyboardConfig::GRP_DEFAULT},
+ {"keyDirectDown", SDLK_SEMICOLON, _("Direct Down"),
+ KeyboardConfig::GRP_DEFAULT},
+ {"keyDirectLeft", SDLK_k, _("Direct Left"), KeyboardConfig::GRP_DEFAULT},
+ {"keyDirectRight", SDLK_QUOTE, _("Direct Right"),
+ KeyboardConfig::GRP_DEFAULT},
+ {"keyCrazyMoves", SDLK_SLASH, _("Crazy moves"),
+ KeyboardConfig::GRP_DEFAULT},
+ {"keyChangeCrazyMoveType", SDLK_BACKSLASH, _("Change Crazy Move mode"),
+ KeyboardConfig::GRP_DEFAULT},
+ {"keyQuickDrop", SDLK_y, _("Quick Drop N Items from 0 slot"),
+ KeyboardConfig::GRP_DEFAULT},
+ {"keyQuickDropN", SDLK_u, _("Quick Drop N Items"),
+ KeyboardConfig::GRP_DEFAULT},
+ {"keySwitchQuickDrop", SDLK_i, _("Switch Quick Drop Counter"),
+ KeyboardConfig::GRP_DEFAULT},
+ {"keyMagicInma1", SDLK_c, _("Quick heal target or self"),
+ KeyboardConfig::GRP_DEFAULT},
+ {"keyMagicItenplz", SDLK_m, _("Use #itenplz spell"),
+ KeyboardConfig::GRP_DEFAULT},
+ {"keyMagicAttack", SDLK_b, _("Use magic attack"),
+ KeyboardConfig::GRP_DEFAULT},
+ {"keySwitchMagicAttack", SDLK_COMMA, _("Switch magic attack"),
+ KeyboardConfig::GRP_DEFAULT},
+ {"keyInvertDirection", SDLK_KP0, _("Change move type"),
+ KeyboardConfig::GRP_DEFAULT},
+ {"keyChangeAttackWeaponType", SDLK_g, _("Change Attack Weapon Type"),
+ KeyboardConfig::GRP_DEFAULT},
+ {"keyChangeAttackType", SDLK_END, _("Change Attack Type"),
+ KeyboardConfig::GRP_DEFAULT},
+ {"keyChangeFollowMode", SDLK_KP1, _("Change Follow mode"),
+ KeyboardConfig::GRP_DEFAULT},
+ {"keyChangeImitationMode", SDLK_KP4, _("Change Imitation mode"),
+ KeyboardConfig::GRP_DEFAULT},
+ {"keyDisableGameModifiers", SDLK_KP8,
+ _("Disbale / Enable Game modifier keys"), KeyboardConfig::GRP_DEFAULT},
+ {"keyChangeAudio", SDLK_KP3, _("On / Off audio"),
+ KeyboardConfig::GRP_DEFAULT},
+ {"keyAway", SDLK_KP2, _("Enable / Disable away mode"),
+ KeyboardConfig::GRP_DEFAULT},
+ {"keyRightClick", SDLK_TAB, _("Emulate right click from keyboard"),
+ KeyboardConfig::GRP_DEFAULT},
+ {"keyCameraMode", SDLK_KP_PLUS, _("Toggle camera mode"),
+ KeyboardConfig::GRP_DEFAULT}
+};
+
+void KeyboardConfig::init()
+{
+ for (int i = 0; i < KEY_TOTAL; i++)
+ {
+ mKey[i].configField = keyData[i].configField;
+ mKey[i].defaultValue = keyData[i].defaultValue;
+ mKey[i].caption = keyData[i].caption;
+ mKey[i].value = KEY_NO_VALUE;
+ mKey[i].grp = keyData[i].grp;
+ }
+ mNewKeyIndex = KEY_NO_VALUE;
+ mEnabled = true;
+
+ retrieve();
+}
+
+void KeyboardConfig::retrieve()
+{
+ for (int i = 0; i < KEY_TOTAL; i++)
+ {
+ mKey[i].value = (int) config.getValue(
+ mKey[i].configField, mKey[i].defaultValue);
+ }
+}
+
+void KeyboardConfig::store()
+{
+ for (int i = 0; i < KEY_TOTAL; i++)
+ config.setValue(mKey[i].configField, mKey[i].value);
+}
+
+void KeyboardConfig::makeDefault()
+{
+ for (int i = 0; i < KEY_TOTAL; i++)
+ mKey[i].value = mKey[i].defaultValue;
+}
+
+bool KeyboardConfig::hasConflicts()
+{
+ int i, j;
+ /**
+ * No need to parse the square matrix: only check one triangle
+ * that's enough to detect conflicts
+ */
+ for (i = 0; i < KEY_TOTAL; i++)
+ {
+ if (mKey[i].value == KEY_NO_VALUE)
+ continue;
+
+ for (j = i, j++; j < KEY_TOTAL; j++)
+ {
+ // Allow for item shortcut and emote keys to overlap
+ // as well as emote and ignore keys, but no other keys
+ if (mKey[j].value != KEY_NO_VALUE &&
+ mKey[i].value == mKey[j].value &&
+ ((mKey[i].grp & mKey[j].grp) != 0)
+ )
+ {
+ mBindError = strprintf(_("Conflict \"%s\" and \"%s\" keys. "
+ "Resolve them, or gameplay may result"
+ " in strange behaviour."),
+ mKey[i].caption.c_str(),
+ mKey[j].caption.c_str());
+ return true;
+ }
+ }
+ }
+ mBindError = "";
+ return false;
+}
+
+void KeyboardConfig::callbackNewKey()
+{
+ mSetupKey->newKeyCallback(mNewKeyIndex);
+}
+
+int KeyboardConfig::getKeyIndex(int keyValue, int grp) const
+{
+ for (int i = 0; i < KEY_TOTAL; i++)
+ {
+ if (keyValue == mKey[i].value &&
+ (grp & mKey[i].grp) != 0)
+ {
+ return i;
+ }
+ }
+ return KEY_NO_VALUE;
+}
+
+
+int KeyboardConfig::getKeyEmoteOffset(int keyValue) const
+{
+ for (int i = KEY_EMOTE_1; i <= KEY_EMOTE_42; i++)
+ {
+ if (keyValue == mKey[i].value)
+ return 1 + i - KEY_EMOTE_1;
+ }
+ return 0;
+}
+
+bool KeyboardConfig::isKeyActive(int index) const
+{
+ if (!mActiveKeys)
+ return false;
+ return mActiveKeys[mKey[index].value];
+}
+
+void KeyboardConfig::refreshActiveKeys()
+{
+ mActiveKeys = SDL_GetKeyState(NULL);
+}
+
+std::string KeyboardConfig::getKeyValueString(int index) const
+{
+ std::string key = SDL_GetKeyName(
+ (SDLKey) getKeyValue(index));
+
+ return getKeyShortString(key);
+}
+
+std::string KeyboardConfig::getKeyShortString(const std::string &key) const
+{
+ if (key == "backspace")
+ return "bksp";
+ else if (key == "unknown key")
+ return "u key";
+ return key;
+} \ No newline at end of file