28 #include "roadveh.h" |
28 #include "roadveh.h" |
29 #include "depot.h" |
29 #include "depot.h" |
30 #include "helpers.hpp" |
30 #include "helpers.hpp" |
31 #include "cargotype.h" |
31 #include "cargotype.h" |
32 |
32 |
33 typedef struct Sorting { |
33 struct Sorting { |
34 Listing aircraft; |
34 Listing aircraft; |
35 Listing roadveh; |
35 Listing roadveh; |
36 Listing ship; |
36 Listing ship; |
37 Listing train; |
37 Listing train; |
38 } Sorting; |
38 }; |
39 |
39 |
40 static Sorting _sorting; |
40 static Sorting _sorting; |
41 |
41 |
42 typedef struct vehiclelist_d { |
42 struct vehiclelist_d { |
43 const Vehicle** sort_list; // List of vehicles (sorted) |
43 const Vehicle** sort_list; // List of vehicles (sorted) |
44 Listing *_sorting; // pointer to the appropiate subcategory of _sorting |
44 Listing *_sorting; // pointer to the appropiate subcategory of _sorting |
45 uint16 length_of_sort_list; // Keeps track of how many vehicle pointers sort list got space for |
45 uint16 length_of_sort_list; // Keeps track of how many vehicle pointers sort list got space for |
46 byte vehicle_type; // The vehicle type that is sorted |
46 byte vehicle_type; // The vehicle type that is sorted |
47 list_d l; // General list struct |
47 list_d l; // General list struct |
48 } vehiclelist_d; |
48 }; |
49 assert_compile(WINDOW_CUSTOM_SIZE >= sizeof(vehiclelist_d)); |
49 assert_compile(WINDOW_CUSTOM_SIZE >= sizeof(vehiclelist_d)); |
50 |
50 |
51 static bool _internal_sort_order; // descending/ascending |
51 static bool _internal_sort_order; // descending/ascending |
52 |
52 |
53 typedef int CDECL VehicleSortListingTypeFunction(const void*, const void*); |
53 typedef int CDECL VehicleSortListingTypeFunction(const void*, const void*); |
178 pal = PALETTE_TO_GREEN; |
178 pal = PALETTE_TO_GREEN; |
179 } |
179 } |
180 DrawSprite(SPR_BLOT, pal, x, y); |
180 DrawSprite(SPR_BLOT, pal, x, y); |
181 } |
181 } |
182 |
182 |
183 typedef struct RefitOption { |
183 struct RefitOption { |
184 CargoID cargo; |
184 CargoID cargo; |
185 byte subtype; |
185 byte subtype; |
186 uint16 value; |
186 uint16 value; |
187 EngineID engine; |
187 EngineID engine; |
188 } RefitOption; |
188 }; |
189 |
189 |
190 typedef struct RefitList { |
190 struct RefitList { |
191 uint num_lines; |
191 uint num_lines; |
192 RefitOption *items; |
192 RefitOption *items; |
193 } RefitList; |
193 }; |
194 |
194 |
195 static RefitList *BuildRefitList(const Vehicle *v) |
195 static RefitList *BuildRefitList(const Vehicle *v) |
196 { |
196 { |
197 uint max_lines = 256; |
197 uint max_lines = 256; |
198 RefitOption *refit = CallocT<RefitOption>(max_lines); |
198 RefitOption *refit = CallocT<RefitOption>(max_lines); |
318 { |
318 { |
319 switch (e->event) { |
319 switch (e->event) { |
320 case WE_PAINT: { |
320 case WE_PAINT: { |
321 Vehicle *v = GetVehicle(w->window_number); |
321 Vehicle *v = GetVehicle(w->window_number); |
322 |
322 |
323 if (v->type == VEH_Train) { |
323 if (v->type == VEH_TRAIN) { |
324 uint length = CountVehiclesInChain(v); |
324 uint length = CountVehiclesInChain(v); |
325 |
325 |
326 if (length != WP(w, refit_d).length) { |
326 if (length != WP(w, refit_d).length) { |
327 /* Consist length has changed, so rebuild the refit list */ |
327 /* Consist length has changed, so rebuild the refit list */ |
328 free(WP(w, refit_d).list->items); |
328 free(WP(w, refit_d).list->items); |
370 |
370 |
371 if (WP(w, refit_d).order == INVALID_VEH_ORDER_ID) { |
371 if (WP(w, refit_d).order == INVALID_VEH_ORDER_ID) { |
372 int command = 0; |
372 int command = 0; |
373 |
373 |
374 switch (v->type) { |
374 switch (v->type) { |
375 case VEH_Train: command = CMD_REFIT_RAIL_VEHICLE | CMD_MSG(STR_RAIL_CAN_T_REFIT_VEHICLE); break; |
375 case VEH_TRAIN: command = CMD_REFIT_RAIL_VEHICLE | CMD_MSG(STR_RAIL_CAN_T_REFIT_VEHICLE); break; |
376 case VEH_Road: command = CMD_REFIT_ROAD_VEH | CMD_MSG(STR_REFIT_ROAD_VEHICLE_CAN_T); break; |
376 case VEH_ROAD: command = CMD_REFIT_ROAD_VEH | CMD_MSG(STR_REFIT_ROAD_VEHICLE_CAN_T); break; |
377 case VEH_Ship: command = CMD_REFIT_SHIP | CMD_MSG(STR_9841_CAN_T_REFIT_SHIP); break; |
377 case VEH_SHIP: command = CMD_REFIT_SHIP | CMD_MSG(STR_9841_CAN_T_REFIT_SHIP); break; |
378 case VEH_Aircraft: command = CMD_REFIT_AIRCRAFT | CMD_MSG(STR_A042_CAN_T_REFIT_AIRCRAFT); break; |
378 case VEH_AIRCRAFT: command = CMD_REFIT_AIRCRAFT | CMD_MSG(STR_A042_CAN_T_REFIT_AIRCRAFT); break; |
379 } |
379 } |
380 if (DoCommandP(v->tile, v->index, WP(w,refit_d).cargo->cargo | WP(w,refit_d).cargo->subtype << 8, NULL, command)) DeleteWindow(w); |
380 if (DoCommandP(v->tile, v->index, WP(w,refit_d).cargo->cargo | WP(w,refit_d).cargo->subtype << 8, NULL, command)) DeleteWindow(w); |
381 } else { |
381 } else { |
382 if (DoCommandP(v->tile, v->index, WP(w,refit_d).cargo->cargo | WP(w,refit_d).cargo->subtype << 8 | WP(w, refit_d).order << 16, NULL, CMD_ORDER_REFIT)) DeleteWindow(w); |
382 if (DoCommandP(v->tile, v->index, WP(w,refit_d).cargo->cargo | WP(w,refit_d).cargo->subtype << 8 | WP(w, refit_d).order << 16, NULL, CMD_ORDER_REFIT)) DeleteWindow(w); |
383 } |
383 } |
435 w->caption_color = v->owner; |
435 w->caption_color = v->owner; |
436 w->vscroll.cap = 8; |
436 w->vscroll.cap = 8; |
437 w->resize.step_height = 14; |
437 w->resize.step_height = 14; |
438 WP(w, refit_d).sel = -1; |
438 WP(w, refit_d).sel = -1; |
439 WP(w, refit_d).list = BuildRefitList(v); |
439 WP(w, refit_d).list = BuildRefitList(v); |
440 if (v->type == VEH_Train) WP(w, refit_d).length = CountVehiclesInChain(v); |
440 if (v->type == VEH_TRAIN) WP(w, refit_d).length = CountVehiclesInChain(v); |
441 SetVScrollCount(w, WP(w, refit_d).list->num_lines); |
441 SetVScrollCount(w, WP(w, refit_d).list->num_lines); |
442 |
442 |
443 switch (v->type) { |
443 switch (v->type) { |
444 case VEH_Train: |
444 case VEH_TRAIN: |
445 w->widget[3].tooltips = STR_RAIL_SELECT_TYPE_OF_CARGO_FOR; |
445 w->widget[3].tooltips = STR_RAIL_SELECT_TYPE_OF_CARGO_FOR; |
446 w->widget[6].data = STR_RAIL_REFIT_VEHICLE; |
446 w->widget[6].data = STR_RAIL_REFIT_VEHICLE; |
447 w->widget[6].tooltips = STR_RAIL_REFIT_TO_CARRY_HIGHLIGHTED; |
447 w->widget[6].tooltips = STR_RAIL_REFIT_TO_CARRY_HIGHLIGHTED; |
448 break; |
448 break; |
449 case VEH_Road: |
449 case VEH_ROAD: |
450 w->widget[3].tooltips = STR_ROAD_SELECT_TYPE_OF_CARGO_FOR; |
450 w->widget[3].tooltips = STR_ROAD_SELECT_TYPE_OF_CARGO_FOR; |
451 w->widget[6].data = STR_REFIT_ROAD_VEHICLE; |
451 w->widget[6].data = STR_REFIT_ROAD_VEHICLE; |
452 w->widget[6].tooltips = STR_REFIT_ROAD_VEHICLE_TO_CARRY_HIGHLIGHTED; |
452 w->widget[6].tooltips = STR_REFIT_ROAD_VEHICLE_TO_CARRY_HIGHLIGHTED; |
453 break; |
453 break; |
454 case VEH_Ship: |
454 case VEH_SHIP: |
455 w->widget[3].tooltips = STR_983D_SELECT_TYPE_OF_CARGO_FOR; |
455 w->widget[3].tooltips = STR_983D_SELECT_TYPE_OF_CARGO_FOR; |
456 w->widget[6].data = STR_983C_REFIT_SHIP; |
456 w->widget[6].data = STR_983C_REFIT_SHIP; |
457 w->widget[6].tooltips = STR_983E_REFIT_SHIP_TO_CARRY_HIGHLIGHTED; |
457 w->widget[6].tooltips = STR_983E_REFIT_SHIP_TO_CARRY_HIGHLIGHTED; |
458 break; |
458 break; |
459 case VEH_Aircraft: |
459 case VEH_AIRCRAFT: |
460 w->widget[3].tooltips = STR_A03E_SELECT_TYPE_OF_CARGO_FOR; |
460 w->widget[3].tooltips = STR_A03E_SELECT_TYPE_OF_CARGO_FOR; |
461 w->widget[6].data = STR_A03D_REFIT_AIRCRAFT; |
461 w->widget[6].data = STR_A03D_REFIT_AIRCRAFT; |
462 w->widget[6].tooltips = STR_A03F_REFIT_AIRCRAFT_TO_CARRY; |
462 w->widget[6].tooltips = STR_A03F_REFIT_AIRCRAFT_TO_CARRY; |
463 break; |
463 break; |
464 default: NOT_REACHED(); |
464 default: NOT_REACHED(); |
650 const Vehicle* vb = *(const Vehicle**)b; |
650 const Vehicle* vb = *(const Vehicle**)b; |
651 int max_speed_a = 0xFFFF, max_speed_b = 0xFFFF; |
651 int max_speed_a = 0xFFFF, max_speed_b = 0xFFFF; |
652 int r; |
652 int r; |
653 const Vehicle *ua = va, *ub = vb; |
653 const Vehicle *ua = va, *ub = vb; |
654 |
654 |
655 if (va->type == VEH_Train && vb->type == VEH_Train) { |
655 if (va->type == VEH_TRAIN && vb->type == VEH_TRAIN) { |
656 do { |
656 do { |
657 if (RailVehInfo(ua->engine_type)->max_speed != 0) |
657 if (RailVehInfo(ua->engine_type)->max_speed != 0) |
658 max_speed_a = min(max_speed_a, RailVehInfo(ua->engine_type)->max_speed); |
658 max_speed_a = min(max_speed_a, RailVehInfo(ua->engine_type)->max_speed); |
659 } while ((ua = ua->next) != NULL); |
659 } while ((ua = ua->next) != NULL); |
660 |
660 |
824 WIDGET_LIST_END); |
824 WIDGET_LIST_END); |
825 } |
825 } |
826 |
826 |
827 /* Set up the window widgets */ |
827 /* Set up the window widgets */ |
828 switch (vl->vehicle_type) { |
828 switch (vl->vehicle_type) { |
829 case VEH_Train: |
829 case VEH_TRAIN: |
830 w->widget[VLW_WIDGET_LIST].tooltips = STR_883D_TRAINS_CLICK_ON_TRAIN_FOR; |
830 w->widget[VLW_WIDGET_LIST].tooltips = STR_883D_TRAINS_CLICK_ON_TRAIN_FOR; |
831 w->widget[VLW_WIDGET_AVAILABLE_VEHICLES].data = STR_AVAILABLE_TRAINS; |
831 w->widget[VLW_WIDGET_AVAILABLE_VEHICLES].data = STR_AVAILABLE_TRAINS; |
832 break; |
832 break; |
833 |
833 |
834 case VEH_Road: |
834 case VEH_ROAD: |
835 w->widget[VLW_WIDGET_LIST].tooltips = STR_901A_ROAD_VEHICLES_CLICK_ON; |
835 w->widget[VLW_WIDGET_LIST].tooltips = STR_901A_ROAD_VEHICLES_CLICK_ON; |
836 w->widget[VLW_WIDGET_AVAILABLE_VEHICLES].data = STR_AVAILABLE_ROAD_VEHICLES; |
836 w->widget[VLW_WIDGET_AVAILABLE_VEHICLES].data = STR_AVAILABLE_ROAD_VEHICLES; |
837 break; |
837 break; |
838 |
838 |
839 case VEH_Ship: |
839 case VEH_SHIP: |
840 w->widget[VLW_WIDGET_LIST].tooltips = STR_9823_SHIPS_CLICK_ON_SHIP_FOR; |
840 w->widget[VLW_WIDGET_LIST].tooltips = STR_9823_SHIPS_CLICK_ON_SHIP_FOR; |
841 w->widget[VLW_WIDGET_AVAILABLE_VEHICLES].data = STR_AVAILABLE_SHIPS; |
841 w->widget[VLW_WIDGET_AVAILABLE_VEHICLES].data = STR_AVAILABLE_SHIPS; |
842 break; |
842 break; |
843 |
843 |
844 case VEH_Aircraft: |
844 case VEH_AIRCRAFT: |
845 w->widget[VLW_WIDGET_LIST].tooltips = STR_A01F_AIRCRAFT_CLICK_ON_AIRCRAFT; |
845 w->widget[VLW_WIDGET_LIST].tooltips = STR_A01F_AIRCRAFT_CLICK_ON_AIRCRAFT; |
846 w->widget[VLW_WIDGET_AVAILABLE_VEHICLES].data = STR_AVAILABLE_AIRCRAFT; |
846 w->widget[VLW_WIDGET_AVAILABLE_VEHICLES].data = STR_AVAILABLE_AIRCRAFT; |
847 break; |
847 break; |
848 |
848 |
849 default: NOT_REACHED(); |
849 default: NOT_REACHED(); |
853 case VLW_SHARED_ORDERS: |
853 case VLW_SHARED_ORDERS: |
854 w->widget[VLW_WIDGET_CAPTION].data = STR_VEH_WITH_SHARED_ORDERS_LIST; |
854 w->widget[VLW_WIDGET_CAPTION].data = STR_VEH_WITH_SHARED_ORDERS_LIST; |
855 break; |
855 break; |
856 case VLW_STANDARD: /* Company Name - standard widget setup */ |
856 case VLW_STANDARD: /* Company Name - standard widget setup */ |
857 switch (vl->vehicle_type) { |
857 switch (vl->vehicle_type) { |
858 case VEH_Train: w->widget[VLW_WIDGET_CAPTION].data = STR_881B_TRAINS; break; |
858 case VEH_TRAIN: w->widget[VLW_WIDGET_CAPTION].data = STR_881B_TRAINS; break; |
859 case VEH_Road: w->widget[VLW_WIDGET_CAPTION].data = STR_9001_ROAD_VEHICLES; break; |
859 case VEH_ROAD: w->widget[VLW_WIDGET_CAPTION].data = STR_9001_ROAD_VEHICLES; break; |
860 case VEH_Ship: w->widget[VLW_WIDGET_CAPTION].data = STR_9805_SHIPS; break; |
860 case VEH_SHIP: w->widget[VLW_WIDGET_CAPTION].data = STR_9805_SHIPS; break; |
861 case VEH_Aircraft: w->widget[VLW_WIDGET_CAPTION].data = STR_A009_AIRCRAFT; break; |
861 case VEH_AIRCRAFT: w->widget[VLW_WIDGET_CAPTION].data = STR_A009_AIRCRAFT; break; |
862 default: NOT_REACHED(); break; |
862 default: NOT_REACHED(); break; |
863 } |
863 } |
864 break; |
864 break; |
865 case VLW_STATION_LIST: /* Station Name */ |
865 case VLW_STATION_LIST: /* Station Name */ |
866 switch (vl->vehicle_type) { |
866 switch (vl->vehicle_type) { |
867 case VEH_Train: w->widget[VLW_WIDGET_CAPTION].data = STR_SCHEDULED_TRAINS; break; |
867 case VEH_TRAIN: w->widget[VLW_WIDGET_CAPTION].data = STR_SCHEDULED_TRAINS; break; |
868 case VEH_Road: w->widget[VLW_WIDGET_CAPTION].data = STR_SCHEDULED_ROAD_VEHICLES; break; |
868 case VEH_ROAD: w->widget[VLW_WIDGET_CAPTION].data = STR_SCHEDULED_ROAD_VEHICLES; break; |
869 case VEH_Ship: w->widget[VLW_WIDGET_CAPTION].data = STR_SCHEDULED_SHIPS; break; |
869 case VEH_SHIP: w->widget[VLW_WIDGET_CAPTION].data = STR_SCHEDULED_SHIPS; break; |
870 case VEH_Aircraft: w->widget[VLW_WIDGET_CAPTION].data = STR_SCHEDULED_AIRCRAFT; break; |
870 case VEH_AIRCRAFT: w->widget[VLW_WIDGET_CAPTION].data = STR_SCHEDULED_AIRCRAFT; break; |
871 default: NOT_REACHED(); break; |
871 default: NOT_REACHED(); break; |
872 } |
872 } |
873 break; |
873 break; |
874 |
874 |
875 case VLW_DEPOT_LIST: |
875 case VLW_DEPOT_LIST: |
876 switch (vl->vehicle_type) { |
876 switch (vl->vehicle_type) { |
877 case VEH_Train: w->widget[VLW_WIDGET_CAPTION].data = STR_VEHICLE_LIST_TRAIN_DEPOT; break; |
877 case VEH_TRAIN: w->widget[VLW_WIDGET_CAPTION].data = STR_VEHICLE_LIST_TRAIN_DEPOT; break; |
878 case VEH_Road: w->widget[VLW_WIDGET_CAPTION].data = STR_VEHICLE_LIST_ROADVEH_DEPOT; break; |
878 case VEH_ROAD: w->widget[VLW_WIDGET_CAPTION].data = STR_VEHICLE_LIST_ROADVEH_DEPOT; break; |
879 case VEH_Ship: w->widget[VLW_WIDGET_CAPTION].data = STR_VEHICLE_LIST_SHIP_DEPOT; break; |
879 case VEH_SHIP: w->widget[VLW_WIDGET_CAPTION].data = STR_VEHICLE_LIST_SHIP_DEPOT; break; |
880 case VEH_Aircraft: w->widget[VLW_WIDGET_CAPTION].data = STR_VEHICLE_LIST_AIRCRAFT_DEPOT; break; |
880 case VEH_AIRCRAFT: w->widget[VLW_WIDGET_CAPTION].data = STR_VEHICLE_LIST_AIRCRAFT_DEPOT; break; |
881 default: NOT_REACHED(); break; |
881 default: NOT_REACHED(); break; |
882 } |
882 } |
883 break; |
883 break; |
884 default: NOT_REACHED(); break; |
884 default: NOT_REACHED(); break; |
885 } |
885 } |
886 |
886 |
887 switch (vl->vehicle_type) { |
887 switch (vl->vehicle_type) { |
888 case VEH_Train: |
888 case VEH_TRAIN: |
889 w->resize.step_width = 1; |
889 w->resize.step_width = 1; |
890 /* Fallthrough */ |
890 /* Fallthrough */ |
891 case VEH_Road: |
891 case VEH_ROAD: |
892 w->vscroll.cap = 7; |
892 w->vscroll.cap = 7; |
893 w->resize.step_height = PLY_WND_PRC__SIZE_OF_ROW_SMALL; |
893 w->resize.step_height = PLY_WND_PRC__SIZE_OF_ROW_SMALL; |
894 w->resize.height = 220 - (PLY_WND_PRC__SIZE_OF_ROW_SMALL * 3); // Minimum of 4 vehicles |
894 w->resize.height = 220 - (PLY_WND_PRC__SIZE_OF_ROW_SMALL * 3); // Minimum of 4 vehicles |
895 break; |
895 break; |
896 case VEH_Ship: |
896 case VEH_SHIP: |
897 case VEH_Aircraft: |
897 case VEH_AIRCRAFT: |
898 w->vscroll.cap = 4; |
898 w->vscroll.cap = 4; |
899 w->resize.step_height = PLY_WND_PRC__SIZE_OF_ROW_BIG; |
899 w->resize.step_height = PLY_WND_PRC__SIZE_OF_ROW_BIG; |
900 break; |
900 break; |
901 default: NOT_REACHED(); |
901 default: NOT_REACHED(); |
902 } |
902 } |
905 |
905 |
906 /* Set up sorting. Make the window-specific _sorting variable |
906 /* Set up sorting. Make the window-specific _sorting variable |
907 * point to the correct global _sorting struct so we are freed |
907 * point to the correct global _sorting struct so we are freed |
908 * from having conditionals during window operation */ |
908 * from having conditionals during window operation */ |
909 switch (vl->vehicle_type) { |
909 switch (vl->vehicle_type) { |
910 case VEH_Train: vl->_sorting = &_sorting.train; break; |
910 case VEH_TRAIN: vl->_sorting = &_sorting.train; break; |
911 case VEH_Road: vl->_sorting = &_sorting.roadveh; break; |
911 case VEH_ROAD: vl->_sorting = &_sorting.roadveh; break; |
912 case VEH_Ship: vl->_sorting = &_sorting.ship; break; |
912 case VEH_SHIP: vl->_sorting = &_sorting.ship; break; |
913 case VEH_Aircraft: vl->_sorting = &_sorting.aircraft; break; |
913 case VEH_AIRCRAFT: vl->_sorting = &_sorting.aircraft; break; |
914 default: NOT_REACHED(); break; |
914 default: NOT_REACHED(); break; |
915 } |
915 } |
916 |
916 |
917 vl->l.flags = VL_REBUILD | (vl->_sorting->order ? VL_DESC : VL_NONE); |
917 vl->l.flags = VL_REBUILD | (vl->_sorting->order ? VL_DESC : VL_NONE); |
918 vl->l.sort_type = vl->_sorting->criteria; |
918 vl->l.sort_type = vl->_sorting->criteria; |
930 FOR_VEHICLE_ORDERS(v, order) { |
930 FOR_VEHICLE_ORDERS(v, order) { |
931 if (sel == 0) DrawString(x - 6, y, STR_SMALL_RIGHT_ARROW, 16); |
931 if (sel == 0) DrawString(x - 6, y, STR_SMALL_RIGHT_ARROW, 16); |
932 sel--; |
932 sel--; |
933 |
933 |
934 if (order->type == OT_GOTO_STATION) { |
934 if (order->type == OT_GOTO_STATION) { |
935 if (v->type == VEH_Ship && GetStation(order->dest)->IsBuoy()) continue; |
935 if (v->type == VEH_SHIP && GetStation(order->dest)->IsBuoy()) continue; |
936 |
936 |
937 SetDParam(0, order->dest); |
937 SetDParam(0, order->dest); |
938 DrawString(x, y, STR_A036, 0); |
938 DrawString(x, y, STR_A036, 0); |
939 |
939 |
940 y += 6; |
940 y += 6; |
981 SetDParam(1, w->vscroll.count); |
981 SetDParam(1, w->vscroll.count); |
982 break; |
982 break; |
983 |
983 |
984 case VLW_DEPOT_LIST: |
984 case VLW_DEPOT_LIST: |
985 switch (vl->vehicle_type) { |
985 switch (vl->vehicle_type) { |
986 case VEH_Train: SetDParam(0, STR_8800_TRAIN_DEPOT); break; |
986 case VEH_TRAIN: SetDParam(0, STR_8800_TRAIN_DEPOT); break; |
987 case VEH_Road: SetDParam(0, STR_9003_ROAD_VEHICLE_DEPOT); break; |
987 case VEH_ROAD: SetDParam(0, STR_9003_ROAD_VEHICLE_DEPOT); break; |
988 case VEH_Ship: SetDParam(0, STR_9803_SHIP_DEPOT); break; |
988 case VEH_SHIP: SetDParam(0, STR_9803_SHIP_DEPOT); break; |
989 case VEH_Aircraft: SetDParam(0, STR_A002_AIRCRAFT_HANGAR); break; |
989 case VEH_AIRCRAFT: SetDParam(0, STR_A002_AIRCRAFT_HANGAR); break; |
990 default: NOT_REACHED(); break; |
990 default: NOT_REACHED(); break; |
991 } |
991 } |
992 if (vl->vehicle_type == VEH_Aircraft) { |
992 if (vl->vehicle_type == VEH_AIRCRAFT) { |
993 SetDParam(1, index); // Airport name |
993 SetDParam(1, index); // Airport name |
994 } else { |
994 } else { |
995 SetDParam(1, GetDepot(index)->town_index); |
995 SetDParam(1, GetDepot(index)->town_index); |
996 } |
996 } |
997 SetDParam(2, w->vscroll.count); |
997 SetDParam(2, w->vscroll.count); |
1022 SetDParam(1, v->profit_last_year); |
1022 SetDParam(1, v->profit_last_year); |
1023 |
1023 |
1024 DrawVehicleImage(v, x + 19, y + 6, w->widget[VLW_WIDGET_LIST].right - w->widget[VLW_WIDGET_LIST].left - 20, 0, INVALID_VEHICLE); |
1024 DrawVehicleImage(v, x + 19, y + 6, w->widget[VLW_WIDGET_LIST].right - w->widget[VLW_WIDGET_LIST].left - 20, 0, INVALID_VEHICLE); |
1025 DrawString(x + 19, y + w->resize.step_height - 8, STR_0198_PROFIT_THIS_YEAR_LAST_YEAR, 0); |
1025 DrawString(x + 19, y + w->resize.step_height - 8, STR_0198_PROFIT_THIS_YEAR_LAST_YEAR, 0); |
1026 |
1026 |
1027 if ((v->type == VEH_Train && v->string_id != STR_SV_TRAIN_NAME) || |
1027 if ((v->type == VEH_TRAIN && v->string_id != STR_SV_TRAIN_NAME) || |
1028 (v->type == VEH_Road && v->string_id != STR_SV_ROADVEH_NAME) || |
1028 (v->type == VEH_ROAD && v->string_id != STR_SV_ROADVEH_NAME) || |
1029 (v->type == VEH_Ship && v->string_id != STR_SV_SHIP_NAME) || |
1029 (v->type == VEH_SHIP && v->string_id != STR_SV_SHIP_NAME) || |
1030 (v->type == VEH_Aircraft && v->string_id != STR_SV_AIRCRAFT_NAME)) { |
1030 (v->type == VEH_AIRCRAFT && v->string_id != STR_SV_AIRCRAFT_NAME)) { |
1031 |
1031 |
1032 /* The vehicle got a name so we will print it */ |
1032 /* The vehicle got a name so we will print it */ |
1033 SetDParam(0, v->string_id); |
1033 SetDParam(0, v->string_id); |
1034 DrawString(x + 19, y, STR_01AB, 0); |
1034 DrawString(x + 19, y, STR_01AB, 0); |
1035 } |
1035 } |
1094 if (id_v >= vl->l.list_length) return; // click out of list bound |
1094 if (id_v >= vl->l.list_length) return; // click out of list bound |
1095 |
1095 |
1096 v = vl->sort_list[id_v]; |
1096 v = vl->sort_list[id_v]; |
1097 |
1097 |
1098 switch (vl->vehicle_type) { |
1098 switch (vl->vehicle_type) { |
1099 case VEH_Train: ShowTrainViewWindow(v); break; |
1099 case VEH_TRAIN: ShowTrainViewWindow(v); break; |
1100 case VEH_Road: ShowRoadVehViewWindow(v); break; |
1100 case VEH_ROAD: ShowRoadVehViewWindow(v); break; |
1101 case VEH_Ship: ShowShipViewWindow(v); break; |
1101 case VEH_SHIP: ShowShipViewWindow(v); break; |
1102 case VEH_Aircraft: ShowAircraftViewWindow(v); break; |
1102 case VEH_AIRCRAFT: ShowAircraftViewWindow(v); break; |
1103 default: NOT_REACHED(); break; |
1103 default: NOT_REACHED(); break; |
1104 } |
1104 } |
1105 } break; |
1105 } break; |
1106 |
1106 |
1107 case VLW_WIDGET_AVAILABLE_VEHICLES: |
1107 case VLW_WIDGET_AVAILABLE_VEHICLES: |
1242 /* The vehicle list windows have been unified. Just some strings need |
1242 /* The vehicle list windows have been unified. Just some strings need |
1243 * to be changed which happens in the WE_CREATE event and resizing |
1243 * to be changed which happens in the WE_CREATE event and resizing |
1244 * some of the windows to the correct size */ |
1244 * some of the windows to the correct size */ |
1245 switch (vehicle_type) { |
1245 switch (vehicle_type) { |
1246 default: NOT_REACHED(); |
1246 default: NOT_REACHED(); |
1247 case VEH_Train: |
1247 case VEH_TRAIN: |
1248 w = AllocateWindowDescFront(&_player_vehicle_list_train_desc, num); |
1248 w = AllocateWindowDescFront(&_player_vehicle_list_train_desc, num); |
1249 if (w != NULL) ResizeWindow(w, 65, 38); |
1249 if (w != NULL) ResizeWindow(w, 65, 38); |
1250 break; |
1250 break; |
1251 case VEH_Road: |
1251 case VEH_ROAD: |
1252 w = AllocateWindowDescFront(&_player_vehicle_list_road_veh_desc, num); |
1252 w = AllocateWindowDescFront(&_player_vehicle_list_road_veh_desc, num); |
1253 if (w != NULL) ResizeWindow(w, 0, 38); |
1253 if (w != NULL) ResizeWindow(w, 0, 38); |
1254 break; |
1254 break; |
1255 case VEH_Ship: |
1255 case VEH_SHIP: |
1256 w = AllocateWindowDescFront(&_player_vehicle_list_ship_desc, num); |
1256 w = AllocateWindowDescFront(&_player_vehicle_list_ship_desc, num); |
1257 break; |
1257 break; |
1258 case VEH_Aircraft: |
1258 case VEH_AIRCRAFT: |
1259 w = AllocateWindowDescFront(&_player_vehicle_list_aircraft_desc, num); |
1259 w = AllocateWindowDescFront(&_player_vehicle_list_aircraft_desc, num); |
1260 break; |
1260 break; |
1261 } |
1261 } |
1262 |
1262 |
1263 if (w != NULL) { |
1263 if (w != NULL) { |
1285 |
1285 |
1286 void ShowVehicleListWindow(PlayerID player, byte vehicle_type, TileIndex depot_tile) |
1286 void ShowVehicleListWindow(PlayerID player, byte vehicle_type, TileIndex depot_tile) |
1287 { |
1287 { |
1288 uint16 depot_airport_index; |
1288 uint16 depot_airport_index; |
1289 |
1289 |
1290 if (vehicle_type == VEH_Aircraft) { |
1290 if (vehicle_type == VEH_AIRCRAFT) { |
1291 depot_airport_index = GetStationIndex(depot_tile); |
1291 depot_airport_index = GetStationIndex(depot_tile); |
1292 } else { |
1292 } else { |
1293 Depot *depot = GetDepotByTile(depot_tile); |
1293 Depot *depot = GetDepotByTile(depot_tile); |
1294 if (depot == NULL) return; // no depot to show |
1294 if (depot == NULL) return; // no depot to show |
1295 depot_airport_index = depot->index; |
1295 depot_airport_index = depot->index; |