src/build_vehicle_gui.cpp
changeset 6585 7da94b26498a
parent 6563 d08d813ecd42
child 6710 a08fcbe81983
child 9566 9936b201d53f
equal deleted inserted replaced
6584:85b9e0da5754 6585:7da94b26498a
    61 
    61 
    62 /* Setup widget strings to fit the different types of vehicles */
    62 /* Setup widget strings to fit the different types of vehicles */
    63 static void SetupWindowStrings(Window *w, byte type)
    63 static void SetupWindowStrings(Window *w, byte type)
    64 {
    64 {
    65 	switch (type) {
    65 	switch (type) {
    66 		case VEH_Train:
    66 		case VEH_TRAIN:
    67 			w->widget[BUILD_VEHICLE_WIDGET_CAPTION].data    = STR_JUST_STRING;
    67 			w->widget[BUILD_VEHICLE_WIDGET_CAPTION].data    = STR_JUST_STRING;
    68 			w->widget[BUILD_VEHICLE_WIDGET_LIST].tooltips   = STR_8843_TRAIN_VEHICLE_SELECTION;
    68 			w->widget[BUILD_VEHICLE_WIDGET_LIST].tooltips   = STR_8843_TRAIN_VEHICLE_SELECTION;
    69 			w->widget[BUILD_VEHICLE_WIDGET_BUILD].data      = STR_881F_BUILD_VEHICLE;
    69 			w->widget[BUILD_VEHICLE_WIDGET_BUILD].data      = STR_881F_BUILD_VEHICLE;
    70 			w->widget[BUILD_VEHICLE_WIDGET_BUILD].tooltips  = STR_8844_BUILD_THE_HIGHLIGHTED_TRAIN;
    70 			w->widget[BUILD_VEHICLE_WIDGET_BUILD].tooltips  = STR_8844_BUILD_THE_HIGHLIGHTED_TRAIN;
    71 			w->widget[BUILD_VEHICLE_WIDGET_RENAME].data     = STR_8820_RENAME;
    71 			w->widget[BUILD_VEHICLE_WIDGET_RENAME].data     = STR_8820_RENAME;
    72 			w->widget[BUILD_VEHICLE_WIDGET_RENAME].tooltips = STR_8845_RENAME_TRAIN_VEHICLE_TYPE;
    72 			w->widget[BUILD_VEHICLE_WIDGET_RENAME].tooltips = STR_8845_RENAME_TRAIN_VEHICLE_TYPE;
    73 			break;
    73 			break;
    74 		case VEH_Road:
    74 		case VEH_ROAD:
    75 			w->widget[BUILD_VEHICLE_WIDGET_CAPTION].data    = STR_9006_NEW_ROAD_VEHICLES;
    75 			w->widget[BUILD_VEHICLE_WIDGET_CAPTION].data    = STR_9006_NEW_ROAD_VEHICLES;
    76 			w->widget[BUILD_VEHICLE_WIDGET_LIST].tooltips   = STR_9026_ROAD_VEHICLE_SELECTION;
    76 			w->widget[BUILD_VEHICLE_WIDGET_LIST].tooltips   = STR_9026_ROAD_VEHICLE_SELECTION;
    77 			w->widget[BUILD_VEHICLE_WIDGET_BUILD].data      = STR_9007_BUILD_VEHICLE;
    77 			w->widget[BUILD_VEHICLE_WIDGET_BUILD].data      = STR_9007_BUILD_VEHICLE;
    78 			w->widget[BUILD_VEHICLE_WIDGET_BUILD].tooltips  = STR_9027_BUILD_THE_HIGHLIGHTED_ROAD;
    78 			w->widget[BUILD_VEHICLE_WIDGET_BUILD].tooltips  = STR_9027_BUILD_THE_HIGHLIGHTED_ROAD;
    79 			w->widget[BUILD_VEHICLE_WIDGET_RENAME].data     = STR_9034_RENAME;
    79 			w->widget[BUILD_VEHICLE_WIDGET_RENAME].data     = STR_9034_RENAME;
    80 			w->widget[BUILD_VEHICLE_WIDGET_RENAME].tooltips = STR_9035_RENAME_ROAD_VEHICLE_TYPE;
    80 			w->widget[BUILD_VEHICLE_WIDGET_RENAME].tooltips = STR_9035_RENAME_ROAD_VEHICLE_TYPE;
    81 			break;
    81 			break;
    82 		case VEH_Ship:
    82 		case VEH_SHIP:
    83 			w->widget[BUILD_VEHICLE_WIDGET_CAPTION].data    = STR_9808_NEW_SHIPS;
    83 			w->widget[BUILD_VEHICLE_WIDGET_CAPTION].data    = STR_9808_NEW_SHIPS;
    84 			w->widget[BUILD_VEHICLE_WIDGET_LIST].tooltips   = STR_9825_SHIP_SELECTION_LIST_CLICK;
    84 			w->widget[BUILD_VEHICLE_WIDGET_LIST].tooltips   = STR_9825_SHIP_SELECTION_LIST_CLICK;
    85 			w->widget[BUILD_VEHICLE_WIDGET_BUILD].data      = STR_9809_BUILD_SHIP;
    85 			w->widget[BUILD_VEHICLE_WIDGET_BUILD].data      = STR_9809_BUILD_SHIP;
    86 			w->widget[BUILD_VEHICLE_WIDGET_BUILD].tooltips  = STR_9826_BUILD_THE_HIGHLIGHTED_SHIP;
    86 			w->widget[BUILD_VEHICLE_WIDGET_BUILD].tooltips  = STR_9826_BUILD_THE_HIGHLIGHTED_SHIP;
    87 			w->widget[BUILD_VEHICLE_WIDGET_RENAME].data     = STR_9836_RENAME;
    87 			w->widget[BUILD_VEHICLE_WIDGET_RENAME].data     = STR_9836_RENAME;
    88 			w->widget[BUILD_VEHICLE_WIDGET_RENAME].tooltips = STR_9837_RENAME_SHIP_TYPE;
    88 			w->widget[BUILD_VEHICLE_WIDGET_RENAME].tooltips = STR_9837_RENAME_SHIP_TYPE;
    89 			break;
    89 			break;
    90 		case VEH_Aircraft:
    90 		case VEH_AIRCRAFT:
    91 			w->widget[BUILD_VEHICLE_WIDGET_CAPTION].data    = STR_A005_NEW_AIRCRAFT;
    91 			w->widget[BUILD_VEHICLE_WIDGET_CAPTION].data    = STR_A005_NEW_AIRCRAFT;
    92 			w->widget[BUILD_VEHICLE_WIDGET_LIST].tooltips   = STR_A025_AIRCRAFT_SELECTION_LIST;
    92 			w->widget[BUILD_VEHICLE_WIDGET_LIST].tooltips   = STR_A025_AIRCRAFT_SELECTION_LIST;
    93 			w->widget[BUILD_VEHICLE_WIDGET_BUILD].data      = STR_A006_BUILD_AIRCRAFT;
    93 			w->widget[BUILD_VEHICLE_WIDGET_BUILD].data      = STR_A006_BUILD_AIRCRAFT;
    94 			w->widget[BUILD_VEHICLE_WIDGET_BUILD].tooltips  = STR_A026_BUILD_THE_HIGHLIGHTED_AIRCRAFT;
    94 			w->widget[BUILD_VEHICLE_WIDGET_BUILD].tooltips  = STR_A026_BUILD_THE_HIGHLIGHTED_AIRCRAFT;
    95 			w->widget[BUILD_VEHICLE_WIDGET_RENAME].data     = STR_A037_RENAME;
    95 			w->widget[BUILD_VEHICLE_WIDGET_RENAME].data     = STR_A037_RENAME;
   534 	YearMonthDay ymd;
   534 	YearMonthDay ymd;
   535 	ConvertDateToYMD(e->intro_date, &ymd);
   535 	ConvertDateToYMD(e->intro_date, &ymd);
   536 	bool refitable = false;
   536 	bool refitable = false;
   537 
   537 
   538 	switch (e->type) {
   538 	switch (e->type) {
   539 		case VEH_Train: {
   539 		case VEH_TRAIN: {
   540 			const RailVehicleInfo *rvi = RailVehInfo(engine_number);
   540 			const RailVehicleInfo *rvi = RailVehInfo(engine_number);
   541 
   541 
   542 			refitable = (EngInfo(engine_number)->refit_mask != 0) && (rvi->capacity > 0);
   542 			refitable = (EngInfo(engine_number)->refit_mask != 0) && (rvi->capacity > 0);
   543 
   543 
   544 			if (rvi->railveh_type == RAILVEH_WAGON) {
   544 			if (rvi->railveh_type == RAILVEH_WAGON) {
   560 			}
   560 			}
   561 			DrawString(x,y, STR_PURCHASE_INFO_CAPACITY, 0);
   561 			DrawString(x,y, STR_PURCHASE_INFO_CAPACITY, 0);
   562 			y += 10;
   562 			y += 10;
   563 		}
   563 		}
   564 			break;
   564 			break;
   565 		case VEH_Road:
   565 		case VEH_ROAD:
   566 			y = DrawRoadVehPurchaseInfo(x, y, engine_number, RoadVehInfo(engine_number));
   566 			y = DrawRoadVehPurchaseInfo(x, y, engine_number, RoadVehInfo(engine_number));
   567 			refitable = true;
   567 			refitable = true;
   568 			break;
   568 			break;
   569 		case VEH_Ship: {
   569 		case VEH_SHIP: {
   570 			const ShipVehicleInfo *svi = ShipVehInfo(engine_number);
   570 			const ShipVehicleInfo *svi = ShipVehInfo(engine_number);
   571 			y = DrawShipPurchaseInfo(x, y, engine_number, svi);
   571 			y = DrawShipPurchaseInfo(x, y, engine_number, svi);
   572 			refitable = svi->refittable;
   572 			refitable = svi->refittable;
   573 		} break;
   573 		} break;
   574 		case VEH_Aircraft:
   574 		case VEH_AIRCRAFT:
   575 			y = DrawAircraftPurchaseInfo(x, y, engine_number, AircraftVehInfo(engine_number));
   575 			y = DrawAircraftPurchaseInfo(x, y, engine_number, AircraftVehInfo(engine_number));
   576 			refitable = true;
   576 			refitable = true;
   577 			break;
   577 			break;
   578 	}
   578 	}
   579 
   579 
   580 	/* Draw details, that applies to all types except rail wagons */
   580 	/* Draw details, that applies to all types except rail wagons */
   581 	if (e->type != VEH_Train || RailVehInfo(engine_number)->railveh_type != RAILVEH_WAGON) {
   581 	if (e->type != VEH_TRAIN || RailVehInfo(engine_number)->railveh_type != RAILVEH_WAGON) {
   582 		/* Design date - Life length */
   582 		/* Design date - Life length */
   583 		SetDParam(0, ymd.year);
   583 		SetDParam(0, ymd.year);
   584 		SetDParam(1, e->lifelength);
   584 		SetDParam(1, e->lifelength);
   585 		DrawString(x, y, STR_PURCHASE_INFO_DESIGNED_LIFE, 0);
   585 		DrawString(x, y, STR_PURCHASE_INFO_DESIGNED_LIFE, 0);
   586 		y += 10;
   586 		y += 10;
   614 	 * when engines become obsolete and are removed */
   614 	 * when engines become obsolete and are removed */
   615 	for (sel_id = INVALID_ENGINE, eid = 0; eid < NUM_TRAIN_ENGINES; eid++) {
   615 	for (sel_id = INVALID_ENGINE, eid = 0; eid < NUM_TRAIN_ENGINES; eid++) {
   616 		const RailVehicleInfo *rvi = RailVehInfo(eid);
   616 		const RailVehicleInfo *rvi = RailVehInfo(eid);
   617 
   617 
   618 		if (bv->filter.railtype != RAILTYPE_END && !HasPowerOnRail(rvi->railtype, bv->filter.railtype)) continue;
   618 		if (bv->filter.railtype != RAILTYPE_END && !HasPowerOnRail(rvi->railtype, bv->filter.railtype)) continue;
   619 		if (!IsEngineBuildable(eid, VEH_Train, _local_player)) continue;
   619 		if (!IsEngineBuildable(eid, VEH_TRAIN, _local_player)) continue;
   620 
   620 
   621 		EngList_Add(&bv->eng_list, eid);
   621 		EngList_Add(&bv->eng_list, eid);
   622 		if (rvi->railveh_type != RAILVEH_WAGON) {
   622 		if (rvi->railveh_type != RAILVEH_WAGON) {
   623 			num_engines++;
   623 			num_engines++;
   624 		} else {
   624 		} else {
   651 	EngList_RemoveAll(&bv->eng_list);
   651 	EngList_RemoveAll(&bv->eng_list);
   652 
   652 
   653 	sel_id = INVALID_ENGINE;
   653 	sel_id = INVALID_ENGINE;
   654 
   654 
   655 	for (eid = ROAD_ENGINES_INDEX; eid < ROAD_ENGINES_INDEX + NUM_ROAD_ENGINES; eid++) {
   655 	for (eid = ROAD_ENGINES_INDEX; eid < ROAD_ENGINES_INDEX + NUM_ROAD_ENGINES; eid++) {
   656 		if (!IsEngineBuildable(eid, VEH_Road, _local_player)) continue;
   656 		if (!IsEngineBuildable(eid, VEH_ROAD, _local_player)) continue;
   657 		EngList_Add(&bv->eng_list, eid);
   657 		EngList_Add(&bv->eng_list, eid);
   658 
   658 
   659 		if (eid == bv->sel_engine) sel_id = eid;
   659 		if (eid == bv->sel_engine) sel_id = eid;
   660 	}
   660 	}
   661 	bv->sel_engine = sel_id;
   661 	bv->sel_engine = sel_id;
   670 	EngList_RemoveAll(&bv->eng_list);
   670 	EngList_RemoveAll(&bv->eng_list);
   671 
   671 
   672 	sel_id = INVALID_ENGINE;
   672 	sel_id = INVALID_ENGINE;
   673 
   673 
   674 	for (eid = SHIP_ENGINES_INDEX; eid < SHIP_ENGINES_INDEX + NUM_SHIP_ENGINES; eid++) {
   674 	for (eid = SHIP_ENGINES_INDEX; eid < SHIP_ENGINES_INDEX + NUM_SHIP_ENGINES; eid++) {
   675 		if (!IsEngineBuildable(eid, VEH_Ship, _local_player)) continue;
   675 		if (!IsEngineBuildable(eid, VEH_SHIP, _local_player)) continue;
   676 		EngList_Add(&bv->eng_list, eid);
   676 		EngList_Add(&bv->eng_list, eid);
   677 
   677 
   678 		if (eid == bv->sel_engine) sel_id = eid;
   678 		if (eid == bv->sel_engine) sel_id = eid;
   679 	}
   679 	}
   680 	bv->sel_engine = sel_id;
   680 	bv->sel_engine = sel_id;
   692 	 * Also check to see if the previously selected plane is still available,
   692 	 * Also check to see if the previously selected plane is still available,
   693 	 * and if not, reset selection to INVALID_ENGINE. This could be the case
   693 	 * and if not, reset selection to INVALID_ENGINE. This could be the case
   694 	 * when planes become obsolete and are removed */
   694 	 * when planes become obsolete and are removed */
   695 	sel_id = INVALID_ENGINE;
   695 	sel_id = INVALID_ENGINE;
   696 	for (eid = AIRCRAFT_ENGINES_INDEX; eid < AIRCRAFT_ENGINES_INDEX + NUM_AIRCRAFT_ENGINES; eid++) {
   696 	for (eid = AIRCRAFT_ENGINES_INDEX; eid < AIRCRAFT_ENGINES_INDEX + NUM_AIRCRAFT_ENGINES; eid++) {
   697 		if (!IsEngineBuildable(eid, VEH_Aircraft, _local_player)) continue;
   697 		if (!IsEngineBuildable(eid, VEH_AIRCRAFT, _local_player)) continue;
   698 		if (w->window_number != 0 && !IsAircraftBuildableAtStation(eid, w->window_number)) continue;
   698 		if (w->window_number != 0 && !IsAircraftBuildableAtStation(eid, w->window_number)) continue;
   699 
   699 
   700 		EngList_Add(&bv->eng_list, eid);
   700 		EngList_Add(&bv->eng_list, eid);
   701 		if (eid == bv->sel_engine) sel_id = eid;
   701 		if (eid == bv->sel_engine) sel_id = eid;
   702 	}
   702 	}
   708 static void GenerateBuildList(Window *w)
   708 static void GenerateBuildList(Window *w)
   709 {
   709 {
   710 	buildvehicle_d *bv = &WP(w, buildvehicle_d);
   710 	buildvehicle_d *bv = &WP(w, buildvehicle_d);
   711 
   711 
   712 	switch (bv->vehicle_type) {
   712 	switch (bv->vehicle_type) {
   713 		case VEH_Train:
   713 		case VEH_TRAIN:
   714 			GenerateBuildTrainList(w);
   714 			GenerateBuildTrainList(w);
   715 			return; // trains should not reach the last sorting
   715 			return; // trains should not reach the last sorting
   716 		case VEH_Road:
   716 		case VEH_ROAD:
   717 			GenerateBuildRoadVehList(w);
   717 			GenerateBuildRoadVehList(w);
   718 			break;
   718 			break;
   719 		case VEH_Ship:
   719 		case VEH_SHIP:
   720 			GenerateBuildShipList(w);
   720 			GenerateBuildShipList(w);
   721 			break;
   721 			break;
   722 		case VEH_Aircraft:
   722 		case VEH_AIRCRAFT:
   723 			GenerateBuildAircraftList(w);
   723 			GenerateBuildAircraftList(w);
   724 			break;
   724 			break;
   725 	}
   725 	}
   726 	_internal_sort_order = bv->descending_sort_order;
   726 	_internal_sort_order = bv->descending_sort_order;
   727 	EngList_Sort(&bv->eng_list, _sorter[bv->vehicle_type][bv->sort_criteria]);
   727 	EngList_Sort(&bv->eng_list, _sorter[bv->vehicle_type][bv->sort_criteria]);
   728 }
   728 }
   729 
   729 
   730 static void DrawVehicleEngine(byte type, int x, int y, EngineID engine, SpriteID pal)
   730 static void DrawVehicleEngine(byte type, int x, int y, EngineID engine, SpriteID pal)
   731 {
   731 {
   732 	switch (type) {
   732 	switch (type) {
   733 		case VEH_Train:    DrawTrainEngine(   x, y, engine, pal); break;
   733 		case VEH_TRAIN:    DrawTrainEngine(   x, y, engine, pal); break;
   734 		case VEH_Road:     DrawRoadVehEngine( x, y, engine, pal); break;
   734 		case VEH_ROAD:     DrawRoadVehEngine( x, y, engine, pal); break;
   735 		case VEH_Ship:     DrawShipEngine(    x, y, engine, pal); break;
   735 		case VEH_SHIP:     DrawShipEngine(    x, y, engine, pal); break;
   736 		case VEH_Aircraft: DrawAircraftEngine(x, y, engine, pal); break;
   736 		case VEH_AIRCRAFT: DrawAircraftEngine(x, y, engine, pal); break;
   737 		default: NOT_REACHED();
   737 		default: NOT_REACHED();
   738 	}
   738 	}
   739 }
   739 }
   740 
   740 
   741 /** Engine drawing loop
   741 /** Engine drawing loop
   755 	Player *p = GetPlayer(_local_player);
   755 	Player *p = GetPlayer(_local_player);
   756 
   756 
   757 	assert(max <= EngList_Count(&eng_list));
   757 	assert(max <= EngList_Count(&eng_list));
   758 
   758 
   759 	switch (type) {
   759 	switch (type) {
   760 		case VEH_Train:
   760 		case VEH_TRAIN:
   761 			x++; // train and road vehicles use the same offset, except trains are one more pixel to the right
   761 			x++; // train and road vehicles use the same offset, except trains are one more pixel to the right
   762 			/* Fallthough */
   762 			/* Fallthough */
   763 		case VEH_Road:
   763 		case VEH_ROAD:
   764 			x += 26;
   764 			x += 26;
   765 			x_offset = 30;
   765 			x_offset = 30;
   766 			y += 2;
   766 			y += 2;
   767 			y_offset = 4;
   767 			y_offset = 4;
   768 			break;
   768 			break;
   769 		case VEH_Ship:
   769 		case VEH_SHIP:
   770 			x += 35;
   770 			x += 35;
   771 			x_offset = 40;
   771 			x_offset = 40;
   772 			y += 7;
   772 			y += 7;
   773 			y_offset = 3;
   773 			y_offset = 3;
   774 			break;
   774 			break;
   775 		case VEH_Aircraft:
   775 		case VEH_AIRCRAFT:
   776 			x += 27;
   776 			x += 27;
   777 			x_offset = 33;
   777 			x_offset = 33;
   778 			y += 7;
   778 			y += 7;
   779 			y_offset = 3;
   779 			y_offset = 3;
   780 			break;
   780 			break;
   841 
   841 
   842 		case BUILD_VEHICLE_WIDGET_BUILD: {
   842 		case BUILD_VEHICLE_WIDGET_BUILD: {
   843 			EngineID sel_eng = bv->sel_engine;
   843 			EngineID sel_eng = bv->sel_engine;
   844 			if (sel_eng != INVALID_ENGINE) {
   844 			if (sel_eng != INVALID_ENGINE) {
   845 				switch (bv->vehicle_type) {
   845 				switch (bv->vehicle_type) {
   846 					case VEH_Train:
   846 					case VEH_TRAIN:
   847 						DoCommandP(w->window_number, sel_eng, 0, (RailVehInfo(sel_eng)->railveh_type == RAILVEH_WAGON) ? CcBuildWagon : CcBuildLoco,
   847 						DoCommandP(w->window_number, sel_eng, 0, (RailVehInfo(sel_eng)->railveh_type == RAILVEH_WAGON) ? CcBuildWagon : CcBuildLoco,
   848 								   CMD_BUILD_RAIL_VEHICLE | CMD_MSG(STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE));
   848 								   CMD_BUILD_RAIL_VEHICLE | CMD_MSG(STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE));
   849 						break;
   849 						break;
   850 					case VEH_Road:
   850 					case VEH_ROAD:
   851 						DoCommandP(w->window_number, sel_eng, 0, CcBuildRoadVeh, CMD_BUILD_ROAD_VEH | CMD_MSG(STR_9009_CAN_T_BUILD_ROAD_VEHICLE));
   851 						DoCommandP(w->window_number, sel_eng, 0, CcBuildRoadVeh, CMD_BUILD_ROAD_VEH | CMD_MSG(STR_9009_CAN_T_BUILD_ROAD_VEHICLE));
   852 						break;
   852 						break;
   853 					case VEH_Ship:
   853 					case VEH_SHIP:
   854 						DoCommandP(w->window_number, sel_eng, 0, CcBuildShip, CMD_BUILD_SHIP | CMD_MSG(STR_980D_CAN_T_BUILD_SHIP));
   854 						DoCommandP(w->window_number, sel_eng, 0, CcBuildShip, CMD_BUILD_SHIP | CMD_MSG(STR_980D_CAN_T_BUILD_SHIP));
   855 						break;
   855 						break;
   856 					case VEH_Aircraft:
   856 					case VEH_AIRCRAFT:
   857 						DoCommandP(w->window_number, sel_eng, 0, CcBuildAircraft, CMD_BUILD_AIRCRAFT | CMD_MSG(STR_A008_CAN_T_BUILD_AIRCRAFT));
   857 						DoCommandP(w->window_number, sel_eng, 0, CcBuildAircraft, CMD_BUILD_AIRCRAFT | CMD_MSG(STR_A008_CAN_T_BUILD_AIRCRAFT));
   858 						break;
   858 						break;
   859 				}
   859 				}
   860 			}
   860 			}
   861 			break;
   861 			break;
   866 			if (sel_eng != INVALID_ENGINE) {
   866 			if (sel_eng != INVALID_ENGINE) {
   867 				StringID str = STR_NULL;
   867 				StringID str = STR_NULL;
   868 
   868 
   869 				bv->rename_engine = sel_eng;
   869 				bv->rename_engine = sel_eng;
   870 				switch (bv->vehicle_type) {
   870 				switch (bv->vehicle_type) {
   871 					case VEH_Train:    str = STR_886A_RENAME_TRAIN_VEHICLE_TYPE; break;
   871 					case VEH_TRAIN:    str = STR_886A_RENAME_TRAIN_VEHICLE_TYPE; break;
   872 					case VEH_Road:     str = STR_9036_RENAME_ROAD_VEHICLE_TYPE;  break;
   872 					case VEH_ROAD:     str = STR_9036_RENAME_ROAD_VEHICLE_TYPE;  break;
   873 					case VEH_Ship:     str = STR_9838_RENAME_SHIP_TYPE;          break;
   873 					case VEH_SHIP:     str = STR_9838_RENAME_SHIP_TYPE;          break;
   874 					case VEH_Aircraft: str = STR_A039_RENAME_AIRCRAFT_TYPE;      break;
   874 					case VEH_AIRCRAFT: str = STR_A039_RENAME_AIRCRAFT_TYPE;      break;
   875 				}
   875 				}
   876 				ShowQueryString(GetCustomEngineName(sel_eng), str, 31, 160, w, CS_ALPHANUMERAL);
   876 				ShowQueryString(GetCustomEngineName(sel_eng), str, 31, 160, w, CS_ALPHANUMERAL);
   877 			}
   877 			}
   878 			break;
   878 			break;
   879 		}
   879 		}
   909 		case WE_ON_EDIT_TEXT: {
   909 		case WE_ON_EDIT_TEXT: {
   910 			if (e->we.edittext.str[0] != '\0') {
   910 			if (e->we.edittext.str[0] != '\0') {
   911 				StringID str = STR_NULL;
   911 				StringID str = STR_NULL;
   912 				_cmd_text = e->we.edittext.str;
   912 				_cmd_text = e->we.edittext.str;
   913 				switch (bv->vehicle_type) {
   913 				switch (bv->vehicle_type) {
   914 					case VEH_Train:    str = STR_886B_CAN_T_RENAME_TRAIN_VEHICLE; break;
   914 					case VEH_TRAIN:    str = STR_886B_CAN_T_RENAME_TRAIN_VEHICLE; break;
   915 					case VEH_Road:     str = STR_9037_CAN_T_RENAME_ROAD_VEHICLE;  break;
   915 					case VEH_ROAD:     str = STR_9037_CAN_T_RENAME_ROAD_VEHICLE;  break;
   916 					case VEH_Ship:     str = STR_9839_CAN_T_RENAME_SHIP_TYPE;     break;
   916 					case VEH_SHIP:     str = STR_9839_CAN_T_RENAME_SHIP_TYPE;     break;
   917 					case VEH_Aircraft: str = STR_A03A_CAN_T_RENAME_AIRCRAFT_TYPE; break;
   917 					case VEH_AIRCRAFT: str = STR_A03A_CAN_T_RENAME_AIRCRAFT_TYPE; break;
   918 				}
   918 				}
   919 				DoCommandP(0, bv->rename_engine, 0, NULL, CMD_RENAME_ENGINE | CMD_MSG(str));
   919 				DoCommandP(0, bv->rename_engine, 0, NULL, CMD_RENAME_ENGINE | CMD_MSG(str));
   920 			}
   920 			}
   921 			break;
   921 			break;
   922 		}
   922 		}
   975 
   975 
   976 	bv->sort_criteria         = _last_sort_criteria[type];
   976 	bv->sort_criteria         = _last_sort_criteria[type];
   977 	bv->descending_sort_order = _last_sort_order[type];
   977 	bv->descending_sort_order = _last_sort_order[type];
   978 
   978 
   979 	switch (type) {
   979 	switch (type) {
   980 		case VEH_Train:
   980 		case VEH_TRAIN:
   981 			WP(w,buildvehicle_d).filter.railtype = (tile == 0) ? RAILTYPE_END : GetRailType(tile);
   981 			WP(w,buildvehicle_d).filter.railtype = (tile == 0) ? RAILTYPE_END : GetRailType(tile);
   982 			ResizeWindow(w, 0, 16);
   982 			ResizeWindow(w, 0, 16);
   983 			break;
   983 			break;
   984 		case VEH_Road:
   984 		case VEH_ROAD:
   985 			ResizeWindow(w, 20, 16);
   985 			ResizeWindow(w, 20, 16);
   986 		case VEH_Ship:
   986 		case VEH_SHIP:
   987 			ResizeWindow(w, 27, 0);
   987 			ResizeWindow(w, 27, 0);
   988 			break;
   988 			break;
   989 		case VEH_Aircraft:
   989 		case VEH_AIRCRAFT:
   990 			bv->filter.flags =
   990 			bv->filter.flags =
   991 				tile == 0 ? AirportFTAClass::ALL : GetStationByTile(tile)->Airport()->flags;
   991 				tile == 0 ? AirportFTAClass::ALL : GetStationByTile(tile)->Airport()->flags;
   992 			ResizeWindow(w, 12, 0);
   992 			ResizeWindow(w, 12, 0);
   993 			break;
   993 			break;
   994 	}
   994 	}