Changeset - r28224:bb1a33d7a0f2
[Not reviewed]
master
0 3 0
Peter Nelson - 12 months ago 2023-12-03 18:11:08
peter1138@openttd.org
Change: Hide unused cargos from vehicle cargo filter. (#11533)

The list of used cargo types is updated when the list is invalidated.
3 files changed with 22 insertions and 7 deletions:
0 comments (0 inline, 0 general)
src/group_gui.cpp
Show inline comments
 
@@ -424,7 +424,7 @@ public:
 
				break;
 

	
 
			case WID_GL_FILTER_BY_CARGO:
 
				size->width = std::max(size->width, GetDropDownListDimension(this->BuildCargoDropDownList()).width + padding.width);
 
				size->width = std::max(size->width, GetDropDownListDimension(this->BuildCargoDropDownList(true)).width + padding.width);
 
				break;
 

	
 
			case WID_GL_MANAGE_VEHICLES_DROPDOWN: {
 
@@ -665,7 +665,7 @@ public:
 
				return;
 

	
 
			case WID_GL_FILTER_BY_CARGO: // Select filtering criteria dropdown menu
 
				ShowDropDownList(this, this->BuildCargoDropDownList(), this->cargo_filter_criteria, widget);
 
				ShowDropDownList(this, this->BuildCargoDropDownList(false), this->cargo_filter_criteria, widget);
 
				break;
 

	
 
			case WID_GL_ALL_VEHICLES: // All vehicles button
src/vehicle_gui.cpp
Show inline comments
 
@@ -191,6 +191,14 @@ void BaseVehicleListWindow::BuildVehicle
 

	
 
	GenerateVehicleSortList(&this->vehicles, this->vli);
 

	
 
	CargoTypes used = 0;
 
	for (const Vehicle *v : this->vehicles) {
 
		for (const Vehicle *u = v; u != nullptr; u = u->Next()) {
 
			if (u->cargo_cap > 0) SetBit(used, u->cargo_type);
 
		}
 
	}
 
	this->used_cargoes = used;
 

	
 
	if (this->grouping == GB_NONE) {
 
		uint max_unitnumber = 0;
 
		for (auto it = this->vehicles.begin(); it != this->vehicles.end(); ++it) {
 
@@ -371,7 +379,12 @@ StringID BaseVehicleListWindow::GetCargo
 
	}
 
}
 

	
 
DropDownList BaseVehicleListWindow::BuildCargoDropDownList() const
 
/**
 
 * Build drop down list for cargo filter selection.
 
 * @param full If true, build list with all cargo types, instead of only used cargo types.
 
 * @return Drop down list for cargo filter.
 
 */
 
DropDownList BaseVehicleListWindow::BuildCargoDropDownList(bool full) const
 
{
 
	DropDownList list;
 

	
 
@@ -385,7 +398,8 @@ DropDownList BaseVehicleListWindow::Buil
 
	/* Add cargos */
 
	Dimension d = GetLargestCargoIconSize();
 
	for (const CargoSpec *cs : _sorted_cargo_specs) {
 
		list.push_back(std::make_unique<DropDownListIconItem>(d, cs->GetCargoIcon(), PAL_NONE, cs->name, cs->Index(), false));
 
		if (!full && !HasBit(this->used_cargoes, cs->Index())) continue;
 
		list.push_back(std::make_unique<DropDownListIconItem>(d, cs->GetCargoIcon(), PAL_NONE, cs->name, cs->Index(), false, !HasBit(this->used_cargoes, cs->Index())));
 
	}
 

	
 
	return list;
 
@@ -1877,7 +1891,7 @@ public:
 
				break;
 

	
 
			case WID_VL_FILTER_BY_CARGO:
 
				size->width = std::max(size->width, GetDropDownListDimension(this->BuildCargoDropDownList()).width + padding.width);
 
				size->width = std::max(size->width, GetDropDownListDimension(this->BuildCargoDropDownList(true)).width + padding.width);
 
				break;
 

	
 
			case WID_VL_MANAGE_VEHICLES_DROPDOWN: {
 
@@ -2007,7 +2021,7 @@ public:
 
				return;
 

	
 
			case WID_VL_FILTER_BY_CARGO: // Cargo filter dropdown
 
				ShowDropDownList(this, this->BuildCargoDropDownList(), this->cargo_filter_criteria, widget);
 
				ShowDropDownList(this, this->BuildCargoDropDownList(false), this->cargo_filter_criteria, widget);
 
				break;
 

	
 
			case WID_VL_LIST: { // Matrix to show vehicles
src/vehicle_gui_base.h
Show inline comments
 
@@ -90,6 +90,7 @@ struct BaseVehicleListWindow : public Wi
 
	VehicleID vehicle_sel;                      ///< Selected vehicle
 
	CargoID cargo_filter_criteria;              ///< Selected cargo filter index
 
	uint order_arrow_width;                     ///< Width of the arrow in the small order list.
 
	CargoTypes used_cargoes;
 

	
 
	typedef GUIVehicleGroupList::SortFunction VehicleGroupSortFunction;
 
	typedef GUIVehicleList::SortFunction VehicleIndividualSortFunction;
 
@@ -124,7 +125,7 @@ struct BaseVehicleListWindow : public Wi
 
	void SetCargoFilterArray();
 
	void FilterVehicleList();
 
	StringID GetCargoFilterLabel(CargoID cid) const;
 
	DropDownList BuildCargoDropDownList() const;
 
	DropDownList BuildCargoDropDownList(bool full) const;
 
	Dimension GetActionDropdownSize(bool show_autoreplace, bool show_group, bool show_create);
 
	DropDownList BuildActionDropdownList(bool show_autoreplace, bool show_group, bool show_create);
 

	
0 comments (0 inline, 0 general)