diff options
-rw-r--r-- | src/station_gui.cpp | 68 |
1 files changed, 26 insertions, 42 deletions
diff --git a/src/station_gui.cpp b/src/station_gui.cpp index a0e4c8937..c1f3f1752 100644 --- a/src/station_gui.cpp +++ b/src/station_gui.cpp @@ -165,30 +165,14 @@ static int CDECL StationRatingMaxSorter(const void *a, const void *b) return (_internal_sort_order & 1) ? maxr2 - maxr1 : maxr1 - maxr2; } -/** Flags for station list */ -enum StationListFlags { - SL_ORDER = 1 << 0, ///< Order - ascending (=0), descending (=1) - SL_RESORT = 1 << 1, ///< Resort the list - SL_REBUILD = 1 << 2, ///< Rebuild the list -}; - -DECLARE_ENUM_AS_BIT_SET(StationListFlags); - -/** Information about station list */ -struct plstations_d { - const Station **sort_list; ///< Pointer to list of stations - uint16 list_length; ///< Number of stations in list - uint16 resort_timer; ///< Tick counter to resort the list - byte sort_type; ///< Sort type - name, waiting, ... - byte flags; ///< Flags - SL_ORDER, SL_RESORT, SL_REBUILD -}; +typedef GUIList<const Station*> plstations_d; assert_compile(WINDOW_CUSTOM_SIZE >= sizeof(plstations_d)); /** * Set the station sort flag for all station-list windows. * @param sl_flag Sort list flag to set for all station-list windows */ -static void SetStationListsFlag(StationListFlags sl_flag) +static void SetStationListsFlag(SortListFlags sl_flag) { Window *const *wz; @@ -202,23 +186,23 @@ static void SetStationListsFlag(StationListFlags sl_flag) } /** - * Set the 'SL_REBUILD' flag for all station lists + * Set the 'VL_REBUILD' flag for all station lists */ void RebuildStationLists() { - SetStationListsFlag(SL_REBUILD); + SetStationListsFlag(VL_REBUILD); } /** - * Set the 'SL_RESORT' flag for all station lists + * Set the 'VL_RESORT' flag for all station lists */ void ResortStationLists() { - SetStationListsFlag(SL_RESORT); + SetStationListsFlag(VL_RESORT); } /** - * Rebuild station list if the SL_REBUILD flag is set + * Rebuild station list if the VL_REBUILD flag is set * * @param sl pointer to plstations_d (station list and flags) * @param owner player whose stations are to be in list @@ -231,7 +215,7 @@ static void BuildStationsList(plstations_d *sl, PlayerID owner, byte facilities, uint n = 0; const Station *st; - if (!(sl->flags & SL_REBUILD)) return; + if (!(sl->flags & VL_REBUILD)) return; /* Create array for sorting */ const Station **station_sort = MallocT<const Station*>(GetMaxStationIndex() + 1); @@ -265,14 +249,14 @@ static void BuildStationsList(plstations_d *sl, PlayerID owner, byte facilities, for (uint i = 0; i < n; ++i) sl->sort_list[i] = station_sort[i]; - sl->flags &= ~SL_REBUILD; - sl->flags |= SL_RESORT; + sl->flags &= ~VL_REBUILD; + sl->flags |= VL_RESORT; free((void*)station_sort); } /** - * Sort station list if the SL_RESORT flag is set + * Sort station list if the VL_RESORT flag is set * * @param sl pointer to plstations_d (station list and flags) */ @@ -285,14 +269,14 @@ static void SortStationsList(plstations_d *sl) &StationRatingMaxSorter }; - if (!(sl->flags & SL_RESORT)) return; + if (!(sl->flags & VL_RESORT)) return; - _internal_sort_order = sl->flags & SL_ORDER; + _internal_sort_order = sl->flags & VL_DESC; _last_station = NULL; // used for "cache" in namesorting qsort((void*)sl->sort_list, sl->list_length, sizeof(sl->sort_list[0]), _station_sorter[sl->sort_type]); sl->resort_timer = DAY_TICKS * PERIODIC_RESORT_DAYS; - sl->flags &= ~SL_RESORT; + sl->flags &= ~VL_RESORT; } /** @@ -322,9 +306,9 @@ static void PlayerStationsWndProc(Window *w, WindowEvent *e) w->SetWidgetLoweredState(SLW_NOCARGOWAITING, include_empty); sl->sort_list = NULL; - sl->flags = SL_REBUILD; + sl->flags = VL_REBUILD; sl->sort_type = station_sort.criteria; - if (station_sort.order) sl->flags |= SL_ORDER; + if (station_sort.order) sl->flags |= VL_DESC; /* set up resort timer */ sl->resort_timer = DAY_TICKS * PERIODIC_RESORT_DAYS; @@ -346,7 +330,7 @@ static void PlayerStationsWndProc(Window *w, WindowEvent *e) DrawWindowWidgets(w); /* draw arrow pointing up/down for ascending/descending sorting */ - DrawSortButtonState(w, SLW_SORTBY, sl->flags & SL_ORDER ? SBS_DOWN : SBS_UP); + DrawSortButtonState(w, SLW_SORTBY, sl->flags & VL_DESC ? SBS_DOWN : SBS_UP); int cg_ofst; int x = 89; @@ -449,7 +433,7 @@ static void PlayerStationsWndProc(Window *w, WindowEvent *e) w->LowerWidget(e->we.click.widget); } w->SetWidgetLoweredState(SLW_FACILALL, facilities == (FACIL_TRAIN | FACIL_TRUCK_STOP | FACIL_BUS_STOP | FACIL_AIRPORT | FACIL_DOCK)); - sl->flags |= SL_REBUILD; + sl->flags |= VL_REBUILD; w->SetDirty(); break; @@ -460,7 +444,7 @@ static void PlayerStationsWndProc(Window *w, WindowEvent *e) w->LowerWidget(SLW_FACILALL); facilities = FACIL_TRAIN | FACIL_TRUCK_STOP | FACIL_BUS_STOP | FACIL_AIRPORT | FACIL_DOCK; - sl->flags |= SL_REBUILD; + sl->flags |= VL_REBUILD; w->SetDirty(); break; @@ -476,15 +460,15 @@ static void PlayerStationsWndProc(Window *w, WindowEvent *e) _cargo_filter = _cargo_mask; include_empty = true; - sl->flags |= SL_REBUILD; + sl->flags |= VL_REBUILD; w->SetDirty(); break; } case SLW_SORTBY: // flip sorting method asc/desc - sl->flags ^= SL_ORDER; //DESC-flag + sl->flags ^= VL_DESC; //DESC-flag station_sort.order = HasBit(sl->flags, 0); - sl->flags |= SL_RESORT; + sl->flags |= VL_RESORT; w->flags4 |= 5 << WF_TIMEOUT_SHL; w->LowerWidget(SLW_SORTBY); w->SetDirty(); @@ -508,7 +492,7 @@ static void PlayerStationsWndProc(Window *w, WindowEvent *e) w->LowerWidget(SLW_NOCARGOWAITING); } - sl->flags |= SL_REBUILD; + sl->flags |= VL_REBUILD; w->SetWidgetLoweredState(SLW_CARGOALL, _cargo_filter == _cargo_mask && include_empty); w->SetDirty(); break; @@ -539,7 +523,7 @@ static void PlayerStationsWndProc(Window *w, WindowEvent *e) SetBit(_cargo_filter, c); w->LowerWidget(e->we.click.widget); } - sl->flags |= SL_REBUILD; + sl->flags |= VL_REBUILD; w->SetWidgetLoweredState(SLW_CARGOALL, _cargo_filter == _cargo_mask && include_empty); w->SetDirty(); } @@ -552,7 +536,7 @@ static void PlayerStationsWndProc(Window *w, WindowEvent *e) /* value has changed -> resort */ sl->sort_type = e->we.dropdown.index; station_sort.criteria = sl->sort_type; - sl->flags |= SL_RESORT; + sl->flags |= VL_RESORT; } w->SetDirty(); break; @@ -562,7 +546,7 @@ static void PlayerStationsWndProc(Window *w, WindowEvent *e) if (--sl->resort_timer == 0) { DEBUG(misc, 3, "Periodic rebuild station list player %d", owner); sl->resort_timer = DAY_TICKS * PERIODIC_RESORT_DAYS; - sl->flags |= SL_REBUILD; + sl->flags |= VL_REBUILD; w->SetDirty(); } break; |