diff --git a/src/openrct2-ui/interface/Dropdown.h b/src/openrct2-ui/interface/Dropdown.h index c2a9a3b8fc..cbac9c67a3 100644 --- a/src/openrct2-ui/interface/Dropdown.h +++ b/src/openrct2-ui/interface/Dropdown.h @@ -134,7 +134,7 @@ namespace OpenRCT2::Dropdown return ItemExt(_expectedItemIndex, STR_TOGGLE_OPTION, _stringId); } - constexpr ItemExt Separator() + constexpr ItemExt ExtSeparator() { return ItemExt(-1, Dropdown::kSeparatorString, kStringIdEmpty); } @@ -144,6 +144,16 @@ namespace OpenRCT2::Dropdown return Item{ STR_DROPDOWN_MENU_LABEL, stringId }; } + constexpr Item ToggleOption(StringId stringId) + { + return Item{ STR_TOGGLE_OPTION, stringId }; + } + + constexpr Item Separator() + { + return Item{ kSeparatorString }; + } + struct DropdownState { int32_t numItems{}; diff --git a/src/openrct2-ui/windows/EditorObjectSelection.cpp b/src/openrct2-ui/windows/EditorObjectSelection.cpp index 96273c7c9b..d6a9cde99f 100644 --- a/src/openrct2-ui/windows/EditorObjectSelection.cpp +++ b/src/openrct2-ui/windows/EditorObjectSelection.cpp @@ -513,8 +513,7 @@ namespace OpenRCT2::Ui::Windows case WIDX_FILTER_DROPDOWN_BTN: for (auto ddIdx = EnumValue(DDIX_FILTER_RCT1); ddIdx <= EnumValue(DDIX_FILTER_CUSTOM); ddIdx++) { - gDropdown.items[ddIdx].args.generic = kSourceStringIds[ddIdx]; - gDropdown.items[ddIdx].format = STR_TOGGLE_OPTION; + gDropdown.items[ddIdx] = Dropdown::ToggleOption(kSourceStringIds[ddIdx]); } // Track designs manager cannot select multiple, so only show selection filters if not in track designs @@ -522,12 +521,10 @@ namespace OpenRCT2::Ui::Windows if (!(gLegacyScene == LegacyScene::trackDesignsManager)) { numSelectionItems = 3; - gDropdown.items[DDIX_FILTER_SEPARATOR].format = 0; - gDropdown.items[DDIX_FILTER_SELECTED].format = STR_TOGGLE_OPTION; - gDropdown.items[DDIX_FILTER_NONSELECTED].format = STR_TOGGLE_OPTION; - gDropdown.items[DDIX_FILTER_SEPARATOR].args.generic = kStringIdNone; - gDropdown.items[DDIX_FILTER_SELECTED].args.generic = STR_SELECTED_ONLY; - gDropdown.items[DDIX_FILTER_NONSELECTED].args.generic = STR_NON_SELECTED_ONLY; + gDropdown.items[DDIX_FILTER_SEPARATOR] = Dropdown::Separator(); + + gDropdown.items[DDIX_FILTER_SELECTED] = Dropdown::ToggleOption(STR_SELECTED_ONLY); + gDropdown.items[DDIX_FILTER_NONSELECTED] = Dropdown::ToggleOption(STR_NON_SELECTED_ONLY); } auto& ddWidget = widgets[WIDX_FILTER_DROPDOWN]; diff --git a/src/openrct2-ui/windows/LoadSave.cpp b/src/openrct2-ui/windows/LoadSave.cpp index 20ec680889..7a10e705ae 100644 --- a/src/openrct2-ui/windows/LoadSave.cpp +++ b/src/openrct2-ui/windows/LoadSave.cpp @@ -902,14 +902,11 @@ namespace OpenRCT2::Ui::Windows if (widgetIndex != WIDX_SORT_CUSTOMISE) return; - gDropdown.items[0].format = STR_TOGGLE_OPTION; - gDropdown.items[1].format = STR_TOGGLE_OPTION; - gDropdown.items[2].format = STR_TOGGLE_OPTION; - gDropdown.items[3].format = Dropdown::kSeparatorString; + gDropdown.items[0] = Dropdown::ToggleOption(STR_FILEBROWSER_CUSTOMISE_FILENAME); + gDropdown.items[1] = Dropdown::ToggleOption(STR_FILEBROWSER_CUSTOMISE_SIZE); + gDropdown.items[2] = Dropdown::ToggleOption(STR_FILEBROWSER_CUSTOMISE_DATE); - gDropdown.items[0].args.generic = STR_FILEBROWSER_CUSTOMISE_FILENAME; - gDropdown.items[1].args.generic = STR_FILEBROWSER_CUSTOMISE_SIZE; - gDropdown.items[2].args.generic = STR_FILEBROWSER_CUSTOMISE_DATE; + gDropdown.items[3] = Dropdown::Separator(); gDropdown.items[4] = Dropdown::MenuLabel(STR_FILEBROWSER_PREVIEW_DISABLED); gDropdown.items[5] = Dropdown::MenuLabel(STR_FILEBROWSER_PREVIEW_MINIMAP); diff --git a/src/openrct2-ui/windows/Options.cpp b/src/openrct2-ui/windows/Options.cpp index da136f6f47..e49d45b237 100644 --- a/src/openrct2-ui/windows/Options.cpp +++ b/src/openrct2-ui/windows/Options.cpp @@ -1215,7 +1215,7 @@ namespace OpenRCT2::Ui::Windows gDropdown.items[i] = Dropdown::MenuLabel(CurrencyDescriptors[i].stringId); } - gDropdown.items[numOrdinaryCurrencies].format = Dropdown::kSeparatorString; + gDropdown.items[numOrdinaryCurrencies] = Dropdown::Separator(); gDropdown.items[numOrdinaryCurrencies + 1] = Dropdown::MenuLabel( CurrencyDescriptors[EnumValue(CurrencyType::Custom)].stringId); @@ -1916,7 +1916,7 @@ namespace OpenRCT2::Ui::Windows gDropdown.items[i].args.generic = reinterpret_cast(TitleSequenceManager::GetName(i)); } - gDropdown.items[numItems].format = Dropdown::kSeparatorString; + gDropdown.items[numItems] = Dropdown::Separator(); numItems++; gDropdown.items[numItems] = Dropdown::MenuLabel(STR_TITLE_SEQUENCE_RANDOM); numItems++; diff --git a/src/openrct2-ui/windows/RideConstruction.cpp b/src/openrct2-ui/windows/RideConstruction.cpp index 2dd3c8e1c2..8fa469ce0a 100644 --- a/src/openrct2-ui/windows/RideConstruction.cpp +++ b/src/openrct2-ui/windows/RideConstruction.cpp @@ -2591,7 +2591,7 @@ namespace OpenRCT2::Ui::Windows // Separate elements logically if (trackPiece == TrackElemType::None) { - gDropdown.items[i++].format = kStringIdEmpty; + gDropdown.items[i++] = Dropdown::Separator(); continue; } diff --git a/src/openrct2-ui/windows/TitleMenu.cpp b/src/openrct2-ui/windows/TitleMenu.cpp index 24f461f77b..e7e76fb569 100644 --- a/src/openrct2-ui/windows/TitleMenu.cpp +++ b/src/openrct2-ui/windows/TitleMenu.cpp @@ -194,7 +194,7 @@ namespace OpenRCT2::Ui::Windows if (!hasCustomItems) { hasCustomItems = true; - gDropdown.items[i++].format = kStringIdEmpty; + gDropdown.items[i++] = Dropdown::Separator(); } gDropdown.items[i].format = STR_STRING; diff --git a/src/openrct2-ui/windows/TopToolbar.cpp b/src/openrct2-ui/windows/TopToolbar.cpp index f765fe99e0..1902d6cfb7 100644 --- a/src/openrct2-ui/windows/TopToolbar.cpp +++ b/src/openrct2-ui/windows/TopToolbar.cpp @@ -1031,7 +1031,7 @@ namespace OpenRCT2::Ui::Windows ToggleOption(DDIDX_TRANSPARENT_WATER, STR_VIEWPORT_TRANSPARENT_WATER), ToggleOption(DDIDX_HIDE_BASE, STR_REMOVE_BASE_LAND), ToggleOption(DDIDX_HIDE_VERTICAL, STR_REMOVE_VERTICAL_FACES), - Separator(), + ExtSeparator(), ToggleOption(DDIDX_HIDE_RIDES, STR_SEE_THROUGH_RIDES), ToggleOption(DDIDX_HIDE_VEHICLES, STR_SEE_THROUGH_VEHICLES), ToggleOption(DDIDX_HIDE_VEGETATION, STR_SEE_THROUGH_VEGETATION), @@ -1040,14 +1040,14 @@ namespace OpenRCT2::Ui::Windows ToggleOption(DDIDX_HIDE_SUPPORTS, STR_SEE_THROUGH_SUPPORTS), ToggleOption(DDIDX_HIDE_GUESTS, STR_SEE_THROUGH_GUESTS), ToggleOption(DDIDX_HIDE_STAFF, STR_SEE_THROUGH_STAFF), - Separator(), + ExtSeparator(), ToggleOption(DDIDX_LAND_HEIGHTS, STR_HEIGHT_MARKS_ON_LAND), ToggleOption(DDIDX_TRACK_HEIGHTS, STR_HEIGHT_MARKS_ON_RIDE_TRACKS), ToggleOption(DDIDX_PATH_HEIGHTS, STR_HEIGHT_MARKS_ON_PATHS), - Separator(), + ExtSeparator(), ToggleOption(DDIDX_VIEW_CLIPPING, STR_VIEW_CLIPPING_MENU), ToggleOption(DDIDX_HIGHLIGHT_PATH_ISSUES, STR_HIGHLIGHT_PATH_ISSUES_MENU), - Separator(), + ExtSeparator(), ToggleOption(DDIDX_TRANSPARENCY, STR_TRANSPARENCY_OPTIONS), }; @@ -1175,7 +1175,7 @@ namespace OpenRCT2::Ui::Windows const auto& customMenuItems = OpenRCT2::Scripting::CustomMenuItems; if (!customMenuItems.empty()) { - gDropdown.items[i++].format = kStringIdEmpty; + gDropdown.items[i++] = Dropdown::Separator(); for (const auto& item : customMenuItems) { if (item.Kind == OpenRCT2::Scripting::CustomToolbarMenuItemKind::Standard) @@ -1243,22 +1243,18 @@ namespace OpenRCT2::Ui::Windows void TopToolbar::InitFastforwardMenu(Widget& widget) { int32_t num_items = 4; - gDropdown.items[0].format = STR_TOGGLE_OPTION; - gDropdown.items[1].format = STR_TOGGLE_OPTION; - gDropdown.items[2].format = STR_TOGGLE_OPTION; - gDropdown.items[3].format = STR_TOGGLE_OPTION; + gDropdown.items[0] = Dropdown::MenuLabel(STR_SPEED_NORMAL); + gDropdown.items[1] = Dropdown::MenuLabel(STR_SPEED_QUICK); + gDropdown.items[2] = Dropdown::MenuLabel(STR_SPEED_FAST); + gDropdown.items[3] = Dropdown::MenuLabel(STR_SPEED_TURBO); + if (Config::Get().general.DebuggingTools) { - gDropdown.items[4].format = kStringIdEmpty; - gDropdown.items[5].format = STR_TOGGLE_OPTION; - gDropdown.items[5].args.generic = STR_SPEED_HYPER; num_items = 6; - } - gDropdown.items[0].args.generic = STR_SPEED_NORMAL; - gDropdown.items[1].args.generic = STR_SPEED_QUICK; - gDropdown.items[2].args.generic = STR_SPEED_FAST; - gDropdown.items[3].args.generic = STR_SPEED_TURBO; + gDropdown.items[4] = Dropdown::Separator(); + gDropdown.items[5] = Dropdown::MenuLabel(STR_SPEED_HYPER); + } WindowDropdownShowText( { windowPos.x + widget.left, windowPos.y + widget.top }, widget.height() + 1, @@ -1312,7 +1308,7 @@ namespace OpenRCT2::Ui::Windows { gDropdown.items[numItems++].format = STR_SCREENSHOT; gDropdown.items[numItems++].format = STR_GIANT_SCREENSHOT; - gDropdown.items[numItems++].format = kStringIdEmpty; + gDropdown.items[numItems++] = Dropdown::Separator(); gDropdown.items[numItems++].format = STR_ABOUT; gDropdown.items[numItems++].format = STR_FILE_BUG_ON_GITHUB; @@ -1320,7 +1316,7 @@ namespace OpenRCT2::Ui::Windows gDropdown.items[numItems++].format = STR_UPDATE_AVAILABLE; gDropdown.items[numItems++].format = STR_OPTIONS; - gDropdown.items[numItems++].format = kStringIdEmpty; + gDropdown.items[numItems++] = Dropdown::Separator(); if (gLegacyScene == LegacyScene::trackDesigner) gDropdown.items[numItems++].format = STR_QUIT_ROLLERCOASTER_DESIGNER; @@ -1332,12 +1328,12 @@ namespace OpenRCT2::Ui::Windows else if (gLegacyScene == LegacyScene::scenarioEditor) { gDropdown.items[numItems++].format = STR_LOAD_LANDSCAPE; - gDropdown.items[numItems++].format = kStringIdEmpty; + gDropdown.items[numItems++] = Dropdown::Separator(); gDropdown.items[numItems++].format = STR_SAVE_LANDSCAPE; - gDropdown.items[numItems++].format = kStringIdEmpty; + gDropdown.items[numItems++] = Dropdown::Separator(); gDropdown.items[numItems++].format = STR_SCREENSHOT; gDropdown.items[numItems++].format = STR_GIANT_SCREENSHOT; - gDropdown.items[numItems++].format = kStringIdEmpty; + gDropdown.items[numItems++] = Dropdown::Separator(); gDropdown.items[numItems++].format = STR_ABOUT; gDropdown.items[numItems++].format = STR_FILE_BUG_ON_GITHUB; @@ -1345,7 +1341,7 @@ namespace OpenRCT2::Ui::Windows gDropdown.items[numItems++].format = STR_UPDATE_AVAILABLE; gDropdown.items[numItems++].format = STR_OPTIONS; - gDropdown.items[numItems++].format = kStringIdEmpty; + gDropdown.items[numItems++] = Dropdown::Separator(); gDropdown.items[numItems++].format = STR_QUIT_SCENARIO_EDITOR; gDropdown.items[numItems++].format = STR_EXIT_OPENRCT2; } @@ -1353,13 +1349,13 @@ namespace OpenRCT2::Ui::Windows { gDropdown.items[numItems++].format = STR_NEW_GAME; gDropdown.items[numItems++].format = STR_LOAD_GAME; - gDropdown.items[numItems++].format = kStringIdEmpty; + gDropdown.items[numItems++] = Dropdown::Separator(); gDropdown.items[numItems++].format = STR_SAVE_GAME; gDropdown.items[numItems++].format = STR_SAVE_GAME_AS; - gDropdown.items[numItems++].format = kStringIdEmpty; + gDropdown.items[numItems++] = Dropdown::Separator(); gDropdown.items[numItems++].format = STR_SCREENSHOT; gDropdown.items[numItems++].format = STR_GIANT_SCREENSHOT; - gDropdown.items[numItems++].format = kStringIdEmpty; + gDropdown.items[numItems++] = Dropdown::Separator(); gDropdown.items[numItems++].format = STR_ABOUT; gDropdown.items[numItems++].format = STR_FILE_BUG_ON_GITHUB; @@ -1367,7 +1363,7 @@ namespace OpenRCT2::Ui::Windows gDropdown.items[numItems++].format = STR_UPDATE_AVAILABLE; gDropdown.items[numItems++].format = STR_OPTIONS; - gDropdown.items[numItems++].format = kStringIdEmpty; + gDropdown.items[numItems++] = Dropdown::Separator(); gDropdown.items[numItems++].format = STR_QUIT_TO_MENU; gDropdown.items[numItems++].format = STR_EXIT_OPENRCT2; } @@ -1387,7 +1383,7 @@ namespace OpenRCT2::Ui::Windows ToggleOption(DDIDX_OBJECT_SELECTION, STR_DEBUG_DROPDOWN_OBJECT_SELECTION), ToggleOption(DDIDX_INVENTIONS_LIST, STR_DEBUG_DROPDOWN_INVENTIONS_LIST), ToggleOption(DDIDX_SCENARIO_OPTIONS, STR_DEBUG_DROPDOWN_SCENARIO_OPTIONS), - Separator(), + ExtSeparator(), ToggleOption(DDIDX_ENABLE_SANDBOX_MODE, STR_ENABLE_SANDBOX_MODE), ToggleOption(DDIDX_DISABLE_CLEARANCE_CHECKS, STR_DISABLE_CLEARANCE_CHECKS), ToggleOption(DDIDX_DISABLE_SUPPORT_LIMITS, STR_DISABLE_SUPPORT_LIMITS), @@ -1469,16 +1465,15 @@ namespace OpenRCT2::Ui::Windows void TopToolbar::InitDebugMenu(Widget& widget) { - gDropdown.items[DDIDX_CONSOLE].format = STR_TOGGLE_OPTION; - gDropdown.items[DDIDX_CONSOLE].args.generic = STR_DEBUG_DROPDOWN_CONSOLE; - gDropdown.items[DDIDX_DEBUG_PAINT].format = STR_TOGGLE_OPTION; - gDropdown.items[DDIDX_DEBUG_PAINT].args.generic = STR_DEBUG_DROPDOWN_DEBUG_PAINT; + gDropdown.items[DDIDX_CONSOLE] = Dropdown::ToggleOption(STR_DEBUG_DROPDOWN_CONSOLE); + gDropdown.items[DDIDX_DEBUG_PAINT] = Dropdown::ToggleOption(STR_DEBUG_DROPDOWN_DEBUG_PAINT); WindowDropdownShowText( { windowPos.x + widget.left, windowPos.y + widget.top }, widget.height() + 1, colours[0].withFlag(ColourFlag::translucent, true), Dropdown::Flag::StayOpen, TOP_TOOLBAR_DEBUG_COUNT); auto* windowMgr = GetWindowManager(); + gDropdown.items[DDIDX_CONSOLE].setChecked(windowMgr->FindByClass(WindowClass::Console) != nullptr); gDropdown.items[DDIDX_DEBUG_PAINT].setChecked(windowMgr->FindByClass(WindowClass::DebugPaint) != nullptr); }