From 577c3336c6b577fa2764b4077409aa61e65cba32 Mon Sep 17 00:00:00 2001 From: Michael Steenbeek <1478678+Gymnasiast@users.noreply.github.com> Date: Sat, 23 Aug 2025 13:56:13 +0200 Subject: [PATCH] Create struct for all dropdown-related globals (#25023) --- src/openrct2-ui/input/MouseInput.cpp | 24 +-- src/openrct2-ui/interface/Dropdown.h | 26 ++-- src/openrct2-ui/interface/LandTool.cpp | 8 +- src/openrct2-ui/scripting/CustomWindow.cpp | 6 +- src/openrct2-ui/windows/Banner.cpp | 4 +- src/openrct2-ui/windows/Cheats.cpp | 8 +- src/openrct2-ui/windows/CustomCurrency.cpp | 8 +- src/openrct2-ui/windows/Dropdown.cpp | 85 +++++------ .../windows/EditorObjectSelection.cpp | 16 +- .../windows/EditorScenarioOptions.cpp | 40 ++--- src/openrct2-ui/windows/Footpath.cpp | 20 +-- src/openrct2-ui/windows/Guest.cpp | 2 +- src/openrct2-ui/windows/GuestList.cpp | 12 +- src/openrct2-ui/windows/Land.cpp | 4 +- src/openrct2-ui/windows/LoadSave.cpp | 26 ++-- src/openrct2-ui/windows/MapGen.cpp | 4 +- src/openrct2-ui/windows/Multiplayer.cpp | 4 +- src/openrct2-ui/windows/NewCampaign.cpp | 10 +- src/openrct2-ui/windows/Options.cpp | 130 ++++++++-------- src/openrct2-ui/windows/Park.cpp | 14 +- src/openrct2-ui/windows/Player.cpp | 4 +- src/openrct2-ui/windows/Research.cpp | 4 +- src/openrct2-ui/windows/Ride.cpp | 116 +++++++------- src/openrct2-ui/windows/RideConstruction.cpp | 6 +- src/openrct2-ui/windows/RideList.cpp | 10 +- src/openrct2-ui/windows/Staff.cpp | 16 +- src/openrct2-ui/windows/Themes.cpp | 4 +- src/openrct2-ui/windows/TileInspector.cpp | 12 +- src/openrct2-ui/windows/TitleMenu.cpp | 16 +- src/openrct2-ui/windows/TopToolbar.cpp | 144 +++++++++--------- 30 files changed, 392 insertions(+), 391 deletions(-) diff --git a/src/openrct2-ui/input/MouseInput.cpp b/src/openrct2-ui/input/MouseInput.cpp index 1b55a43633..1cf7019745 100644 --- a/src/openrct2-ui/input/MouseInput.cpp +++ b/src/openrct2-ui/input/MouseInput.cpp @@ -1319,7 +1319,7 @@ namespace OpenRCT2 { if (_inputState == InputState::DropdownActive) { - gDropdownHighlightedIndex = gDropdownDefaultIndex; + gDropdown.highlightedIndex = gDropdown.defaultIndex; windowMgr->InvalidateByClass(WindowClass::Dropdown); } return; @@ -1344,7 +1344,7 @@ namespace OpenRCT2 dropdown_index = DropdownIndexFromPoint(screenCoords, w); dropdownCleanup = dropdown_index == -1 || (dropdown_index < Dropdown::kItemsMaxSize && Dropdown::IsDisabled(dropdown_index)) - || gDropdownItems[dropdown_index].isSeparator(); + || gDropdown.items[dropdown_index].isSeparator(); w = nullptr; // To be closed right next } else @@ -1392,9 +1392,9 @@ namespace OpenRCT2 if (dropdown_index == -1) { - if (!Dropdown::IsDisabled(gDropdownDefaultIndex)) + if (!Dropdown::IsDisabled(gDropdown.defaultIndex)) { - dropdown_index = gDropdownDefaultIndex; + dropdown_index = gDropdown.defaultIndex; } } cursor_w->OnDropdown(cursor_widgetIndex, dropdown_index); @@ -1447,13 +1447,13 @@ namespace OpenRCT2 } return; } - else if (gDropdownHasTooltips) + else if (gDropdown.hasTooltips) { // This is ordinarily covered in InputWidgetOver but the dropdown with colours is a special case. InputUpdateTooltip(w, widgetIndex, screenCoords); } - gDropdownHighlightedIndex = -1; + gDropdown.highlightedIndex = -1; windowMgr->InvalidateByClass(WindowClass::Dropdown); if (w == nullptr) { @@ -1468,12 +1468,12 @@ namespace OpenRCT2 return; } - if (gDropdownHasTooltips && gDropdownLastTooltipHover != dropdown_index) + if (gDropdown.hasTooltips && gDropdown.lastTooltipHover != dropdown_index) { - gDropdownLastTooltipHover = dropdown_index; + gDropdown.lastTooltipHover = dropdown_index; WindowTooltipClose(); - WindowTooltipShow(OpenRCT2String{ gDropdownTooltips[dropdown_index], {} }, screenCoords); + WindowTooltipShow(OpenRCT2String{ gDropdown.tooltips[dropdown_index], {} }, screenCoords); } if (dropdown_index < Dropdown::kItemsMaxSize && Dropdown::IsDisabled(dropdown_index)) @@ -1481,17 +1481,17 @@ namespace OpenRCT2 return; } - if (gDropdownItems[dropdown_index].isSeparator()) + if (gDropdown.items[dropdown_index].isSeparator()) { return; } - gDropdownHighlightedIndex = dropdown_index; + gDropdown.highlightedIndex = dropdown_index; windowMgr->InvalidateByClass(WindowClass::Dropdown); } else { - gDropdownLastTooltipHover = -1; + gDropdown.lastTooltipHover = -1; WindowTooltipClose(); } } diff --git a/src/openrct2-ui/interface/Dropdown.h b/src/openrct2-ui/interface/Dropdown.h index 43d760d309..ef370a0034 100644 --- a/src/openrct2-ui/interface/Dropdown.h +++ b/src/openrct2-ui/interface/Dropdown.h @@ -25,17 +25,13 @@ namespace OpenRCT2::Dropdown constexpr StringId kFormatColourPicker = 0xFFFE; constexpr StringId kFormatLandPicker = 0xFFFF; constexpr int32_t kItemsMaxSize = 512; + + struct DropdownState; } // namespace OpenRCT2::Dropdown namespace OpenRCT2::Ui::Windows { - extern int32_t gDropdownNumItems; - extern std::array gDropdownItems; - extern std::array gDropdownTooltips; - extern bool gDropdownHasTooltips; - extern int32_t gDropdownLastTooltipHover; - extern int32_t gDropdownHighlightedIndex; - extern int32_t gDropdownDefaultIndex; + extern Dropdown::DropdownState gDropdown; void WindowDropdownShowText( const ScreenCoordsXY& screenPos, int32_t extray, ColourWithFlags colour, uint8_t flags, size_t num_items, @@ -134,14 +130,26 @@ namespace OpenRCT2::Dropdown return ItemExt(-1, Dropdown::kSeparatorString, kStringIdEmpty); } + struct DropdownState + { + int32_t numItems{}; + std::array items{}; + std::array tooltips{}; + std::array itemsImages{}; + bool hasTooltips{}; + int32_t lastTooltipHover{}; + int32_t highlightedIndex{}; + int32_t defaultIndex{}; + }; + template void SetItems(const Dropdown::ItemExt (&items)[N]) { for (int i = 0; i < N; ++i) { const ItemExt& item = items[i]; - OpenRCT2::Ui::Windows::gDropdownItems[i].format = item.itemFormat; - OpenRCT2::Ui::Windows::gDropdownItems[i].args = item.stringId; + OpenRCT2::Ui::Windows::gDropdown.items[i].format = item.itemFormat; + OpenRCT2::Ui::Windows::gDropdown.items[i].args = item.stringId; } } diff --git a/src/openrct2-ui/interface/LandTool.cpp b/src/openrct2-ui/interface/LandTool.cpp index 9ece4a4565..7cb1755fb0 100644 --- a/src/openrct2-ui/interface/LandTool.cpp +++ b/src/openrct2-ui/interface/LandTool.cpp @@ -67,7 +67,7 @@ void LandTool::ShowSurfaceStyleDropdown(WindowBase* w, Widget* widget, ObjectEnt if (surfaceObj->Colour != TerrainSurfaceObject::kNoValue) imageId = imageId.WithPrimary(surfaceObj->Colour); - gDropdownItems[itemIndex].format = Dropdown::kFormatLandPicker; + gDropdown.items[itemIndex].format = Dropdown::kFormatLandPicker; Dropdown::SetImage(itemIndex, imageId); if (i == currentSurfaceType) { @@ -82,7 +82,7 @@ void LandTool::ShowSurfaceStyleDropdown(WindowBase* w, Widget* widget, ObjectEnt w->windowPos.x + widget->left, w->windowPos.y + widget->top, widget->height(), w->colours[2], 0, surfaceCount, 47, 36, DropdownGetAppropriateImageDropdownItemsPerRow(surfaceCount)); - gDropdownDefaultIndex = defaultIndex; + gDropdown.defaultIndex = defaultIndex; } ObjectEntryIndex LandTool::GetSurfaceStyleFromDropdownIndex(size_t index) @@ -117,7 +117,7 @@ void LandTool::ShowEdgeStyleDropdown(WindowBase* w, Widget* widget, ObjectEntryI // If fallback images are loaded, the RCT1 styles will just look like copies of already existing styles, so hide them. if (edgeObj != nullptr && !edgeObj->UsesFallbackImages()) { - gDropdownItems[itemIndex].format = Dropdown::kFormatLandPicker; + gDropdown.items[itemIndex].format = Dropdown::kFormatLandPicker; Dropdown::SetImage(itemIndex, ImageId(edgeObj->IconImageId)); if (i == currentEdgeType) { @@ -133,7 +133,7 @@ void LandTool::ShowEdgeStyleDropdown(WindowBase* w, Widget* widget, ObjectEntryI w->windowPos.x + widget->left, w->windowPos.y + widget->top, widget->height(), w->colours[2], 0, edgeCount, 47, 36, itemsPerRow); - gDropdownDefaultIndex = defaultIndex; + gDropdown.defaultIndex = defaultIndex; } ObjectEntryIndex LandTool::GetEdgeStyleFromDropdownIndex(size_t index) diff --git a/src/openrct2-ui/scripting/CustomWindow.cpp b/src/openrct2-ui/scripting/CustomWindow.cpp index 68180742d1..efdaa83875 100644 --- a/src/openrct2-ui/scripting/CustomWindow.cpp +++ b/src/openrct2-ui/scripting/CustomWindow.cpp @@ -649,12 +649,12 @@ namespace OpenRCT2::Ui::Windows const auto numItems = std::min(items.size(), Dropdown::kItemsMaxSize); for (size_t i = 0; i < numItems; i++) { - gDropdownItems[i].format = STR_OPTIONS_DROPDOWN_ITEM; + gDropdown.items[i].format = STR_OPTIONS_DROPDOWN_ITEM; if (selectedIndex == static_cast(i)) - gDropdownItems[i].format = STR_OPTIONS_DROPDOWN_ITEM_SELECTED; + gDropdown.items[i].format = STR_OPTIONS_DROPDOWN_ITEM_SELECTED; auto sz = items[i].c_str(); - std::memcpy(&gDropdownItems[i].args, &sz, sizeof(const char*)); + std::memcpy(&gDropdown.items[i].args, &sz, sizeof(const char*)); } WindowDropdownShowTextCustomWidth( { windowPos.x + widget->left, windowPos.y + widget->top }, widget->height() + 1, diff --git a/src/openrct2-ui/windows/Banner.cpp b/src/openrct2-ui/windows/Banner.cpp index a93a91191d..6c0cef0de6 100644 --- a/src/openrct2-ui/windows/Banner.cpp +++ b/src/openrct2-ui/windows/Banner.cpp @@ -167,8 +167,8 @@ namespace OpenRCT2::Ui::Windows auto numItems = std::size(kBannerColouredTextFormats) - 1; for (size_t i = 0; i < numItems; ++i) { - gDropdownItems[i].format = STR_DROPDOWN_MENU_LABEL; - gDropdownItems[i].args = kBannerColouredTextFormats[i + 1]; + gDropdown.items[i].format = STR_DROPDOWN_MENU_LABEL; + gDropdown.items[i].args = kBannerColouredTextFormats[i + 1]; } // Switch to the dropdown box widget. diff --git a/src/openrct2-ui/windows/Cheats.cpp b/src/openrct2-ui/windows/Cheats.cpp index 3e983bd9e9..03d3f1b5fa 100644 --- a/src/openrct2-ui/windows/Cheats.cpp +++ b/src/openrct2-ui/windows/Cheats.cpp @@ -994,8 +994,8 @@ static StringId window_cheats_page_titles[] = { for (size_t i = 0; i < std::size(_staffSpeedNames); i++) { - gDropdownItems[i].args = _staffSpeedNames[i]; - gDropdownItems[i].format = STR_DROPDOWN_MENU_LABEL; + gDropdown.items[i].args = _staffSpeedNames[i]; + gDropdown.items[i].format = STR_DROPDOWN_MENU_LABEL; } WindowDropdownShowTextCustomWidth( @@ -1018,8 +1018,8 @@ static StringId window_cheats_page_titles[] = { for (size_t i = 0; i < std::size(WeatherTypes); i++) { - gDropdownItems[i].format = STR_DROPDOWN_MENU_LABEL; - gDropdownItems[i].args = WeatherTypes[i]; + gDropdown.items[i].format = STR_DROPDOWN_MENU_LABEL; + gDropdown.items[i].args = WeatherTypes[i]; } WindowDropdownShowTextCustomWidth( { windowPos.x + dropdownWidget->left, windowPos.y + dropdownWidget->top }, dropdownWidget->height() + 1, diff --git a/src/openrct2-ui/windows/CustomCurrency.cpp b/src/openrct2-ui/windows/CustomCurrency.cpp index f73323d690..6312eb7243 100644 --- a/src/openrct2-ui/windows/CustomCurrency.cpp +++ b/src/openrct2-ui/windows/CustomCurrency.cpp @@ -87,11 +87,11 @@ namespace OpenRCT2::Ui::Windows } break; case WIDX_AFFIX_DROPDOWN_BUTTON: - gDropdownItems[0].format = STR_DROPDOWN_MENU_LABEL; - gDropdownItems[0].args = STR_PREFIX; + gDropdown.items[0].format = STR_DROPDOWN_MENU_LABEL; + gDropdown.items[0].args = STR_PREFIX; - gDropdownItems[1].format = STR_DROPDOWN_MENU_LABEL; - gDropdownItems[1].args = STR_SUFFIX; + gDropdown.items[1].format = STR_DROPDOWN_MENU_LABEL; + gDropdown.items[1].args = STR_SUFFIX; WindowDropdownShowTextCustomWidth( { windowPos.x + widget->left, windowPos.y + widget->top }, widget->height() + 1, colours[1], 0, diff --git a/src/openrct2-ui/windows/Dropdown.cpp b/src/openrct2-ui/windows/Dropdown.cpp index 218a587465..118032037e 100644 --- a/src/openrct2-ui/windows/Dropdown.cpp +++ b/src/openrct2-ui/windows/Dropdown.cpp @@ -46,22 +46,15 @@ namespace OpenRCT2::Ui::Windows makeWidget({ 0, 0 }, { 1, 1 }, WidgetType::imgBtn, WindowColour::primary), }; - std::array gDropdownItems; - std::array gDropdownTooltips; - static std::array _dropdownItemsImages; + Dropdown::DropdownState gDropdown{}; - int32_t gDropdownNumItems; - bool gDropdownHasTooltips; - int32_t gDropdownLastTooltipHover; - int32_t gDropdownHighlightedIndex; - int32_t gDropdownDefaultIndex; static bool _dropdownPrepareUseImages; static void ResetDropdownFlags() { - for (size_t i = 0; i < std::size(gDropdownItems); i++) + for (size_t i = 0; i < std::size(gDropdown.items); i++) { - gDropdownItems[i].flags.clearAll(); + gDropdown.items[i].flags.clearAll(); } } @@ -80,10 +73,10 @@ namespace OpenRCT2::Ui::Windows SetWidgets(kWindowDropdownWidgets); // Input state - gDropdownHighlightedIndex = -1; + gDropdown.highlightedIndex = -1; ResetDropdownFlags(); - gDropdownHasTooltips = false; - gDropdownDefaultIndex = -1; + gDropdown.hasTooltips = false; + gDropdown.defaultIndex = -1; InputSetState(InputState::DropdownActive); } @@ -101,8 +94,8 @@ namespace OpenRCT2::Ui::Windows { DrawWidgets(rt); - int32_t highlightedIndex = gDropdownHighlightedIndex; - for (int32_t i = 0; i < gDropdownNumItems; i++) + int32_t highlightedIndex = gDropdown.highlightedIndex; + for (int32_t i = 0; i < gDropdown.numItems; i++) { ScreenCoordsXY cellCoords; if (ListVertically) @@ -113,7 +106,7 @@ namespace OpenRCT2::Ui::Windows ScreenCoordsXY screenCoords = windowPos + ScreenCoordsXY{ 2 + (cellCoords.x * ItemWidth), 2 + (cellCoords.y * ItemHeight) }; - if (gDropdownItems[i].isSeparator()) + if (gDropdown.items[i].isSeparator()) { const auto leftTop = screenCoords + ScreenCoordsXY{ 2, (ItemHeight / 2) - 1 }; const auto rightBottom = leftTop + ScreenCoordsXY{ ItemWidth - 4, 0 }; @@ -141,12 +134,12 @@ namespace OpenRCT2::Ui::Windows GfxFilterRect(rt, { screenCoords, rightBottom }, FilterPaletteID::PaletteDarken3); } - StringId item = gDropdownItems[i].format; + StringId item = gDropdown.items[i].format; if (item == Dropdown::kFormatLandPicker || item == Dropdown::kFormatColourPicker) { // Image item - auto image = UseImages ? _dropdownItemsImages[i] - : ImageId(static_cast(gDropdownItems[i].args)); + auto image = UseImages ? gDropdown.itemsImages[i] + : ImageId(static_cast(gDropdown.items[i].args)); if (item == Dropdown::kFormatColourPicker && highlightedIndex == i) image = image.WithIndexOffset(1); GfxDrawSprite(rt, image, screenCoords); @@ -166,7 +159,7 @@ namespace OpenRCT2::Ui::Windows // Draw item string auto yOffset = GetAdditionalRowPadding(); - Formatter ft(reinterpret_cast(&gDropdownItems[i].args)); + Formatter ft(reinterpret_cast(&gDropdown.items[i].args)); DrawTextEllipsised( rt, { screenCoords.x + 2, screenCoords.y + yOffset }, width - 7, item, ft, { colour }); } @@ -190,12 +183,12 @@ namespace OpenRCT2::Ui::Windows // Set and calculate num items, rows and columns ItemHeight = (txtFlags & Dropdown::Flag::CustomHeight) ? customItemHeight : GetDefaultRowHeight(); - gDropdownNumItems = static_cast(numItems); - if (gDropdownNumItems > 1) + gDropdown.numItems = static_cast(numItems); + if (gDropdown.numItems > 1) { int32_t numAvailableRows = std::max(1, getSpaceUntilBottom(screenPos, extraY) / ItemHeight); - NumRows = std::min({ gDropdownNumItems, numAvailableRows, numRowsPerColumn }); - NumColumns = (gDropdownNumItems + NumRows - 1) / NumRows; + NumRows = std::min({ gDropdown.numItems, numAvailableRows, numRowsPerColumn }); + NumColumns = (gDropdown.numItems + NumRows - 1) / NumRows; } else { @@ -226,10 +219,10 @@ namespace OpenRCT2::Ui::Windows // Set and calculate num items, rows and columns ItemWidth = itemWidth; ItemHeight = itemHeight; - gDropdownNumItems = numItems; + gDropdown.numItems = numItems; // There must always be at least one column and row to prevent dividing by zero - if (gDropdownNumItems == 0) + if (gDropdown.numItems == 0) { NumColumns = 1; NumRows = 1; @@ -237,8 +230,8 @@ namespace OpenRCT2::Ui::Windows else { NumColumns = std::max(1, numColumns); - NumRows = gDropdownNumItems / NumColumns; - if (gDropdownNumItems % NumColumns != 0) + NumRows = gDropdown.numItems / NumColumns; + if (gDropdown.numItems % NumColumns != 0) NumRows++; } @@ -279,7 +272,7 @@ namespace OpenRCT2::Ui::Windows else dropdownIndex = rowNum * NumColumns + columnNum; - if (dropdownIndex >= gDropdownNumItems) + if (dropdownIndex >= gDropdown.numItems) return -1; return dropdownIndex; @@ -314,7 +307,7 @@ namespace OpenRCT2::Ui::Windows { for (size_t i = 0; i < items.size(); i++) { - gDropdownItems[i] = items[i]; + gDropdown.items[i] = items[i]; } } @@ -339,7 +332,7 @@ namespace OpenRCT2::Ui::Windows int32_t max_string_width = 0; for (size_t i = 0; i < num_items; i++) { - FormatStringLegacy(buffer, 256, gDropdownItems[i].format, static_cast(&gDropdownItems[i].args)); + FormatStringLegacy(buffer, 256, gDropdown.items[i].format, static_cast(&gDropdown.items[i].args)); int32_t string_width = GfxGetStringWidth(buffer, FontStyle::Medium); max_string_width = std::max(string_width, max_string_width); } @@ -609,7 +602,7 @@ namespace OpenRCT2::Ui::Windows auto imageId = (orderedColour == COLOUR_INVISIBLE) ? ImageId(SPR_G2_ICON_PALETTE_INVISIBLE, COLOUR_WHITE) : ImageId(SPR_PALETTE_BTN, orderedColour); - gDropdownItems[i].format = Dropdown::kFormatColourPicker; + gDropdown.items[i].format = Dropdown::kFormatColourPicker; Dropdown::SetImage(i, imageId); } @@ -620,11 +613,11 @@ namespace OpenRCT2::Ui::Windows Dropdown::Flag::StayOpen, numColours, squareSize, squareSize, DropdownGetAppropriateImageDropdownItemsPerRow(static_cast(numColours))); - std::copy(kColourTooltips.begin(), kColourTooltips.end(), gDropdownTooltips.begin()); + std::copy(kColourTooltips.begin(), kColourTooltips.end(), gDropdown.tooltips.begin()); - gDropdownHasTooltips = true; - gDropdownLastTooltipHover = -1; - gDropdownDefaultIndex = defaultIndex; + gDropdown.hasTooltips = true; + gDropdown.lastTooltipHover = -1; + gDropdown.defaultIndex = defaultIndex; } uint32_t DropdownGetAppropriateImageDropdownItemsPerRow(uint32_t numItems) @@ -640,48 +633,48 @@ using namespace OpenRCT2; bool Dropdown::IsChecked(int32_t index) { - if (index < 0 || index >= static_cast(std::size(gDropdownItems))) + if (index < 0 || index >= static_cast(std::size(gDropdown.items))) { return false; } - return gDropdownItems[index].isChecked(); + return gDropdown.items[index].isChecked(); } bool Dropdown::IsDisabled(int32_t index) { - if (index < 0 || index >= static_cast(std::size(gDropdownItems))) + if (index < 0 || index >= static_cast(std::size(gDropdown.items))) { return true; } - return gDropdownItems[index].isDisabled(); + return gDropdown.items[index].isDisabled(); } void Dropdown::SetChecked(int32_t index, bool value) { - if (index < 0 || index >= static_cast(std::size(gDropdownItems))) + if (index < 0 || index >= static_cast(std::size(gDropdown.items))) { return; } - gDropdownItems[index].flags.set(Dropdown::ItemFlag::isChecked, value); + gDropdown.items[index].flags.set(Dropdown::ItemFlag::isChecked, value); } void Dropdown::SetDisabled(int32_t index, bool value) { - if (index < 0 || index >= static_cast(std::size(gDropdownItems))) + if (index < 0 || index >= static_cast(std::size(gDropdown.items))) { return; } - gDropdownItems[index].flags.set(Dropdown::ItemFlag::isDisabled, value); + gDropdown.items[index].flags.set(Dropdown::ItemFlag::isDisabled, value); } void Dropdown::SetImage(int32_t index, ImageId image) { - if (index < 0 || index >= static_cast(std::size(_dropdownItemsImages))) + if (index < 0 || index >= static_cast(std::size(gDropdown.itemsImages))) { return; } - _dropdownItemsImages[index] = image; + gDropdown.itemsImages[index] = image; _dropdownPrepareUseImages = true; } diff --git a/src/openrct2-ui/windows/EditorObjectSelection.cpp b/src/openrct2-ui/windows/EditorObjectSelection.cpp index 7a4021ab06..104f069966 100644 --- a/src/openrct2-ui/windows/EditorObjectSelection.cpp +++ b/src/openrct2-ui/windows/EditorObjectSelection.cpp @@ -513,8 +513,8 @@ namespace OpenRCT2::Ui::Windows case WIDX_FILTER_DROPDOWN_BTN: for (auto ddIdx = EnumValue(DDIX_FILTER_RCT1); ddIdx <= EnumValue(DDIX_FILTER_CUSTOM); ddIdx++) { - gDropdownItems[ddIdx].args = kSourceStringIds[ddIdx]; - gDropdownItems[ddIdx].format = STR_TOGGLE_OPTION; + gDropdown.items[ddIdx].args = kSourceStringIds[ddIdx]; + gDropdown.items[ddIdx].format = STR_TOGGLE_OPTION; } // Track designs manager cannot select multiple, so only show selection filters if not in track designs @@ -522,12 +522,12 @@ namespace OpenRCT2::Ui::Windows if (!(gLegacyScene == LegacyScene::trackDesignsManager)) { numSelectionItems = 3; - gDropdownItems[DDIX_FILTER_SEPARATOR].format = 0; - gDropdownItems[DDIX_FILTER_SELECTED].format = STR_TOGGLE_OPTION; - gDropdownItems[DDIX_FILTER_NONSELECTED].format = STR_TOGGLE_OPTION; - gDropdownItems[DDIX_FILTER_SEPARATOR].args = kStringIdNone; - gDropdownItems[DDIX_FILTER_SELECTED].args = STR_SELECTED_ONLY; - gDropdownItems[DDIX_FILTER_NONSELECTED].args = STR_NON_SELECTED_ONLY; + 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 = kStringIdNone; + gDropdown.items[DDIX_FILTER_SELECTED].args = STR_SELECTED_ONLY; + gDropdown.items[DDIX_FILTER_NONSELECTED].args = STR_NON_SELECTED_ONLY; } auto& ddWidget = widgets[WIDX_FILTER_DROPDOWN]; diff --git a/src/openrct2-ui/windows/EditorScenarioOptions.cpp b/src/openrct2-ui/windows/EditorScenarioOptions.cpp index 55edfaa4a1..64f4f4587c 100644 --- a/src/openrct2-ui/windows/EditorScenarioOptions.cpp +++ b/src/openrct2-ui/windows/EditorScenarioOptions.cpp @@ -749,8 +749,8 @@ namespace OpenRCT2::Ui::Windows if (objectiveAllowedByMoneyUsage && objectiveAllowedByPaymentSettings) { - gDropdownItems[numItems].format = STR_DROPDOWN_MENU_LABEL; - gDropdownItems[numItems].args = ObjectiveDropdownOptionNames[i]; + gDropdown.items[numItems].format = STR_DROPDOWN_MENU_LABEL; + gDropdown.items[numItems].args = ObjectiveDropdownOptionNames[i]; numItems++; } } @@ -763,7 +763,7 @@ namespace OpenRCT2::Ui::Windows auto objectiveType = EnumValue(scenarioOptions.objective.Type); for (int32_t j = 0; j < numItems; j++) { - if (gDropdownItems[j].args - STR_OBJECTIVE_DROPDOWN_NONE == objectiveType) + if (gDropdown.items[j].args - STR_OBJECTIVE_DROPDOWN_NONE == objectiveType) { Dropdown::SetChecked(j, true); break; @@ -775,8 +775,8 @@ namespace OpenRCT2::Ui::Windows { for (int32_t i = EnumValue(Scenario::Category::beginner); i <= EnumValue(Scenario::Category::other); i++) { - gDropdownItems[i].format = STR_DROPDOWN_MENU_LABEL; - gDropdownItems[i].args = Scenario::kScenarioCategoryStringIds[i]; + gDropdown.items[i].format = STR_DROPDOWN_MENU_LABEL; + gDropdown.items[i].args = Scenario::kScenarioCategoryStringIds[i]; } Widget* dropdownWidget = &widgets[WIDX_CATEGORY]; @@ -1021,7 +1021,7 @@ namespace OpenRCT2::Ui::Windows case WIDX_OBJECTIVE_DROPDOWN: // TODO: Don't rely on string ID order auto newObjectiveType = static_cast( - gDropdownItems[dropdownIndex].args - STR_OBJECTIVE_DROPDOWN_NONE); + gDropdown.items[dropdownIndex].args - STR_OBJECTIVE_DROPDOWN_NONE); if (gameState.scenarioOptions.objective.Type != newObjectiveType) SetObjective(newObjectiveType); break; @@ -1557,12 +1557,12 @@ namespace OpenRCT2::Ui::Windows { Widget* dropdownWidget = &widgets[widgetIndex - 1]; - gDropdownItems[0].format = STR_DROPDOWN_MENU_LABEL; - gDropdownItems[0].args = STR_FREE_PARK_ENTER; - gDropdownItems[1].format = STR_DROPDOWN_MENU_LABEL; - gDropdownItems[1].args = STR_PAY_PARK_ENTER; - gDropdownItems[2].format = STR_DROPDOWN_MENU_LABEL; - gDropdownItems[2].args = STR_PAID_ENTRY_PAID_RIDES; + gDropdown.items[0].format = STR_DROPDOWN_MENU_LABEL; + gDropdown.items[0].args = STR_FREE_PARK_ENTER; + gDropdown.items[1].format = STR_DROPDOWN_MENU_LABEL; + gDropdown.items[1].args = STR_PAY_PARK_ENTER; + gDropdown.items[2].format = STR_DROPDOWN_MENU_LABEL; + gDropdown.items[2].args = STR_PAID_ENTRY_PAID_RIDES; WindowDropdownShowTextCustomWidth( { windowPos.x + dropdownWidget->left, windowPos.y + dropdownWidget->top }, dropdownWidget->height() - 1, @@ -1896,15 +1896,15 @@ namespace OpenRCT2::Ui::Windows { auto& dropdownWidget = widgets[widgetIndex - 1]; - gDropdownItems[0].format = STR_DROPDOWN_MENU_LABEL; - gDropdownItems[1].format = STR_DROPDOWN_MENU_LABEL; - gDropdownItems[2].format = STR_DROPDOWN_MENU_LABEL; - gDropdownItems[3].format = STR_DROPDOWN_MENU_LABEL; + gDropdown.items[0].format = STR_DROPDOWN_MENU_LABEL; + gDropdown.items[1].format = STR_DROPDOWN_MENU_LABEL; + gDropdown.items[2].format = STR_DROPDOWN_MENU_LABEL; + gDropdown.items[3].format = STR_DROPDOWN_MENU_LABEL; - gDropdownItems[0].args = STR_GUESTS_PREFER_INTENSITY_NONE; - gDropdownItems[1].args = STR_GUESTS_PREFER_INTENSITY_BALANCED; - gDropdownItems[2].args = STR_GUESTS_PREFER_INTENSITY_LESS_INTENSE_RIDES; - gDropdownItems[3].args = STR_GUESTS_PREFER_INTENSITY_MORE_INTENSE_RIDES; + gDropdown.items[0].args = STR_GUESTS_PREFER_INTENSITY_NONE; + gDropdown.items[1].args = STR_GUESTS_PREFER_INTENSITY_BALANCED; + gDropdown.items[2].args = STR_GUESTS_PREFER_INTENSITY_LESS_INTENSE_RIDES; + gDropdown.items[3].args = STR_GUESTS_PREFER_INTENSITY_MORE_INTENSE_RIDES; WindowDropdownShowTextCustomWidth( { windowPos.x + dropdownWidget.left, windowPos.y + dropdownWidget.top }, dropdownWidget.height() - 1, diff --git a/src/openrct2-ui/windows/Footpath.cpp b/src/openrct2-ui/windows/Footpath.cpp index 1b2e36c1df..2b38d50a4f 100644 --- a/src/openrct2-ui/windows/Footpath.cpp +++ b/src/openrct2-ui/windows/Footpath.cpp @@ -702,8 +702,8 @@ namespace OpenRCT2::Ui::Windows defaultIndex = numPathTypes; } - gDropdownItems[numPathTypes].format = kStringIdNone; - gDropdownTooltips[numPathTypes] = pathType->NameStringId; + gDropdown.items[numPathTypes].format = kStringIdNone; + gDropdown.tooltips[numPathTypes] = pathType->NameStringId; Dropdown::SetImage(numPathTypes, ImageId(pathType->PreviewImageId)); _dropdownEntries.push_back({ ObjectType::footpathSurface, i }); numPathTypes++; @@ -728,8 +728,8 @@ namespace OpenRCT2::Ui::Windows defaultIndex = numPathTypes; } - gDropdownItems[numPathTypes].format = kStringIdNone; - gDropdownTooltips[numPathTypes] = pathEntry->string_idx; + gDropdown.items[numPathTypes].format = kStringIdNone; + gDropdown.tooltips[numPathTypes] = pathEntry->string_idx; Dropdown::SetImage( numPathTypes, ImageId(showQueues ? pathEntry->GetQueuePreviewImage() : pathEntry->GetPreviewImage())); _dropdownEntries.push_back({ ObjectType::paths, i }); @@ -741,10 +741,10 @@ namespace OpenRCT2::Ui::Windows windowPos.x + widget->left, windowPos.y + widget->top, widget->height() + 1, colours[1], 0, numPathTypes, 47, 36, itemsPerRow); - gDropdownHasTooltips = true; + gDropdown.hasTooltips = true; if (defaultIndex) - gDropdownDefaultIndex = static_cast(*defaultIndex); + gDropdown.defaultIndex = static_cast(*defaultIndex); } void WindowFootpathShowRailingsTypesDialog(Widget* widget) @@ -766,8 +766,8 @@ namespace OpenRCT2::Ui::Windows defaultIndex = numRailingsTypes; } - gDropdownItems[numRailingsTypes].format = kStringIdNone; - gDropdownTooltips[numRailingsTypes] = railingsEntry->NameStringId; + gDropdown.items[numRailingsTypes].format = kStringIdNone; + gDropdown.tooltips[numRailingsTypes] = railingsEntry->NameStringId; Dropdown::SetImage(numRailingsTypes, ImageId(railingsEntry->PreviewImageId)); _dropdownEntries.push_back({ ObjectType::footpathRailings, i }); numRailingsTypes++; @@ -778,10 +778,10 @@ namespace OpenRCT2::Ui::Windows windowPos.x + widget->left, windowPos.y + widget->top, widget->height() + 1, colours[1], 0, numRailingsTypes, 47, 36, itemsPerRow); - gDropdownHasTooltips = true; + gDropdown.hasTooltips = true; if (defaultIndex) - gDropdownDefaultIndex = static_cast(*defaultIndex); + gDropdown.defaultIndex = static_cast(*defaultIndex); } /** diff --git a/src/openrct2-ui/windows/Guest.cpp b/src/openrct2-ui/windows/Guest.cpp index db696b0c3c..a849035142 100644 --- a/src/openrct2-ui/windows/Guest.cpp +++ b/src/openrct2-ui/windows/Guest.cpp @@ -722,7 +722,7 @@ namespace OpenRCT2::Ui::Windows WindowDropdownShowText( { windowPos.x + widget.left, windowPos.y + widget.top }, widget.height() + 1, colours[1], 0, dropdownItems); - gDropdownDefaultIndex = 0; + gDropdown.defaultIndex = 0; } void GuestFollow() diff --git a/src/openrct2-ui/windows/GuestList.cpp b/src/openrct2-ui/windows/GuestList.cpp index b1ea7d8a3f..d0abf1b810 100644 --- a/src/openrct2-ui/windows/GuestList.cpp +++ b/src/openrct2-ui/windows/GuestList.cpp @@ -338,8 +338,8 @@ namespace OpenRCT2::Ui::Windows for (size_t i = 0; i < _numPages; i++) { - gDropdownItems[i].format = STR_DROPDOWN_MENU_LABEL; - uint16_t* args = reinterpret_cast(&gDropdownItems[i].args); + gDropdown.items[i].format = STR_DROPDOWN_MENU_LABEL; + uint16_t* args = reinterpret_cast(&gDropdown.items[i].args); args[0] = STR_PAGE_X; args[1] = static_cast(i + 1); } @@ -348,10 +348,10 @@ namespace OpenRCT2::Ui::Windows } case WIDX_INFO_TYPE_DROPDOWN_BUTTON: { - gDropdownItems[0].format = STR_DROPDOWN_MENU_LABEL; - gDropdownItems[0].args = GetViewName(GuestViewType::Actions); - gDropdownItems[1].format = STR_DROPDOWN_MENU_LABEL; - gDropdownItems[1].args = GetViewName(GuestViewType::Thoughts); + gDropdown.items[0].format = STR_DROPDOWN_MENU_LABEL; + gDropdown.items[0].args = GetViewName(GuestViewType::Actions); + gDropdown.items[1].format = STR_DROPDOWN_MENU_LABEL; + gDropdown.items[1].args = GetViewName(GuestViewType::Thoughts); auto* widget = &widgets[widgetIndex - 1]; WindowDropdownShowTextCustomWidth( diff --git a/src/openrct2-ui/windows/Land.cpp b/src/openrct2-ui/windows/Land.cpp index 5af49dc90f..0f963256e1 100644 --- a/src/openrct2-ui/windows/Land.cpp +++ b/src/openrct2-ui/windows/Land.cpp @@ -171,7 +171,7 @@ namespace OpenRCT2::Ui::Windows { case WIDX_FLOOR: if (dropdownIndex == -1) - dropdownIndex = gDropdownHighlightedIndex; + dropdownIndex = gDropdown.highlightedIndex; type = (dropdownIndex == -1) ? _selectedFloorTexture @@ -190,7 +190,7 @@ namespace OpenRCT2::Ui::Windows break; case WIDX_WALL: if (dropdownIndex == -1) - dropdownIndex = gDropdownHighlightedIndex; + dropdownIndex = gDropdown.highlightedIndex; type = (dropdownIndex == -1) ? _selectedWallTexture : LandTool::GetEdgeStyleFromDropdownIndex(static_cast(dropdownIndex)); diff --git a/src/openrct2-ui/windows/LoadSave.cpp b/src/openrct2-ui/windows/LoadSave.cpp index d9c799e559..b5e2efa1ec 100644 --- a/src/openrct2-ui/windows/LoadSave.cpp +++ b/src/openrct2-ui/windows/LoadSave.cpp @@ -902,20 +902,20 @@ namespace OpenRCT2::Ui::Windows if (widgetIndex != WIDX_SORT_CUSTOMISE) return; - gDropdownItems[0].format = STR_TOGGLE_OPTION; - gDropdownItems[1].format = STR_TOGGLE_OPTION; - gDropdownItems[2].format = STR_TOGGLE_OPTION; - gDropdownItems[3].format = kStringIdEmpty; - gDropdownItems[4].format = STR_DROPDOWN_BULLET_OPTION; - gDropdownItems[5].format = STR_DROPDOWN_BULLET_OPTION; - gDropdownItems[6].format = STR_DROPDOWN_BULLET_OPTION; + 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 = kStringIdEmpty; + gDropdown.items[4].format = STR_DROPDOWN_BULLET_OPTION; + gDropdown.items[5].format = STR_DROPDOWN_BULLET_OPTION; + gDropdown.items[6].format = STR_DROPDOWN_BULLET_OPTION; - gDropdownItems[0].args = STR_FILEBROWSER_CUSTOMISE_FILENAME; - gDropdownItems[1].args = STR_FILEBROWSER_CUSTOMISE_SIZE; - gDropdownItems[2].args = STR_FILEBROWSER_CUSTOMISE_DATE; - gDropdownItems[4].args = STR_FILEBROWSER_PREVIEW_DISABLED; - gDropdownItems[5].args = STR_FILEBROWSER_PREVIEW_MINIMAP; - gDropdownItems[6].args = STR_FILEBROWSER_PREVIEW_SCREENSHOT; + gDropdown.items[0].args = STR_FILEBROWSER_CUSTOMISE_FILENAME; + gDropdown.items[1].args = STR_FILEBROWSER_CUSTOMISE_SIZE; + gDropdown.items[2].args = STR_FILEBROWSER_CUSTOMISE_DATE; + gDropdown.items[4].args = STR_FILEBROWSER_PREVIEW_DISABLED; + gDropdown.items[5].args = STR_FILEBROWSER_PREVIEW_MINIMAP; + gDropdown.items[6].args = STR_FILEBROWSER_PREVIEW_SCREENSHOT; Widget* widget = &widgets[WIDX_SORT_CUSTOMISE]; diff --git a/src/openrct2-ui/windows/MapGen.cpp b/src/openrct2-ui/windows/MapGen.cpp index 7227c9db35..b54d380357 100644 --- a/src/openrct2-ui/windows/MapGen.cpp +++ b/src/openrct2-ui/windows/MapGen.cpp @@ -1125,7 +1125,7 @@ namespace OpenRCT2::Ui::Windows { case WIDX_FLOOR_TEXTURE: if (dropdownIndex == -1) - dropdownIndex = gDropdownHighlightedIndex; + dropdownIndex = gDropdown.highlightedIndex; type = (dropdownIndex == -1) ? _settings.landTexture : dropdownIndex; @@ -1142,7 +1142,7 @@ namespace OpenRCT2::Ui::Windows break; case WIDX_WALL_TEXTURE: if (dropdownIndex == -1) - dropdownIndex = gDropdownHighlightedIndex; + dropdownIndex = gDropdown.highlightedIndex; type = (dropdownIndex == -1) ? _settings.edgeTexture : dropdownIndex; diff --git a/src/openrct2-ui/windows/Multiplayer.cpp b/src/openrct2-ui/windows/Multiplayer.cpp index a869fce7e1..c9bca100f3 100644 --- a/src/openrct2-ui/windows/Multiplayer.cpp +++ b/src/openrct2-ui/windows/Multiplayer.cpp @@ -528,8 +528,8 @@ namespace OpenRCT2::Ui::Windows for (auto i = 0; i < NetworkGetNumGroups(); i++) { - gDropdownItems[i].format = STR_OPTIONS_DROPDOWN_ITEM; - gDropdownItems[i].args = reinterpret_cast(NetworkGetGroupName(i)); + gDropdown.items[i].format = STR_OPTIONS_DROPDOWN_ITEM; + gDropdown.items[i].args = reinterpret_cast(NetworkGetGroupName(i)); } if (widget == &widgets[WIDX_DEFAULT_GROUP_DROPDOWN]) { diff --git a/src/openrct2-ui/windows/NewCampaign.cpp b/src/openrct2-ui/windows/NewCampaign.cpp index a122ffa122..76de65f2f4 100644 --- a/src/openrct2-ui/windows/NewCampaign.cpp +++ b/src/openrct2-ui/windows/NewCampaign.cpp @@ -211,8 +211,8 @@ namespace OpenRCT2::Ui::Windows int32_t maxSize = std::min(Dropdown::kItemsMaxSize, static_cast(ShopItems.size())); for (int32_t i = 0; i < maxSize; i++) { - gDropdownItems[i].format = STR_DROPDOWN_MENU_LABEL; - gDropdownItems[i].args = GetShopItemDescriptor(ShopItems[i]).Naming.Plural; + gDropdown.items[i].format = STR_DROPDOWN_MENU_LABEL; + gDropdown.items[i].args = GetShopItemDescriptor(ShopItems[i]).Naming.Plural; numItems++; } @@ -231,15 +231,15 @@ namespace OpenRCT2::Ui::Windows if (curRide != nullptr) { // HACK until dropdown items have longer argument buffers - gDropdownItems[numItems].format = STR_DROPDOWN_MENU_LABEL; - Formatter ft(reinterpret_cast(&gDropdownItems[numItems].args)); + gDropdown.items[numItems].format = STR_DROPDOWN_MENU_LABEL; + Formatter ft(reinterpret_cast(&gDropdown.items[numItems].args)); if (curRide->customName.empty()) { curRide->formatNameTo(ft); } else { - gDropdownItems[numItems].format = STR_OPTIONS_DROPDOWN_ITEM; + gDropdown.items[numItems].format = STR_OPTIONS_DROPDOWN_ITEM; ft.Add(curRide->customName.c_str()); } numItems++; diff --git a/src/openrct2-ui/windows/Options.cpp b/src/openrct2-ui/windows/Options.cpp index 6534efb3f6..50fc5ec00c 100644 --- a/src/openrct2-ui/windows/Options.cpp +++ b/src/openrct2-ui/windows/Options.cpp @@ -822,9 +822,9 @@ namespace OpenRCT2::Ui::Windows { const Resolution& resolution = resolutions[i]; - gDropdownItems[i].format = STR_DROPDOWN_MENU_LABEL; + gDropdown.items[i].format = STR_DROPDOWN_MENU_LABEL; - uint16_t* args = reinterpret_cast(&gDropdownItems[i].args); + uint16_t* args = reinterpret_cast(&gDropdown.items[i].args); args[0] = STR_RESOLUTION_X_BY_Y; args[1] = resolution.Width; args[2] = resolution.Height; @@ -846,12 +846,12 @@ namespace OpenRCT2::Ui::Windows break; case WIDX_FULLSCREEN_DROPDOWN: - gDropdownItems[0].format = STR_DROPDOWN_MENU_LABEL; - gDropdownItems[1].format = STR_DROPDOWN_MENU_LABEL; - gDropdownItems[2].format = STR_DROPDOWN_MENU_LABEL; - gDropdownItems[0].args = STR_OPTIONS_DISPLAY_WINDOWED; - gDropdownItems[1].args = STR_OPTIONS_DISPLAY_FULLSCREEN; - gDropdownItems[2].args = STR_OPTIONS_DISPLAY_FULLSCREEN_BORDERLESS; + gDropdown.items[0].format = STR_DROPDOWN_MENU_LABEL; + gDropdown.items[1].format = STR_DROPDOWN_MENU_LABEL; + gDropdown.items[2].format = STR_DROPDOWN_MENU_LABEL; + gDropdown.items[0].args = STR_OPTIONS_DISPLAY_WINDOWED; + gDropdown.items[1].args = STR_OPTIONS_DISPLAY_FULLSCREEN; + gDropdown.items[2].args = STR_OPTIONS_DISPLAY_FULLSCREEN_BORDERLESS; ShowDropdown(widget, 3); @@ -862,8 +862,8 @@ namespace OpenRCT2::Ui::Windows const auto numItems = static_cast(std::size(kDrawingEngineStringIds)); for (int32_t i = 0; i < numItems; i++) { - gDropdownItems[i].format = STR_DROPDOWN_MENU_LABEL; - gDropdownItems[i].args = kDrawingEngineStringIds[i]; + gDropdown.items[i].format = STR_DROPDOWN_MENU_LABEL; + gDropdown.items[i].args = kDrawingEngineStringIds[i]; } ShowDropdown(widget, numItems); Dropdown::SetChecked(EnumValue(Config::Get().general.DrawingEngine), true); @@ -886,12 +886,12 @@ namespace OpenRCT2::Ui::Windows break; case WIDX_FRAME_RATE_LIMIT_DROPDOWN: { - gDropdownItems[0].format = STR_DROPDOWN_MENU_LABEL; - gDropdownItems[1].format = STR_DROPDOWN_MENU_LABEL; - gDropdownItems[2].format = STR_DROPDOWN_MENU_LABEL; - gDropdownItems[0].args = STR_FRAME_RATE_LIMIT_DEFAULT; - gDropdownItems[1].args = STR_FRAME_RATE_LIMIT_VSYNC; - gDropdownItems[2].args = STR_FRAME_RATE_LIMIT_UNRESTRICTED; + gDropdown.items[0].format = STR_DROPDOWN_MENU_LABEL; + gDropdown.items[1].format = STR_DROPDOWN_MENU_LABEL; + gDropdown.items[2].format = STR_DROPDOWN_MENU_LABEL; + gDropdown.items[0].args = STR_FRAME_RATE_LIMIT_DEFAULT; + gDropdown.items[1].args = STR_FRAME_RATE_LIMIT_VSYNC; + gDropdown.items[2].args = STR_FRAME_RATE_LIMIT_UNRESTRICTED; ShowDropdown(widget, 3); @@ -1112,12 +1112,12 @@ namespace OpenRCT2::Ui::Windows switch (widgetIndex) { case WIDX_VIRTUAL_FLOOR_DROPDOWN: - gDropdownItems[0].format = STR_DROPDOWN_MENU_LABEL; - gDropdownItems[1].format = STR_DROPDOWN_MENU_LABEL; - gDropdownItems[2].format = STR_DROPDOWN_MENU_LABEL; - gDropdownItems[0].args = STR_VIRTUAL_FLOOR_STYLE_DISABLED; - gDropdownItems[1].args = STR_VIRTUAL_FLOOR_STYLE_TRANSPARENT; - gDropdownItems[2].args = STR_VIRTUAL_FLOOR_STYLE_GLASSY; + gDropdown.items[0].format = STR_DROPDOWN_MENU_LABEL; + gDropdown.items[1].format = STR_DROPDOWN_MENU_LABEL; + gDropdown.items[2].format = STR_DROPDOWN_MENU_LABEL; + gDropdown.items[0].args = STR_VIRTUAL_FLOOR_STYLE_DISABLED; + gDropdown.items[1].args = STR_VIRTUAL_FLOOR_STYLE_TRANSPARENT; + gDropdown.items[2].args = STR_VIRTUAL_FLOOR_STYLE_GLASSY; Widget* widget = &widgets[widgetIndex - 1]; ShowDropdown(widget, 3); @@ -1205,10 +1205,10 @@ namespace OpenRCT2::Ui::Windows switch (widgetIndex) { case WIDX_HEIGHT_LABELS_DROPDOWN: - gDropdownItems[0].format = STR_DROPDOWN_MENU_LABEL; - gDropdownItems[1].format = STR_DROPDOWN_MENU_LABEL; - gDropdownItems[0].args = STR_HEIGHT_IN_UNITS; - gDropdownItems[1].args = STR_REAL_VALUES; + gDropdown.items[0].format = STR_DROPDOWN_MENU_LABEL; + gDropdown.items[1].format = STR_DROPDOWN_MENU_LABEL; + gDropdown.items[0].args = STR_HEIGHT_IN_UNITS; + gDropdown.items[1].args = STR_REAL_VALUES; ShowDropdown(widget, 2); @@ -1224,15 +1224,15 @@ namespace OpenRCT2::Ui::Windows for (size_t i = 0; i < numOrdinaryCurrencies; i++) { - gDropdownItems[i].format = STR_DROPDOWN_MENU_LABEL; - gDropdownItems[i].args = CurrencyDescriptors[i].stringId; + gDropdown.items[i].format = STR_DROPDOWN_MENU_LABEL; + gDropdown.items[i].args = CurrencyDescriptors[i].stringId; } - gDropdownItems[numOrdinaryCurrencies].format = Dropdown::kSeparatorString; + gDropdown.items[numOrdinaryCurrencies].format = Dropdown::kSeparatorString; - gDropdownItems[numOrdinaryCurrencies + 1].format = STR_DROPDOWN_MENU_LABEL; - gDropdownItems[numOrdinaryCurrencies + 1].args = CurrencyDescriptors[EnumValue(CurrencyType::Custom)] - .stringId; + gDropdown.items[numOrdinaryCurrencies + 1].format = STR_DROPDOWN_MENU_LABEL; + gDropdown.items[numOrdinaryCurrencies + 1].args = CurrencyDescriptors[EnumValue(CurrencyType::Custom)] + .stringId; ShowDropdown(widget, numItems); @@ -1247,22 +1247,22 @@ namespace OpenRCT2::Ui::Windows break; } case WIDX_DISTANCE_DROPDOWN: - gDropdownItems[0].format = STR_DROPDOWN_MENU_LABEL; - gDropdownItems[1].format = STR_DROPDOWN_MENU_LABEL; - gDropdownItems[2].format = STR_DROPDOWN_MENU_LABEL; - gDropdownItems[0].args = STR_IMPERIAL; - gDropdownItems[1].args = STR_METRIC; - gDropdownItems[2].args = STR_SI; + gDropdown.items[0].format = STR_DROPDOWN_MENU_LABEL; + gDropdown.items[1].format = STR_DROPDOWN_MENU_LABEL; + gDropdown.items[2].format = STR_DROPDOWN_MENU_LABEL; + gDropdown.items[0].args = STR_IMPERIAL; + gDropdown.items[1].args = STR_METRIC; + gDropdown.items[2].args = STR_SI; ShowDropdown(widget, 3); Dropdown::SetChecked(static_cast(Config::Get().general.MeasurementFormat), true); break; case WIDX_TEMPERATURE_DROPDOWN: - gDropdownItems[0].format = STR_DROPDOWN_MENU_LABEL; - gDropdownItems[1].format = STR_DROPDOWN_MENU_LABEL; - gDropdownItems[0].args = STR_CELSIUS; - gDropdownItems[1].args = STR_FAHRENHEIT; + gDropdown.items[0].format = STR_DROPDOWN_MENU_LABEL; + gDropdown.items[1].format = STR_DROPDOWN_MENU_LABEL; + gDropdown.items[0].args = STR_CELSIUS; + gDropdown.items[1].args = STR_FAHRENHEIT; ShowDropdown(widget, 2); @@ -1271,8 +1271,8 @@ namespace OpenRCT2::Ui::Windows case WIDX_LANGUAGE_DROPDOWN: for (size_t i = 1; i < LANGUAGE_COUNT; i++) { - gDropdownItems[i - 1].format = STR_OPTIONS_DROPDOWN_ITEM; - gDropdownItems[i - 1].args = reinterpret_cast(LanguagesDescriptors[i].native_name); + gDropdown.items[i - 1].format = STR_OPTIONS_DROPDOWN_ITEM; + gDropdown.items[i - 1].args = reinterpret_cast(LanguagesDescriptors[i].native_name); } ShowDropdown(widget, LANGUAGE_COUNT - 1); Dropdown::SetChecked(LocalisationService_GetCurrentLanguage() - 1, true); @@ -1280,8 +1280,8 @@ namespace OpenRCT2::Ui::Windows case WIDX_DATE_FORMAT_DROPDOWN: for (size_t i = 0; i < 4; i++) { - gDropdownItems[i].format = STR_DROPDOWN_MENU_LABEL; - gDropdownItems[i].args = DateFormatStringIDs[i]; + gDropdown.items[i].format = STR_DROPDOWN_MENU_LABEL; + gDropdown.items[i].args = DateFormatStringIDs[i]; } ShowDropdown(widget, 4); Dropdown::SetChecked(Config::Get().general.DateFormat, true); @@ -1464,8 +1464,8 @@ namespace OpenRCT2::Ui::Windows // populate the list with the sound devices for (int32_t i = 0; i < OpenRCT2::Audio::GetDeviceCount(); i++) { - gDropdownItems[i].format = STR_OPTIONS_DROPDOWN_ITEM; - gDropdownItems[i].args = reinterpret_cast(OpenRCT2::Audio::GetDeviceName(i).c_str()); + gDropdown.items[i].format = STR_OPTIONS_DROPDOWN_ITEM; + gDropdown.items[i].args = reinterpret_cast(OpenRCT2::Audio::GetDeviceName(i).c_str()); } ShowDropdown(widget, OpenRCT2::Audio::GetDeviceCount()); @@ -1485,8 +1485,8 @@ namespace OpenRCT2::Ui::Windows if (Config::Get().sound.TitleMusic == theme.Kind) checkedIndex = numItems; - gDropdownItems[numItems].format = STR_DROPDOWN_MENU_LABEL; - gDropdownItems[numItems++].args = theme.Name; + gDropdown.items[numItems].format = STR_DROPDOWN_MENU_LABEL; + gDropdown.items[numItems++].args = theme.Name; } ShowDropdown(widget, numItems); Dropdown::SetChecked(checkedIndex, true); @@ -1822,8 +1822,8 @@ namespace OpenRCT2::Ui::Windows for (size_t i = 0; i < numItems; i++) { - gDropdownItems[i].format = STR_OPTIONS_DROPDOWN_ITEM; - gDropdownItems[i].args = reinterpret_cast(ThemeManagerGetAvailableThemeName(i)); + gDropdown.items[i].format = STR_OPTIONS_DROPDOWN_ITEM; + gDropdown.items[i].args = reinterpret_cast(ThemeManagerGetAvailableThemeName(i)); } WindowDropdownShowTextCustomWidth( @@ -1932,14 +1932,14 @@ namespace OpenRCT2::Ui::Windows uint32_t numItems = static_cast(TitleSequenceManager::GetCount()); for (size_t i = 0; i < numItems; i++) { - gDropdownItems[i].format = STR_OPTIONS_DROPDOWN_ITEM; - gDropdownItems[i].args = reinterpret_cast(TitleSequenceManager::GetName(i)); + gDropdown.items[i].format = STR_OPTIONS_DROPDOWN_ITEM; + gDropdown.items[i].args = reinterpret_cast(TitleSequenceManager::GetName(i)); } - gDropdownItems[numItems].format = 0; + gDropdown.items[numItems].format = 0; numItems++; - gDropdownItems[numItems].format = STR_DROPDOWN_MENU_LABEL; - gDropdownItems[numItems].args = STR_TITLE_SEQUENCE_RANDOM; + gDropdown.items[numItems].format = STR_DROPDOWN_MENU_LABEL; + gDropdown.items[numItems].args = STR_TITLE_SEQUENCE_RANDOM; numItems++; WindowDropdownShowText( @@ -1956,10 +1956,10 @@ namespace OpenRCT2::Ui::Windows { uint32_t numItems = 2; - gDropdownItems[0].format = STR_DROPDOWN_MENU_LABEL; - gDropdownItems[0].args = STR_SCENARIO_PREVIEWS_MINIMAPS; - gDropdownItems[1].format = STR_DROPDOWN_MENU_LABEL; - gDropdownItems[1].args = STR_SCENARIO_PREVIEWS_SCREENSHOTS; + gDropdown.items[0].format = STR_DROPDOWN_MENU_LABEL; + gDropdown.items[0].args = STR_SCENARIO_PREVIEWS_MINIMAPS; + gDropdown.items[1].format = STR_DROPDOWN_MENU_LABEL; + gDropdown.items[1].args = STR_SCENARIO_PREVIEWS_SCREENSHOTS; WindowDropdownShowTextCustomWidth( { windowPos.x + widget->left, windowPos.y + widget->top }, widget->height() + 1, colours[1], 0, @@ -1971,8 +1971,8 @@ namespace OpenRCT2::Ui::Windows case WIDX_DEFAULT_INSPECTION_INTERVAL_DROPDOWN: for (size_t i = 0; i < 7; i++) { - gDropdownItems[i].format = STR_DROPDOWN_MENU_LABEL; - gDropdownItems[i].args = kRideInspectionIntervalNames[i]; + gDropdown.items[i].format = STR_DROPDOWN_MENU_LABEL; + gDropdown.items[i].args = kRideInspectionIntervalNames[i]; } ShowDropdown(widget, 7); @@ -2167,8 +2167,8 @@ namespace OpenRCT2::Ui::Windows case WIDX_AUTOSAVE_FREQUENCY_DROPDOWN: for (size_t i = AUTOSAVE_EVERY_MINUTE; i <= AUTOSAVE_NEVER; i++) { - gDropdownItems[i].format = STR_DROPDOWN_MENU_LABEL; - gDropdownItems[i].args = AutosaveNames[i]; + gDropdown.items[i].format = STR_DROPDOWN_MENU_LABEL; + gDropdown.items[i].args = AutosaveNames[i]; } ShowDropdown(widget, AUTOSAVE_NEVER + 1); diff --git a/src/openrct2-ui/windows/Park.cpp b/src/openrct2-ui/windows/Park.cpp index ebc0f47d9a..b251a4c3eb 100644 --- a/src/openrct2-ui/windows/Park.cpp +++ b/src/openrct2-ui/windows/Park.cpp @@ -445,21 +445,21 @@ namespace OpenRCT2::Ui::Windows if (widgetIndex == WIDX_OPEN_OR_CLOSE) { auto& widget = widgets[widgetIndex]; - gDropdownItems[0].format = STR_DROPDOWN_MENU_LABEL; - gDropdownItems[1].format = STR_DROPDOWN_MENU_LABEL; - gDropdownItems[0].args = STR_CLOSE_PARK; - gDropdownItems[1].args = STR_OPEN_PARK; + gDropdown.items[0].format = STR_DROPDOWN_MENU_LABEL; + gDropdown.items[1].format = STR_DROPDOWN_MENU_LABEL; + gDropdown.items[0].args = STR_CLOSE_PARK; + gDropdown.items[1].args = STR_OPEN_PARK; WindowDropdownShowText( { windowPos.x + widget.left, windowPos.y + widget.top }, widget.height() + 1, colours[1], 0, 2); if (Park::IsOpen(getGameState().park)) { - gDropdownDefaultIndex = 0; + gDropdown.defaultIndex = 0; Dropdown::SetChecked(1, true); } else { - gDropdownDefaultIndex = 1; + gDropdown.defaultIndex = 1; Dropdown::SetChecked(0, true); } } @@ -470,7 +470,7 @@ namespace OpenRCT2::Ui::Windows if (widgetIndex == WIDX_OPEN_OR_CLOSE) { if (dropdownIndex == -1) - dropdownIndex = gDropdownHighlightedIndex; + dropdownIndex = gDropdown.highlightedIndex; if (dropdownIndex != 0) { diff --git a/src/openrct2-ui/windows/Player.cpp b/src/openrct2-ui/windows/Player.cpp index fd87e03779..dfb8ce969d 100644 --- a/src/openrct2-ui/windows/Player.cpp +++ b/src/openrct2-ui/windows/Player.cpp @@ -559,8 +559,8 @@ namespace OpenRCT2::Ui::Windows for (i = 0; i < NetworkGetNumGroups(); i++) { - gDropdownItems[i].format = STR_OPTIONS_DROPDOWN_ITEM; - gDropdownItems[i].args = reinterpret_cast(NetworkGetGroupName(i)); + gDropdown.items[i].format = STR_OPTIONS_DROPDOWN_ITEM; + gDropdown.items[i].args = reinterpret_cast(NetworkGetGroupName(i)); } Dropdown::SetChecked(NetworkGetGroupIndex(NetworkGetPlayerGroup(player)), true); diff --git a/src/openrct2-ui/windows/Research.cpp b/src/openrct2-ui/windows/Research.cpp index a1bd85a2cb..8b1044a9cf 100644 --- a/src/openrct2-ui/windows/Research.cpp +++ b/src/openrct2-ui/windows/Research.cpp @@ -478,8 +478,8 @@ namespace OpenRCT2::Ui::Windows for (std::size_t i = 0; i < std::size(kResearchFundingLevelNames); i++) { - gDropdownItems[i].format = STR_DROPDOWN_MENU_LABEL; - gDropdownItems[i].args = kResearchFundingLevelNames[i]; + gDropdown.items[i].format = STR_DROPDOWN_MENU_LABEL; + gDropdown.items[i].args = kResearchFundingLevelNames[i]; } WindowDropdownShowTextCustomWidth( { w->windowPos.x + dropdownWidget->left, w->windowPos.y + dropdownWidget->top }, dropdownWidget->height() + 1, diff --git a/src/openrct2-ui/windows/Ride.cpp b/src/openrct2-ui/windows/Ride.cpp index 12f5936fcc..1cea174705 100644 --- a/src/openrct2-ui/windows/Ride.cpp +++ b/src/openrct2-ui/windows/Ride.cpp @@ -1761,16 +1761,16 @@ namespace OpenRCT2::Ui::Windows colours[1], 0, 0, numItems, widget->right - dropdownWidget->left); // First item - gDropdownItems[0].format = STR_DROPDOWN_MENU_LABEL; - gDropdownItems[0].args = STR_OVERALL_VIEW; + gDropdown.items[0].format = STR_DROPDOWN_MENU_LABEL; + gDropdown.items[0].args = STR_OVERALL_VIEW; int32_t currentItem = 1; // Vehicles int32_t name = GetRideComponentName(rtd.NameConvention.vehicle).number; for (int32_t i = 0; i < ride->numTrains; i++) { - gDropdownItems[currentItem].format = STR_DROPDOWN_MENU_LABEL; - gDropdownItems[currentItem].args = name | (currentItem << 16); + gDropdown.items[currentItem].format = STR_DROPDOWN_MENU_LABEL; + gDropdown.items[currentItem].args = name | (currentItem << 16); if (TrainMustBeHidden(*ride, i)) { Dropdown::SetDisabled(currentItem, true); @@ -1782,8 +1782,8 @@ namespace OpenRCT2::Ui::Windows name = GetRideComponentName(rtd.NameConvention.station).number; for (int32_t i = 1; i <= ride->numStations; i++) { - gDropdownItems[currentItem].format = STR_DROPDOWN_MENU_LABEL; - gDropdownItems[currentItem].args = name | (i << 16); + gDropdown.items[currentItem].format = STR_DROPDOWN_MENU_LABEL; + gDropdown.items[currentItem].args = name | (i << 16); currentItem++; } @@ -1832,8 +1832,8 @@ namespace OpenRCT2::Ui::Windows if (info.Ride->supportsStatus(status)) { auto index = info.NumItems; - gDropdownItems[index].format = STR_DROPDOWN_MENU_LABEL; - gDropdownItems[index].args = text; + gDropdown.items[index].format = STR_DROPDOWN_MENU_LABEL; + gDropdown.items[index].args = text; if (info.CurrentStatus == status) { info.CheckedIndex = index; @@ -1864,7 +1864,7 @@ namespace OpenRCT2::Ui::Windows WindowDropdownShowText( { windowPos.x + widget->left, windowPos.y + widget->top }, widget->height() + 1, colours[1], 0, info.NumItems); Dropdown::SetChecked(info.CheckedIndex, true); - gDropdownDefaultIndex = info.DefaultIndex; + gDropdown.defaultIndex = info.DefaultIndex; } static constexpr StringId GetRideTypeNameForDropdown(ride_type_t rideType) @@ -1925,8 +1925,8 @@ namespace OpenRCT2::Ui::Windows for (size_t i = 0; i < _rideDropdownData.size(); i++) { - gDropdownItems[i].format = STR_DROPDOWN_MENU_LABEL; - gDropdownItems[i].args = _rideDropdownData[i].LabelId; + gDropdown.items[i].format = STR_DROPDOWN_MENU_LABEL; + gDropdown.items[i].args = _rideDropdownData[i].LabelId; } Widget* dropdownWidget = widget - 1; @@ -1945,8 +1945,8 @@ namespace OpenRCT2::Ui::Windows } } - gDropdownHighlightedIndex = pos; - gDropdownDefaultIndex = pos; + gDropdown.highlightedIndex = pos; + gDropdown.defaultIndex = pos; Dropdown::SetChecked(pos, true); } @@ -1956,12 +1956,12 @@ namespace OpenRCT2::Ui::Windows if (ride == nullptr) return; - gDropdownItems[0].format = STR_LOCATE_SUBJECT_TIP; - gDropdownItems[1].format = STR_FOLLOW_SUBJECT_TIP; + gDropdown.items[0].format = STR_LOCATE_SUBJECT_TIP; + gDropdown.items[1].format = STR_FOLLOW_SUBJECT_TIP; WindowDropdownShowText( { windowPos.x + widget->left, windowPos.y + widget->top }, widget->height() + 1, colours[1], 0, 2); - gDropdownDefaultIndex = 0; + gDropdown.defaultIndex = 0; if (!ride->getRideTypeDescriptor().HasFlag(RtdFlag::hasTrack) || _viewIndex == 0 || _viewIndex > ride->numTrains) { // Disable if we're a flat ride, 'overall view' is selected or a station is selected @@ -2073,8 +2073,8 @@ namespace OpenRCT2::Ui::Windows for (size_t i = 0; i < numItems; i++) { - gDropdownItems[i].format = STR_DROPDOWN_MENU_LABEL; - gDropdownItems[i].args = _vehicleDropdownData[i].LabelId; + gDropdown.items[i].format = STR_DROPDOWN_MENU_LABEL; + gDropdown.items[i].args = _vehicleDropdownData[i].LabelId; } Widget* dropdownWidget = widget - 1; @@ -2093,8 +2093,8 @@ namespace OpenRCT2::Ui::Windows } } - gDropdownHighlightedIndex = pos; - gDropdownDefaultIndex = pos; + gDropdown.highlightedIndex = pos; + gDropdown.defaultIndex = pos; Dropdown::SetChecked(pos, true); } @@ -2134,10 +2134,10 @@ namespace OpenRCT2::Ui::Windows for (size_t i = 0; i < _entranceDropdownData.size(); i++) { - gDropdownItems[i].args = _entranceDropdownData[i].LabelId; - gDropdownItems[i].format = STR_DROPDOWN_MENU_LABEL; + gDropdown.items[i].args = _entranceDropdownData[i].LabelId; + gDropdown.items[i].format = STR_DROPDOWN_MENU_LABEL; if (_entranceDropdownData[i].EntranceTypeId == ride->entranceStyle) - gDropdownItems[i].format = STR_DROPDOWN_MENU_LABEL_SELECTED; + gDropdown.items[i].format = STR_DROPDOWN_MENU_LABEL_SELECTED; } WindowDropdownShowTextCustomWidth( @@ -2181,7 +2181,7 @@ namespace OpenRCT2::Ui::Windows { dropdownIndex = ride->numTrains + 1; } - if (dropdownIndex >= gDropdownNumItems) + if (dropdownIndex >= gDropdown.numItems) { dropdownIndex = 0; } @@ -2200,11 +2200,11 @@ namespace OpenRCT2::Ui::Windows auto status = RideStatus::closed; if (dropdownIndex < 0) { - dropdownIndex = gDropdownHighlightedIndex; + dropdownIndex = gDropdown.highlightedIndex; } - if (dropdownIndex < static_cast(std::size(gDropdownItems))) + if (dropdownIndex < static_cast(std::size(gDropdown.items))) { - switch (gDropdownItems[dropdownIndex].args) + switch (gDropdown.items[dropdownIndex].args) { case STR_CLOSE_RIDE: status = RideStatus::closed; @@ -3112,8 +3112,8 @@ namespace OpenRCT2::Ui::Windows { if (availableModes & (1uLL << i)) { - gDropdownItems[numAvailableModes].format = STR_DROPDOWN_MENU_LABEL; - gDropdownItems[numAvailableModes].args = kRideModeNames[i]; + gDropdown.items[numAvailableModes].format = STR_DROPDOWN_MENU_LABEL; + gDropdown.items[numAvailableModes].args = kRideModeNames[i]; if (ride->mode == static_cast(i)) checkedIndex = numAvailableModes; @@ -3141,8 +3141,8 @@ namespace OpenRCT2::Ui::Windows auto dropdownWidget = widget - 1; for (auto i = 0; i < 5; i++) { - gDropdownItems[i].format = STR_DROPDOWN_MENU_LABEL; - gDropdownItems[i].args = VehicleLoadNames[i]; + gDropdown.items[i].format = STR_DROPDOWN_MENU_LABEL; + gDropdown.items[i].args = VehicleLoadNames[i]; } WindowDropdownShowTextCustomWidth( { windowPos.x + dropdownWidget->left, windowPos.y + dropdownWidget->top }, dropdownWidget->height() + 1, @@ -3791,8 +3791,8 @@ namespace OpenRCT2::Ui::Windows dropdownWidget--; for (int32_t i = 0; i < 7; i++) { - gDropdownItems[i].format = STR_DROPDOWN_MENU_LABEL; - gDropdownItems[i].args = kRideInspectionIntervalNames[i]; + gDropdown.items[i].format = STR_DROPDOWN_MENU_LABEL; + gDropdown.items[i].args = kRideInspectionIntervalNames[i]; } WindowDropdownShowTextCustomWidth( { windowPos.x + dropdownWidget->left, windowPos.y + dropdownWidget->top }, dropdownWidget->height() + 1, @@ -3808,8 +3808,8 @@ namespace OpenRCT2::Ui::Windows if (rideEntry->ride_type[j] != kRideTypeNull) break; } - gDropdownItems[0].format = STR_DROPDOWN_MENU_LABEL; - gDropdownItems[0].args = STR_DEBUG_FIX_RIDE; + gDropdown.items[0].format = STR_DROPDOWN_MENU_LABEL; + gDropdown.items[0].args = STR_DEBUG_FIX_RIDE; for (int32_t i = 0; i < 8; i++) { assert(j < static_cast(std::size(rideEntry->ride_type))); @@ -3820,8 +3820,8 @@ namespace OpenRCT2::Ui::Windows if (ride->numTrains != 1) continue; } - gDropdownItems[numItems].format = STR_DROPDOWN_MENU_LABEL; - gDropdownItems[numItems].args = RideBreakdownReasonNames[i]; + gDropdown.items[numItems].format = STR_DROPDOWN_MENU_LABEL; + gDropdown.items[numItems].args = RideBreakdownReasonNames[i]; numItems++; } } @@ -3854,8 +3854,8 @@ namespace OpenRCT2::Ui::Windows Dropdown::SetChecked(numItems, true); break; } - gDropdownItems[numItems].format = STR_DROPDOWN_MENU_LABEL; - gDropdownItems[numItems].args = RideBreakdownReasonNames[i]; + gDropdown.items[numItems].format = STR_DROPDOWN_MENU_LABEL; + gDropdown.items[numItems].args = RideBreakdownReasonNames[i]; numItems++; } } @@ -4325,8 +4325,8 @@ namespace OpenRCT2::Ui::Windows { for (size_t i = 0; i < std::size(ColourSchemeNames); i++) { - gDropdownItems[i].format = STR_DROPDOWN_MENU_LABEL; - gDropdownItems[i].args = ColourSchemeNames[i]; + gDropdown.items[i].format = STR_DROPDOWN_MENU_LABEL; + gDropdown.items[i].args = ColourSchemeNames[i]; } WindowDropdownShowTextCustomWidth( @@ -4352,8 +4352,8 @@ namespace OpenRCT2::Ui::Windows { for (auto i = 0; i < 4; i++) { - gDropdownItems[i].format = STR_DROPDOWN_MENU_LABEL; - gDropdownItems[i].args = MazeOptions[i].text; + gDropdown.items[i].format = STR_DROPDOWN_MENU_LABEL; + gDropdown.items[i].args = MazeOptions[i].text; } WindowDropdownShowTextCustomWidth( @@ -4372,16 +4372,16 @@ namespace OpenRCT2::Ui::Windows auto vehicleTypeName = GetRideComponentName(ride->getRideTypeDescriptor().NameConvention.vehicle).singular; auto numDropdownItems = 2; - gDropdownItems[0].format = STR_DROPDOWN_MENU_LABEL; - gDropdownItems[0].args = STR_ALL_VEHICLES_IN_SAME_COLOURS; - gDropdownItems[1].format = STR_DROPDOWN_MENU_LABEL; - gDropdownItems[1].args = (vehicleTypeName << 16) | STR_DIFFERENT_COLOURS_PER; + gDropdown.items[0].format = STR_DROPDOWN_MENU_LABEL; + gDropdown.items[0].args = STR_ALL_VEHICLES_IN_SAME_COLOURS; + gDropdown.items[1].format = STR_DROPDOWN_MENU_LABEL; + gDropdown.items[1].args = (vehicleTypeName << 16) | STR_DIFFERENT_COLOURS_PER; if (getNumVisibleCars() > 1) { numDropdownItems++; - gDropdownItems[2].format = STR_DROPDOWN_MENU_LABEL; - gDropdownItems[2].args = STR_DIFFERENT_COLOURS_PER_VEHICLE; + gDropdown.items[2].format = STR_DROPDOWN_MENU_LABEL; + gDropdown.items[2].args = STR_DIFFERENT_COLOURS_PER_VEHICLE; } WindowDropdownShowTextCustomWidth( @@ -4414,8 +4414,8 @@ namespace OpenRCT2::Ui::Windows } int64_t vehicleIndex = dropdownIndex + 1; - gDropdownItems[dropdownIndex].format = STR_DROPDOWN_MENU_LABEL; - gDropdownItems[dropdownIndex].args = (vehicleIndex << 32) + gDropdown.items[dropdownIndex].format = STR_DROPDOWN_MENU_LABEL; + gDropdown.items[dropdownIndex].args = (vehicleIndex << 32) | ((GetRideComponentName(ride->getRideTypeDescriptor().NameConvention.vehicle).capitalised) << 16) | stringId; dropdownIndex++; @@ -5085,8 +5085,8 @@ namespace OpenRCT2::Ui::Windows for (size_t i = 0; i < numItems; i++) { auto musicObj = objManager.GetLoadedObject(musicOrder[i]); - gDropdownItems[i].format = STR_DROPDOWN_MENU_LABEL; - gDropdownItems[i].args = musicObj->NameStringId; + gDropdown.items[i].format = STR_DROPDOWN_MENU_LABEL; + gDropdown.items[i].args = musicObj->NameStringId; } WindowDropdownShowTextCustomWidth( @@ -5467,18 +5467,18 @@ namespace OpenRCT2::Ui::Windows if (ride == nullptr) return; - gDropdownItems[0].format = STR_SAVE_TRACK_DESIGN_ITEM; - gDropdownItems[1].format = STR_SAVE_TRACK_DESIGN_WITH_SCENERY_ITEM; + gDropdown.items[0].format = STR_SAVE_TRACK_DESIGN_ITEM; + gDropdown.items[1].format = STR_SAVE_TRACK_DESIGN_WITH_SCENERY_ITEM; WindowDropdownShowText( { windowPos.x + widgets[widgetIndex].left, windowPos.y + widgets[widgetIndex].top }, widgets[widgetIndex].height() + 1, colours[1], Dropdown::Flag::StayOpen, 2); - gDropdownDefaultIndex = 0; + gDropdown.defaultIndex = 0; if (!ride->getRideTypeDescriptor().HasFlag(RtdFlag::hasTrack)) { // Disable saving without scenery if we're a flat ride Dropdown::SetDisabled(0, true); - gDropdownDefaultIndex = 1; + gDropdown.defaultIndex = 1; } } @@ -5488,7 +5488,7 @@ namespace OpenRCT2::Ui::Windows return; if (dropdownIndex == -1) - dropdownIndex = gDropdownHighlightedIndex; + dropdownIndex = gDropdown.highlightedIndex; if (dropdownIndex == 0) { diff --git a/src/openrct2-ui/windows/RideConstruction.cpp b/src/openrct2-ui/windows/RideConstruction.cpp index 0a66072840..ef9e2f75dc 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) { - gDropdownItems[i++].format = kStringIdEmpty; + gDropdown.items[i++].format = kStringIdEmpty; continue; } @@ -2610,7 +2610,7 @@ namespace OpenRCT2::Ui::Windows } } - gDropdownItems[i].format = trackPieceStringId; + gDropdown.items[i].format = trackPieceStringId; if (_currentlySelectedTrack == trackPiece) defaultIndex = i; @@ -2631,7 +2631,7 @@ namespace OpenRCT2::Ui::Windows { Dropdown::SetDisabled(static_cast(j), _specialElementDropdownState.Elements[j].Disabled); } - gDropdownDefaultIndex = defaultIndex; + gDropdown.defaultIndex = defaultIndex; } void RideSelectedTrackSetSeatRotation(int32_t seatRotation) diff --git a/src/openrct2-ui/windows/RideList.cpp b/src/openrct2-ui/windows/RideList.cpp index 5eb57fc86c..2cfd4c158c 100644 --- a/src/openrct2-ui/windows/RideList.cpp +++ b/src/openrct2-ui/windows/RideList.cpp @@ -301,8 +301,8 @@ namespace OpenRCT2::Ui::Windows if (widgetIndex == WIDX_OPEN_CLOSE_ALL) { const auto& widget = widgets[widgetIndex]; - gDropdownItems[0].format = STR_CLOSE_ALL; - gDropdownItems[1].format = STR_OPEN_ALL; + gDropdown.items[0].format = STR_CLOSE_ALL; + gDropdown.items[1].format = STR_OPEN_ALL; WindowDropdownShowText( { windowPos.x + widget.left, windowPos.y + widget.top }, widget.height(), colours[1], 0, 2); } @@ -331,8 +331,8 @@ namespace OpenRCT2::Ui::Windows selectedIndex = numItems; } - gDropdownItems[numItems].format = STR_DROPDOWN_MENU_LABEL; - gDropdownItems[numItems].args = ride_info_type_string_mapping[type]; + gDropdown.items[numItems].format = STR_DROPDOWN_MENU_LABEL; + gDropdown.items[numItems].args = ride_info_type_string_mapping[type]; numItems++; } @@ -376,7 +376,7 @@ namespace OpenRCT2::Ui::Windows return; int32_t informationType = INFORMATION_TYPE_STATUS; - uint32_t arg = static_cast(gDropdownItems[dropdownIndex].args); + uint32_t arg = static_cast(gDropdown.items[dropdownIndex].args); for (size_t i = 0; i < std::size(ride_info_type_string_mapping); i++) { if (arg == ride_info_type_string_mapping[i]) diff --git a/src/openrct2-ui/windows/Staff.cpp b/src/openrct2-ui/windows/Staff.cpp index 6b0ef1c11c..62f920b03c 100644 --- a/src/openrct2-ui/windows/Staff.cpp +++ b/src/openrct2-ui/windows/Staff.cpp @@ -427,13 +427,13 @@ namespace OpenRCT2::Ui::Windows case WIDX_PATROL: { // Dropdown names - gDropdownItems[0].format = STR_SET_PATROL_AREA; - gDropdownItems[1].format = STR_CLEAR_PATROL_AREA; + gDropdown.items[0].format = STR_SET_PATROL_AREA; + gDropdown.items[1].format = STR_CLEAR_PATROL_AREA; auto ddPos = ScreenCoordsXY{ widget->left + windowPos.x, widget->top + windowPos.y }; int32_t extraHeight = widget->height() + 1; WindowDropdownShowText(ddPos, extraHeight, colours[1], 0, 2); - gDropdownDefaultIndex = 0; + gDropdown.defaultIndex = 0; auto staff = GetStaff(); if (staff == nullptr) @@ -782,8 +782,8 @@ namespace OpenRCT2::Ui::Windows { // TODO: rework interface to dropdown arguments so memcpy won't be needed auto* nameStr = _availableCostumes[i].friendlyName.c_str(); - std::memcpy(&gDropdownItems[i].args, &nameStr, sizeof(const char*)); - gDropdownItems[i].format = STR_OPTIONS_DROPDOWN_ITEM; + std::memcpy(&gDropdown.items[i].args, &nameStr, sizeof(const char*)); + gDropdown.items[i].format = STR_OPTIONS_DROPDOWN_ITEM; // Remember what item to check for the end of this event function auto costumeIndex = _availableCostumes[i].index; @@ -1164,12 +1164,12 @@ namespace OpenRCT2::Ui::Windows void ShowLocateDropdown(Widget* widget) { - gDropdownItems[0].format = STR_LOCATE_SUBJECT_TIP; - gDropdownItems[1].format = STR_FOLLOW_SUBJECT_TIP; + gDropdown.items[0].format = STR_LOCATE_SUBJECT_TIP; + gDropdown.items[1].format = STR_FOLLOW_SUBJECT_TIP; WindowDropdownShowText( { windowPos.x + widget->left, windowPos.y + widget->top }, widget->height() + 1, colours[1], 0, 2); - gDropdownDefaultIndex = 0; + gDropdown.defaultIndex = 0; } void FollowPeep() diff --git a/src/openrct2-ui/windows/Themes.cpp b/src/openrct2-ui/windows/Themes.cpp index aedb9abfca..d23e31a07d 100644 --- a/src/openrct2-ui/windows/Themes.cpp +++ b/src/openrct2-ui/windows/Themes.cpp @@ -440,8 +440,8 @@ namespace OpenRCT2::Ui::Windows widget--; for (int32_t i = 0; i < num_items; i++) { - gDropdownItems[i].format = STR_OPTIONS_DROPDOWN_ITEM; - gDropdownItems[i].args = reinterpret_cast(ThemeManagerGetAvailableThemeName(i)); + gDropdown.items[i].format = STR_OPTIONS_DROPDOWN_ITEM; + gDropdown.items[i].args = reinterpret_cast(ThemeManagerGetAvailableThemeName(i)); } WindowDropdownShowTextCustomWidth( diff --git a/src/openrct2-ui/windows/TileInspector.cpp b/src/openrct2-ui/windows/TileInspector.cpp index 819c37a64d..0e0330d144 100644 --- a/src/openrct2-ui/windows/TileInspector.cpp +++ b/src/openrct2-ui/windows/TileInspector.cpp @@ -894,12 +894,12 @@ static uint64_t PageDisabledWidgets[] = { // Use dropdown instead of dropdown button widget--; // Fill dropdown list - gDropdownItems[0].format = STR_DROPDOWN_MENU_LABEL; - gDropdownItems[1].format = STR_DROPDOWN_MENU_LABEL; - gDropdownItems[2].format = STR_DROPDOWN_MENU_LABEL; - gDropdownItems[0].args = STR_TILE_INSPECTOR_WALL_FLAT; - gDropdownItems[1].args = STR_TILE_INSPECTOR_WALL_SLOPED_LEFT; - gDropdownItems[2].args = STR_TILE_INSPECTOR_WALL_SLOPED_RIGHT; + gDropdown.items[0].format = STR_DROPDOWN_MENU_LABEL; + gDropdown.items[1].format = STR_DROPDOWN_MENU_LABEL; + gDropdown.items[2].format = STR_DROPDOWN_MENU_LABEL; + gDropdown.items[0].args = STR_TILE_INSPECTOR_WALL_FLAT; + gDropdown.items[1].args = STR_TILE_INSPECTOR_WALL_SLOPED_LEFT; + gDropdown.items[2].args = STR_TILE_INSPECTOR_WALL_SLOPED_RIGHT; WindowDropdownShowTextCustomWidth( { windowPos.x + widget->left, windowPos.y + widget->top }, widget->height() + 1, colours[1], 0, Dropdown::Flag::StayOpen, 3, widget->width() - 3); diff --git a/src/openrct2-ui/windows/TitleMenu.cpp b/src/openrct2-ui/windows/TitleMenu.cpp index 673764def9..fdb613b1e6 100644 --- a/src/openrct2-ui/windows/TitleMenu.cpp +++ b/src/openrct2-ui/windows/TitleMenu.cpp @@ -175,11 +175,11 @@ namespace OpenRCT2::Ui::Windows if (widgetIndex == WIDX_GAME_TOOLS) { int32_t i = 0; - gDropdownItems[i++].format = STR_SCENARIO_EDITOR; - gDropdownItems[i++].format = STR_CONVERT_SAVED_GAME_TO_SCENARIO; - gDropdownItems[i++].format = STR_ROLLER_COASTER_DESIGNER; - gDropdownItems[i++].format = STR_TRACK_DESIGNS_MANAGER; - gDropdownItems[i++].format = STR_OPEN_USER_CONTENT_FOLDER; + gDropdown.items[i++].format = STR_SCENARIO_EDITOR; + gDropdown.items[i++].format = STR_CONVERT_SAVED_GAME_TO_SCENARIO; + gDropdown.items[i++].format = STR_ROLLER_COASTER_DESIGNER; + gDropdown.items[i++].format = STR_TRACK_DESIGNS_MANAGER; + gDropdown.items[i++].format = STR_OPEN_USER_CONTENT_FOLDER; #ifdef ENABLE_SCRIPTING auto hasCustomItems = false; @@ -194,12 +194,12 @@ namespace OpenRCT2::Ui::Windows if (!hasCustomItems) { hasCustomItems = true; - gDropdownItems[i++].format = kStringIdEmpty; + gDropdown.items[i++].format = kStringIdEmpty; } - gDropdownItems[i].format = STR_STRING; + gDropdown.items[i].format = STR_STRING; auto sz = item.Text.c_str(); - std::memcpy(&gDropdownItems[i].args, &sz, sizeof(const char*)); + std::memcpy(&gDropdown.items[i].args, &sz, sizeof(const char*)); i++; } } diff --git a/src/openrct2-ui/windows/TopToolbar.cpp b/src/openrct2-ui/windows/TopToolbar.cpp index 80b33e5f4c..f8ab85d4b8 100644 --- a/src/openrct2-ui/windows/TopToolbar.cpp +++ b/src/openrct2-ui/windows/TopToolbar.cpp @@ -1078,7 +1078,7 @@ namespace OpenRCT2::Ui::Windows SetChecked(DDIDX_VIEW_CLIPPING, mvpFlags & VIEWPORT_FLAG_CLIP_VIEW); SetChecked(DDIDX_HIGHLIGHT_PATH_ISSUES, mvpFlags & VIEWPORT_FLAG_HIGHLIGHT_PATH_ISSUES); - gDropdownDefaultIndex = DDIDX_UNDERGROUND_INSIDE; + gDropdown.defaultIndex = DDIDX_UNDERGROUND_INSIDE; } void TopToolbar::ViewMenuDropdown(int16_t dropdownIndex) @@ -1164,25 +1164,25 @@ namespace OpenRCT2::Ui::Windows void TopToolbar::InitMapMenu(Widget& widget) { auto i = 0; - gDropdownItems[i++].format = STR_SHORTCUT_SHOW_MAP; - gDropdownItems[i++].format = STR_EXTRA_VIEWPORT; + gDropdown.items[i++].format = STR_SHORTCUT_SHOW_MAP; + gDropdown.items[i++].format = STR_EXTRA_VIEWPORT; if (gLegacyScene == LegacyScene::scenarioEditor && getGameState().editorStep == EditorStep::LandscapeEditor) { - gDropdownItems[i++].format = STR_MAPGEN_MENU_ITEM; + gDropdown.items[i++].format = STR_MAPGEN_MENU_ITEM; } #ifdef ENABLE_SCRIPTING const auto& customMenuItems = OpenRCT2::Scripting::CustomMenuItems; if (!customMenuItems.empty()) { - gDropdownItems[i++].format = kStringIdEmpty; + gDropdown.items[i++].format = kStringIdEmpty; for (const auto& item : customMenuItems) { if (item.Kind == OpenRCT2::Scripting::CustomToolbarMenuItemKind::Standard) { - gDropdownItems[i].format = STR_STRING; + gDropdown.items[i].format = STR_STRING; auto sz = item.Text.c_str(); - std::memcpy(&gDropdownItems[i].args, &sz, sizeof(const char*)); + std::memcpy(&gDropdown.items[i].args, &sz, sizeof(const char*)); i++; } } @@ -1192,7 +1192,7 @@ namespace OpenRCT2::Ui::Windows WindowDropdownShowText( { windowPos.x + widget.left, windowPos.y + widget.top }, widget.height() + 1, colours[1].withFlag(ColourFlag::translucent, true), 0, i); - gDropdownDefaultIndex = DDIDX_SHOW_MAP; + gDropdown.defaultIndex = DDIDX_SHOW_MAP; } void TopToolbar::MapMenuDropdown(int16_t dropdownIndex) @@ -1243,22 +1243,22 @@ namespace OpenRCT2::Ui::Windows void TopToolbar::InitFastforwardMenu(Widget& widget) { int32_t num_items = 4; - gDropdownItems[0].format = STR_TOGGLE_OPTION; - gDropdownItems[1].format = STR_TOGGLE_OPTION; - gDropdownItems[2].format = STR_TOGGLE_OPTION; - gDropdownItems[3].format = STR_TOGGLE_OPTION; + 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; if (Config::Get().general.DebuggingTools) { - gDropdownItems[4].format = kStringIdEmpty; - gDropdownItems[5].format = STR_TOGGLE_OPTION; - gDropdownItems[5].args = STR_SPEED_HYPER; + gDropdown.items[4].format = kStringIdEmpty; + gDropdown.items[5].format = STR_TOGGLE_OPTION; + gDropdown.items[5].args = STR_SPEED_HYPER; num_items = 6; } - gDropdownItems[0].args = STR_SPEED_NORMAL; - gDropdownItems[1].args = STR_SPEED_QUICK; - gDropdownItems[2].args = STR_SPEED_FAST; - gDropdownItems[3].args = STR_SPEED_TURBO; + gDropdown.items[0].args = STR_SPEED_NORMAL; + gDropdown.items[1].args = STR_SPEED_QUICK; + gDropdown.items[2].args = STR_SPEED_FAST; + gDropdown.items[3].args = STR_SPEED_TURBO; WindowDropdownShowText( { windowPos.x + widget.left, windowPos.y + widget.top }, widget.height() + 1, @@ -1276,15 +1276,15 @@ namespace OpenRCT2::Ui::Windows if (Config::Get().general.DebuggingTools) { - gDropdownDefaultIndex = (gGameSpeed == 8 ? 0 : gGameSpeed); + gDropdown.defaultIndex = (gGameSpeed == 8 ? 0 : gGameSpeed); } else { - gDropdownDefaultIndex = (gGameSpeed >= 4 ? 0 : gGameSpeed); + gDropdown.defaultIndex = (gGameSpeed >= 4 ? 0 : gGameSpeed); } - if (gDropdownDefaultIndex == 4) + if (gDropdown.defaultIndex == 4) { - gDropdownDefaultIndex = 5; + gDropdown.defaultIndex = 5; } } @@ -1310,66 +1310,66 @@ namespace OpenRCT2::Ui::Windows int32_t numItems = 0; if (isInTrackDesignerOrManager()) { - gDropdownItems[numItems++].format = STR_SCREENSHOT; - gDropdownItems[numItems++].format = STR_GIANT_SCREENSHOT; - gDropdownItems[numItems++].format = kStringIdEmpty; - gDropdownItems[numItems++].format = STR_ABOUT; - gDropdownItems[numItems++].format = STR_FILE_BUG_ON_GITHUB; + gDropdown.items[numItems++].format = STR_SCREENSHOT; + gDropdown.items[numItems++].format = STR_GIANT_SCREENSHOT; + gDropdown.items[numItems++].format = kStringIdEmpty; + gDropdown.items[numItems++].format = STR_ABOUT; + gDropdown.items[numItems++].format = STR_FILE_BUG_ON_GITHUB; if (OpenRCT2::GetContext()->HasNewVersionInfo()) - gDropdownItems[numItems++].format = STR_UPDATE_AVAILABLE; + gDropdown.items[numItems++].format = STR_UPDATE_AVAILABLE; - gDropdownItems[numItems++].format = STR_OPTIONS; - gDropdownItems[numItems++].format = kStringIdEmpty; + gDropdown.items[numItems++].format = STR_OPTIONS; + gDropdown.items[numItems++].format = kStringIdEmpty; if (gLegacyScene == LegacyScene::trackDesigner) - gDropdownItems[numItems++].format = STR_QUIT_ROLLERCOASTER_DESIGNER; + gDropdown.items[numItems++].format = STR_QUIT_ROLLERCOASTER_DESIGNER; else - gDropdownItems[numItems++].format = STR_QUIT_TRACK_DESIGNS_MANAGER; + gDropdown.items[numItems++].format = STR_QUIT_TRACK_DESIGNS_MANAGER; - gDropdownItems[numItems++].format = STR_EXIT_OPENRCT2; + gDropdown.items[numItems++].format = STR_EXIT_OPENRCT2; } else if (gLegacyScene == LegacyScene::scenarioEditor) { - gDropdownItems[numItems++].format = STR_LOAD_LANDSCAPE; - gDropdownItems[numItems++].format = kStringIdEmpty; - gDropdownItems[numItems++].format = STR_SAVE_LANDSCAPE; - gDropdownItems[numItems++].format = kStringIdEmpty; - gDropdownItems[numItems++].format = STR_SCREENSHOT; - gDropdownItems[numItems++].format = STR_GIANT_SCREENSHOT; - gDropdownItems[numItems++].format = kStringIdEmpty; - gDropdownItems[numItems++].format = STR_ABOUT; - gDropdownItems[numItems++].format = STR_FILE_BUG_ON_GITHUB; + gDropdown.items[numItems++].format = STR_LOAD_LANDSCAPE; + gDropdown.items[numItems++].format = kStringIdEmpty; + gDropdown.items[numItems++].format = STR_SAVE_LANDSCAPE; + gDropdown.items[numItems++].format = kStringIdEmpty; + gDropdown.items[numItems++].format = STR_SCREENSHOT; + gDropdown.items[numItems++].format = STR_GIANT_SCREENSHOT; + gDropdown.items[numItems++].format = kStringIdEmpty; + gDropdown.items[numItems++].format = STR_ABOUT; + gDropdown.items[numItems++].format = STR_FILE_BUG_ON_GITHUB; if (OpenRCT2::GetContext()->HasNewVersionInfo()) - gDropdownItems[numItems++].format = STR_UPDATE_AVAILABLE; + gDropdown.items[numItems++].format = STR_UPDATE_AVAILABLE; - gDropdownItems[numItems++].format = STR_OPTIONS; - gDropdownItems[numItems++].format = kStringIdEmpty; - gDropdownItems[numItems++].format = STR_QUIT_SCENARIO_EDITOR; - gDropdownItems[numItems++].format = STR_EXIT_OPENRCT2; + gDropdown.items[numItems++].format = STR_OPTIONS; + gDropdown.items[numItems++].format = kStringIdEmpty; + gDropdown.items[numItems++].format = STR_QUIT_SCENARIO_EDITOR; + gDropdown.items[numItems++].format = STR_EXIT_OPENRCT2; } else { - gDropdownItems[numItems++].format = STR_NEW_GAME; - gDropdownItems[numItems++].format = STR_LOAD_GAME; - gDropdownItems[numItems++].format = kStringIdEmpty; - gDropdownItems[numItems++].format = STR_SAVE_GAME; - gDropdownItems[numItems++].format = STR_SAVE_GAME_AS; - gDropdownItems[numItems++].format = kStringIdEmpty; - gDropdownItems[numItems++].format = STR_SCREENSHOT; - gDropdownItems[numItems++].format = STR_GIANT_SCREENSHOT; - gDropdownItems[numItems++].format = kStringIdEmpty; - gDropdownItems[numItems++].format = STR_ABOUT; - gDropdownItems[numItems++].format = STR_FILE_BUG_ON_GITHUB; + gDropdown.items[numItems++].format = STR_NEW_GAME; + gDropdown.items[numItems++].format = STR_LOAD_GAME; + gDropdown.items[numItems++].format = kStringIdEmpty; + gDropdown.items[numItems++].format = STR_SAVE_GAME; + gDropdown.items[numItems++].format = STR_SAVE_GAME_AS; + gDropdown.items[numItems++].format = kStringIdEmpty; + gDropdown.items[numItems++].format = STR_SCREENSHOT; + gDropdown.items[numItems++].format = STR_GIANT_SCREENSHOT; + gDropdown.items[numItems++].format = kStringIdEmpty; + gDropdown.items[numItems++].format = STR_ABOUT; + gDropdown.items[numItems++].format = STR_FILE_BUG_ON_GITHUB; if (OpenRCT2::GetContext()->HasNewVersionInfo()) - gDropdownItems[numItems++].format = STR_UPDATE_AVAILABLE; + gDropdown.items[numItems++].format = STR_UPDATE_AVAILABLE; - gDropdownItems[numItems++].format = STR_OPTIONS; - gDropdownItems[numItems++].format = kStringIdEmpty; - gDropdownItems[numItems++].format = STR_QUIT_TO_MENU; - gDropdownItems[numItems++].format = STR_EXIT_OPENRCT2; + gDropdown.items[numItems++].format = STR_OPTIONS; + gDropdown.items[numItems++].format = kStringIdEmpty; + gDropdown.items[numItems++].format = STR_QUIT_TO_MENU; + gDropdown.items[numItems++].format = STR_EXIT_OPENRCT2; } WindowDropdownShowText( @@ -1429,7 +1429,7 @@ namespace OpenRCT2::Ui::Windows Dropdown::SetChecked(DDIDX_DISABLE_SUPPORT_LIMITS, true); } - gDropdownDefaultIndex = DDIDX_CHEATS; + gDropdown.defaultIndex = DDIDX_CHEATS; } void TopToolbar::CheatsMenuDropdown(int16_t dropdownIndex) @@ -1469,10 +1469,10 @@ namespace OpenRCT2::Ui::Windows void TopToolbar::InitDebugMenu(Widget& widget) { - gDropdownItems[DDIDX_CONSOLE].format = STR_TOGGLE_OPTION; - gDropdownItems[DDIDX_CONSOLE].args = STR_DEBUG_DROPDOWN_CONSOLE; - gDropdownItems[DDIDX_DEBUG_PAINT].format = STR_TOGGLE_OPTION; - gDropdownItems[DDIDX_DEBUG_PAINT].args = STR_DEBUG_DROPDOWN_DEBUG_PAINT; + gDropdown.items[DDIDX_CONSOLE].format = STR_TOGGLE_OPTION; + gDropdown.items[DDIDX_CONSOLE].args = STR_DEBUG_DROPDOWN_CONSOLE; + gDropdown.items[DDIDX_DEBUG_PAINT].format = STR_TOGGLE_OPTION; + gDropdown.items[DDIDX_DEBUG_PAINT].args = STR_DEBUG_DROPDOWN_DEBUG_PAINT; WindowDropdownShowText( { windowPos.x + widget.left, windowPos.y + widget.top }, widget.height() + 1, @@ -1514,8 +1514,8 @@ namespace OpenRCT2::Ui::Windows void TopToolbar::InitNetworkMenu(Widget& widget) { - gDropdownItems[DDIDX_MULTIPLAYER].format = STR_MULTIPLAYER; - gDropdownItems[DDIDX_MULTIPLAYER_RECONNECT].format = STR_MULTIPLAYER_RECONNECT; + gDropdown.items[DDIDX_MULTIPLAYER].format = STR_MULTIPLAYER; + gDropdown.items[DDIDX_MULTIPLAYER_RECONNECT].format = STR_MULTIPLAYER_RECONNECT; WindowDropdownShowText( { windowPos.x + widget.left, windowPos.y + widget.top }, widget.height() + 1, @@ -1523,7 +1523,7 @@ namespace OpenRCT2::Ui::Windows Dropdown::SetDisabled(DDIDX_MULTIPLAYER_RECONNECT, !NetworkIsDesynchronised()); - gDropdownDefaultIndex = DDIDX_MULTIPLAYER; + gDropdown.defaultIndex = DDIDX_MULTIPLAYER; } void TopToolbar::NetworkMenuDropdown(int16_t dropdownIndex)