Changeset - r8974:eb38c1c3d164
[Not reviewed]
master
0 3 0
rubidium - 16 years ago 2008-04-18 10:58:11
rubidium@openttd.org
(svn r12766) -Add: sorting by road vehicle/train length. Based on a patch by Sir Bob.
3 files changed with 30 insertions and 2 deletions:
0 comments (0 inline, 0 general)
src/group_gui.cpp
Show inline comments
 
@@ -520,13 +520,13 @@ static void GroupWndProc(Window *w, Wind
 

	
 
					gv->_sorting->order = !!(gv->l.flags & VL_DESC);
 
					SetWindowDirty(w);
 
					break;
 

	
 
				case GRP_WIDGET_SORT_BY_DROPDOWN: // Select sorting criteria dropdown menu
 
					ShowDropDownMenu(w, _vehicle_sort_listing, gv->l.sort_type,  GRP_WIDGET_SORT_BY_DROPDOWN, 0, 0);
 
					ShowDropDownMenu(w, _vehicle_sort_listing, gv->l.sort_type,  GRP_WIDGET_SORT_BY_DROPDOWN, 0, (gv->vehicle_type == VEH_TRAIN || gv->vehicle_type == VEH_ROAD) ? 0 : (1 << 10));
 
					return;
 

	
 
				case GRP_WIDGET_ALL_VEHICLES: // All vehicles button
 
					if (!IsAllGroupID(gv->group_sel)) {
 
						gv->group_sel = ALL_GROUP;
 
						gv->l.flags |= VL_REBUILD;
src/lang/english.txt
Show inline comments
 
@@ -375,12 +375,13 @@ STR_SORT_BY_PROFIT_THIS_YEAR            
 
STR_SORT_BY_AGE                                                 :Age
 
STR_SORT_BY_RELIABILITY                                         :Reliability
 
STR_SORT_BY_TOTAL_CAPACITY_PER_CARGOTYPE                        :Total capacity per cargo type
 
STR_SORT_BY_MAX_SPEED                                           :Maximum speed
 
STR_SORT_BY_MODEL                                               :Model
 
STR_SORT_BY_VALUE                                               :Value
 
STR_SORT_BY_LENGTH                                              :Length
 
STR_SORT_BY_FACILITY                                            :Station type
 
STR_SORT_BY_WAITING                                             :Waiting cargo value
 
STR_SORT_BY_RATING_MAX                                          :Cargo rating
 
STR_ENGINE_SORT_ENGINE_ID                                       :EngineID (classic sort)
 
STR_ENGINE_SORT_COST                                            :Cost
 
STR_ENGINE_SORT_POWER                                           :Power
src/vehicle_gui.cpp
Show inline comments
 
@@ -69,24 +69,26 @@ static VehicleSortListingTypeFunction Ve
 
static VehicleSortListingTypeFunction VehicleProfitLastYearSorter;
 
static VehicleSortListingTypeFunction VehicleCargoSorter;
 
static VehicleSortListingTypeFunction VehicleReliabilitySorter;
 
static VehicleSortListingTypeFunction VehicleMaxSpeedSorter;
 
static VehicleSortListingTypeFunction VehicleModelSorter;
 
static VehicleSortListingTypeFunction VehicleValueSorter;
 
static VehicleSortListingTypeFunction VehicleLengthSorter;
 

	
 
static VehicleSortListingTypeFunction* const _vehicle_sorter[] = {
 
	&VehicleNumberSorter,
 
	&VehicleNameSorter,
 
	&VehicleAgeSorter,
 
	&VehicleProfitThisYearSorter,
 
	&VehicleProfitLastYearSorter,
 
	&VehicleCargoSorter,
 
	&VehicleReliabilitySorter,
 
	&VehicleMaxSpeedSorter,
 
	&VehicleModelSorter,
 
	&VehicleValueSorter,
 
	&VehicleLengthSorter,
 
};
 

	
 
const StringID _vehicle_sort_listing[] = {
 
	STR_SORT_BY_NUMBER,
 
	STR_SORT_BY_DROPDOWN_NAME,
 
	STR_SORT_BY_AGE,
 
@@ -94,12 +96,13 @@ const StringID _vehicle_sort_listing[] =
 
	STR_SORT_BY_PROFIT_LAST_YEAR,
 
	STR_SORT_BY_TOTAL_CAPACITY_PER_CARGOTYPE,
 
	STR_SORT_BY_RELIABILITY,
 
	STR_SORT_BY_MAX_SPEED,
 
	STR_SORT_BY_MODEL,
 
	STR_SORT_BY_VALUE,
 
	STR_SORT_BY_LENGTH,
 
	INVALID_STRING_ID
 
};
 

	
 
void RebuildVehicleLists()
 
{
 
	Window* const *wz;
 
@@ -695,12 +698,36 @@ static int CDECL VehicleValueSorter(cons
 

	
 
	VEHICLEUNITNUMBERSORTER(r, va, vb);
 

	
 
	return (_internal_sort_order & 1) ? -r : r;
 
}
 

	
 
static int CDECL VehicleLengthSorter(const void *a, const void *b)
 
{
 
	const Vehicle *va = *(const Vehicle**)a;
 
	const Vehicle *vb = *(const Vehicle**)b;
 
	int r = 0;
 

	
 
	switch (va->type) {
 
		case VEH_TRAIN:
 
			r = va->u.rail.cached_total_length - vb->u.rail.cached_total_length;
 
			break;
 

	
 
		case VEH_ROAD:
 
			for (const Vehicle *u = va; u != NULL; u = u->Next()) r += u->u.road.cached_veh_length;
 
			for (const Vehicle *u = vb; u != NULL; u = u->Next()) r -= u->u.road.cached_veh_length;
 
			break;
 

	
 
		default: NOT_REACHED();
 
	}
 

	
 
	VEHICLEUNITNUMBERSORTER(r, va, vb);
 

	
 
	return (_internal_sort_order & 1) ? -r : r;
 
}
 

	
 
void InitializeGUI()
 
{
 
	memset(&_sorting, 0, sizeof(_sorting));
 
}
 

	
 
/** Assigns an already open vehicle window to a new vehicle.
 
@@ -1058,13 +1085,13 @@ void PlayerVehWndProc(Window *w, WindowE
 
					vl->l.flags |= VL_RESORT;
 

	
 
					vl->_sorting->order = !!(vl->l.flags & VL_DESC);
 
					SetWindowDirty(w);
 
					break;
 
				case VLW_WIDGET_SORT_BY_PULLDOWN:/* Select sorting criteria dropdown menu */
 
					ShowDropDownMenu(w, _vehicle_sort_listing, vl->l.sort_type, VLW_WIDGET_SORT_BY_PULLDOWN, 0, 0);
 
					ShowDropDownMenu(w, _vehicle_sort_listing, vl->l.sort_type, VLW_WIDGET_SORT_BY_PULLDOWN, 0, (vl->vehicle_type == VEH_TRAIN || vl->vehicle_type == VEH_ROAD) ? 0 : (1 << 10));
 
					return;
 
				case VLW_WIDGET_LIST: { /* Matrix to show vehicles */
 
					uint32 id_v = (e->we.click.pt.y - PLY_WND_PRC__OFFSET_TOP_WIDGET) / w->resize.step_height;
 
					const Vehicle *v;
 

	
 
					if (id_v >= w->vscroll.cap) return; // click out of bounds
0 comments (0 inline, 0 general)