diff --git a/src/group_gui.cpp b/src/group_gui.cpp index 0b4f4e2cd8..3201f4e9ef 100644 --- a/src/group_gui.cpp +++ b/src/group_gui.cpp @@ -722,6 +722,7 @@ public: switch (widget) { case WID_GL_SORT_BY_ORDER: // Flip sorting method ascending/descending this->vehgroups.ToggleSortOrder(); + this->vehgroups.ForceResort(); this->SetDirty(); break; @@ -1044,6 +1045,7 @@ public: case WID_GL_SORT_BY_DROPDOWN: this->vehgroups.SetSortType(index); + this->UpdateSortingInterval(); break; case WID_GL_FILTER_BY_CARGO: // Select a cargo filter criteria this->SetCargoFilterIndex(index); diff --git a/src/rail_gui.cpp b/src/rail_gui.cpp index 289f150068..4f2dd3795d 100644 --- a/src/rail_gui.cpp +++ b/src/rail_gui.cpp @@ -1340,6 +1340,7 @@ public: } } size->width = std::max(size->width, d.width + padding.width); + size->width = std::min(size->width, ScaleGUITrad(400)); break; } diff --git a/src/sortlist_type.h b/src/sortlist_type.h index 9c14d382bd..28f3ab6ec6 100644 --- a/src/sortlist_type.h +++ b/src/sortlist_type.h @@ -55,6 +55,7 @@ protected: uint8 sort_type; ///< what criteria to sort on uint8 filter_type; ///< what criteria to filter on uint16 resort_timer; ///< resort list after a given amount of ticks if set + uint16 resort_interval; ///< value to re-initialise resort_timer with after sorting /** * Check if the list is sortable @@ -71,8 +72,7 @@ protected: */ void ResetResortTimer() { - /* Resort every 10 days */ - this->resort_timer = DAY_TICKS * 10; + this->resort_timer = this->resort_interval; } public: @@ -82,7 +82,8 @@ public: flags(VL_NONE), sort_type(0), filter_type(0), - resort_timer(1) + resort_timer(1), + resort_interval(DAY_TICKS * 10) /* Resort every 10 days by default */ {}; /** @@ -215,6 +216,12 @@ public: SETBITS(this->flags, VL_RESORT); } + void SetResortInterval(uint16 resort_interval) + { + this->resort_interval = std::max(1, resort_interval); + this->resort_timer = std::min(this->resort_timer, this->resort_interval); + } + /** * Check if the sort order is descending * diff --git a/src/tracerestrict_gui.cpp b/src/tracerestrict_gui.cpp index 45506cbb13..f2c1a5b31a 100644 --- a/src/tracerestrict_gui.cpp +++ b/src/tracerestrict_gui.cpp @@ -3680,6 +3680,7 @@ public: switch (widget) { case WID_TRSL_SORT_BY_DROPDOWN: this->vehgroups.SetSortType(index); + this->UpdateSortingInterval(); break; case WID_TRSL_FILTER_BY_CARGO: // Select a cargo filter criteria diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp index 9b7fabffee..69e5ea5e99 100644 --- a/src/vehicle_gui.cpp +++ b/src/vehicle_gui.cpp @@ -1995,6 +1995,13 @@ void BaseVehicleListWindow::DrawVehicleListItems(VehicleID selected_vehicle, int } } +void BaseVehicleListWindow::UpdateSortingInterval() +{ + uint16 resort_interval = DAY_TICKS * 10; + if (this->grouping == GB_NONE && this->vehgroups.SortType() == VST_TIMETABLE_DELAY) resort_interval = DAY_TICKS; + this->vehgroups.SetResortInterval(resort_interval); +} + void BaseVehicleListWindow::UpdateSortingFromGrouping() { /* Set up sorting. Make the window-specific _sorting variable @@ -2011,6 +2018,7 @@ void BaseVehicleListWindow::UpdateSortingFromGrouping() this->vehgroups.SetListing(*this->sorting); this->vehgroups.ForceRebuild(); this->vehgroups.NeedResort(); + this->UpdateSortingInterval(); } void BaseVehicleListWindow::UpdateVehicleGroupBy(GroupBy group_by) @@ -2232,6 +2240,7 @@ public: switch (widget) { case WID_VL_SORT_ORDER: // Flip sorting method ascending/descending this->vehgroups.ToggleSortOrder(); + this->vehgroups.ForceResort(); this->SetDirty(); break; @@ -2313,6 +2322,7 @@ public: case WID_VL_SORT_BY_PULLDOWN: this->vehgroups.SetSortType(index); + this->UpdateSortingInterval(); break; case WID_VL_FILTER_BY_CARGO: diff --git a/src/vehicle_gui_base.h b/src/vehicle_gui_base.h index 1c1b5f5a9f..c72d165657 100644 --- a/src/vehicle_gui_base.h +++ b/src/vehicle_gui_base.h @@ -133,6 +133,7 @@ public: void OnInit() override; + void UpdateSortingInterval(); void UpdateSortingFromGrouping(); void DrawVehicleListItems(VehicleID selected_vehicle, int line_height, const Rect &r) const;