diff options
author | Andrei Karas <akaras@inbox.ru> | 2011-01-02 01:48:38 +0200 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2011-01-02 02:41:24 +0200 |
commit | 3eeae12c498d1a4dbe969462d2ba841f77ee3ccb (patch) | |
tree | ff8eab35e732bc0749fc11677c8873a7b3a58704 /src/keyboardconfig.cpp | |
download | plus-3eeae12c498d1a4dbe969462d2ba841f77ee3ccb.tar.gz plus-3eeae12c498d1a4dbe969462d2ba841f77ee3ccb.tar.bz2 plus-3eeae12c498d1a4dbe969462d2ba841f77ee3ccb.tar.xz plus-3eeae12c498d1a4dbe969462d2ba841f77ee3ccb.zip |
Initial commit.
This code based on mana client http://www.gitorious.org/mana/mana
and my private repository.
Diffstat (limited to 'src/keyboardconfig.cpp')
-rw-r--r-- | src/keyboardconfig.cpp | 449 |
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 |