diff options
Diffstat (limited to 'src/keyboardconfig.cpp')
-rw-r--r-- | src/keyboardconfig.cpp | 129 |
1 files changed, 91 insertions, 38 deletions
diff --git a/src/keyboardconfig.cpp b/src/keyboardconfig.cpp index 9ae7ed68..5a0c0678 100644 --- a/src/keyboardconfig.cpp +++ b/src/keyboardconfig.cpp @@ -1,6 +1,6 @@ /* - * The Mana World - * Copyright (C) 2007 The Mana World Development Team + * Custom keyboard shortcuts configuration + * Copyright (C) 2007 Joshua Langley <joshlangley@optusnet.com.au> * * This file is part of The Mana World. * @@ -19,52 +19,83 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#include "keyboardconfig.h" #include "configuration.h" +#include "keyboardconfig.h" #include "log.h" +#include "gui/sdlinput.h" #include "gui/setup_keyboard.h" +#include "utils/gettext.h" +#include "utils/strprintf.h" + struct KeyData { const char *configField; int defaultValue; - const char *caption; + std::string caption; }; // keyData must be in same order as enum keyAction. static KeyData const keyData[KeyboardConfig::KEY_TOTAL] = { - {"keyMoveUp", SDLK_UP, "Move Up"}, - {"keyMoveDown", SDLK_DOWN, "Move Down"}, - {"keyMoveLeft", SDLK_LEFT, "Move Left"}, - {"keyMoveRight", SDLK_RIGHT, "Move Right"}, - {"keyAttack", SDLK_LCTRL, "Attack"}, - {"keySmilie", SDLK_LALT, "Smilie"}, - {"keyTarget", SDLK_LSHIFT, "Target"}, - {"keyTargetClosest", SDLK_a, "Target Closest"}, - {"keyTargetPlayer", SDLK_q, "Target Player"}, - {"keyPickup", SDLK_z, "Pickup"}, - {"keyHideWindows", SDLK_h, "Hide Windows"}, - {"keyBeingSit", SDLK_s, "Sit"}, - {"keyShortcut0", SDLK_0, "Item Shortcut 0"}, - {"keyShortcut1", SDLK_1, "Item Shortcut 1"}, - {"keyShortcut2", SDLK_2, "Item Shortcut 2"}, - {"keyShortcut3", SDLK_3, "Item Shortcut 3"}, - {"keyShortcut4", SDLK_4, "Item Shortcut 4"}, - {"keyShortcut5", SDLK_5, "Item Shortcut 5"}, - {"keyShortcut6", SDLK_6, "Item Shortcut 6"}, - {"keyShortcut7", SDLK_7, "Item Shortcut 7"}, - {"keyShortcut8", SDLK_8, "Item Shortcut 8"}, - {"keyShortcut9", SDLK_9, "Item Shortcut 9"}, - {"keyWindowStatus", SDLK_F2, "Status Window"}, - {"keyWindowInventory", SDLK_F3, "Inventory Window"}, - {"keyWindowEquipment", SDLK_F4, "Equipment WIndow"}, - {"keyWindowSkill", SDLK_F5, "Skill Window"}, - {"keyWindowMinimap", SDLK_F6, "Minimap Window"}, - {"keyWindowChat", SDLK_F7, "Chat Window"}, - {"keyWindowShortcut", SDLK_F8, "Item Shortcut Window"}, - {"keyWindowSetup", SDLK_F9, "Setup Window"}, - {"keyWindowDebug", SDLK_F10, "Debug Window"} + {"keyMoveUp", SDLK_UP, _("Move Up")}, + {"keyMoveDown", SDLK_DOWN, _("Move Down")}, + {"keyMoveLeft", SDLK_LEFT, _("Move Left")}, + {"keyMoveRight", SDLK_RIGHT, _("Move Right")}, + {"keyAttack", SDLK_LCTRL, _("Attack")}, + {"keySmilie", SDLK_LALT, _("Smilie")}, + {"keyTalk", SDLK_t, _("Talk")}, + {"keyTarget", SDLK_LSHIFT, _("Stop Attack")}, + {"keyTargetClosest", SDLK_a, _("Target Closest")}, + {"keyTargetNPC", SDLK_n, _("Target NPC")}, + {"keyTargetPlayer", SDLK_q, _("Target Player")}, + {"keyPickup", SDLK_z, _("Pickup")}, + {"keyHideWindows", SDLK_h, _("Hide Windows")}, + {"keyBeingSit", SDLK_s, _("Sit")}, + {"keyScreenshot", SDLK_p, _("Screenshot")}, + {"keyTrade", SDLK_r, _("Enable/Disable Trading")}, + {"keyPathfind", SDLK_f, _("Find Path to Mouse")}, + {"keyShortcut1", SDLK_1, strprintf(_("Item Shortcut %d"), 1)}, + {"keyShortcut2", SDLK_2, strprintf(_("Item Shortcut %d"), 2)}, + {"keyShortcut3", SDLK_3, strprintf(_("Item Shortcut %d"), 3)}, + {"keyShortcut4", SDLK_4, strprintf(_("Item Shortcut %d"), 4)}, + {"keyShortcut5", SDLK_5, strprintf(_("Item Shortcut %d"), 5)}, + {"keyShortcut6", SDLK_6, strprintf(_("Item Shortcut %d"), 6)}, + {"keyShortcut7", SDLK_7, strprintf(_("Item Shortcut %d"), 7)}, + {"keyShortcut8", SDLK_8, strprintf(_("Item Shortcut %d"), 8)}, + {"keyShortcut9", SDLK_9, strprintf(_("Item Shortcut %d"), 9)}, + {"keyShortcut10", SDLK_0, strprintf(_("Item Shortcut %d"), 10)}, + {"keyShortcut11", SDLK_MINUS, strprintf(_("Item Shortcut %d"), 11)}, + {"keyShortcut12", SDLK_EQUALS, strprintf(_("Item Shortcut %d"), 12)}, + {"keyWindowHelp", SDLK_F1, _("Help Window")}, + {"keyWindowStatus", SDLK_F2, _("Status Window")}, + {"keyWindowInventory", SDLK_F3, _("Inventory Window")}, + {"keyWindowEquipment", SDLK_F4, _("Equipment WIndow")}, + {"keyWindowSkill", SDLK_F5, _("Skill Window")}, + {"keyWindowMinimap", SDLK_F6, _("Minimap Window")}, + {"keyWindowChat", SDLK_F7, _("Chat Window")}, + {"keyWindowShortcut", SDLK_F8, _("Item Shortcut Window")}, + {"keyWindowSetup", SDLK_F9, _("Setup Window")}, + {"keyWindowDebug", SDLK_F10, _("Debug Window")}, + {"keyWindowEmote", SDLK_F11, _("Emote Window")}, + {"keyWindowEmoteBar", SDLK_F12, _("Emote Shortcut Window")}, + {"keyEmoteShortcut1", SDLK_1, strprintf(_("Emote Shortcut %d"), 1)}, + {"keyEmoteShortcut2", SDLK_2, strprintf(_("Emote Shortcut %d"), 2)}, + {"keyEmoteShortcut3", SDLK_3, strprintf(_("Emote Shortcut %d"), 3)}, + {"keyEmoteShortcut4", SDLK_4, strprintf(_("Emote Shortcut %d"), 4)}, + {"keyEmoteShortcut5", SDLK_5, strprintf(_("Emote Shortcut %d"), 5)}, + {"keyEmoteShortcut6", SDLK_6, strprintf(_("Emote Shortcut %d"), 6)}, + {"keyEmoteShortcut7", SDLK_7, strprintf(_("Emote Shortcut %d"), 7)}, + {"keyEmoteShortcut8", SDLK_8, strprintf(_("Emote Shortcut %d"), 8)}, + {"keyEmoteShortcut9", SDLK_9, strprintf(_("Emote Shortcut %d"), 9)}, + {"keyEmoteShortcut10", SDLK_0, strprintf(_("Emote Shortcut %d"), 10)}, + {"keyEmoteShortcut11", SDLK_MINUS, strprintf(_("Emote Shortcut %d"), 11)}, + {"keyEmoteShortcut12", SDLK_EQUALS, strprintf(_("Emote Shortcut %d"), 12)}, + {"keyChat", SDLK_RETURN, _("Toggle Chat")}, + {"keyChatScrollUp", SDLK_PAGEUP, _("Scroll Chat Up")}, + {"keyChatScrollDown", SDLK_PAGEDOWN, _("Scroll Chat Down")}, + {"keyOK", SDLK_RETURN, _("Select OK")}, + {"keyQuit", SDLK_ESCAPE, _("Quit")} }; void KeyboardConfig::init() @@ -110,11 +141,20 @@ void KeyboardConfig::makeDefault() 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++) { - for (j = 0; j < KEY_TOTAL; j++) + for (j = i, j++; j < KEY_TOTAL; j++) { - if (i != j && mKey[i].value == mKey[j].value) + // Allow for item shortcut and emote keys to overlap, but no other keys + if (!((((i >= KEY_SHORTCUT_1) && (i <= KEY_SHORTCUT_12)) && + ((j >= KEY_EMOTE_1) && (j <= KEY_EMOTE_12))) || + ((i == KEY_TOGGLE_CHAT) && (j == KEY_OK))) && + (mKey[i].value == mKey[j].value) + ) { return true; } @@ -132,7 +172,7 @@ int KeyboardConfig::getKeyIndex(int keyValue) const { for (int i = 0; i < KEY_TOTAL; i++) { - if(keyValue == mKey[i].value) + if (keyValue == mKey[i].value) { return i; } @@ -140,6 +180,19 @@ int KeyboardConfig::getKeyIndex(int keyValue) const return KEY_NO_VALUE; } + +int KeyboardConfig::getKeyEmoteOffset(int keyValue) const +{ + for (int i = KEY_EMOTE_1; i <= KEY_EMOTE_12; i++) + { + if (keyValue == mKey[i].value) + { + return 1 + i - KEY_EMOTE_1; + } + } + return 0; +} + bool KeyboardConfig::isKeyActive(int index) { return mActiveKeys[ mKey[index].value]; |