1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-26 08:14:38 +01:00

Create ToggleOption and Separator constructors

This commit is contained in:
Gymnasiast
2025-08-23 16:29:55 +02:00
parent bde70ea95f
commit 6f1b0bde03
7 changed files with 51 additions and 52 deletions

View File

@@ -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{};

View File

@@ -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];

View File

@@ -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);

View File

@@ -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<uintptr_t>(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++;

View File

@@ -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;
}

View File

@@ -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;

View File

@@ -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);
}