tron@2186: /* $Id$ */ tron@2186: rubidium@9111: /** @file vehicle_gui.h Functions related to the vehicle's GUIs. */ belugas@6423: darkvater@164: #ifndef VEHICLE_GUI_H darkvater@164: #define VEHICLE_GUI_H darkvater@164: rubidium@9274: #include "window_type.h" rubidium@8144: #include "vehicle_type.h" rubidium@8771: #include "order_type.h" rubidium@8769: #include "station_type.h" rubidium@8777: #include "engine_type.h" belugas@9949: #include "waypoint.h" matthijs@1752: Darkvater@2436: void DrawVehicleProfitButton(const Vehicle *v, int x, int y); smatz@10184: void ShowVehicleRefitWindow(const Vehicle *v, VehicleOrderID order, Window *parent); darkvater@164: smatz@8350: /** Constants of vehicle view widget indices */ smatz@8350: enum VehicleViewWindowWidgets { smatz@8350: VVW_WIDGET_CLOSEBOX = 0, smatz@8350: VVW_WIDGET_CAPTION, smatz@8350: VVW_WIDGET_STICKY, smatz@8350: VVW_WIDGET_PANEL, smatz@8350: VVW_WIDGET_VIEWPORT, smatz@8350: VVW_WIDGET_START_STOP_VEH, smatz@8350: VVW_WIDGET_CENTER_MAIN_VIEH, smatz@8350: VVW_WIDGET_GOTO_DEPOT, smatz@8350: VVW_WIDGET_REFIT_VEH, smatz@8350: VVW_WIDGET_SHOW_ORDERS, smatz@8350: VVW_WIDGET_SHOW_DETAILS, smatz@8350: VVW_WIDGET_CLONE_VEH, smatz@8350: VVW_WIDGET_EMPTY_BOTTOM_RIGHT, smatz@8350: VVW_WIDGET_RESIZE, smatz@8350: VVW_WIDGET_TURN_AROUND, smatz@8350: VVW_WIDGET_FORCE_PROCEED, smatz@8350: }; smatz@8350: smatz@8350: /** 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, rubidium@6643: VLW_GROUP_LIST = 4 << 8, belugas@9963: VLW_WAYPOINT_LIST = 5 << 8, Darkvater@4546: VLW_MASK = 0x700, bjarni@4449: }; bjarni@4449: bjarni@4506: static inline bool ValidVLWFlags(uint16 flags) bjarni@4506: { rubidium@6643: return (flags == VLW_STANDARD || flags == VLW_SHARED_ORDERS || flags == VLW_STATION_LIST || flags == VLW_DEPOT_LIST || flags == VLW_GROUP_LIST); bjarni@4506: } bjarni@4506: maedhros@6385: int DrawVehiclePurchaseInfo(int x, int y, uint w, EngineID engine_number); bjarni@842: rubidium@8144: void DrawTrainImage(const Vehicle *v, int x, int y, VehicleID selection, int count, int skip); rubidium@8144: 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: rubidium@6638: 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@5745: void ShowVehicleListWindow(const Vehicle *v); belugas@9949: void ShowVehicleListWindow(const Waypoint *wp); rubidium@10207: void ShowVehicleListWindow(CompanyID company, VehicleType vehicle_type); rubidium@10207: void ShowVehicleListWindow(CompanyID company, VehicleType vehicle_type, StationID station); rubidium@10207: void ShowVehicleListWindow(CompanyID company, VehicleType vehicle_type, TileIndex depot_tile); bjarni@4668: bjarni@9060: bjarni@9060: /* ChangeVehicleViewWindow() moves all windows for one vehicle to another vehicle. bjarni@9060: * For ease of use it can be called with both Vehicle pointers and VehicleIDs. */ bjarni@9060: void ChangeVehicleViewWindow(VehicleID from_index, VehicleID to_index); bjarni@9060: rubidium@6638: static inline uint GetVehicleListHeight(VehicleType type) bjarni@4796: { rubidium@6259: return (type == VEH_TRAIN || type == VEH_ROAD) ? 14 : 24; bjarni@4796: } bjarni@4796: smatz@9043: /** Get WindowClass for vehicle list of given vehicle type smatz@9043: * @param vt vehicle type to check smatz@9043: * @return corresponding window class rubidium@10207: * @note works only for company buildable vehicle types smatz@9043: */ smatz@9043: static inline WindowClass GetWindowClassForVehicleType(VehicleType vt) smatz@9043: { smatz@9043: switch (vt) { smatz@9043: default: NOT_REACHED(); smatz@9043: case VEH_TRAIN: return WC_TRAINS_LIST; smatz@9043: case VEH_ROAD: return WC_ROADVEH_LIST; smatz@9043: case VEH_SHIP: return WC_SHIPS_LIST; smatz@9043: case VEH_AIRCRAFT: return WC_AIRCRAFT_LIST; smatz@9043: } smatz@9043: } smatz@9043: rubidium@7486: /* Unified window procedure */ rubidium@7486: void ShowVehicleViewWindow(const Vehicle *v); rubidium@7486: rubidium@9182: Vehicle *CheckClickOnVehicle(const struct ViewPort *vp, int x, int y); rubidium@9182: darkvater@164: #endif /* VEHICLE_GUI_H */