1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2025-12-23 07:43:01 +01:00

Remove track_list member var from window base (#20626)

* Remove track_list member var from window base

* Address review comment and readd OnOpen
This commit is contained in:
Duncan
2023-07-19 08:02:31 +01:00
committed by GitHub
parent 514b74c8b3
commit 5adf8cd35c
5 changed files with 48 additions and 42 deletions

View File

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

View File

@@ -78,6 +78,8 @@ private:
uint16_t _loadedTrackDesignIndex;
std::unique_ptr<TrackDesign> _loadedTrackDesign;
std::vector<uint8_t> _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<TrackListWindow>(WindowClass::TrackDesignList, WW, WH, 0);
w->SetRideSelection(item);
return w;
return WindowCreate<TrackListWindow>(WindowClass::TrackDesignList, WW, WH, 0, item);
}
void WindowTrackDesignListReloadTracks()
{
auto* trackListWindow = static_cast<TrackListWindow*>(WindowFindByClass(WindowClass::TrackDesignList));
if (trackListWindow != nullptr)
{
trackListWindow->ReloadTrackDesigns();
}
}
void WindowTrackDesignListSetBeingUpdated(const bool beingUpdated)
{
auto* trackListWindow = static_cast<TrackListWindow*>(WindowFindByClass(WindowClass::TrackDesignList));
if (trackListWindow != nullptr)
{
trackListWindow->SetIsBeingUpdated(beingUpdated);
}
}

View File

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

View File

@@ -223,12 +223,6 @@ struct Focus
}
};
struct TrackListVariables
{
bool track_list_being_updated;
bool reload_track_designs;
};
struct WindowCloseModifier
{
WindowIdentifier window;

View File

@@ -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> focus;
TrackListVariables track_list;
union
{
int16_t page{};