diff --git a/data/language/en-GB.txt b/data/language/en-GB.txt index d7a5b39ed7..17ae1fe1fd 100644 --- a/data/language/en-GB.txt +++ b/data/language/en-GB.txt @@ -3686,6 +3686,8 @@ STR_6429 :Joy {INT32} STR_6430 :LMB STR_6431 :RMB STR_6432 :Mouse {INT32} +STR_6433 :Remove +STR_6434 :Remove all bindings for this shortcut. ############# # Scenarios # diff --git a/src/openrct2-ui/windows/ShortcutKeys.cpp b/src/openrct2-ui/windows/ShortcutKeys.cpp index fea90add0b..33cbf4b5d0 100644 --- a/src/openrct2-ui/windows/ShortcutKeys.cpp +++ b/src/openrct2-ui/windows/ShortcutKeys.cpp @@ -48,11 +48,17 @@ static rct_widget window_shortcut_widgets[] = { static constexpr const rct_string_id CHANGE_WINDOW_TITLE = STR_SHORTCUT_CHANGE_TITLE; static constexpr const int32_t CHANGE_WW = 250; -static constexpr const int32_t CHANGE_WH = 60; +static constexpr const int32_t CHANGE_WH = 80; + +enum +{ + WIDX_REMOVE = 3 +}; // clang-format off static rct_widget window_shortcut_change_widgets[] = { WINDOW_SHIM(CHANGE_WINDOW_TITLE, CHANGE_WW, CHANGE_WH), + MakeWidget({ 75, 56 }, { 100, 12 }, WindowWidgetType::Button, WindowColour::Primary, STR_SHORTCUT_REMOVE, STR_SHORTCUT_REMOVE_TIP), { WIDGETS_END } }; // clang-format on @@ -60,6 +66,7 @@ static rct_widget window_shortcut_change_widgets[] = { class ChangeShortcutWindow final : public Window { private: + std::string _shortcutId; rct_string_id _shortcutLocalisedName{}; std::string _shortcutCustomName; @@ -74,6 +81,7 @@ public: auto w = WindowCreate(WC_CHANGE_KEYBOARD_SHORTCUT, CHANGE_WW, CHANGE_WH, WF_CENTRE_SCREEN); if (w != nullptr) { + w->_shortcutId = shortcutId; w->_shortcutLocalisedName = registeredShortcut->LocalisedName; w->_shortcutCustomName = registeredShortcut->CustomName; shortcutManager.SetPendingShortcutChange(registeredShortcut->Id); @@ -86,7 +94,7 @@ public: void OnOpen() override { widgets = window_shortcut_change_widgets; - enabled_widgets = (1ULL << WIDX_CLOSE); + enabled_widgets = (1ULL << WIDX_CLOSE) | (1ULL << WIDX_REMOVE); WindowInitScrollWidgets(this); } @@ -104,6 +112,9 @@ public: case WIDX_CLOSE: Close(); break; + case WIDX_REMOVE: + Remove(); + break; } } @@ -128,6 +139,17 @@ public: private: void NotifyShortcutKeysWindow(); + + void Remove() + { + auto& shortcutManager = GetShortcutManager(); + auto* shortcut = shortcutManager.GetShortcut(_shortcutId); + if (shortcut != nullptr) + { + shortcut->Current.clear(); + } + Close(); + } }; class ShortcutKeysWindow final : public Window diff --git a/src/openrct2/localisation/StringIds.h b/src/openrct2/localisation/StringIds.h index b8d7875761..e4945c0318 100644 --- a/src/openrct2/localisation/StringIds.h +++ b/src/openrct2/localisation/StringIds.h @@ -3946,6 +3946,9 @@ enum STR_SHORTCUT_MOUSE_RIGHT = 6431, STR_SHORTCUT_MOUSE_NUMBER = 6432, + STR_SHORTCUT_REMOVE = 6433, + STR_SHORTCUT_REMOVE_TIP = 6434, + // Have to include resource strings (from scenarios and objects) for the time being now that language is partially working /* MAX_STR_COUNT = 32768 */ // MAX_STR_COUNT - upper limit for number of strings, not the current count strings };