From d1a314b0f783724c16a37e2b1feca034a16cdf0b Mon Sep 17 00:00:00 2001 From: Aaron van Geffen Date: Sun, 5 Apr 2020 11:40:19 +0200 Subject: [PATCH] Decouple shortcut window order from internal order. --- src/openrct2-ui/input/KeyboardShortcuts.h | 5 +- src/openrct2-ui/windows/ShortcutKeyChange.cpp | 9 +- src/openrct2-ui/windows/ShortcutKeys.cpp | 190 +++++++++--------- src/openrct2-ui/windows/Window.h | 2 +- 4 files changed, 109 insertions(+), 97 deletions(-) diff --git a/src/openrct2-ui/input/KeyboardShortcuts.h b/src/openrct2-ui/input/KeyboardShortcuts.h index 0ce841a8b9..8499a2c205 100644 --- a/src/openrct2-ui/input/KeyboardShortcuts.h +++ b/src/openrct2-ui/input/KeyboardShortcuts.h @@ -23,7 +23,7 @@ # define PLATFORM_MODIFIER CTRL #endif -enum +enum KeyboardShortcut { SHORTCUT_CLOSE_TOP_MOST_WINDOW, SHORTCUT_CLOSE_ALL_FLOATING_WINDOWS, @@ -151,9 +151,8 @@ namespace OpenRCT2 } // namespace Input } // namespace OpenRCT2 -/** The current shortcut being changed. */ +// The current shortcut being changed. extern uint8_t gKeyboardShortcutChangeId; -extern const rct_string_id ShortcutStringIds[SHORTCUT_COUNT]; void keyboard_shortcuts_reset(); bool keyboard_shortcuts_load(); diff --git a/src/openrct2-ui/windows/ShortcutKeyChange.cpp b/src/openrct2-ui/windows/ShortcutKeyChange.cpp index 6eb375b23d..900ff22d1e 100644 --- a/src/openrct2-ui/windows/ShortcutKeyChange.cpp +++ b/src/openrct2-ui/windows/ShortcutKeyChange.cpp @@ -69,12 +69,17 @@ static rct_window_event_list window_shortcut_change_events = { }; // clang-format on -rct_window* window_shortcut_change_open(int32_t selected_key) +static rct_string_id CurrentShortcutKeyStringId{}; + +rct_window* window_shortcut_change_open(int32_t selected_key, rct_string_id key_string_id) { // Move this to window_shortcut_change_open window_close_by_class(WC_CHANGE_KEYBOARD_SHORTCUT); + // Save the item we are selecting for new window gKeyboardShortcutChangeId = selected_key; + CurrentShortcutKeyStringId = key_string_id; + rct_window* w = window_create_centred(WW, WH, &window_shortcut_change_events, WC_CHANGE_KEYBOARD_SHORTCUT, 0); w->widgets = window_shortcut_change_widgets; @@ -108,6 +113,6 @@ static void window_shortcut_change_paint(rct_window* w, rct_drawpixelinfo* dpi) int32_t x = w->windowPos.x + 125; int32_t y = w->windowPos.y + 30; - set_format_arg(0, rct_string_id, ShortcutStringIds[gKeyboardShortcutChangeId]); + set_format_arg(0, rct_string_id, CurrentShortcutKeyStringId); gfx_draw_string_centred_wrapped(dpi, gCommonFormatArgs, x, y, 242, STR_SHORTCUT_CHANGE_PROMPT, COLOUR_BLACK); } diff --git a/src/openrct2-ui/windows/ShortcutKeys.cpp b/src/openrct2-ui/windows/ShortcutKeys.cpp index f5ee07401b..965520bdfd 100644 --- a/src/openrct2-ui/windows/ShortcutKeys.cpp +++ b/src/openrct2-ui/windows/ShortcutKeys.cpp @@ -80,91 +80,98 @@ static rct_window_event_list window_shortcut_events = { window_shortcut_scrollpaint }; -const rct_string_id ShortcutStringIds[SHORTCUT_COUNT] = { - STR_SHORTCUT_CLOSE_TOP_MOST_WINDOW, - STR_SHORTCUT_CLOSE_ALL_FLOATING_WINDOWS, - STR_SHORTCUT_CANCEL_CONSTRUCTION_MODE, - STR_SHORTCUT_PAUSE_GAME, - STR_SHORTCUT_ZOOM_VIEW_OUT, - STR_SHORTCUT_ZOOM_VIEW_IN, - STR_SHORTCUT_ROTATE_VIEW_CLOCKWISE, - STR_SHORTCUT_ROTATE_VIEW_ANTICLOCKWISE, - STR_SHORTCUT_ROTATE_CONSTRUCTION_OBJECT, - STR_SHORTCUT_UNDERGROUND_VIEW_TOGGLE, - STR_SHORTCUT_REMOVE_BASE_LAND_TOGGLE, - STR_SHORTCUT_REMOVE_VERTICAL_LAND_TOGGLE, - STR_SHORTCUT_SEE_THROUGH_RIDES_TOGGLE, - STR_SHORTCUT_SEE_THROUGH_SCENERY_TOGGLE, - STR_SHORTCUT_INVISIBLE_SUPPORTS_TOGGLE, - STR_SHORTCUT_INVISIBLE_PEOPLE_TOGGLE, - STR_SHORTCUT_HEIGHT_MARKS_ON_LAND_TOGGLE, - STR_SHORTCUT_HEIGHT_MARKS_ON_RIDE_TRACKS_TOGGLE, - STR_SHORTCUT_HEIGHT_MARKS_ON_PATHS_TOGGLE, - STR_SHORTCUT_ADJUST_LAND, - STR_SHORTCUT_ADJUST_WATER, - STR_SHORTCUT_BUILD_SCENERY, - STR_SHORTCUT_BUILD_PATHS, - STR_SHORTCUT_BUILD_NEW_RIDE, - STR_SHORTCUT_SHOW_FINANCIAL_INFORMATION, - STR_SHORTCUT_SHOW_RESEARCH_INFORMATION, - STR_SHORTCUT_SHOW_RIDES_LIST, - STR_SHORTCUT_SHOW_PARK_INFORMATION, - STR_SHORTCUT_SHOW_GUEST_LIST, - STR_SHORTCUT_SHOW_STAFF_LIST, - STR_SHORTCUT_SHOW_RECENT_MESSAGES, - STR_SHORTCUT_SHOW_MAP, - STR_SHORTCUT_SCREENSHOT, - STR_SHORTCUT_REDUCE_GAME_SPEED, - STR_SHORTCUT_INCREASE_GAME_SPEED, - STR_SHORTCUT_OPEN_CHEATS_WINDOW, - STR_SHORTCUT_TOGGLE_VISIBILITY_OF_TOOLBARS, - STR_SHORTCUT_SCROLL_MAP_UP, - STR_SHORTCUT_SCROLL_MAP_LEFT, - STR_SHORTCUT_SCROLL_MAP_DOWN, - STR_SHORTCUT_SCROLL_MAP_RIGHT, - STR_SEND_MESSAGE, - STR_SHORTCUT_QUICK_SAVE_GAME, - STR_SHORTCUT_SHOW_OPTIONS, - STR_SHORTCUT_MUTE_SOUND, - STR_SHORTCUT_WINDOWED_MODE_TOGGLE, - STR_SHORTCUT_SHOW_MULTIPLAYER, - STR_SHORTCUT_PAINT_ORIGINAL, - STR_SHORTCUT_DEBUG_PAINT_TOGGLE, - STR_SHORTCUT_SEE_THROUGH_PATHS_TOGGLE, - STR_SHORTCUT_RIDE_CONSTRUCTION_TURN_LEFT, - STR_SHORTCUT_RIDE_CONSTRUCTION_TURN_RIGHT, - STR_SHORTCUT_RIDE_CONSTRUCTION_USE_TRACK_DEFAULT, - STR_SHORTCUT_RIDE_CONSTRUCTION_SLOPE_DOWN, - STR_SHORTCUT_RIDE_CONSTRUCTION_SLOPE_UP, - STR_SHORTCUT_RIDE_CONSTRUCTION_CHAIN_LIFT_TOGGLE, - STR_SHORTCUT_RIDE_CONSTRUCTION_BANK_LEFT, - STR_SHORTCUT_RIDE_CONSTRUCTION_BANK_RIGHT, - STR_SHORTCUT_RIDE_CONSTRUCTION_PREVIOUS_TRACK, - STR_SHORTCUT_RIDE_CONSTRUCTION_NEXT_TRACK, - STR_SHORTCUT_RIDE_CONSTRUCTION_BUILD_CURRENT, - STR_SHORTCUT_RIDE_CONSTRUCTION_DEMOLISH_CURRENT, - STR_LOAD_GAME, - STR_SHORTCUT_CLEAR_SCENERY, - STR_SHORTCUT_GRIDLINES_DISPLAY_TOGGLE, - STR_SHORTCUT_VIEW_CLIPPING, - STR_SHORTCUT_HIGHLIGHT_PATH_ISSUES_TOGGLE, - STR_SHORTCUT_OPEN_TILE_INSPECTOR, - STR_ADVANCE_TO_NEXT_TICK, - STR_SHORTCUT_OPEN_SCENERY_PICKER, - STR_SHORTCUT_SCALE_UP, - STR_SHORTCUT_SCALE_DOWN, - STR_SHORTCUT_INSERT_CORRPUT_ELEMENT, - STR_SHORTCUT_COPY_ELEMENT, - STR_SHORTCUT_PASTE_ELEMENT, - STR_SHORTCUT_REMOVE_ELEMENT, - STR_SHORTCUT_MOVE_ELEMENT_UP, - STR_SHORTCUT_MOVE_ELEMENT_DOWN, - STR_SHORTCUT_INCREASE_X_COORD, - STR_SHORTCUT_DECREASE_X_COORD, - STR_SHORTCUT_INCREASE_Y_COORD, - STR_SHORTCUT_DECREASE_Y_COORD, - STR_SHORTCUT_INCREASE_ELEM_HEIGHT, - STR_SHORTCUT_DECREASE_ELEM_HEIGHT, +struct ShortcutStringPair +{ + KeyboardShortcut ShortcutId; + rct_string_id StringId; +}; + +static const ShortcutStringPair ShortcutList[] = +{ + { SHORTCUT_CLOSE_TOP_MOST_WINDOW, STR_SHORTCUT_CLOSE_TOP_MOST_WINDOW }, + { SHORTCUT_CLOSE_ALL_FLOATING_WINDOWS, STR_SHORTCUT_CLOSE_ALL_FLOATING_WINDOWS }, + { SHORTCUT_CANCEL_CONSTRUCTION_MODE, STR_SHORTCUT_CANCEL_CONSTRUCTION_MODE }, + { SHORTCUT_PAUSE_GAME, STR_SHORTCUT_PAUSE_GAME }, + { SHORTCUT_ZOOM_VIEW_OUT, STR_SHORTCUT_ZOOM_VIEW_OUT }, + { SHORTCUT_ZOOM_VIEW_IN, STR_SHORTCUT_ZOOM_VIEW_IN }, + { SHORTCUT_ROTATE_VIEW_CLOCKWISE, STR_SHORTCUT_ROTATE_VIEW_CLOCKWISE }, + { SHORTCUT_ROTATE_VIEW_ANTICLOCKWISE, STR_SHORTCUT_ROTATE_VIEW_ANTICLOCKWISE }, + { SHORTCUT_ROTATE_CONSTRUCTION_OBJECT, STR_SHORTCUT_ROTATE_CONSTRUCTION_OBJECT }, + { SHORTCUT_UNDERGROUND_VIEW_TOGGLE, STR_SHORTCUT_UNDERGROUND_VIEW_TOGGLE }, + { SHORTCUT_REMOVE_BASE_LAND_TOGGLE, STR_SHORTCUT_REMOVE_BASE_LAND_TOGGLE }, + { SHORTCUT_REMOVE_VERTICAL_LAND_TOGGLE, STR_SHORTCUT_REMOVE_VERTICAL_LAND_TOGGLE }, + { SHORTCUT_SEE_THROUGH_RIDES_TOGGLE, STR_SHORTCUT_SEE_THROUGH_RIDES_TOGGLE }, + { SHORTCUT_SEE_THROUGH_SCENERY_TOGGLE, STR_SHORTCUT_SEE_THROUGH_SCENERY_TOGGLE }, + { SHORTCUT_INVISIBLE_SUPPORTS_TOGGLE, STR_SHORTCUT_INVISIBLE_SUPPORTS_TOGGLE }, + { SHORTCUT_INVISIBLE_PEOPLE_TOGGLE, STR_SHORTCUT_INVISIBLE_PEOPLE_TOGGLE }, + { SHORTCUT_HEIGHT_MARKS_ON_LAND_TOGGLE, STR_SHORTCUT_HEIGHT_MARKS_ON_LAND_TOGGLE }, + { SHORTCUT_HEIGHT_MARKS_ON_RIDE_TRACKS_TOGGLE, STR_SHORTCUT_HEIGHT_MARKS_ON_RIDE_TRACKS_TOGGLE }, + { SHORTCUT_HEIGHT_MARKS_ON_PATHS_TOGGLE, STR_SHORTCUT_HEIGHT_MARKS_ON_PATHS_TOGGLE }, + { SHORTCUT_ADJUST_LAND, STR_SHORTCUT_ADJUST_LAND }, + { SHORTCUT_ADJUST_WATER, STR_SHORTCUT_ADJUST_WATER }, + { SHORTCUT_BUILD_SCENERY, STR_SHORTCUT_BUILD_SCENERY }, + { SHORTCUT_BUILD_PATHS, STR_SHORTCUT_BUILD_PATHS }, + { SHORTCUT_BUILD_NEW_RIDE, STR_SHORTCUT_BUILD_NEW_RIDE }, + { SHORTCUT_SHOW_FINANCIAL_INFORMATION, STR_SHORTCUT_SHOW_FINANCIAL_INFORMATION }, + { SHORTCUT_SHOW_RESEARCH_INFORMATION, STR_SHORTCUT_SHOW_RESEARCH_INFORMATION }, + { SHORTCUT_SHOW_RIDES_LIST, STR_SHORTCUT_SHOW_RIDES_LIST }, + { SHORTCUT_SHOW_PARK_INFORMATION, STR_SHORTCUT_SHOW_PARK_INFORMATION }, + { SHORTCUT_SHOW_GUEST_LIST, STR_SHORTCUT_SHOW_GUEST_LIST }, + { SHORTCUT_SHOW_STAFF_LIST, STR_SHORTCUT_SHOW_STAFF_LIST }, + { SHORTCUT_SHOW_RECENT_MESSAGES, STR_SHORTCUT_SHOW_RECENT_MESSAGES }, + { SHORTCUT_SHOW_MAP, STR_SHORTCUT_SHOW_MAP }, + { SHORTCUT_SCREENSHOT, STR_SHORTCUT_SCREENSHOT }, + { SHORTCUT_REDUCE_GAME_SPEED, STR_SHORTCUT_REDUCE_GAME_SPEED }, + { SHORTCUT_INCREASE_GAME_SPEED, STR_SHORTCUT_INCREASE_GAME_SPEED }, + { SHORTCUT_OPEN_CHEAT_WINDOW, STR_SHORTCUT_OPEN_CHEATS_WINDOW }, + { SHORTCUT_REMOVE_TOP_BOTTOM_TOOLBAR_TOGGLE, STR_SHORTCUT_TOGGLE_VISIBILITY_OF_TOOLBARS }, + { SHORTCUT_SCROLL_MAP_UP, STR_SHORTCUT_SCROLL_MAP_UP }, + { SHORTCUT_SCROLL_MAP_LEFT, STR_SHORTCUT_SCROLL_MAP_LEFT }, + { SHORTCUT_SCROLL_MAP_DOWN, STR_SHORTCUT_SCROLL_MAP_DOWN }, + { SHORTCUT_SCROLL_MAP_RIGHT, STR_SHORTCUT_SCROLL_MAP_RIGHT }, + { SHORTCUT_OPEN_CHAT_WINDOW, STR_SEND_MESSAGE }, + { SHORTCUT_QUICK_SAVE_GAME, STR_SHORTCUT_QUICK_SAVE_GAME }, + { SHORTCUT_SHOW_OPTIONS, STR_SHORTCUT_SHOW_OPTIONS }, + { SHORTCUT_MUTE_SOUND, STR_SHORTCUT_MUTE_SOUND }, + { SHORTCUT_WINDOWED_MODE_TOGGLE, STR_SHORTCUT_WINDOWED_MODE_TOGGLE }, + { SHORTCUT_SHOW_MULTIPLAYER, STR_SHORTCUT_SHOW_MULTIPLAYER }, + { SHORTCUT_PAINT_ORIGINAL_TOGGLE, STR_SHORTCUT_PAINT_ORIGINAL }, + { SHORTCUT_DEBUG_PAINT_TOGGLE, STR_SHORTCUT_DEBUG_PAINT_TOGGLE }, + { SHORTCUT_SEE_THROUGH_PATHS_TOGGLE, STR_SHORTCUT_SEE_THROUGH_PATHS_TOGGLE }, + { SHORTCUT_RIDE_CONSTRUCTION_TURN_LEFT, STR_SHORTCUT_RIDE_CONSTRUCTION_TURN_LEFT }, + { SHORTCUT_RIDE_CONSTRUCTION_TURN_RIGHT, STR_SHORTCUT_RIDE_CONSTRUCTION_TURN_RIGHT }, + { SHORTCUT_RIDE_CONSTRUCTION_USE_TRACK_DEFAULT, STR_SHORTCUT_RIDE_CONSTRUCTION_USE_TRACK_DEFAULT }, + { SHORTCUT_RIDE_CONSTRUCTION_SLOPE_DOWN, STR_SHORTCUT_RIDE_CONSTRUCTION_SLOPE_DOWN }, + { SHORTCUT_RIDE_CONSTRUCTION_SLOPE_UP, STR_SHORTCUT_RIDE_CONSTRUCTION_SLOPE_UP }, + { SHORTCUT_RIDE_CONSTRUCTION_CHAIN_LIFT_TOGGLE, STR_SHORTCUT_RIDE_CONSTRUCTION_CHAIN_LIFT_TOGGLE }, + { SHORTCUT_RIDE_CONSTRUCTION_BANK_LEFT, STR_SHORTCUT_RIDE_CONSTRUCTION_BANK_LEFT }, + { SHORTCUT_RIDE_CONSTRUCTION_BANK_RIGHT, STR_SHORTCUT_RIDE_CONSTRUCTION_BANK_RIGHT }, + { SHORTCUT_RIDE_CONSTRUCTION_PREVIOUS_TRACK, STR_SHORTCUT_RIDE_CONSTRUCTION_PREVIOUS_TRACK }, + { SHORTCUT_RIDE_CONSTRUCTION_NEXT_TRACK, STR_SHORTCUT_RIDE_CONSTRUCTION_NEXT_TRACK }, + { SHORTCUT_RIDE_CONSTRUCTION_BUILD_CURRENT, STR_SHORTCUT_RIDE_CONSTRUCTION_BUILD_CURRENT }, + { SHORTCUT_RIDE_CONSTRUCTION_DEMOLISH_CURRENT, STR_SHORTCUT_RIDE_CONSTRUCTION_DEMOLISH_CURRENT }, + { SHORTCUT_LOAD_GAME, STR_LOAD_GAME }, + { SHORTCUT_CLEAR_SCENERY, STR_SHORTCUT_CLEAR_SCENERY }, + { SHORTCUT_GRIDLINES_DISPLAY_TOGGLE, STR_SHORTCUT_GRIDLINES_DISPLAY_TOGGLE }, + { SHORTCUT_VIEW_CLIPPING, STR_SHORTCUT_VIEW_CLIPPING }, + { SHORTCUT_HIGHLIGHT_PATH_ISSUES_TOGGLE, STR_SHORTCUT_HIGHLIGHT_PATH_ISSUES_TOGGLE }, + { SHORTCUT_TILE_INSPECTOR, STR_SHORTCUT_OPEN_TILE_INSPECTOR }, + { SHORTCUT_ADVANCE_TO_NEXT_TICK, STR_ADVANCE_TO_NEXT_TICK }, + { SHORTCUT_SCENERY_PICKER, STR_SHORTCUT_OPEN_SCENERY_PICKER }, + { SHORTCUT_SCALE_UP, STR_SHORTCUT_SCALE_UP }, + { SHORTCUT_SCALE_DOWN, STR_SHORTCUT_SCALE_DOWN }, + { SHORTCUT_INSERT_CORRUPT_ELEMENT, STR_SHORTCUT_INSERT_CORRPUT_ELEMENT }, + { SHORTCUT_COPY_ELEMENT, STR_SHORTCUT_COPY_ELEMENT }, + { SHORTCUT_PASTE_ELEMENT, STR_SHORTCUT_PASTE_ELEMENT }, + { SHORTCUT_REMOVE_ELEMENT, STR_SHORTCUT_REMOVE_ELEMENT }, + { SHORTCUT_MOVE_ELEMENT_UP, STR_SHORTCUT_MOVE_ELEMENT_UP }, + { SHORTCUT_MOVE_ELEMENT_DOWN, STR_SHORTCUT_MOVE_ELEMENT_DOWN }, + { SHORTCUT_INCREASE_X_COORD, STR_SHORTCUT_INCREASE_X_COORD }, + { SHORTCUT_DECREASE_X_COORD, STR_SHORTCUT_DECREASE_X_COORD }, + { SHORTCUT_INCREASE_Y_COORD, STR_SHORTCUT_INCREASE_Y_COORD }, + { SHORTCUT_DECREASE_Y_COORD, STR_SHORTCUT_DECREASE_Y_COORD }, + { SHORTCUT_INCREASE_ELEM_HEIGHT, STR_SHORTCUT_INCREASE_ELEM_HEIGHT }, + { SHORTCUT_DECREASE_ELEM_HEIGHT, STR_SHORTCUT_DECREASE_ELEM_HEIGHT }, }; // clang-format on @@ -183,7 +190,7 @@ rct_window* window_shortcut_keys_open() w->enabled_widgets = (1 << WIDX_CLOSE) | (1 << WIDX_RESET); window_init_scroll_widgets(w); - w->no_list_items = SHORTCUT_COUNT; + w->no_list_items = static_cast(std::size(ShortcutList)); w->selected_list_item = -1; w->min_width = WW; w->min_height = WH; @@ -258,7 +265,8 @@ static void window_shortcut_scrollmousedown(rct_window* w, int32_t scrollIndex, if (selected_item >= w->no_list_items) return; - window_shortcut_change_open(selected_item); + auto& shortcut = ShortcutList[selected_item]; + window_shortcut_change_open(shortcut.ShortcutId, shortcut.StringId); } /** @@ -304,13 +312,13 @@ static void window_shortcut_scrollpaint(rct_window* w, rct_drawpixelinfo* dpi, i gfx_filter_rect(dpi, 0, y - 1, 800, y + (SCROLLABLE_ROW_HEIGHT - 2), PALETTE_DARKEN_1); } - char templateString[128]; - keyboard_shortcuts_format_string(templateString, 128, i); + char keybinding[128]; + keyboard_shortcuts_format_string(keybinding, 128, ShortcutList[i].ShortcutId); set_format_arg(0, rct_string_id, STR_SHORTCUT_ENTRY_FORMAT); - set_format_arg(2, rct_string_id, ShortcutStringIds[i]); + set_format_arg(2, rct_string_id, ShortcutList[i].StringId); set_format_arg(4, rct_string_id, STR_STRING); - set_format_arg(6, char*, templateString); + set_format_arg(6, char*, keybinding); gfx_draw_string_left(dpi, format, gCommonFormatArgs, COLOUR_BLACK, 0, y - 1); } } diff --git a/src/openrct2-ui/windows/Window.h b/src/openrct2-ui/windows/Window.h index 32c3628b65..9c6953c098 100644 --- a/src/openrct2-ui/windows/Window.h +++ b/src/openrct2-ui/windows/Window.h @@ -60,7 +60,7 @@ rct_window* window_save_prompt_open(); rct_window* window_server_list_open(); rct_window* window_server_start_open(); #endif -rct_window* window_shortcut_change_open(int32_t selected_key); +rct_window* window_shortcut_change_open(int32_t selected_key, rct_string_id key_string_id); rct_window* window_shortcut_keys_open(); rct_window* window_staff_list_open(); rct_window* window_staff_open(Peep* peep);