# HG changeset patch # User skidd13 # Date 1213636192 0 # Node ID 5281330a77dacbf1394123271c0a3133c551e0d7 # Parent 13c4100d87575e3312ec4e38ea02a38ceec9e5ba (svn r13534) -Codechange: Replace the main part of VehiclesListBase sorting with GUIList function calls diff -r 13c4100d8757 -r 5281330a77da src/group_gui.cpp --- a/src/group_gui.cpp Mon Jun 16 17:05:17 2008 +0000 +++ b/src/group_gui.cpp Mon Jun 16 17:09:52 2008 +0000 @@ -205,9 +205,9 @@ case VEH_AIRCRAFT: this->sorting = &_sorting.aircraft; break; } - this->vehicles.sort_type = this->sorting->criteria; - this->vehicles.flags = VL_REBUILD | (this->sorting->order ? VL_DESC : VL_NONE); - this->vehicles.resort_timer = DAY_TICKS * PERIODIC_RESORT_DAYS; // Set up resort timer + this->vehicles.SetListing(*this->sorting); + this->vehicles.ForceRebuild(); + this->vehicles.NeedResort(); this->groups.ForceRebuild(); this->groups.NeedResort(); @@ -260,15 +260,16 @@ ~VehicleGroupWindow() { + *this->sorting = this->vehicles.GetListing(); } virtual void OnInvalidateData(int data) { - this->vehicles.flags |= (data == 0 ? VL_REBUILD : VL_RESORT); - if (data == 0) { + this->vehicles.ForceRebuild(); this->groups.ForceRebuild(); } else { + this->vehicles.ForceResort(); this->groups.ForceResort(); } @@ -384,7 +385,7 @@ } /* Set text of sort by dropdown */ - this->widget[GRP_WIDGET_SORT_BY_DROPDOWN].data = _vehicle_sort_listing[this->vehicles.sort_type]; + this->widget[GRP_WIDGET_SORT_BY_DROPDOWN].data = _vehicle_sort_listing[this->vehicles.SortType()]; this->DrawWidgets(); @@ -434,7 +435,7 @@ DrawStringRightAligned(187, y1 + 1, STR_GROUP_TINY_NUM, (this->group_sel == g->index) ? TC_WHITE : TC_BLACK); } - this->DrawSortButtonState(GRP_WIDGET_SORT_BY_ORDER, this->vehicles.flags & VL_DESC ? SBS_DOWN : SBS_UP); + this->DrawSortButtonState(GRP_WIDGET_SORT_BY_ORDER, this->vehicles.IsDescSortOrder() ? SBS_DOWN : SBS_UP); int list_width = this->widget[GRP_WIDGET_LIST_VEHICLE].right - this->widget[GRP_WIDGET_LIST_VEHICLE].left - 20; @@ -472,21 +473,18 @@ switch(widget) { case GRP_WIDGET_SORT_BY_ORDER: // Flip sorting method ascending/descending - this->vehicles.flags ^= VL_DESC; - this->vehicles.flags |= VL_RESORT; - - this->sorting->order = !!(this->vehicles.flags & VL_DESC); + this->vehicles.ToggleSortOrder(); this->SetDirty(); break; case GRP_WIDGET_SORT_BY_DROPDOWN: // Select sorting criteria dropdown menu - ShowDropDownMenu(this, _vehicle_sort_listing, this->vehicles.sort_type, GRP_WIDGET_SORT_BY_DROPDOWN, 0, (this->vehicle_type == VEH_TRAIN || this->vehicle_type == VEH_ROAD) ? 0 : (1 << 10)); + ShowDropDownMenu(this, _vehicle_sort_listing, this->vehicles.SortType(), GRP_WIDGET_SORT_BY_DROPDOWN, 0, (this->vehicle_type == VEH_TRAIN || this->vehicle_type == VEH_ROAD) ? 0 : (1 << 10)); return; case GRP_WIDGET_ALL_VEHICLES: // All vehicles button if (!IsAllGroupID(this->group_sel)) { this->group_sel = ALL_GROUP; - this->vehicles.flags |= VL_REBUILD; + this->vehicles.ForceRebuild(); this->SetDirty(); } break; @@ -494,7 +492,7 @@ case GRP_WIDGET_DEFAULT_VEHICLES: // Ungrouped vehicles button if (!IsDefaultGroupID(this->group_sel)) { this->group_sel = DEFAULT_GROUP; - this->vehicles.flags |= VL_REBUILD; + this->vehicles.ForceRebuild(); this->SetDirty(); } break; @@ -510,7 +508,7 @@ this->group_sel = this->groups[id_g]->index;; - this->vehicles.flags |= VL_REBUILD; + this->vehicles.ForceRebuild(); this->SetDirty(); break; } @@ -669,11 +667,7 @@ { switch (widget) { case GRP_WIDGET_SORT_BY_DROPDOWN: - if (this->vehicles.sort_type != index) { - this->vehicles.flags |= VL_RESORT; - this->vehicles.sort_type = index; - this->sorting->criteria = this->vehicles.sort_type; - } + this->vehicles.SetSortType(index); break; case GRP_WIDGET_MANAGE_VEHICLES_DROPDOWN: @@ -715,12 +709,7 @@ virtual void OnTick() { if (_pause_game != 0) return; - if (--this->vehicles.resort_timer == 0) { - this->vehicles.resort_timer = DAY_TICKS * PERIODIC_RESORT_DAYS; - this->vehicles.flags |= VL_RESORT; - this->SetDirty(); - } - if (this->groups.NeedResort()) { + if (this->groups.NeedResort() || this->vehicles.NeedResort()) { this->SetDirty(); } } diff -r 13c4100d8757 -r 5281330a77da src/vehicle_gui.cpp --- a/src/vehicle_gui.cpp Mon Jun 16 17:05:17 2008 +0000 +++ b/src/vehicle_gui.cpp Mon Jun 16 17:09:52 2008 +0000 @@ -90,14 +90,13 @@ void BuildVehicleList(VehicleListBase *vl, PlayerID owner, uint16 index, uint16 window_type) { - if (!(vl->vehicles.flags & VL_REBUILD)) return; + if (!vl->vehicles.NeedRebuild()) return; DEBUG(misc, 3, "Building vehicle list for player %d at station %d", owner, index); GenerateVehicleSortList(&vl->vehicles, vl->vehicle_type, owner, index, window_type); - vl->vehicles.flags &= ~VL_REBUILD; - vl->vehicles.flags |= VL_RESORT; + vl->vehicles.RebuildDone(); } /* cached values for VehicleNameSorter to spare many GetString() calls */ @@ -105,15 +104,10 @@ void SortVehicleList(VehicleListBase *vl) { - if (!(vl->vehicles.flags & VL_RESORT)) return; + if (vl->vehicles.Sort(_vehicle_sorter[vl->vehicles.SortType()])) return; /* invalidate cached values for name sorter - vehicle names could change */ _last_vehicle[0] = _last_vehicle[1] = NULL; - - QSortT(vl->vehicles.Begin(), vl->vehicles.Length(), _vehicle_sorter[vl->vehicles.sort_type], vl->vehicles.flags & VL_DESC); - - vl->vehicles.resort_timer = DAY_TICKS * PERIODIC_RESORT_DAYS; - vl->vehicles.flags &= ~VL_RESORT; } void DepotSortList(VehicleList *list) @@ -865,15 +859,16 @@ default: NOT_REACHED(); break; } - this->vehicles.flags = VL_REBUILD | (this->sorting->order ? VL_DESC : VL_NONE); - this->vehicles.sort_type = this->sorting->criteria; - this->vehicles.resort_timer = DAY_TICKS * PERIODIC_RESORT_DAYS; // Set up resort timer + this->vehicles.SetListing(*this->sorting); + this->vehicles.ForceRebuild(); + this->vehicles.NeedResort(); this->FindWindowPlacementAndResize(desc); } ~VehicleListWindow() { + *this->sorting = this->vehicles.GetListing(); } virtual void OnPaint() @@ -938,9 +933,9 @@ this->DrawWidgets(); /* draw sorting criteria string */ - DrawString(85, 15, _vehicle_sort_listing[this->vehicles.sort_type], TC_BLACK); + DrawString(85, 15, _vehicle_sort_listing[this->vehicles.SortType()], TC_BLACK); /* draw arrow pointing up/down for ascending/descending sorting */ - this->DrawSortButtonState(VLW_WIDGET_SORT_ORDER, this->vehicles.flags & VL_DESC ? SBS_DOWN : SBS_UP); + this->DrawSortButtonState(VLW_WIDGET_SORT_ORDER, this->vehicles.IsDescSortOrder() ? SBS_DOWN : SBS_UP); max = min(this->vscroll.pos + this->vscroll.cap, this->vehicles.Length()); for (i = this->vscroll.pos; i < max; ++i) { @@ -980,14 +975,11 @@ { switch (widget) { case VLW_WIDGET_SORT_ORDER: /* Flip sorting method ascending/descending */ - this->vehicles.flags ^= VL_DESC; - this->vehicles.flags |= VL_RESORT; - - this->sorting->order = !!(this->vehicles.flags & VL_DESC); + this->vehicles.ToggleSortOrder(); this->SetDirty(); break; case VLW_WIDGET_SORT_BY_PULLDOWN:/* Select sorting criteria dropdown menu */ - ShowDropDownMenu(this, _vehicle_sort_listing, this->vehicles.sort_type, VLW_WIDGET_SORT_BY_PULLDOWN, 0, (this->vehicle_type == VEH_TRAIN || this->vehicle_type == VEH_ROAD) ? 0 : (1 << 10)); + ShowDropDownMenu(this, _vehicle_sort_listing, this->vehicles.SortType(), VLW_WIDGET_SORT_BY_PULLDOWN, 0, (this->vehicle_type == VEH_TRAIN || this->vehicle_type == VEH_ROAD) ? 0 : (1 << 10)); return; case VLW_WIDGET_LIST: { /* Matrix to show vehicles */ uint32 id_v = (pt.y - PLY_WND_PRC__OFFSET_TOP_WIDGET) / this->resize.step_height; @@ -1040,12 +1032,7 @@ { switch (widget) { case VLW_WIDGET_SORT_BY_PULLDOWN: - if (this->vehicles.sort_type != index) { - /* value has changed -> resort */ - this->vehicles.flags |= VL_RESORT; - this->vehicles.sort_type = index; - this->sorting->criteria = this->vehicles.sort_type; - } + this->vehicles.SetSortType(index); break; case VLW_WIDGET_MANAGE_VEHICLES_DROPDOWN: assert(this->vehicles.Length() != 0); @@ -1078,13 +1065,11 @@ virtual void OnTick() { if (_pause_game != 0) return; - if (--this->vehicles.resort_timer == 0) { + if (this->vehicles.NeedResort()) { StationID station = ((this->window_number & VLW_MASK) == VLW_STATION_LIST) ? GB(this->window_number, 16, 16) : INVALID_STATION; PlayerID owner = (PlayerID)this->caption_color; DEBUG(misc, 3, "Periodic resort %d list player %d at station %d", this->vehicle_type, owner, station); - this->vehicles.resort_timer = DAY_TICKS * PERIODIC_RESORT_DAYS; - this->vehicles.flags |= VL_RESORT; this->SetDirty(); } } @@ -1097,7 +1082,11 @@ virtual void OnInvalidateData(int data) { - this->vehicles.flags |= (data == 0 ? VL_REBUILD : VL_RESORT); + if (data == 0) { + this->vehicles.ForceRebuild(); + } else { + this->vehicles.ForceResort(); + } } };