diff --git a/src/openrct2-ui/input/KeyboardShortcuts.cpp b/src/openrct2-ui/input/KeyboardShortcuts.cpp index 2108b26814..bf6009a75e 100644 --- a/src/openrct2-ui/input/KeyboardShortcuts.cpp +++ b/src/openrct2-ui/input/KeyboardShortcuts.cpp @@ -11,6 +11,7 @@ #include #include +#include #include #include #include @@ -153,7 +154,122 @@ std::string KeyboardShortcuts::GetShortcutString(int32_t shortcut) const format_string(formatBuffer, sizeof(formatBuffer), STR_CMD_PLUS, nullptr); String::Append(buffer, sizeof(buffer), formatBuffer); } - String::Append(buffer, sizeof(buffer), SDL_GetKeyName(SDL_GetKeyFromScancode((SDL_Scancode)(shortcutKey & 0xFF)))); + + static const std::map specialCharNames = { + { SDL_SCANCODE_BACKSPACE, STR_SHORTCUT_BACKSPACE }, + { SDL_SCANCODE_TAB, STR_SHORTCUT_TAB }, + { SDL_SCANCODE_CLEAR, STR_SHORTCUT_CLEAR }, + { SDL_SCANCODE_RETURN, STR_SHORTCUT_RETURN }, + { SDL_SCANCODE_LALT, STR_SHORTCUT_ALT }, + { SDL_SCANCODE_PAUSE, STR_SHORTCUT_PAUSE }, + { SDL_SCANCODE_CAPSLOCK, STR_SHORTCUT_CAPS }, + { SDL_SCANCODE_ESCAPE, STR_SHORTCUT_ESCAPE }, + { SDL_SCANCODE_SPACE, STR_SHORTCUT_SPACEBAR }, + { SDL_SCANCODE_PAGEUP, STR_SHORTCUT_PGUP }, + { SDL_SCANCODE_PAGEDOWN, STR_SHORTCUT_PGDN }, + { SDL_SCANCODE_END, STR_SHORTCUT_END }, + { SDL_SCANCODE_HOME, STR_SHORTCUT_HOME }, + { SDL_SCANCODE_LEFT, STR_SHORTCUT_LEFT }, + { SDL_SCANCODE_UP, STR_SHORTCUT_UP }, + { SDL_SCANCODE_RIGHT, STR_SHORTCUT_RIGHT }, + { SDL_SCANCODE_DOWN, STR_SHORTCUT_DOWN }, + { SDL_SCANCODE_SELECT, STR_SHORTCUT_SELECT }, + { SDL_SCANCODE_PRINTSCREEN, STR_SHORTCUT_PRINT }, + { SDL_SCANCODE_EXECUTE, STR_SHORTCUT_EXECUTE }, + { SDL_SCANCODE_SYSREQ, STR_SHORTCUT_SNAPSHOT }, + { SDL_SCANCODE_INSERT, STR_SHORTCUT_INSERT }, + { SDL_SCANCODE_DELETE, STR_SHORTCUT_DELETE }, + { SDL_SCANCODE_HELP, STR_SHORTCUT_HELP }, + { SDL_SCANCODE_0, STR_SHORTCUT_0 }, + { SDL_SCANCODE_1, STR_SHORTCUT_1 }, + { SDL_SCANCODE_2, STR_SHORTCUT_2 }, + { SDL_SCANCODE_3, STR_SHORTCUT_3 }, + { SDL_SCANCODE_4, STR_SHORTCUT_4 }, + { SDL_SCANCODE_5, STR_SHORTCUT_5 }, + { SDL_SCANCODE_6, STR_SHORTCUT_6 }, + { SDL_SCANCODE_7, STR_SHORTCUT_7 }, + { SDL_SCANCODE_8, STR_SHORTCUT_8 }, + { SDL_SCANCODE_9, STR_SHORTCUT_9 }, + { SDL_SCANCODE_A, STR_SHORTCUT_A }, + { SDL_SCANCODE_B, STR_SHORTCUT_B }, + { SDL_SCANCODE_C, STR_SHORTCUT_C }, + { SDL_SCANCODE_D, STR_SHORTCUT_D }, + { SDL_SCANCODE_E, STR_SHORTCUT_E }, + { SDL_SCANCODE_F, STR_SHORTCUT_F }, + { SDL_SCANCODE_G, STR_SHORTCUT_G }, + { SDL_SCANCODE_H, STR_SHORTCUT_H }, + { SDL_SCANCODE_I, STR_SHORTCUT_I }, + { SDL_SCANCODE_J, STR_SHORTCUT_J }, + { SDL_SCANCODE_K, STR_SHORTCUT_K }, + { SDL_SCANCODE_L, STR_SHORTCUT_L }, + { SDL_SCANCODE_M, STR_SHORTCUT_M }, + { SDL_SCANCODE_N, STR_SHORTCUT_N }, + { SDL_SCANCODE_O, STR_SHORTCUT_O }, + { SDL_SCANCODE_P, STR_SHORTCUT_P }, + { SDL_SCANCODE_Q, STR_SHORTCUT_Q }, + { SDL_SCANCODE_R, STR_SHORTCUT_R }, + { SDL_SCANCODE_S, STR_SHORTCUT_S }, + { SDL_SCANCODE_T, STR_SHORTCUT_T }, + { SDL_SCANCODE_U, STR_SHORTCUT_U }, + { SDL_SCANCODE_V, STR_SHORTCUT_V }, + { SDL_SCANCODE_W, STR_SHORTCUT_W }, + { SDL_SCANCODE_X, STR_SHORTCUT_X }, + { SDL_SCANCODE_Y, STR_SHORTCUT_Y }, + { SDL_SCANCODE_Z, STR_SHORTCUT_Z }, + { SDL_SCANCODE_APPLICATION, STR_SHORTCUT_MENU }, + { SDL_SCANCODE_KP_0, STR_SHORTCUT_NUMPAD_0 }, + { SDL_SCANCODE_KP_1, STR_SHORTCUT_NUMPAD_1 }, + { SDL_SCANCODE_KP_2, STR_SHORTCUT_NUMPAD_2 }, + { SDL_SCANCODE_KP_3, STR_SHORTCUT_NUMPAD_3 }, + { SDL_SCANCODE_KP_4, STR_SHORTCUT_NUMPAD_4 }, + { SDL_SCANCODE_KP_5, STR_SHORTCUT_NUMPAD_5 }, + { SDL_SCANCODE_KP_6, STR_SHORTCUT_NUMPAD_6 }, + { SDL_SCANCODE_KP_7, STR_SHORTCUT_NUMPAD_7 }, + { SDL_SCANCODE_KP_8, STR_SHORTCUT_NUMPAD_8 }, + { SDL_SCANCODE_KP_9, STR_SHORTCUT_NUMPAD_9 }, + { SDL_SCANCODE_KP_MULTIPLY, STR_SHORTCUT_NUMPAD_MULTIPLY }, + { SDL_SCANCODE_KP_PLUS, STR_SHORTCUT_NUMPAD_PLUS }, + { SDL_SCANCODE_KP_MINUS, STR_SHORTCUT_NUMPAD_MINUS }, + { SDL_SCANCODE_KP_PERIOD, STR_SHORTCUT_NUMPAD_PERIOD }, + { SDL_SCANCODE_KP_DIVIDE, STR_SHORTCUT_NUMPAD_DIVIDE }, + { SDL_SCANCODE_F1, STR_SHORTCUT_F1 }, + { SDL_SCANCODE_F2, STR_SHORTCUT_F2 }, + { SDL_SCANCODE_F3, STR_SHORTCUT_F3 }, + { SDL_SCANCODE_F4, STR_SHORTCUT_F4 }, + { SDL_SCANCODE_F5, STR_SHORTCUT_F5 }, + { SDL_SCANCODE_F6, STR_SHORTCUT_F6 }, + { SDL_SCANCODE_F7, STR_SHORTCUT_F7 }, + { SDL_SCANCODE_F8, STR_SHORTCUT_F8 }, + { SDL_SCANCODE_F9, STR_SHORTCUT_F9 }, + { SDL_SCANCODE_F10, STR_SHORTCUT_F10 }, + { SDL_SCANCODE_F11, STR_SHORTCUT_F11 }, + { SDL_SCANCODE_F12, STR_SHORTCUT_F12 }, + { SDL_SCANCODE_F13, STR_SHORTCUT_F13 }, + { SDL_SCANCODE_F14, STR_SHORTCUT_F14 }, + { SDL_SCANCODE_F15, STR_SHORTCUT_F15 }, + { SDL_SCANCODE_F16, STR_SHORTCUT_F16 }, + { SDL_SCANCODE_F17, STR_SHORTCUT_F17 }, + { SDL_SCANCODE_F18, STR_SHORTCUT_F18 }, + { SDL_SCANCODE_F19, STR_SHORTCUT_F19 }, + { SDL_SCANCODE_F20, STR_SHORTCUT_F20 }, + { SDL_SCANCODE_F21, STR_SHORTCUT_F21 }, + { SDL_SCANCODE_F22, STR_SHORTCUT_F22 }, + { SDL_SCANCODE_F23, STR_SHORTCUT_F23 }, + { SDL_SCANCODE_F24, STR_SHORTCUT_F24 }, + { SDL_SCANCODE_NUMLOCKCLEAR, STR_SHORTCUT_NUMLOCK }, + { SDL_SCANCODE_SCROLLLOCK, STR_SHORTCUT_SCROLL }, + }; + + SDL_Scancode scanCode = static_cast(shortcutKey & 0xFF); + auto keyPair = specialCharNames.find(scanCode); + if (keyPair != specialCharNames.end()) + { + format_string(formatBuffer, sizeof(formatBuffer), keyPair->second, nullptr); + String::Append(buffer, sizeof(buffer), formatBuffer); + } + else + String::Append(buffer, sizeof(buffer), SDL_GetKeyName(SDL_GetKeyFromScancode(scanCode))); + return std::string(buffer); } diff --git a/src/openrct2/localisation/StringIds.h b/src/openrct2/localisation/StringIds.h index bccaad59f6..39ff2bb43d 100644 --- a/src/openrct2/localisation/StringIds.h +++ b/src/openrct2/localisation/StringIds.h @@ -1927,163 +1927,161 @@ enum STR_SHORTCUT_SHOW_RECENT_MESSAGES = 2522, STR_SHORTCUT_SHOW_MAP = 2523, STR_SHORTCUT_SCREENSHOT = 2524, - STR_SHORTCUT_KEY_UNKNOWN = 2525, - - // STR_2525 :??? - // STR_2526 :??? - // STR_2527 :??? - // STR_2528 :??? - // STR_2529 :??? - // STR_2530 :??? - // STR_2531 :??? - // STR_2532 :??? - // STR_2533 :Backspace - // STR_2534 :Tab - // STR_2535 :??? - // STR_2536 :??? - // STR_2537 :Clear - // STR_2538 :Return - // STR_2539 :??? - // STR_2540 :??? - // STR_2541 :??? - // STR_2542 :??? - // STR_2543 :Alt/Menu - // STR_2544 :Pause - // STR_2545 :Caps - // STR_2546 :??? - // STR_2547 :??? - // STR_2548 :??? - // STR_2549 :??? - // STR_2550 :??? - // STR_2551 :??? - // STR_2552 :Escape - // STR_2553 :??? - // STR_2554 :??? - // STR_2555 :??? - // STR_2556 :??? - // STR_2557 :Spacebar - // STR_2558 :PgUp - // STR_2559 :PgDn - // STR_2560 :End - // STR_2561 :Home - // STR_2562 :Left - // STR_2563 :Up - // STR_2564 :Right - // STR_2565 :Down - // STR_2566 :Select - // STR_2567 :Print - // STR_2568 :Execute - // STR_2569 :Snapshot - // STR_2570 :Insert - // STR_2571 :Delete - // STR_2572 :Help - // STR_2573 :0 - // STR_2574 :1 - // STR_2575 :2 - // STR_2576 :3 - // STR_2577 :4 - // STR_2578 :5 - // STR_2579 :6 - // STR_2580 :7 - // STR_2581 :8 - // STR_2582 :9 - // STR_2583 :??? - // STR_2584 :??? - // STR_2585 :??? - // STR_2586 :??? - // STR_2587 :??? - // STR_2588 :??? - // STR_2589 :??? - // STR_2590 :A - // STR_2591 :B - // STR_2592 :C - // STR_2593 :D - // STR_2594 :E - // STR_2595 :F - // STR_2596 :G - // STR_2597 :H - // STR_2598 :I - // STR_2599 :J - // STR_2600 :K - // STR_2601 :L - // STR_2602 :M - // STR_2603 :N - // STR_2604 :O - // STR_2605 :P - // STR_2606 :Q - // STR_2607 :R - // STR_2608 :S - // STR_2609 :T - // STR_2610 :U - // STR_2611 :V - // STR_2612 :W - // STR_2613 :X - // STR_2614 :Y - // STR_2615 :Z - // STR_2616 :??? - // STR_2617 :??? - // STR_2618 :Menu - // STR_2619 :??? - // STR_2620 :??? - // STR_2621 :NumPad 0 - // STR_2622 :NumPad 1 - // STR_2623 :NumPad 2 - // STR_2624 :NumPad 3 - // STR_2625 :NumPad 4 - // STR_2626 :NumPad 5 - // STR_2627 :NumPad 6 - // STR_2628 :NumPad 7 - // STR_2629 :NumPad 8 - // STR_2630 :NumPad 9 - // STR_2631 :NumPad * - // STR_2632 :NumPad + - // STR_2633 :??? - // STR_2634 :NumPad - - // STR_2635 :NumPad . - // STR_2636 :NumPad / - // STR_2637 :F1 - // STR_2638 :F2 - // STR_2639 :F3 - // STR_2640 :F4 - // STR_2641 :F5 - // STR_2642 :F6 - // STR_2643 :F7 - // STR_2644 :F8 - // STR_2645 :F9 - // STR_2646 :F10 - // STR_2647 :F11 - // STR_2648 :F12 - // STR_2649 :F13 - // STR_2650 :F14 - // STR_2651 :F15 - // STR_2652 :F16 - // STR_2653 :F17 - // STR_2654 :F18 - // STR_2655 :F19 - // STR_2656 :F20 - // STR_2657 :F21 - // STR_2658 :F22 - // STR_2659 :F23 - // STR_2660 :F24 - // STR_2661 :??? - // STR_2662 :??? - // STR_2663 :??? - // STR_2664 :??? - // STR_2665 :??? - // STR_2666 :??? - // STR_2667 :??? - // STR_2668 :??? - // STR_2669 :NumLock - // STR_2670 :Scroll - // STR_2671 :??? - // STR_2672 :??? - // STR_2673 :??? - // STR_2674 :??? - // STR_2675 :??? - // STR_2676 :??? - // STR_2677 :??? - // STR_2678 :??? - // STR_2679 :??? + STR_SHORTCUT_UNKNOWN_2525 = 2525, + STR_SHORTCUT_UNKNOWN_2526 = 2526, + STR_SHORTCUT_UNKNOWN_2527 = 2527, + STR_SHORTCUT_UNKNOWN_2528 = 2528, + STR_SHORTCUT_UNKNOWN_2529 = 2529, + STR_SHORTCUT_UNKNOWN_2530 = 2530, + STR_SHORTCUT_UNKNOWN_2531 = 2531, + STR_SHORTCUT_UNKNOWN_2532 = 2532, + STR_SHORTCUT_BACKSPACE = 2533, + STR_SHORTCUT_TAB = 2534, + STR_SHORTCUT_UNKNOWN_2535 = 2535, + STR_SHORTCUT_UNKNOWN_2536 = 2536, + STR_SHORTCUT_CLEAR = 2537, + STR_SHORTCUT_RETURN = 2538, + STR_SHORTCUT_UNKNOWN_2539 = 2539, + STR_SHORTCUT_UNKNOWN_2540 = 2540, + STR_SHORTCUT_UNKNOWN_2541 = 2541, + STR_SHORTCUT_UNKNOWN_2542 = 2542, + STR_SHORTCUT_ALT = 2543, + STR_SHORTCUT_PAUSE = 2544, + STR_SHORTCUT_CAPS = 2545, + STR_SHORTCUT_UNKNOWN_2546 = 2546, + STR_SHORTCUT_UNKNOWN_2547 = 2547, + STR_SHORTCUT_UNKNOWN_2548 = 2548, + STR_SHORTCUT_UNKNOWN_2549 = 2549, + STR_SHORTCUT_UNKNOWN_2550 = 2550, + STR_SHORTCUT_UNKNOWN_2551 = 2551, + STR_SHORTCUT_ESCAPE = 2552, + STR_SHORTCUT_UNKNOWN_2553 = 2553, + STR_SHORTCUT_UNKNOWN_2554 = 2554, + STR_SHORTCUT_UNKNOWN_2555 = 2555, + STR_SHORTCUT_UNKNOWN_2556 = 2556, + STR_SHORTCUT_SPACEBAR = 2557, + STR_SHORTCUT_PGUP = 2558, + STR_SHORTCUT_PGDN = 2559, + STR_SHORTCUT_END = 2560, + STR_SHORTCUT_HOME = 2561, + STR_SHORTCUT_LEFT = 2562, + STR_SHORTCUT_UP = 2563, + STR_SHORTCUT_RIGHT = 2564, + STR_SHORTCUT_DOWN = 2565, + STR_SHORTCUT_SELECT = 2566, + STR_SHORTCUT_PRINT = 2567, + STR_SHORTCUT_EXECUTE = 2568, + STR_SHORTCUT_SNAPSHOT = 2569, + STR_SHORTCUT_INSERT = 2570, + STR_SHORTCUT_DELETE = 2571, + STR_SHORTCUT_HELP = 2572, + STR_SHORTCUT_0 = 2573, + STR_SHORTCUT_1 = 2574, + STR_SHORTCUT_2 = 2575, + STR_SHORTCUT_3 = 2576, + STR_SHORTCUT_4 = 2577, + STR_SHORTCUT_5 = 2578, + STR_SHORTCUT_6 = 2579, + STR_SHORTCUT_7 = 2580, + STR_SHORTCUT_8 = 2581, + STR_SHORTCUT_9 = 2582, + STR_SHORTCUT_UNKNOWN_2583 = 2583, + STR_SHORTCUT_UNKNOWN_2584 = 2584, + STR_SHORTCUT_UNKNOWN_2585 = 2585, + STR_SHORTCUT_UNKNOWN_2586 = 2586, + STR_SHORTCUT_UNKNOWN_2587 = 2587, + STR_SHORTCUT_UNKNOWN_2588 = 2588, + STR_SHORTCUT_UNKNOWN_2589 = 2589, + STR_SHORTCUT_A = 2590, + STR_SHORTCUT_B = 2591, + STR_SHORTCUT_C = 2592, + STR_SHORTCUT_D = 2593, + STR_SHORTCUT_E = 2594, + STR_SHORTCUT_F = 2595, + STR_SHORTCUT_G = 2596, + STR_SHORTCUT_H = 2597, + STR_SHORTCUT_I = 2598, + STR_SHORTCUT_J = 2599, + STR_SHORTCUT_K = 2600, + STR_SHORTCUT_L = 2601, + STR_SHORTCUT_M = 2602, + STR_SHORTCUT_N = 2603, + STR_SHORTCUT_O = 2604, + STR_SHORTCUT_P = 2605, + STR_SHORTCUT_Q = 2606, + STR_SHORTCUT_R = 2607, + STR_SHORTCUT_S = 2608, + STR_SHORTCUT_T = 2609, + STR_SHORTCUT_U = 2610, + STR_SHORTCUT_V = 2611, + STR_SHORTCUT_W = 2612, + STR_SHORTCUT_X = 2613, + STR_SHORTCUT_Y = 2614, + STR_SHORTCUT_Z = 2615, + STR_SHORTCUT_UNKNOWN_2616 = 2616, + STR_SHORTCUT_UNKNOWN_2617 = 2617, + STR_SHORTCUT_MENU = 2618, + STR_SHORTCUT_UNKNOWN_2619 = 2619, + STR_SHORTCUT_UNKNOWN_2620 = 2620, + STR_SHORTCUT_NUMPAD_0 = 2621, + STR_SHORTCUT_NUMPAD_1 = 2622, + STR_SHORTCUT_NUMPAD_2 = 2623, + STR_SHORTCUT_NUMPAD_3 = 2624, + STR_SHORTCUT_NUMPAD_4 = 2625, + STR_SHORTCUT_NUMPAD_5 = 2626, + STR_SHORTCUT_NUMPAD_6 = 2627, + STR_SHORTCUT_NUMPAD_7 = 2628, + STR_SHORTCUT_NUMPAD_8 = 2629, + STR_SHORTCUT_NUMPAD_9 = 2630, + STR_SHORTCUT_NUMPAD_MULTIPLY = 2631, + STR_SHORTCUT_NUMPAD_PLUS = 2632, + STR_SHORTCUT_UNKNOWN_2633 = 2633, + STR_SHORTCUT_NUMPAD_MINUS = 2634, + STR_SHORTCUT_NUMPAD_PERIOD = 2635, + STR_SHORTCUT_NUMPAD_DIVIDE = 2636, + STR_SHORTCUT_F1 = 2637, + STR_SHORTCUT_F2 = 2638, + STR_SHORTCUT_F3 = 2639, + STR_SHORTCUT_F4 = 2640, + STR_SHORTCUT_F5 = 2641, + STR_SHORTCUT_F6 = 2642, + STR_SHORTCUT_F7 = 2643, + STR_SHORTCUT_F8 = 2644, + STR_SHORTCUT_F9 = 2645, + STR_SHORTCUT_F10 = 2646, + STR_SHORTCUT_F11 = 2647, + STR_SHORTCUT_F12 = 2648, + STR_SHORTCUT_F13 = 2649, + STR_SHORTCUT_F14 = 2650, + STR_SHORTCUT_F15 = 2651, + STR_SHORTCUT_F16 = 2652, + STR_SHORTCUT_F17 = 2653, + STR_SHORTCUT_F18 = 2654, + STR_SHORTCUT_F19 = 2655, + STR_SHORTCUT_F20 = 2656, + STR_SHORTCUT_F21 = 2657, + STR_SHORTCUT_F22 = 2658, + STR_SHORTCUT_F23 = 2659, + STR_SHORTCUT_F24 = 2660, + STR_SHORTCUT_UNKNOWN_2661 = 2661, + STR_SHORTCUT_UNKNOWN_2662 = 2662, + STR_SHORTCUT_UNKNOWN_2663 = 2663, + STR_SHORTCUT_UNKNOWN_2664 = 2664, + STR_SHORTCUT_UNKNOWN_2665 = 2665, + STR_SHORTCUT_UNKNOWN_2666 = 2666, + STR_SHORTCUT_UNKNOWN_2667 = 2667, + STR_SHORTCUT_UNKNOWN_2668 = 2668, + STR_SHORTCUT_NUMLOCK = 2669, + STR_SHORTCUT_SCROLL = 2670, + STR_SHORTCUT_UNKNOWN_2671 = 2671, + STR_SHORTCUT_UNKNOWN_2672 = 2672, + STR_SHORTCUT_UNKNOWN_2673 = 2673, + STR_SHORTCUT_UNKNOWN_2674 = 2674, + STR_SHORTCUT_UNKNOWN_2675 = 2675, + STR_SHORTCUT_UNKNOWN_2676 = 2676, + STR_SHORTCUT_UNKNOWN_2677 = 2677, + STR_SHORTCUT_UNKNOWN_2678 = 2678, + STR_SHORTCUT_UNKNOWN_2679 = 2679, STR_RESEARCH_COMPLETED_AL = 2680, STR_CHEAT_5K_MONEY_TIP = 2681, // STR_2682 :