Changeset - r21861:c724235732d2
[Not reviewed]
master
0 2 0
rubidium - 10 years ago 2014-10-14 11:23:41
rubidium@openttd.org
(svn r27013) -Codechange: extract the functionality to determine the number of digits to make space for when drawing an unit number into a separate function
2 files changed with 26 insertions and 15 deletions:
0 comments (0 inline, 0 general)
src/vehicle_gui.cpp
Show inline comments
 
@@ -98,6 +98,30 @@ const StringID BaseVehicleListWindow::ve
 
	STR_VEHICLE_LIST_SEND_AIRCRAFT_TO_HANGAR
 
};
 

	
 
/**
 
 * Get the number of digits the biggest unit number of a set of vehicles has.
 
 * @param vehicles The list of vehicles.
 
 * @return The number of digits to allocate space for.
 
 */
 
uint GetUnitNumberDigits(VehicleList &vehicles)
 
{
 
	uint unitnumber = 0;
 
	for (const Vehicle **v = vehicles.Begin(); v != vehicles.End(); v++) {
 
		unitnumber = max<uint>(unitnumber, (*v)->unitnumber);
 
	}
 

	
 
	if (unitnumber >= 10000) return 5;
 
	if (unitnumber >=  1000) return 4;
 
	if (unitnumber >=   100) return 3;
 

	
 
	/*
 
	 * When the smallest unit number is less than 10, it is
 
	 * quite likely that it will expand to become more than
 
	 * 10 quite soon.
 
	 */
 
	return 2;
 
}
 

	
 
void BaseVehicleListWindow::BuildVehicleList()
 
{
 
	if (!this->vehicles.NeedRebuild()) return;
 
@@ -106,21 +130,7 @@ void BaseVehicleListWindow::BuildVehicle
 

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

	
 
	uint unitnumber = 0;
 
	for (const Vehicle **v = this->vehicles.Begin(); v != this->vehicles.End(); v++) {
 
		unitnumber = max<uint>(unitnumber, (*v)->unitnumber);
 
	}
 

	
 
	/* Because 111 is much less wide than e.g. 999 we use the
 
	 * wider numbers to determine the width instead of just
 
	 * the random number that it seems to be. */
 
	if (unitnumber >= 1000) {
 
		this->unitnumber_digits = 4;
 
	} else if (unitnumber >= 100) {
 
		this->unitnumber_digits = 3;
 
	} else {
 
		this->unitnumber_digits = 2;
 
	}
 
	this->unitnumber_digits = GetUnitNumberDigits(this->vehicles);
 

	
 
	this->vehicles.RebuildDone();
 
	this->vscroll->SetCount(this->vehicles.Length());
src/vehiclelist.h
Show inline comments
 
@@ -55,5 +55,6 @@ typedef SmallVector<const Vehicle *, 32>
 

	
 
bool GenerateVehicleSortList(VehicleList *list, const VehicleListIdentifier &identifier);
 
void BuildDepotVehicleList(VehicleType type, TileIndex tile, VehicleList *engine_list, VehicleList *wagon_list, bool individual_wagons = false);
 
uint GetUnitNumberDigits(VehicleList &vehicles);
 

	
 
#endif /* VEHICLELIST_H */
0 comments (0 inline, 0 general)