diff --git a/src/openrct2-ui/windows/TrackDesignManage.cpp b/src/openrct2-ui/windows/TrackDesignManage.cpp index 12b00a7e41..ae44b82db3 100644 --- a/src/openrct2-ui/windows/TrackDesignManage.cpp +++ b/src/openrct2-ui/windows/TrackDesignManage.cpp @@ -93,7 +93,6 @@ class TrackDeletePromptWindow final : public Window }; static void WindowTrackDeletePromptOpen(TrackDesignFileRef* tdFileRef); -static void WindowTrackDesignListReloadTracks(); /** * @@ -115,20 +114,12 @@ void TrackDesignManageWindow::OnOpen() widgets = _trackManageWidgets; WindowInitScrollWidgets(*this); - auto* trackDesignListWindow = WindowFindByClass(WindowClass::TrackDesignList); - if (trackDesignListWindow != nullptr) - { - trackDesignListWindow->track_list.track_list_being_updated = true; - } + WindowTrackDesignListSetBeingUpdated(true); } void TrackDesignManageWindow::OnClose() { - WindowBase* trackDesignListWindow = WindowFindByClass(WindowClass::TrackDesignList); - if (trackDesignListWindow != nullptr) - { - trackDesignListWindow->track_list.track_list_being_updated = false; - } + WindowTrackDesignListSetBeingUpdated(false); } void TrackDesignManageWindow::OnMouseUp(WidgetIndex widgetIndex) @@ -244,11 +235,3 @@ void TrackDeletePromptWindow::OnDraw(DrawPixelInfo& dpi) STR_ARE_YOU_SURE_YOU_WANT_TO_PERMANENTLY_DELETE_TRACK, ft, { TextAlignment::CENTRE }); } -static void WindowTrackDesignListReloadTracks() -{ - WindowBase* trackListWindow = WindowFindByClass(WindowClass::TrackDesignList); - if (trackListWindow != nullptr) - { - trackListWindow->track_list.reload_track_designs = true; - } -} diff --git a/src/openrct2-ui/windows/TrackList.cpp b/src/openrct2-ui/windows/TrackList.cpp index 37874c5414..02e00ddc2b 100644 --- a/src/openrct2-ui/windows/TrackList.cpp +++ b/src/openrct2-ui/windows/TrackList.cpp @@ -78,6 +78,8 @@ private: uint16_t _loadedTrackDesignIndex; std::unique_ptr _loadedTrackDesign; std::vector _trackDesignPreviewPixels; + bool _selectedItemIsBeingUpdated; + bool _reloadTrackDesigns; void FilterList() { @@ -199,8 +201,15 @@ private: } public: + TrackListWindow(const RideSelection item) + { + _window_track_list_item = item; + } + void OnOpen() override { + LoadDesignsList(_window_track_list_item); + String::Set(_filterString, sizeof(_filterString), ""); _trackListWidgets[WIDX_FILTER_STRING].string = _filterString; widgets = _trackListWidgets; @@ -215,8 +224,8 @@ public: } WindowInitScrollWidgets(*this); - track_list.track_list_being_updated = false; - track_list.reload_track_designs = false; + _selectedItemIsBeingUpdated = false; + _reloadTrackDesigns = false; // Start with first track highlighted selected_list_item = 0; if (_trackDesigns.size() != 0 && !(gScreenFlags & SCREEN_FLAGS_TRACK_MANAGER)) @@ -319,7 +328,7 @@ public: void OnScrollMouseDown(const int32_t scrollIndex, const ScreenCoordsXY& screenCoords) override { - if (!track_list.track_list_being_updated) + if (!_selectedItemIsBeingUpdated) { int32_t i = GetListItemFromPosition(screenCoords); if (i != -1) @@ -331,7 +340,7 @@ public: void OnScrollMouseOver(const int32_t scrollIndex, const ScreenCoordsXY& screenCoords) override { - if (!track_list.track_list_being_updated) + if (!_selectedItemIsBeingUpdated) { int32_t i = GetListItemFromPosition(screenCoords); if (i != -1 && selected_list_item != i) @@ -422,12 +431,12 @@ public: WidgetInvalidate(*this, WIDX_FILTER_STRING); // TODO Check this } - if (track_list.reload_track_designs) + if (_reloadTrackDesigns) { LoadDesignsList(_window_track_list_item); selected_list_item = 0; Invalidate(); - track_list.reload_track_designs = false; + _reloadTrackDesigns = false; } } @@ -733,17 +742,20 @@ public: } } - bool SetRideSelection(const RideSelection item) - { - _window_track_list_item = item; - LoadDesignsList(item); - return true; - } - void OnResize() override { ResizeFrame(); } + + void SetIsBeingUpdated(const bool beingUpdated) + { + _selectedItemIsBeingUpdated = beingUpdated; + } + + void ReloadTrackDesigns() + { + _reloadTrackDesigns = true; + } }; WindowBase* WindowTrackListOpen(const RideSelection item) @@ -760,7 +772,23 @@ WindowBase* WindowTrackListOpen(const RideSelection item) { screenPos = { 0, TOP_TOOLBAR_HEIGHT + 2 }; } - auto* w = WindowCreate(WindowClass::TrackDesignList, WW, WH, 0); - w->SetRideSelection(item); - return w; + return WindowCreate(WindowClass::TrackDesignList, WW, WH, 0, item); +} + +void WindowTrackDesignListReloadTracks() +{ + auto* trackListWindow = static_cast(WindowFindByClass(WindowClass::TrackDesignList)); + if (trackListWindow != nullptr) + { + trackListWindow->ReloadTrackDesigns(); + } +} + +void WindowTrackDesignListSetBeingUpdated(const bool beingUpdated) +{ + auto* trackListWindow = static_cast(WindowFindByClass(WindowClass::TrackDesignList)); + if (trackListWindow != nullptr) + { + trackListWindow->SetIsBeingUpdated(beingUpdated); + } } diff --git a/src/openrct2-ui/windows/Window.h b/src/openrct2-ui/windows/Window.h index 6ca6c7cfcb..8922cfcd66 100644 --- a/src/openrct2-ui/windows/Window.h +++ b/src/openrct2-ui/windows/Window.h @@ -147,6 +147,8 @@ void WindowRideMeasurementsDesignCancel(); // rct2: 0x00F635EE extern RideSelection _window_track_list_item; WindowBase* WindowTrackListOpen(RideSelection item); +void WindowTrackDesignListReloadTracks(); +void WindowTrackDesignListSetBeingUpdated(bool beingUpdated); void SetMapTooltip(Formatter& ft); const Formatter& GetMapTooltip(); diff --git a/src/openrct2/interface/Window.h b/src/openrct2/interface/Window.h index 52f126302a..15f1afb123 100644 --- a/src/openrct2/interface/Window.h +++ b/src/openrct2/interface/Window.h @@ -223,12 +223,6 @@ struct Focus } }; -struct TrackListVariables -{ - bool track_list_being_updated; - bool reload_track_designs; -}; - struct WindowCloseModifier { WindowIdentifier window; diff --git a/src/openrct2/interface/Window_internal.h b/src/openrct2/interface/Window_internal.h index d2f9374e2f..2653212432 100644 --- a/src/openrct2/interface/Window_internal.h +++ b/src/openrct2/interface/Window_internal.h @@ -53,7 +53,6 @@ struct WindowBase uint16_t no_list_items{}; // 0 for no items int16_t selected_list_item{}; // -1 for none selected std::optional focus; - TrackListVariables track_list; union { int16_t page{};