1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2025-12-10 09:32:29 +01:00

Refactor WidgetFlags to FlagHolder

This commit is contained in:
Gymnasiast
2025-06-09 22:29:06 +02:00
parent 650fa3ae2e
commit 757ab61b20
6 changed files with 47 additions and 49 deletions

View File

@@ -363,7 +363,7 @@ namespace OpenRCT2::Ui
auto stringId = widget.text;
auto ft = Formatter::Common();
if (widget.flags & WIDGET_FLAGS::TEXT_IS_STRING)
if (widget.flags.has(WidgetFlag::textIsString))
{
stringId = STR_STRING;
ft.Add<utf8*>(widget.string);
@@ -411,7 +411,7 @@ namespace OpenRCT2::Ui
auto stringId = widget.text;
auto ft = Formatter::Common();
if (widget.flags & WIDGET_FLAGS::TEXT_IS_STRING)
if (widget.flags.has(WidgetFlag::textIsString))
{
stringId = STR_STRING;
ft.Add<utf8*>(widget.string);
@@ -464,7 +464,7 @@ namespace OpenRCT2::Ui
// Text
auto stringId = widget.text;
auto rawFt = Formatter::Common();
if (widget.flags & WIDGET_FLAGS::TEXT_IS_STRING)
if (widget.flags.has(WidgetFlag::textIsString))
{
if (widget.string != nullptr && widget.string[0] != '\0')
{
@@ -650,7 +650,7 @@ namespace OpenRCT2::Ui
auto stringId = widget.text;
auto ft = Formatter::Common();
if (widget.flags & WIDGET_FLAGS::TEXT_IS_STRING)
if (widget.flags.has(WidgetFlag::textIsString))
{
stringId = STR_STRING;
ft.Add<utf8*>(widget.string);
@@ -863,14 +863,14 @@ namespace OpenRCT2::Ui
bool WidgetIsDisabled(const WindowBase& w, WidgetIndex widgetIndex)
{
if (w.classification == WindowClass::Custom)
return w.widgets[widgetIndex].flags & WIDGET_FLAGS::IS_DISABLED;
return w.widgets[widgetIndex].flags.has(WidgetFlag::isDisabled);
return (w.disabled_widgets & (1LL << widgetIndex)) != 0;
}
bool WidgetIsHoldable(const WindowBase& w, WidgetIndex widgetIndex)
{
if (w.classification == WindowClass::Custom)
return w.widgets[widgetIndex].flags & WIDGET_FLAGS::IS_HOLDABLE;
return w.widgets[widgetIndex].flags.has(WidgetFlag::isHoldable);
return (w.hold_down_widgets & (1LL << widgetIndex)) != 0;
}
@@ -883,7 +883,7 @@ namespace OpenRCT2::Ui
{
if (w.classification == WindowClass::Custom)
{
if (w.widgets[widgetIndex].flags & WIDGET_FLAGS::IS_PRESSED)
if (w.widgets[widgetIndex].flags.has(WidgetFlag::isPressed))
{
return true;
}
@@ -1052,7 +1052,7 @@ namespace OpenRCT2::Ui
return &w.widgets[widgetIndex];
}
static void SafeSetWidgetFlag(WindowBase& w, WidgetIndex widgetIndex, WidgetFlags mask, bool value)
static void SafeSetWidgetFlag(WindowBase& w, WidgetIndex widgetIndex, WidgetFlag flag, bool value)
{
Widget* widget = GetWidgetByIndex(w, widgetIndex);
if (widget == nullptr)
@@ -1060,10 +1060,7 @@ namespace OpenRCT2::Ui
return;
}
if (value)
widget->flags |= mask;
else
widget->flags &= ~mask;
widget->flags.set(flag, value);
}
void WidgetSetEnabled(WindowBase& w, WidgetIndex widgetIndex, bool enabled)
@@ -1073,7 +1070,7 @@ namespace OpenRCT2::Ui
void WidgetSetDisabled(WindowBase& w, WidgetIndex widgetIndex, bool value)
{
SafeSetWidgetFlag(w, widgetIndex, WIDGET_FLAGS::IS_DISABLED, value);
SafeSetWidgetFlag(w, widgetIndex, WidgetFlag::isDisabled, value);
if (value)
{
w.disabled_widgets |= (1uLL << widgetIndex);
@@ -1086,7 +1083,7 @@ namespace OpenRCT2::Ui
void WidgetSetHoldable(WindowBase& w, WidgetIndex widgetIndex, bool value)
{
SafeSetWidgetFlag(w, widgetIndex, WIDGET_FLAGS::IS_HOLDABLE, value);
SafeSetWidgetFlag(w, widgetIndex, WidgetFlag::isHoldable, value);
if (value)
{
w.hold_down_widgets |= (1uLL << widgetIndex);
@@ -1099,12 +1096,12 @@ namespace OpenRCT2::Ui
void WidgetSetVisible(WindowBase& w, WidgetIndex widgetIndex, bool value)
{
SafeSetWidgetFlag(w, widgetIndex, WIDGET_FLAGS::IS_HIDDEN, !value);
SafeSetWidgetFlag(w, widgetIndex, WidgetFlag::isHidden, !value);
}
void WidgetSetPressed(WindowBase& w, WidgetIndex widgetIndex, bool value)
{
SafeSetWidgetFlag(w, widgetIndex, WIDGET_FLAGS::IS_PRESSED, value);
SafeSetWidgetFlag(w, widgetIndex, WidgetFlag::isPressed, value);
if (value)
w.pressed_widgets |= (1uLL << widgetIndex);
else

View File

@@ -500,11 +500,11 @@ namespace OpenRCT2::Ui::Windows
auto numTabs = _info.Desc.Tabs.size();
if (canBeResized() || numTabs != 0)
{
widgets[WIDX_CONTENT_PANEL].flags &= ~WIDGET_FLAGS::IS_HIDDEN;
widgets[WIDX_CONTENT_PANEL].flags.unset(WidgetFlag::isHidden);
}
else
{
widgets[WIDX_CONTENT_PANEL].flags |= WIDGET_FLAGS::IS_HIDDEN;
widgets[WIDX_CONTENT_PANEL].flags.set(WidgetFlag::isHidden);
}
SetPressedTab();
@@ -607,8 +607,8 @@ namespace OpenRCT2::Ui::Windows
else if (widgetDesc->Type == "checkbox")
{
auto& widget = widgets[widgetIndex];
widget.flags ^= WIDGET_FLAGS::IS_PRESSED;
bool isChecked = widget.flags & WIDGET_FLAGS::IS_PRESSED;
widget.flags.flip(WidgetFlag::isPressed);
bool isChecked = widget.flags.has(WidgetFlag::isPressed);
WidgetSetCheckboxValue(*this, widgetIndex, isChecked);
@@ -969,11 +969,11 @@ namespace OpenRCT2::Ui::Windows
widget.content = std::numeric_limits<uint32_t>::max();
widget.tooltip = kStringIdNone;
widget.sztooltip = const_cast<utf8*>(desc.Tooltip.c_str());
widget.flags |= WIDGET_FLAGS::TOOLTIP_IS_STRING;
widget.flags.set(WidgetFlag::tooltipIsString);
if (desc.IsDisabled)
widget.flags |= WIDGET_FLAGS::IS_DISABLED;
widget.flags.set(WidgetFlag::isDisabled);
if (!desc.IsVisible)
widget.flags |= WIDGET_FLAGS::IS_HIDDEN;
widget.flags.set(WidgetFlag::isHidden);
if (desc.Type == "button")
{
@@ -986,11 +986,11 @@ namespace OpenRCT2::Ui::Windows
{
widget.type = WidgetType::button;
widget.string = const_cast<utf8*>(desc.Text.c_str());
widget.flags |= WIDGET_FLAGS::TEXT_IS_STRING;
widget.flags.set(WidgetFlag::textIsString);
}
if (desc.IsPressed)
{
widget.flags |= WIDGET_FLAGS::IS_PRESSED;
widget.flags.set(WidgetFlag::isPressed);
}
widgetList.push_back(widget);
}
@@ -998,10 +998,10 @@ namespace OpenRCT2::Ui::Windows
{
widget.type = WidgetType::checkbox;
widget.string = const_cast<utf8*>(desc.Text.c_str());
widget.flags |= WIDGET_FLAGS::TEXT_IS_STRING;
widget.flags.set(WidgetFlag::textIsString);
if (desc.IsChecked)
{
widget.flags |= WIDGET_FLAGS::IS_PRESSED;
widget.flags.set(WidgetFlag::isPressed);
}
widgetList.push_back(widget);
}
@@ -1027,7 +1027,7 @@ namespace OpenRCT2::Ui::Windows
{
widget.string = const_cast<utf8*>("");
}
widget.flags |= WIDGET_FLAGS::TEXT_IS_STRING;
widget.flags.set(WidgetFlag::textIsString);
widgetList.push_back(widget);
// Add the dropdown button
@@ -1041,21 +1041,21 @@ namespace OpenRCT2::Ui::Windows
widget.text = STR_DROPDOWN_GLYPH;
widget.tooltip = kStringIdNone;
if (desc.IsDisabled)
widget.flags |= WIDGET_FLAGS::IS_DISABLED;
widget.flags.set(WidgetFlag::isDisabled);
widgetList.push_back(widget);
}
else if (desc.Type == "groupbox")
{
widget.type = WidgetType::groupbox;
widget.string = const_cast<utf8*>(desc.Text.c_str());
widget.flags |= WIDGET_FLAGS::TEXT_IS_STRING;
widget.flags.set(WidgetFlag::textIsString);
widgetList.push_back(widget);
}
else if (desc.Type == "label")
{
widget.type = WidgetType::label;
widget.string = const_cast<utf8*>(desc.Text.c_str());
widget.flags |= WIDGET_FLAGS::TEXT_IS_STRING;
widget.flags.set(WidgetFlag::textIsString);
if (desc.TextAlign == TextAlignment::CENTRE)
{
widget.type = WidgetType::labelCentred;
@@ -1078,7 +1078,7 @@ namespace OpenRCT2::Ui::Windows
{
widget.type = WidgetType::spinner;
widget.string = const_cast<utf8*>(desc.Text.c_str());
widget.flags |= WIDGET_FLAGS::TEXT_IS_STRING;
widget.flags.set(WidgetFlag::textIsString);
widgetList.push_back(widget);
// Add the increment button
@@ -1092,8 +1092,8 @@ namespace OpenRCT2::Ui::Windows
widget.text = STR_NUMERIC_UP;
widget.tooltip = kStringIdNone;
if (desc.IsDisabled)
widget.flags |= WIDGET_FLAGS::IS_DISABLED;
widget.flags |= WIDGET_FLAGS::IS_HOLDABLE;
widget.flags.set(WidgetFlag::isDisabled);
widget.flags.set(WidgetFlag::isHoldable);
widgetList.push_back(widget);
// Add the decrement button
@@ -1106,7 +1106,7 @@ namespace OpenRCT2::Ui::Windows
{
widget.type = WidgetType::textBox;
widget.string = const_cast<utf8*>(desc.Text.c_str());
widget.flags |= WIDGET_FLAGS::TEXT_IS_STRING;
widget.flags.set(WidgetFlag::textIsString);
widgetList.push_back(widget);
}
else if (desc.Type == "viewport")

View File

@@ -370,7 +370,7 @@ namespace OpenRCT2::Scripting
if (IsCustomWindow())
{
auto widget = GetWidget();
if (widget != nullptr && (widget->flags & WIDGET_FLAGS::TEXT_IS_STRING) && widget->string != nullptr)
if (widget != nullptr && (widget->flags.has(WidgetFlag::textIsString)) && widget->string != nullptr)
{
return widget->string;
}

View File

@@ -845,12 +845,12 @@ namespace OpenRCT2::Ui::Windows
auto index = std::distance(_availableCostumes.begin(), pos);
auto name = _availableCostumes[index].friendlyName.c_str();
widgets[WIDX_COSTUME_BOX].string = const_cast<utf8*>(name);
widgets[WIDX_COSTUME_BOX].flags |= WIDGET_FLAGS::TEXT_IS_STRING;
widgets[WIDX_COSTUME_BOX].flags.set(WidgetFlag::textIsString);
}
else
{
widgets[WIDX_COSTUME_BOX].text = kStringIdEmpty;
widgets[WIDX_COSTUME_BOX].flags &= ~WIDGET_FLAGS::TEXT_IS_STRING;
widgets[WIDX_COSTUME_BOX].flags.unset(WidgetFlag::textIsString);
}
break;

View File

@@ -180,7 +180,7 @@ namespace OpenRCT2::Ui::Windows
widgetWindow->OnPrepareDraw();
OpenRCT2String result;
if (widget->flags & WIDGET_FLAGS::TOOLTIP_IS_STRING)
if (widget->flags.has(WidgetFlag::tooltipIsString))
{
auto tooltipString = widget->sztooltip;
if (*tooltipString == 0)

View File

@@ -9,6 +9,7 @@
#pragma once
#include "../core/FlagHolder.hpp"
#include "../core/StringTypes.h"
#include "../drawing/ImageId.hpp"
#include "../localisation/StringIdType.h"
@@ -50,16 +51,16 @@ namespace OpenRCT2
horizontalSeparator = 30,
};
using WidgetFlags = uint32_t;
namespace WIDGET_FLAGS
enum class WidgetFlag : uint8_t
{
const WidgetFlags TEXT_IS_STRING = 1 << 0;
const WidgetFlags IS_PRESSED = 1 << 2;
const WidgetFlags IS_DISABLED = 1 << 3;
const WidgetFlags TOOLTIP_IS_STRING = 1 << 4;
const WidgetFlags IS_HIDDEN = 1 << 5;
const WidgetFlags IS_HOLDABLE = 1 << 6;
} // namespace WIDGET_FLAGS
textIsString = 0,
isPressed = 2,
isDisabled = 3,
tooltipIsString = 4,
isHidden = 5,
isHoldable = 6,
};
using WidgetFlags = FlagHolder<uint8_t, WidgetFlag>;
enum
{
@@ -152,7 +153,7 @@ namespace OpenRCT2
bool IsVisible() const
{
return !(flags & OpenRCT2::WIDGET_FLAGS::IS_HIDDEN);
return !(flags.has(OpenRCT2::WidgetFlag::isHidden));
}
};