diff --git a/src/openrct2-ui/libopenrct2ui.vcxproj b/src/openrct2-ui/libopenrct2ui.vcxproj
old mode 100644
new mode 100755
index 909897d98b..b8a3649b3c
--- a/src/openrct2-ui/libopenrct2ui.vcxproj
+++ b/src/openrct2-ui/libopenrct2ui.vcxproj
@@ -157,6 +157,7 @@
+
@@ -215,4 +216,4 @@
-
+
\ No newline at end of file
diff --git a/src/openrct2-ui/windows/DemolishRidePrompt.cpp b/src/openrct2-ui/windows/DemolishRidePrompt.cpp
old mode 100644
new mode 100755
index a48a278e4c..cecab7e369
--- a/src/openrct2-ui/windows/DemolishRidePrompt.cpp
+++ b/src/openrct2-ui/windows/DemolishRidePrompt.cpp
@@ -19,174 +19,96 @@
static constexpr const int32_t WW = 200;
static constexpr const int32_t WH = 100;
-static money32 _demolishRideCost;
-
// clang-format off
-enum WindowRideDemolishWidgetIdx {
+enum WindowRideDemolishWidgetIdx
+{
WIDX_BACKGROUND,
WIDX_TITLE,
WIDX_CLOSE,
- WIDX_DEMOLISH = 3,
- WIDX_REFURBISH = 3,
+ WIDX_DEMOLISH,
WIDX_CANCEL
};
-// 0x009AEBA0
-static rct_widget window_ride_demolish_widgets[] = {
+static rct_widget window_ride_demolish_widgets[] =
+{
WINDOW_SHIM_WHITE(STR_DEMOLISH_RIDE, WW, WH),
MakeWidget({ 10, WH - 22}, {85, 14}, WindowWidgetType::Button, WindowColour::Primary, STR_DEMOLISH ),
MakeWidget({WW - 95, WH - 22}, {85, 14}, WindowWidgetType::Button, WindowColour::Primary, STR_SAVE_PROMPT_CANCEL),
WIDGETS_END,
};
-
-static rct_widget window_ride_refurbish_widgets[] = {
- WINDOW_SHIM_WHITE(STR_REFURBISH_RIDE, WW, WH),
- MakeWidget({ 10, WH - 22}, {85, 14}, WindowWidgetType::Button, WindowColour::Primary, STR_REFURBISH ),
- MakeWidget({WW - 95, WH - 22}, {85, 14}, WindowWidgetType::Button, WindowColour::Primary, STR_SAVE_PROMPT_CANCEL),
- WIDGETS_END,
-};
-
-static void WindowRideDemolishMouseup(rct_window *w, rct_widgetindex widgetIndex);
-static void WindowRideDemolishPaint(rct_window *w, rct_drawpixelinfo *dpi);
-static void WindowRideRefurbishMouseup(rct_window *w, rct_widgetindex widgetIndex);
-static void WindowRideRefurbishPaint(rct_window *w, rct_drawpixelinfo *dpi);
-
-//0x0098E2E4
-static rct_window_event_list window_ride_demolish_events([](auto& events)
-{
- events.mouse_up = &WindowRideDemolishMouseup;
- events.paint = &WindowRideDemolishPaint;
-});
// clang-format on
-static rct_window_event_list window_ride_refurbish_events([](auto& events) {
- events.mouse_up = &WindowRideRefurbishMouseup;
- events.paint = &WindowRideRefurbishPaint;
-});
+class DemolishRidePromptWindow final : public Window
+{
+ money32 _demolishRideCost;
+
+public:
+ void SetRide(Ride* currentRide)
+ {
+ rideId = currentRide->id;
+ _demolishRideCost = -ride_get_refund_price(currentRide);
+ }
+
+ void OnOpen() override
+ {
+ widgets = window_ride_demolish_widgets;
+ enabled_widgets = (1ULL << WIDX_CLOSE) | (1ULL << WIDX_CANCEL) | (1ULL << WIDX_DEMOLISH);
+ WindowInitScrollWidgets(this);
+ }
+
+ void OnMouseUp(rct_widgetindex widgetIndex) override
+ {
+ switch (widgetIndex)
+ {
+ case WIDX_DEMOLISH:
+ {
+ auto* currentRide = get_ride(rideId);
+ ride_action_modify(currentRide, RIDE_MODIFY_DEMOLISH, GAME_COMMAND_FLAG_APPLY);
+ break;
+ }
+ case WIDX_CANCEL:
+ case WIDX_CLOSE:
+ Close();
+ break;
+ }
+ }
+
+ void OnDraw(rct_drawpixelinfo& dpi) override
+ {
+ WindowDrawWidgets(this, &dpi);
+
+ auto currentRide = get_ride(rideId);
+ if (currentRide != nullptr)
+ {
+ auto stringId = (gParkFlags & PARK_FLAGS_NO_MONEY) ? STR_DEMOLISH_RIDE_ID : STR_DEMOLISH_RIDE_ID_MONEY;
+ auto ft = Formatter();
+ currentRide->FormatNameTo(ft);
+ ft.Add(_demolishRideCost);
+
+ ScreenCoordsXY stringCoords(windowPos.x + WW / 2, windowPos.y + (WH / 2) - 3);
+ DrawTextWrapped(&dpi, stringCoords, WW - 4, stringId, ft, { TextAlignment::CENTRE });
+ }
+ }
+};
-/** Based off of rct2: 0x006B486A */
rct_window* WindowRideDemolishPromptOpen(Ride* ride)
{
rct_window* w;
+ DemolishRidePromptWindow* newWindow;
w = window_find_by_class(WC_DEMOLISH_RIDE_PROMPT);
if (w != nullptr)
{
auto windowPos = w->windowPos;
window_close(w);
- w = WindowCreate(windowPos, WW, WH, &window_ride_demolish_events, WC_DEMOLISH_RIDE_PROMPT, WF_TRANSPARENT);
+ newWindow = WindowCreate(WC_DEMOLISH_RIDE_PROMPT, windowPos, WW, WH, WF_TRANSPARENT);
}
else
{
- w = WindowCreateCentred(WW, WH, &window_ride_demolish_events, WC_DEMOLISH_RIDE_PROMPT, WF_TRANSPARENT);
+ newWindow = WindowCreate(WC_DEMOLISH_RIDE_PROMPT, WW, WH, WF_CENTRE_SCREEN | WF_TRANSPARENT);
}
- w->widgets = window_ride_demolish_widgets;
- w->enabled_widgets = (1ULL << WIDX_CLOSE) | (1ULL << WIDX_CANCEL) | (1ULL << WIDX_DEMOLISH);
- WindowInitScrollWidgets(w);
- w->rideId = ride->id;
- _demolishRideCost = -ride_get_refund_price(ride);
+ newWindow->SetRide(ride);
- return w;
-}
-
-rct_window* WindowRideRefurbishPromptOpen(Ride* ride)
-{
- rct_window* w;
-
- w = window_find_by_class(WC_DEMOLISH_RIDE_PROMPT);
- if (w != nullptr)
- {
- auto windowPos = w->windowPos;
- window_close(w);
- w = WindowCreate(windowPos, WW, WH, &window_ride_refurbish_events, WC_DEMOLISH_RIDE_PROMPT, WF_TRANSPARENT);
- }
- else
- {
- w = WindowCreateCentred(WW, WH, &window_ride_refurbish_events, WC_DEMOLISH_RIDE_PROMPT, WF_TRANSPARENT);
- }
-
- w->widgets = window_ride_refurbish_widgets;
- w->enabled_widgets = (1ULL << WIDX_CLOSE) | (1ULL << WIDX_CANCEL) | (1ULL << WIDX_REFURBISH);
- WindowInitScrollWidgets(w);
- w->rideId = ride->id;
- _demolishRideCost = -ride_get_refund_price(ride);
-
- return w;
-}
-
-/**
- *
- * rct2: 0x006B4933
- */
-static void WindowRideDemolishMouseup(rct_window* w, rct_widgetindex widgetIndex)
-{
- switch (widgetIndex)
- {
- case WIDX_DEMOLISH:
- {
- auto ride = get_ride(w->rideId);
- ride_action_modify(ride, RIDE_MODIFY_DEMOLISH, GAME_COMMAND_FLAG_APPLY);
- break;
- }
- case WIDX_CANCEL:
- case WIDX_CLOSE:
- window_close(w);
- break;
- }
-}
-
-static void WindowRideRefurbishMouseup(rct_window* w, rct_widgetindex widgetIndex)
-{
- switch (widgetIndex)
- {
- case WIDX_REFURBISH:
- {
- auto ride = get_ride(w->rideId);
- ride_action_modify(ride, RIDE_MODIFY_RENEW, GAME_COMMAND_FLAG_APPLY);
- break;
- }
- case WIDX_CANCEL:
- case WIDX_CLOSE:
- window_close(w);
- break;
- }
-}
-
-/**
- *
- * rct2: 0x006B48E5
- */
-static void WindowRideDemolishPaint(rct_window* w, rct_drawpixelinfo* dpi)
-{
- WindowDrawWidgets(w, dpi);
-
- auto ride = get_ride(w->rideId);
- if (ride != nullptr)
- {
- auto stringId = (gParkFlags & PARK_FLAGS_NO_MONEY) ? STR_DEMOLISH_RIDE_ID : STR_DEMOLISH_RIDE_ID_MONEY;
- auto ft = Formatter();
- ride->FormatNameTo(ft);
- ft.Add(_demolishRideCost);
-
- ScreenCoordsXY stringCoords(w->windowPos.x + WW / 2, w->windowPos.y + (WH / 2) - 3);
- DrawTextWrapped(dpi, stringCoords, WW - 4, stringId, ft, { TextAlignment::CENTRE });
- }
-}
-
-static void WindowRideRefurbishPaint(rct_window* w, rct_drawpixelinfo* dpi)
-{
- WindowDrawWidgets(w, dpi);
-
- auto ride = get_ride(w->rideId);
- if (ride != nullptr)
- {
- auto stringId = (gParkFlags & PARK_FLAGS_NO_MONEY) ? STR_REFURBISH_RIDE_ID_NO_MONEY : STR_REFURBISH_RIDE_ID_MONEY;
- auto ft = Formatter();
- ride->FormatNameTo(ft);
- ft.Add(_demolishRideCost / 2);
-
- ScreenCoordsXY stringCoords(w->windowPos.x + WW / 2, w->windowPos.y + (WH / 2) - 3);
- DrawTextWrapped(dpi, stringCoords, WW - 4, stringId, ft, { TextAlignment::CENTRE });
- }
+ return newWindow;
}
diff --git a/src/openrct2-ui/windows/RefurbishRidePrompt.cpp b/src/openrct2-ui/windows/RefurbishRidePrompt.cpp
new file mode 100755
index 0000000000..f7dea958c7
--- /dev/null
+++ b/src/openrct2-ui/windows/RefurbishRidePrompt.cpp
@@ -0,0 +1,114 @@
+/*****************************************************************************
+ * Copyright (c) 2014-2020 OpenRCT2 developers
+ *
+ * For a complete list of all authors, please refer to contributors.md
+ * Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2
+ *
+ * OpenRCT2 is licensed under the GNU General Public License version 3.
+ *****************************************************************************/
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+static constexpr const int32_t WW = 200;
+static constexpr const int32_t WH = 100;
+
+// clang-format off
+enum WindowRideRefurbishWidgetIdx
+{
+ WIDX_BACKGROUND,
+ WIDX_TITLE,
+ WIDX_CLOSE,
+ WIDX_REFURBISH,
+ WIDX_CANCEL
+};
+
+static rct_widget window_ride_refurbish_widgets[] =
+{
+ WINDOW_SHIM_WHITE(STR_REFURBISH_RIDE, WW, WH),
+ MakeWidget({ 10, WH - 22 }, { 85, 14 }, WindowWidgetType::Button, WindowColour::Primary, STR_REFURBISH),
+ MakeWidget({ WW - 95, WH - 22 }, { 85, 14 }, WindowWidgetType::Button, WindowColour::Primary, STR_SAVE_PROMPT_CANCEL),
+ WIDGETS_END,
+};
+// clang-format on
+
+class RefurbishRidePromptWindow final : public Window
+{
+ money32 _demolishRideCost;
+
+public:
+ void SetRide(Ride* currentRide)
+ {
+ rideId = currentRide->id;
+ _demolishRideCost = -ride_get_refund_price(currentRide);
+ }
+
+ void OnOpen() override
+ {
+ widgets = window_ride_refurbish_widgets;
+ enabled_widgets = (1ULL << WIDX_CLOSE) | (1ULL << WIDX_CANCEL) | (1ULL << WIDX_REFURBISH);
+ WindowInitScrollWidgets(this);
+ }
+
+ void OnMouseUp(rct_widgetindex widgetIndex) override
+ {
+ switch (widgetIndex)
+ {
+ case WIDX_REFURBISH:
+ {
+ auto* currentRide = get_ride(rideId);
+ ride_action_modify(currentRide, RIDE_MODIFY_RENEW, GAME_COMMAND_FLAG_APPLY);
+ break;
+ }
+ case WIDX_CANCEL:
+ case WIDX_CLOSE:
+ Close();
+ break;
+ }
+ }
+
+ void OnDraw(rct_drawpixelinfo& dpi) override
+ {
+ WindowDrawWidgets(this, &dpi);
+
+ auto currentRide = get_ride(rideId);
+ if (currentRide != nullptr)
+ {
+ auto stringId = (gParkFlags & PARK_FLAGS_NO_MONEY) ? STR_REFURBISH_RIDE_ID_NO_MONEY : STR_REFURBISH_RIDE_ID_MONEY;
+ auto ft = Formatter();
+ currentRide->FormatNameTo(ft);
+ ft.Add(_demolishRideCost / 2);
+
+ ScreenCoordsXY stringCoords(windowPos.x + WW / 2, windowPos.y + (WH / 2) - 3);
+ DrawTextWrapped(&dpi, stringCoords, WW - 4, stringId, ft, { TextAlignment::CENTRE });
+ }
+ }
+};
+
+rct_window* WindowRideRefurbishPromptOpen(Ride* ride)
+{
+ rct_window* w;
+ RefurbishRidePromptWindow* newWindow;
+
+ w = window_find_by_class(WC_DEMOLISH_RIDE_PROMPT);
+ if (w != nullptr)
+ {
+ auto windowPos = w->windowPos;
+ window_close(w);
+ newWindow = WindowCreate(WC_DEMOLISH_RIDE_PROMPT, windowPos, WW, WH, WF_TRANSPARENT);
+ }
+ else
+ {
+ newWindow = WindowCreate(WC_DEMOLISH_RIDE_PROMPT, WW, WH, WF_CENTRE_SCREEN | WF_TRANSPARENT);
+ }
+
+ newWindow->SetRide(ride);
+
+ return newWindow;
+}