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*); |
175 pal = PALETTE_TO_GREEN; |
175 pal = PALETTE_TO_GREEN; |
176 } |
176 } |
177 DrawSprite(SPR_BLOT, pal, x, y); |
177 DrawSprite(SPR_BLOT, pal, x, y); |
178 } |
178 } |
179 |
179 |
180 typedef struct RefitOption { |
180 struct RefitOption { |
181 CargoID cargo; |
181 CargoID cargo; |
182 byte subtype; |
182 byte subtype; |
183 uint16 value; |
183 uint16 value; |
184 EngineID engine; |
184 EngineID engine; |
185 } RefitOption; |
185 }; |
186 |
186 |
187 typedef struct RefitList { |
187 struct RefitList { |
188 uint num_lines; |
188 uint num_lines; |
189 RefitOption *items; |
189 RefitOption *items; |
190 } RefitList; |
190 }; |
191 |
191 |
192 static RefitList *BuildRefitList(const Vehicle *v) |
192 static RefitList *BuildRefitList(const Vehicle *v) |
193 { |
193 { |
194 uint max_lines = 256; |
194 uint max_lines = 256; |
195 RefitOption *refit = CallocT<RefitOption>(max_lines); |
195 RefitOption *refit = CallocT<RefitOption>(max_lines); |
315 { |
315 { |
316 switch (e->event) { |
316 switch (e->event) { |
317 case WE_PAINT: { |
317 case WE_PAINT: { |
318 Vehicle *v = GetVehicle(w->window_number); |
318 Vehicle *v = GetVehicle(w->window_number); |
319 |
319 |
320 if (v->type == VEH_Train) { |
320 if (v->type == VEH_TRAIN) { |
321 uint length = CountVehiclesInChain(v); |
321 uint length = CountVehiclesInChain(v); |
322 |
322 |
323 if (length != WP(w, refit_d).length) { |
323 if (length != WP(w, refit_d).length) { |
324 /* Consist length has changed, so rebuild the refit list */ |
324 /* Consist length has changed, so rebuild the refit list */ |
325 free(WP(w, refit_d).list->items); |
325 free(WP(w, refit_d).list->items); |
367 |
367 |
368 if (WP(w, refit_d).order == INVALID_VEH_ORDER_ID) { |
368 if (WP(w, refit_d).order == INVALID_VEH_ORDER_ID) { |
369 int command = 0; |
369 int command = 0; |
370 |
370 |
371 switch (v->type) { |
371 switch (v->type) { |
372 case VEH_Train: command = CMD_REFIT_RAIL_VEHICLE | CMD_MSG(STR_RAIL_CAN_T_REFIT_VEHICLE); break; |
372 case VEH_TRAIN: command = CMD_REFIT_RAIL_VEHICLE | CMD_MSG(STR_RAIL_CAN_T_REFIT_VEHICLE); break; |
373 case VEH_Road: command = CMD_REFIT_ROAD_VEH | CMD_MSG(STR_REFIT_ROAD_VEHICLE_CAN_T); break; |
373 case VEH_ROAD: command = CMD_REFIT_ROAD_VEH | CMD_MSG(STR_REFIT_ROAD_VEHICLE_CAN_T); break; |
374 case VEH_Ship: command = CMD_REFIT_SHIP | CMD_MSG(STR_9841_CAN_T_REFIT_SHIP); break; |
374 case VEH_SHIP: command = CMD_REFIT_SHIP | CMD_MSG(STR_9841_CAN_T_REFIT_SHIP); break; |
375 case VEH_Aircraft: command = CMD_REFIT_AIRCRAFT | CMD_MSG(STR_A042_CAN_T_REFIT_AIRCRAFT); break; |
375 case VEH_AIRCRAFT: command = CMD_REFIT_AIRCRAFT | CMD_MSG(STR_A042_CAN_T_REFIT_AIRCRAFT); break; |
376 } |
376 } |
377 if (DoCommandP(v->tile, v->index, WP(w,refit_d).cargo->cargo | WP(w,refit_d).cargo->subtype << 8, NULL, command)) w->Close(); |
377 if (DoCommandP(v->tile, v->index, WP(w,refit_d).cargo->cargo | WP(w,refit_d).cargo->subtype << 8, NULL, command)) w->Close(); |
378 } else { |
378 } else { |
379 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)) w->Close(); |
379 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)) w->Close(); |
380 } |
380 } |
432 w->caption_color = v->owner; |
432 w->caption_color = v->owner; |
433 w->vscroll.cap = 8; |
433 w->vscroll.cap = 8; |
434 w->resize.step_height = 14; |
434 w->resize.step_height = 14; |
435 WP(w, refit_d).sel = -1; |
435 WP(w, refit_d).sel = -1; |
436 WP(w, refit_d).list = BuildRefitList(v); |
436 WP(w, refit_d).list = BuildRefitList(v); |
437 if (v->type == VEH_Train) WP(w, refit_d).length = CountVehiclesInChain(v); |
437 if (v->type == VEH_TRAIN) WP(w, refit_d).length = CountVehiclesInChain(v); |
438 SetVScrollCount(w, WP(w, refit_d).list->num_lines); |
438 SetVScrollCount(w, WP(w, refit_d).list->num_lines); |
439 |
439 |
440 switch (v->type) { |
440 switch (v->type) { |
441 case VEH_Train: |
441 case VEH_TRAIN: |
442 w->widget[3].tooltips = STR_RAIL_SELECT_TYPE_OF_CARGO_FOR; |
442 w->widget[3].tooltips = STR_RAIL_SELECT_TYPE_OF_CARGO_FOR; |
443 w->widget[6].data = STR_RAIL_REFIT_VEHICLE; |
443 w->widget[6].data = STR_RAIL_REFIT_VEHICLE; |
444 w->widget[6].tooltips = STR_RAIL_REFIT_TO_CARRY_HIGHLIGHTED; |
444 w->widget[6].tooltips = STR_RAIL_REFIT_TO_CARRY_HIGHLIGHTED; |
445 break; |
445 break; |
446 case VEH_Road: |
446 case VEH_ROAD: |
447 w->widget[3].tooltips = STR_ROAD_SELECT_TYPE_OF_CARGO_FOR; |
447 w->widget[3].tooltips = STR_ROAD_SELECT_TYPE_OF_CARGO_FOR; |
448 w->widget[6].data = STR_REFIT_ROAD_VEHICLE; |
448 w->widget[6].data = STR_REFIT_ROAD_VEHICLE; |
449 w->widget[6].tooltips = STR_REFIT_ROAD_VEHICLE_TO_CARRY_HIGHLIGHTED; |
449 w->widget[6].tooltips = STR_REFIT_ROAD_VEHICLE_TO_CARRY_HIGHLIGHTED; |
450 break; |
450 break; |
451 case VEH_Ship: |
451 case VEH_SHIP: |
452 w->widget[3].tooltips = STR_983D_SELECT_TYPE_OF_CARGO_FOR; |
452 w->widget[3].tooltips = STR_983D_SELECT_TYPE_OF_CARGO_FOR; |
453 w->widget[6].data = STR_983C_REFIT_SHIP; |
453 w->widget[6].data = STR_983C_REFIT_SHIP; |
454 w->widget[6].tooltips = STR_983E_REFIT_SHIP_TO_CARRY_HIGHLIGHTED; |
454 w->widget[6].tooltips = STR_983E_REFIT_SHIP_TO_CARRY_HIGHLIGHTED; |
455 break; |
455 break; |
456 case VEH_Aircraft: |
456 case VEH_AIRCRAFT: |
457 w->widget[3].tooltips = STR_A03E_SELECT_TYPE_OF_CARGO_FOR; |
457 w->widget[3].tooltips = STR_A03E_SELECT_TYPE_OF_CARGO_FOR; |
458 w->widget[6].data = STR_A03D_REFIT_AIRCRAFT; |
458 w->widget[6].data = STR_A03D_REFIT_AIRCRAFT; |
459 w->widget[6].tooltips = STR_A03F_REFIT_AIRCRAFT_TO_CARRY; |
459 w->widget[6].tooltips = STR_A03F_REFIT_AIRCRAFT_TO_CARRY; |
460 break; |
460 break; |
461 default: NOT_REACHED(); |
461 default: NOT_REACHED(); |
647 const Vehicle* vb = *(const Vehicle**)b; |
647 const Vehicle* vb = *(const Vehicle**)b; |
648 int max_speed_a = 0xFFFF, max_speed_b = 0xFFFF; |
648 int max_speed_a = 0xFFFF, max_speed_b = 0xFFFF; |
649 int r; |
649 int r; |
650 const Vehicle *ua = va, *ub = vb; |
650 const Vehicle *ua = va, *ub = vb; |
651 |
651 |
652 if (va->type == VEH_Train && vb->type == VEH_Train) { |
652 if (va->type == VEH_TRAIN && vb->type == VEH_TRAIN) { |
653 do { |
653 do { |
654 if (RailVehInfo(ua->engine_type)->max_speed != 0) |
654 if (RailVehInfo(ua->engine_type)->max_speed != 0) |
655 max_speed_a = min(max_speed_a, RailVehInfo(ua->engine_type)->max_speed); |
655 max_speed_a = min(max_speed_a, RailVehInfo(ua->engine_type)->max_speed); |
656 } while ((ua = ua->next) != NULL); |
656 } while ((ua = ua->next) != NULL); |
657 |
657 |
821 WIDGET_LIST_END); |
821 WIDGET_LIST_END); |
822 } |
822 } |
823 |
823 |
824 /* Set up the window widgets */ |
824 /* Set up the window widgets */ |
825 switch (vl->vehicle_type) { |
825 switch (vl->vehicle_type) { |
826 case VEH_Train: |
826 case VEH_TRAIN: |
827 w->widget[VLW_WIDGET_LIST].tooltips = STR_883D_TRAINS_CLICK_ON_TRAIN_FOR; |
827 w->widget[VLW_WIDGET_LIST].tooltips = STR_883D_TRAINS_CLICK_ON_TRAIN_FOR; |
828 w->widget[VLW_WIDGET_AVAILABLE_VEHICLES].data = STR_AVAILABLE_TRAINS; |
828 w->widget[VLW_WIDGET_AVAILABLE_VEHICLES].data = STR_AVAILABLE_TRAINS; |
829 break; |
829 break; |
830 |
830 |
831 case VEH_Road: |
831 case VEH_ROAD: |
832 w->widget[VLW_WIDGET_LIST].tooltips = STR_901A_ROAD_VEHICLES_CLICK_ON; |
832 w->widget[VLW_WIDGET_LIST].tooltips = STR_901A_ROAD_VEHICLES_CLICK_ON; |
833 w->widget[VLW_WIDGET_AVAILABLE_VEHICLES].data = STR_AVAILABLE_ROAD_VEHICLES; |
833 w->widget[VLW_WIDGET_AVAILABLE_VEHICLES].data = STR_AVAILABLE_ROAD_VEHICLES; |
834 break; |
834 break; |
835 |
835 |
836 case VEH_Ship: |
836 case VEH_SHIP: |
837 w->widget[VLW_WIDGET_LIST].tooltips = STR_9823_SHIPS_CLICK_ON_SHIP_FOR; |
837 w->widget[VLW_WIDGET_LIST].tooltips = STR_9823_SHIPS_CLICK_ON_SHIP_FOR; |
838 w->widget[VLW_WIDGET_AVAILABLE_VEHICLES].data = STR_AVAILABLE_SHIPS; |
838 w->widget[VLW_WIDGET_AVAILABLE_VEHICLES].data = STR_AVAILABLE_SHIPS; |
839 break; |
839 break; |
840 |
840 |
841 case VEH_Aircraft: |
841 case VEH_AIRCRAFT: |
842 w->widget[VLW_WIDGET_LIST].tooltips = STR_A01F_AIRCRAFT_CLICK_ON_AIRCRAFT; |
842 w->widget[VLW_WIDGET_LIST].tooltips = STR_A01F_AIRCRAFT_CLICK_ON_AIRCRAFT; |
843 w->widget[VLW_WIDGET_AVAILABLE_VEHICLES].data = STR_AVAILABLE_AIRCRAFT; |
843 w->widget[VLW_WIDGET_AVAILABLE_VEHICLES].data = STR_AVAILABLE_AIRCRAFT; |
844 break; |
844 break; |
845 |
845 |
846 default: NOT_REACHED(); |
846 default: NOT_REACHED(); |
850 case VLW_SHARED_ORDERS: |
850 case VLW_SHARED_ORDERS: |
851 w->widget[VLW_WIDGET_CAPTION].data = STR_VEH_WITH_SHARED_ORDERS_LIST; |
851 w->widget[VLW_WIDGET_CAPTION].data = STR_VEH_WITH_SHARED_ORDERS_LIST; |
852 break; |
852 break; |
853 case VLW_STANDARD: /* Company Name - standard widget setup */ |
853 case VLW_STANDARD: /* Company Name - standard widget setup */ |
854 switch (vl->vehicle_type) { |
854 switch (vl->vehicle_type) { |
855 case VEH_Train: w->widget[VLW_WIDGET_CAPTION].data = STR_881B_TRAINS; break; |
855 case VEH_TRAIN: w->widget[VLW_WIDGET_CAPTION].data = STR_881B_TRAINS; break; |
856 case VEH_Road: w->widget[VLW_WIDGET_CAPTION].data = STR_9001_ROAD_VEHICLES; break; |
856 case VEH_ROAD: w->widget[VLW_WIDGET_CAPTION].data = STR_9001_ROAD_VEHICLES; break; |
857 case VEH_Ship: w->widget[VLW_WIDGET_CAPTION].data = STR_9805_SHIPS; break; |
857 case VEH_SHIP: w->widget[VLW_WIDGET_CAPTION].data = STR_9805_SHIPS; break; |
858 case VEH_Aircraft: w->widget[VLW_WIDGET_CAPTION].data = STR_A009_AIRCRAFT; break; |
858 case VEH_AIRCRAFT: w->widget[VLW_WIDGET_CAPTION].data = STR_A009_AIRCRAFT; break; |
859 default: NOT_REACHED(); break; |
859 default: NOT_REACHED(); break; |
860 } |
860 } |
861 break; |
861 break; |
862 case VLW_STATION_LIST: /* Station Name */ |
862 case VLW_STATION_LIST: /* Station Name */ |
863 switch (vl->vehicle_type) { |
863 switch (vl->vehicle_type) { |
864 case VEH_Train: w->widget[VLW_WIDGET_CAPTION].data = STR_SCHEDULED_TRAINS; break; |
864 case VEH_TRAIN: w->widget[VLW_WIDGET_CAPTION].data = STR_SCHEDULED_TRAINS; break; |
865 case VEH_Road: w->widget[VLW_WIDGET_CAPTION].data = STR_SCHEDULED_ROAD_VEHICLES; break; |
865 case VEH_ROAD: w->widget[VLW_WIDGET_CAPTION].data = STR_SCHEDULED_ROAD_VEHICLES; break; |
866 case VEH_Ship: w->widget[VLW_WIDGET_CAPTION].data = STR_SCHEDULED_SHIPS; break; |
866 case VEH_SHIP: w->widget[VLW_WIDGET_CAPTION].data = STR_SCHEDULED_SHIPS; break; |
867 case VEH_Aircraft: w->widget[VLW_WIDGET_CAPTION].data = STR_SCHEDULED_AIRCRAFT; break; |
867 case VEH_AIRCRAFT: w->widget[VLW_WIDGET_CAPTION].data = STR_SCHEDULED_AIRCRAFT; break; |
868 default: NOT_REACHED(); break; |
868 default: NOT_REACHED(); break; |
869 } |
869 } |
870 break; |
870 break; |
871 |
871 |
872 case VLW_DEPOT_LIST: |
872 case VLW_DEPOT_LIST: |
873 switch (vl->vehicle_type) { |
873 switch (vl->vehicle_type) { |
874 case VEH_Train: w->widget[VLW_WIDGET_CAPTION].data = STR_VEHICLE_LIST_TRAIN_DEPOT; break; |
874 case VEH_TRAIN: w->widget[VLW_WIDGET_CAPTION].data = STR_VEHICLE_LIST_TRAIN_DEPOT; break; |
875 case VEH_Road: w->widget[VLW_WIDGET_CAPTION].data = STR_VEHICLE_LIST_ROADVEH_DEPOT; break; |
875 case VEH_ROAD: w->widget[VLW_WIDGET_CAPTION].data = STR_VEHICLE_LIST_ROADVEH_DEPOT; break; |
876 case VEH_Ship: w->widget[VLW_WIDGET_CAPTION].data = STR_VEHICLE_LIST_SHIP_DEPOT; break; |
876 case VEH_SHIP: w->widget[VLW_WIDGET_CAPTION].data = STR_VEHICLE_LIST_SHIP_DEPOT; break; |
877 case VEH_Aircraft: w->widget[VLW_WIDGET_CAPTION].data = STR_VEHICLE_LIST_AIRCRAFT_DEPOT; break; |
877 case VEH_AIRCRAFT: w->widget[VLW_WIDGET_CAPTION].data = STR_VEHICLE_LIST_AIRCRAFT_DEPOT; break; |
878 default: NOT_REACHED(); break; |
878 default: NOT_REACHED(); break; |
879 } |
879 } |
880 break; |
880 break; |
881 default: NOT_REACHED(); break; |
881 default: NOT_REACHED(); break; |
882 } |
882 } |
883 |
883 |
884 switch (vl->vehicle_type) { |
884 switch (vl->vehicle_type) { |
885 case VEH_Train: |
885 case VEH_TRAIN: |
886 w->resize.step_width = 1; |
886 w->resize.step_width = 1; |
887 /* Fallthrough */ |
887 /* Fallthrough */ |
888 case VEH_Road: |
888 case VEH_ROAD: |
889 w->vscroll.cap = 7; |
889 w->vscroll.cap = 7; |
890 w->resize.step_height = PLY_WND_PRC__SIZE_OF_ROW_SMALL; |
890 w->resize.step_height = PLY_WND_PRC__SIZE_OF_ROW_SMALL; |
891 w->resize.height = 220 - (PLY_WND_PRC__SIZE_OF_ROW_SMALL * 3); // Minimum of 4 vehicles |
891 w->resize.height = 220 - (PLY_WND_PRC__SIZE_OF_ROW_SMALL * 3); // Minimum of 4 vehicles |
892 break; |
892 break; |
893 case VEH_Ship: |
893 case VEH_SHIP: |
894 case VEH_Aircraft: |
894 case VEH_AIRCRAFT: |
895 w->vscroll.cap = 4; |
895 w->vscroll.cap = 4; |
896 w->resize.step_height = PLY_WND_PRC__SIZE_OF_ROW_BIG; |
896 w->resize.step_height = PLY_WND_PRC__SIZE_OF_ROW_BIG; |
897 break; |
897 break; |
898 default: NOT_REACHED(); |
898 default: NOT_REACHED(); |
899 } |
899 } |
902 |
902 |
903 /* Set up sorting. Make the window-specific _sorting variable |
903 /* Set up sorting. Make the window-specific _sorting variable |
904 * point to the correct global _sorting struct so we are freed |
904 * point to the correct global _sorting struct so we are freed |
905 * from having conditionals during window operation */ |
905 * from having conditionals during window operation */ |
906 switch (vl->vehicle_type) { |
906 switch (vl->vehicle_type) { |
907 case VEH_Train: vl->_sorting = &_sorting.train; break; |
907 case VEH_TRAIN: vl->_sorting = &_sorting.train; break; |
908 case VEH_Road: vl->_sorting = &_sorting.roadveh; break; |
908 case VEH_ROAD: vl->_sorting = &_sorting.roadveh; break; |
909 case VEH_Ship: vl->_sorting = &_sorting.ship; break; |
909 case VEH_SHIP: vl->_sorting = &_sorting.ship; break; |
910 case VEH_Aircraft: vl->_sorting = &_sorting.aircraft; break; |
910 case VEH_AIRCRAFT: vl->_sorting = &_sorting.aircraft; break; |
911 default: NOT_REACHED(); break; |
911 default: NOT_REACHED(); break; |
912 } |
912 } |
913 |
913 |
914 vl->l.flags = VL_REBUILD | (vl->_sorting->order ? VL_DESC : VL_NONE); |
914 vl->l.flags = VL_REBUILD | (vl->_sorting->order ? VL_DESC : VL_NONE); |
915 vl->l.sort_type = vl->_sorting->criteria; |
915 vl->l.sort_type = vl->_sorting->criteria; |
927 FOR_VEHICLE_ORDERS(v, order) { |
927 FOR_VEHICLE_ORDERS(v, order) { |
928 if (sel == 0) DrawString(x - 6, y, STR_SMALL_RIGHT_ARROW, 16); |
928 if (sel == 0) DrawString(x - 6, y, STR_SMALL_RIGHT_ARROW, 16); |
929 sel--; |
929 sel--; |
930 |
930 |
931 if (order->type == OT_GOTO_STATION) { |
931 if (order->type == OT_GOTO_STATION) { |
932 if (v->type == VEH_Ship && GetStation(order->dest)->IsBuoy()) continue; |
932 if (v->type == VEH_SHIP && GetStation(order->dest)->IsBuoy()) continue; |
933 |
933 |
934 SetDParam(0, order->dest); |
934 SetDParam(0, order->dest); |
935 DrawString(x, y, STR_A036, 0); |
935 DrawString(x, y, STR_A036, 0); |
936 |
936 |
937 y += 6; |
937 y += 6; |
978 SetDParam(1, w->vscroll.count); |
978 SetDParam(1, w->vscroll.count); |
979 break; |
979 break; |
980 |
980 |
981 case VLW_DEPOT_LIST: |
981 case VLW_DEPOT_LIST: |
982 switch (vl->vehicle_type) { |
982 switch (vl->vehicle_type) { |
983 case VEH_Train: SetDParam(0, STR_8800_TRAIN_DEPOT); break; |
983 case VEH_TRAIN: SetDParam(0, STR_8800_TRAIN_DEPOT); break; |
984 case VEH_Road: SetDParam(0, STR_9003_ROAD_VEHICLE_DEPOT); break; |
984 case VEH_ROAD: SetDParam(0, STR_9003_ROAD_VEHICLE_DEPOT); break; |
985 case VEH_Ship: SetDParam(0, STR_9803_SHIP_DEPOT); break; |
985 case VEH_SHIP: SetDParam(0, STR_9803_SHIP_DEPOT); break; |
986 case VEH_Aircraft: SetDParam(0, STR_A002_AIRCRAFT_HANGAR); break; |
986 case VEH_AIRCRAFT: SetDParam(0, STR_A002_AIRCRAFT_HANGAR); break; |
987 default: NOT_REACHED(); break; |
987 default: NOT_REACHED(); break; |
988 } |
988 } |
989 if (vl->vehicle_type == VEH_Aircraft) { |
989 if (vl->vehicle_type == VEH_AIRCRAFT) { |
990 SetDParam(1, index); // Airport name |
990 SetDParam(1, index); // Airport name |
991 } else { |
991 } else { |
992 SetDParam(1, GetDepot(index)->town_index); |
992 SetDParam(1, GetDepot(index)->town_index); |
993 } |
993 } |
994 SetDParam(2, w->vscroll.count); |
994 SetDParam(2, w->vscroll.count); |
1019 SetDParam(1, v->profit_last_year); |
1019 SetDParam(1, v->profit_last_year); |
1020 |
1020 |
1021 DrawVehicleImage(v, x + 19, y + 6, w->widget[VLW_WIDGET_LIST].right - w->widget[VLW_WIDGET_LIST].left - 20, 0, INVALID_VEHICLE); |
1021 DrawVehicleImage(v, x + 19, y + 6, w->widget[VLW_WIDGET_LIST].right - w->widget[VLW_WIDGET_LIST].left - 20, 0, INVALID_VEHICLE); |
1022 DrawString(x + 19, y + w->resize.step_height - 8, STR_0198_PROFIT_THIS_YEAR_LAST_YEAR, 0); |
1022 DrawString(x + 19, y + w->resize.step_height - 8, STR_0198_PROFIT_THIS_YEAR_LAST_YEAR, 0); |
1023 |
1023 |
1024 if ((v->type == VEH_Train && v->string_id != STR_SV_TRAIN_NAME) || |
1024 if ((v->type == VEH_TRAIN && v->string_id != STR_SV_TRAIN_NAME) || |
1025 (v->type == VEH_Road && v->string_id != STR_SV_ROADVEH_NAME) || |
1025 (v->type == VEH_ROAD && v->string_id != STR_SV_ROADVEH_NAME) || |
1026 (v->type == VEH_Ship && v->string_id != STR_SV_SHIP_NAME) || |
1026 (v->type == VEH_SHIP && v->string_id != STR_SV_SHIP_NAME) || |
1027 (v->type == VEH_Aircraft && v->string_id != STR_SV_AIRCRAFT_NAME)) { |
1027 (v->type == VEH_AIRCRAFT && v->string_id != STR_SV_AIRCRAFT_NAME)) { |
1028 |
1028 |
1029 /* The vehicle got a name so we will print it */ |
1029 /* The vehicle got a name so we will print it */ |
1030 SetDParam(0, v->string_id); |
1030 SetDParam(0, v->string_id); |
1031 DrawString(x + 19, y, STR_01AB, 0); |
1031 DrawString(x + 19, y, STR_01AB, 0); |
1032 } |
1032 } |
1091 if (id_v >= vl->l.list_length) return; // click out of list bound |
1091 if (id_v >= vl->l.list_length) return; // click out of list bound |
1092 |
1092 |
1093 v = vl->sort_list[id_v]; |
1093 v = vl->sort_list[id_v]; |
1094 |
1094 |
1095 switch (vl->vehicle_type) { |
1095 switch (vl->vehicle_type) { |
1096 case VEH_Train: ShowTrainViewWindow(v); break; |
1096 case VEH_TRAIN: ShowTrainViewWindow(v); break; |
1097 case VEH_Road: ShowRoadVehViewWindow(v); break; |
1097 case VEH_ROAD: ShowRoadVehViewWindow(v); break; |
1098 case VEH_Ship: ShowShipViewWindow(v); break; |
1098 case VEH_SHIP: ShowShipViewWindow(v); break; |
1099 case VEH_Aircraft: ShowAircraftViewWindow(v); break; |
1099 case VEH_AIRCRAFT: ShowAircraftViewWindow(v); break; |
1100 default: NOT_REACHED(); break; |
1100 default: NOT_REACHED(); break; |
1101 } |
1101 } |
1102 } break; |
1102 } break; |
1103 |
1103 |
1104 case VLW_WIDGET_AVAILABLE_VEHICLES: |
1104 case VLW_WIDGET_AVAILABLE_VEHICLES: |
1239 /* The vehicle list windows have been unified. Just some strings need |
1239 /* The vehicle list windows have been unified. Just some strings need |
1240 * to be changed which happens in the WE_CREATE event and resizing |
1240 * to be changed which happens in the WE_CREATE event and resizing |
1241 * some of the windows to the correct size */ |
1241 * some of the windows to the correct size */ |
1242 switch (vehicle_type) { |
1242 switch (vehicle_type) { |
1243 default: NOT_REACHED(); |
1243 default: NOT_REACHED(); |
1244 case VEH_Train: |
1244 case VEH_TRAIN: |
1245 w = BaseWindow::AllocateFront(&_player_vehicle_list_train_desc, num); |
1245 w = BaseWindow::AllocateFront(&_player_vehicle_list_train_desc, num); |
1246 if (w != NULL) w->Resize(65, 38); |
1246 if (w != NULL) w->Resize(65, 38); |
1247 break; |
1247 break; |
1248 case VEH_Road: |
1248 case VEH_ROAD: |
1249 w = BaseWindow::AllocateFront(&_player_vehicle_list_road_veh_desc, num); |
1249 w = BaseWindow::AllocateFront(&_player_vehicle_list_road_veh_desc, num); |
1250 if (w != NULL) w->Resize(0, 38); |
1250 if (w != NULL) w->Resize(0, 38); |
1251 break; |
1251 break; |
1252 case VEH_Ship: |
1252 case VEH_SHIP: |
1253 w = BaseWindow::AllocateFront(&_player_vehicle_list_ship_desc, num); |
1253 w = BaseWindow::AllocateFront(&_player_vehicle_list_ship_desc, num); |
1254 break; |
1254 break; |
1255 case VEH_Aircraft: |
1255 case VEH_AIRCRAFT: |
1256 w = BaseWindow::AllocateFront(&_player_vehicle_list_aircraft_desc, num); |
1256 w = BaseWindow::AllocateFront(&_player_vehicle_list_aircraft_desc, num); |
1257 break; |
1257 break; |
1258 } |
1258 } |
1259 |
1259 |
1260 if (w != NULL) { |
1260 if (w != NULL) { |
1282 |
1282 |
1283 void ShowVehicleListWindow(PlayerID player, byte vehicle_type, TileIndex depot_tile) |
1283 void ShowVehicleListWindow(PlayerID player, byte vehicle_type, TileIndex depot_tile) |
1284 { |
1284 { |
1285 uint16 depot_airport_index; |
1285 uint16 depot_airport_index; |
1286 |
1286 |
1287 if (vehicle_type == VEH_Aircraft) { |
1287 if (vehicle_type == VEH_AIRCRAFT) { |
1288 depot_airport_index = GetStationIndex(depot_tile); |
1288 depot_airport_index = GetStationIndex(depot_tile); |
1289 } else { |
1289 } else { |
1290 Depot *depot = GetDepotByTile(depot_tile); |
1290 Depot *depot = GetDepotByTile(depot_tile); |
1291 if (depot == NULL) return; // no depot to show |
1291 if (depot == NULL) return; // no depot to show |
1292 depot_airport_index = depot->index; |
1292 depot_airport_index = depot->index; |