darkvater@164: #ifndef VEHICLE_GUI_H darkvater@164: #define VEHICLE_GUI_H darkvater@164: darkvater@164: void DrawVehicleProfitButton(Vehicle *v, int x, int y); darkvater@164: void InitializeVehiclesGuiList(); darkvater@164: darkvater@164: /* sorter stuff */ darkvater@164: typedef struct SortStruct { // store owner through sorting process darkvater@164: uint32 index; darkvater@164: byte owner; darkvater@164: } SortStruct; darkvater@164: darkvater@168: int CDECL GeneralOwnerSorter(const void *a, const void *b); darkvater@168: void VehicleSorter(SortStruct *firstelement, uint32 n, uint16 size); darkvater@168: VARDEF uint32 _internal_name_sorter_id; // internal StringID for default vehicle-names darkvater@168: VARDEF uint32 _last_vehicle_idx; // cached index to hopefully speed up name-sorting darkvater@168: VARDEF bool _internal_sort_order; // descending/ascending darkvater@164: darkvater@168: #define PERIODIC_RESORT_DAYS 10 darkvater@168: #define DEF_SORTER(yyyy) int CDECL yyyy(const void *a, const void *b) darkvater@168: darkvater@168: DEF_SORTER(VehicleUnsortedSorter); darkvater@168: DEF_SORTER(VehicleNumberSorter); darkvater@168: DEF_SORTER(VehicleNameSorter); darkvater@168: DEF_SORTER(VehicleAgeSorter); darkvater@168: DEF_SORTER(VehicleProfitThisYearSorter); darkvater@168: DEF_SORTER(VehicleProfitLastYearSorter); darkvater@168: DEF_SORTER(VehicleCargoSorter); darkvater@168: DEF_SORTER(VehicleReliabilitySorter); darkvater@168: DEF_SORTER(VehicleMaxSpeedSorter); darkvater@168: darkvater@168: typedef DEF_SORTER(VehicleSortListingTypeFunctions); darkvater@168: darkvater@168: #define SORT_BY_UNSORTED 0 tron@505: extern VehicleSortListingTypeFunctions * const _vehicle_sorter[]; tron@505: extern const StringID _vehicle_sort_listing[]; darkvater@164: darkvater@164: enum VehicleSortTypes { darkvater@164: VEHTRAIN = 0, darkvater@164: VEHROAD = 1, darkvater@164: VEHSHIP = 2, darkvater@164: VEHAIRCRAFT = 3 darkvater@164: }; darkvater@164: darkvater@164: VARDEF bool _vehicle_sort_dirty[4]; // global sort, vehicles added/removed (4 types of vehicles) darkvater@164: darkvater@164: VARDEF bool _train_sort_dirty[MAX_PLAYERS]; // vehicles for a given player needs to be resorted (new criteria) darkvater@164: VARDEF byte _train_sort_type[MAX_PLAYERS]; // different criteria for sorting darkvater@164: VARDEF bool _train_sort_order[MAX_PLAYERS]; // sort descending/ascending darkvater@164: darkvater@164: VARDEF bool _aircraft_sort_dirty[MAX_PLAYERS]; // vehicles for a given player needs to be resorted (new criteria) darkvater@164: VARDEF byte _aircraft_sort_type[MAX_PLAYERS]; // different criteria for sorting darkvater@164: VARDEF bool _aircraft_sort_order[MAX_PLAYERS]; // sort descending/ascending darkvater@164: darkvater@164: VARDEF bool _ship_sort_dirty[MAX_PLAYERS]; // vehicles for a given player needs to be resorted (new criteria) darkvater@164: VARDEF byte _ship_sort_type[MAX_PLAYERS]; // different criteria for sorting darkvater@164: VARDEF bool _ship_sort_order[MAX_PLAYERS]; // sort descending/ascending darkvater@164: darkvater@164: VARDEF bool _road_sort_dirty[MAX_PLAYERS]; // vehicles for a given player needs to be resorted (new criteria) darkvater@164: VARDEF byte _road_sort_type[MAX_PLAYERS]; // different criteria for sorting darkvater@164: VARDEF bool _road_sort_order[MAX_PLAYERS]; // sort descending/ascending darkvater@164: darkvater@164: enum { darkvater@164: PLY_WND_PRC__OFFSET_TOP_WIDGET = 26, darkvater@164: PLY_WND_PRC__SIZE_OF_ROW_SMALL = 26, darkvater@164: PLY_WND_PRC__SIZE_OF_ROW_BIG = 36, darkvater@164: }; darkvater@164: darkvater@164: #endif /* VEHICLE_GUI_H */