tron@2186: /* $Id$ */ tron@2186: rubidium@10455: /** @file vehicle_gui.h Functions related to the vehicle's GUIs. */ glx@9574: darkvater@164: #ifndef VEHICLE_GUI_H darkvater@164: #define VEHICLE_GUI_H darkvater@164: glx@10645: #include "sortlist_type.h" glx@10645: #include "window_type.h" rubidium@9723: #include "vehicle_type.h" rubidium@9837: #include "order_type.h" rubidium@9837: #include "station_type.h" rubidium@9837: #include "engine_type.h" matthijs@1752: Darkvater@2436: void DrawVehicleProfitButton(const Vehicle *v, int x, int y); bjarni@4712: void ShowVehicleRefitWindow(const Vehicle *v, VehicleOrderID order); tron@588: darkvater@168: #define PERIODIC_RESORT_DAYS 10 darkvater@164: glx@9624: extern const StringID _vehicle_sort_listing[]; glx@9624: rubidium@9724: /** Constants of vehicle view widget indices */ rubidium@9724: enum VehicleViewWindowWidgets { rubidium@9724: VVW_WIDGET_CLOSEBOX = 0, rubidium@9724: VVW_WIDGET_CAPTION, rubidium@9724: VVW_WIDGET_STICKY, rubidium@9724: VVW_WIDGET_PANEL, rubidium@9724: VVW_WIDGET_VIEWPORT, rubidium@9724: VVW_WIDGET_START_STOP_VEH, rubidium@9724: VVW_WIDGET_CENTER_MAIN_VIEH, rubidium@9724: VVW_WIDGET_GOTO_DEPOT, rubidium@9724: VVW_WIDGET_REFIT_VEH, rubidium@9724: VVW_WIDGET_SHOW_ORDERS, rubidium@9724: VVW_WIDGET_SHOW_DETAILS, rubidium@9724: VVW_WIDGET_CLONE_VEH, rubidium@9724: VVW_WIDGET_EMPTY_BOTTOM_RIGHT, rubidium@9724: VVW_WIDGET_RESIZE, rubidium@9724: VVW_WIDGET_TURN_AROUND, rubidium@9724: VVW_WIDGET_FORCE_PROCEED, rubidium@9724: }; rubidium@9724: rubidium@9724: /** Start of functions regarding vehicle list windows */ glx@9624: enum { glx@9624: PLY_WND_PRC__OFFSET_TOP_WIDGET = 26, glx@9624: PLY_WND_PRC__SIZE_OF_ROW_TINY = 13, glx@9624: PLY_WND_PRC__SIZE_OF_ROW_SMALL = 26, glx@9624: PLY_WND_PRC__SIZE_OF_ROW_BIG = 36, glx@9624: PLY_WND_PRC__SIZE_OF_ROW_BIG2 = 39, glx@9624: }; glx@9624: rubidium@9724: /** Vehicle List Window type flags */ bjarni@4449: enum { Darkvater@4546: VLW_STANDARD = 0 << 8, bjarni@4449: VLW_SHARED_ORDERS = 1 << 8, bjarni@4449: VLW_STATION_LIST = 2 << 8, bjarni@4681: VLW_DEPOT_LIST = 3 << 8, glx@9624: VLW_GROUP_LIST = 4 << 8, Darkvater@4546: VLW_MASK = 0x700, bjarni@4449: }; bjarni@4449: bjarni@4506: static inline bool ValidVLWFlags(uint16 flags) bjarni@4506: { glx@9624: return (flags == VLW_STANDARD || flags == VLW_SHARED_ORDERS || flags == VLW_STATION_LIST || flags == VLW_DEPOT_LIST || flags == VLW_GROUP_LIST); bjarni@4506: } bjarni@4506: truelight@9566: int DrawVehiclePurchaseInfo(int x, int y, uint w, EngineID engine_number); bjarni@842: rubidium@9723: void DrawTrainImage(const Vehicle *v, int x, int y, VehicleID selection, int count, int skip); rubidium@9723: void DrawRoadVehImage(const Vehicle *v, int x, int y, VehicleID selection, int count); bjarni@4442: void DrawShipImage(const Vehicle *v, int x, int y, VehicleID selection); Darkvater@4542: void DrawAircraftImage(const Vehicle *v, int x, int y, VehicleID selection); bjarni@4442: glx@9624: void ShowBuildVehicleWindow(TileIndex tile, VehicleType type); bjarni@4442: peter1138@4932: uint ShowAdditionalText(int x, int y, uint w, EngineID engine); peter1138@4932: uint ShowRefitOptionsList(int x, int y, uint w, EngineID engine); bjarni@2552: bjarni@5996: void ShowVehicleListWindow(const Vehicle *v); glx@9624: void ShowVehicleListWindow(PlayerID player, VehicleType vehicle_type); glx@9624: void ShowVehicleListWindow(PlayerID player, VehicleType vehicle_type, StationID station); glx@9624: void ShowVehicleListWindow(PlayerID player, VehicleType vehicle_type, TileIndex depot_tile); bjarni@4668: glx@9624: void DrawSmallOrderList(const Vehicle *v, int x, int y); bjarni@4734: rubidium@9723: void DrawVehicleImage(const Vehicle *v, int x, int y, VehicleID selection, int count, int skip); bjarni@4734: rubidium@10455: rubidium@10455: /* ChangeVehicleViewWindow() moves all windows for one vehicle to another vehicle. rubidium@10455: * For ease of use it can be called with both Vehicle pointers and VehicleIDs. */ rubidium@10455: void ChangeVehicleViewWindow(VehicleID from_index, VehicleID to_index); rubidium@10455: glx@9624: static inline uint GetVehicleListHeight(VehicleType type) bjarni@4796: { rubidium@6585: return (type == VEH_TRAIN || type == VEH_ROAD) ? 14 : 24; bjarni@4796: } bjarni@4796: rubidium@10355: /** Get WindowClass for vehicle list of given vehicle type rubidium@10355: * @param vt vehicle type to check rubidium@10355: * @return corresponding window class rubidium@10355: * @note works only for player buildable vehicle types rubidium@10355: */ rubidium@10355: static inline WindowClass GetWindowClassForVehicleType(VehicleType vt) rubidium@10355: { rubidium@10355: switch (vt) { rubidium@10355: default: NOT_REACHED(); rubidium@10355: case VEH_TRAIN: return WC_TRAINS_LIST; rubidium@10355: case VEH_ROAD: return WC_ROADVEH_LIST; rubidium@10355: case VEH_SHIP: return WC_SHIPS_LIST; rubidium@10355: case VEH_AIRCRAFT: return WC_AIRCRAFT_LIST; rubidium@10355: } rubidium@10355: } rubidium@10355: rubidium@9701: /* Unified window procedure */ rubidium@9701: void ShowVehicleViewWindow(const Vehicle *v); rubidium@9701: rubidium@10513: Vehicle *CheckClickOnVehicle(const struct ViewPort *vp, int x, int y); rubidium@10513: rubidium@10513: typedef GUIList GUIVehicleList; rubidium@10513: rubidium@10513: struct VehicleListBase { rubidium@10513: GUIVehicleList vehicles; ///< The list of vehicles rubidium@10513: Listing *sorting; ///< Pointer to the vehicle type related sorting. rubidium@10513: VehicleType vehicle_type; ///< The vehicle type that is sorted rubidium@10513: }; rubidium@10513: rubidium@10513: struct Sorting { rubidium@10513: Listing aircraft; rubidium@10513: Listing roadveh; rubidium@10513: Listing ship; rubidium@10513: Listing train; rubidium@10513: }; rubidium@10513: rubidium@10513: extern Sorting _sorting; rubidium@10513: rubidium@10513: /* sorter stuff */ rubidium@10513: void SortVehicleList(VehicleListBase *vl); rubidium@10513: void BuildVehicleList(VehicleListBase *vl, PlayerID owner, uint16 index, uint16 window_type); rubidium@9837: darkvater@164: #endif /* VEHICLE_GUI_H */