mirror of
https://github.com/OpenTTD/OpenTTD.git
synced 2025-03-06 14:27:16 +00:00
(svn r12766) -Add: sorting by road vehicle/train length. Based on a patch by Sir Bob.
This commit is contained in:
parent
1b2773445d
commit
31411d4755
@ -523,7 +523,7 @@ static void GroupWndProc(Window *w, WindowEvent *e)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case GRP_WIDGET_SORT_BY_DROPDOWN: // Select sorting criteria dropdown menu
|
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;
|
return;
|
||||||
|
|
||||||
case GRP_WIDGET_ALL_VEHICLES: // All vehicles button
|
case GRP_WIDGET_ALL_VEHICLES: // All vehicles button
|
||||||
|
@ -378,6 +378,7 @@ STR_SORT_BY_TOTAL_CAPACITY_PER_CARGOTYPE :Total capacity
|
|||||||
STR_SORT_BY_MAX_SPEED :Maximum speed
|
STR_SORT_BY_MAX_SPEED :Maximum speed
|
||||||
STR_SORT_BY_MODEL :Model
|
STR_SORT_BY_MODEL :Model
|
||||||
STR_SORT_BY_VALUE :Value
|
STR_SORT_BY_VALUE :Value
|
||||||
|
STR_SORT_BY_LENGTH :Length
|
||||||
STR_SORT_BY_FACILITY :Station type
|
STR_SORT_BY_FACILITY :Station type
|
||||||
STR_SORT_BY_WAITING :Waiting cargo value
|
STR_SORT_BY_WAITING :Waiting cargo value
|
||||||
STR_SORT_BY_RATING_MAX :Cargo rating
|
STR_SORT_BY_RATING_MAX :Cargo rating
|
||||||
|
@ -72,6 +72,7 @@ static VehicleSortListingTypeFunction VehicleReliabilitySorter;
|
|||||||
static VehicleSortListingTypeFunction VehicleMaxSpeedSorter;
|
static VehicleSortListingTypeFunction VehicleMaxSpeedSorter;
|
||||||
static VehicleSortListingTypeFunction VehicleModelSorter;
|
static VehicleSortListingTypeFunction VehicleModelSorter;
|
||||||
static VehicleSortListingTypeFunction VehicleValueSorter;
|
static VehicleSortListingTypeFunction VehicleValueSorter;
|
||||||
|
static VehicleSortListingTypeFunction VehicleLengthSorter;
|
||||||
|
|
||||||
static VehicleSortListingTypeFunction* const _vehicle_sorter[] = {
|
static VehicleSortListingTypeFunction* const _vehicle_sorter[] = {
|
||||||
&VehicleNumberSorter,
|
&VehicleNumberSorter,
|
||||||
@ -84,6 +85,7 @@ static VehicleSortListingTypeFunction* const _vehicle_sorter[] = {
|
|||||||
&VehicleMaxSpeedSorter,
|
&VehicleMaxSpeedSorter,
|
||||||
&VehicleModelSorter,
|
&VehicleModelSorter,
|
||||||
&VehicleValueSorter,
|
&VehicleValueSorter,
|
||||||
|
&VehicleLengthSorter,
|
||||||
};
|
};
|
||||||
|
|
||||||
const StringID _vehicle_sort_listing[] = {
|
const StringID _vehicle_sort_listing[] = {
|
||||||
@ -97,6 +99,7 @@ const StringID _vehicle_sort_listing[] = {
|
|||||||
STR_SORT_BY_MAX_SPEED,
|
STR_SORT_BY_MAX_SPEED,
|
||||||
STR_SORT_BY_MODEL,
|
STR_SORT_BY_MODEL,
|
||||||
STR_SORT_BY_VALUE,
|
STR_SORT_BY_VALUE,
|
||||||
|
STR_SORT_BY_LENGTH,
|
||||||
INVALID_STRING_ID
|
INVALID_STRING_ID
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -698,6 +701,30 @@ static int CDECL VehicleValueSorter(const void *a, const void *b)
|
|||||||
return (_internal_sort_order & 1) ? -r : r;
|
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()
|
void InitializeGUI()
|
||||||
{
|
{
|
||||||
memset(&_sorting, 0, sizeof(_sorting));
|
memset(&_sorting, 0, sizeof(_sorting));
|
||||||
@ -1061,7 +1088,7 @@ void PlayerVehWndProc(Window *w, WindowEvent *e)
|
|||||||
SetWindowDirty(w);
|
SetWindowDirty(w);
|
||||||
break;
|
break;
|
||||||
case VLW_WIDGET_SORT_BY_PULLDOWN:/* Select sorting criteria dropdown menu */
|
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;
|
return;
|
||||||
case VLW_WIDGET_LIST: { /* Matrix to show vehicles */
|
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;
|
uint32 id_v = (e->we.click.pt.y - PLY_WND_PRC__OFFSET_TOP_WIDGET) / w->resize.step_height;
|
||||||
|
Loading…
Reference in New Issue
Block a user