src/depot_gui.cpp
branchNewGRF_ports
changeset 6719 4cc327ad39d5
parent 6585 7da94b26498a
child 6720 35756db7e577
equal deleted inserted replaced
6718:5a8b295aa345 6719:4cc327ad39d5
   135 	switch(GetVehicle(p1)->type) {
   135 	switch(GetVehicle(p1)->type) {
   136 		case VEH_TRAIN:    CcCloneTrain(   true, tile, p1, p2); break;
   136 		case VEH_TRAIN:    CcCloneTrain(   true, tile, p1, p2); break;
   137 		case VEH_ROAD:     CcCloneRoadVeh( true, tile, p1, p2); break;
   137 		case VEH_ROAD:     CcCloneRoadVeh( true, tile, p1, p2); break;
   138 		case VEH_SHIP:     CcCloneShip(    true, tile, p1, p2); break;
   138 		case VEH_SHIP:     CcCloneShip(    true, tile, p1, p2); break;
   139 		case VEH_AIRCRAFT: CcCloneAircraft(true, tile, p1, p2); break;
   139 		case VEH_AIRCRAFT: CcCloneAircraft(true, tile, p1, p2); break;
       
   140 		default: NOT_REACHED();
   140 	}
   141 	}
   141 }
   142 }
   142 
   143 
   143 static inline void ShowVehicleViewWindow(const Vehicle *v)
   144 static inline void ShowVehicleViewWindow(const Vehicle *v)
   144 {
   145 {
   174 
   175 
   175 	int sprite_y = y + w->resize.step_height - GetVehicleListHeight(v->type);
   176 	int sprite_y = y + w->resize.step_height - GetVehicleListHeight(v->type);
   176 
   177 
   177 	switch (v->type) {
   178 	switch (v->type) {
   178 		case VEH_TRAIN:
   179 		case VEH_TRAIN:
   179 			DrawTrainImage(v, x + 21, sprite_y, w->widget[DEPOT_WIDGET_MATRIX].right - 32, w->hscroll.pos, WP(w,depot_d).sel);
   180 			DrawTrainImage(v, x + 21, sprite_y, w->hscroll.cap + 4, w->hscroll.pos, WP(w,depot_d).sel);
   180 
   181 
   181 			/* Number of wagons relative to a standard length wagon (rounded up) */
   182 			/* Number of wagons relative to a standard length wagon (rounded up) */
   182 			SetDParam(0, (v->u.rail.cached_total_length + 7) / 8);
   183 			SetDParam(0, (v->u.rail.cached_total_length + 7) / 8);
   183 			DrawStringRightAligned(w->widget[DEPOT_WIDGET_MATRIX].right - 1, y + 4, STR_TINY_BLACK, 0); // Draw the counter
   184 			DrawStringRightAligned(w->widget[DEPOT_WIDGET_MATRIX].right - 1, y + 4, STR_TINY_BLACK, 0); // Draw the counter
   184 			break;
   185 			break;
   485 {
   486 {
   486 	uint error_str;
   487 	uint error_str;
   487 
   488 
   488 	if (v == NULL) return;
   489 	if (v == NULL) return;
   489 
   490 
   490 	if (v->type == VEH_TRAIN && !IsFrontEngine(v)) {
   491 	if (v->HasFront() && !v->IsPrimaryVehicle()) {
   491 		v = GetFirstVehicleInChain(v);
   492 		v = GetFirstVehicleInChain(v);
   492 		/* Do nothing when clicking on a train in depot with no loc attached */
   493 		/* Do nothing when clicking on a train in depot with no loc attached */
   493 		if (!IsFrontEngine(v)) return;
   494 		if (v->type == VEH_TRAIN && !IsFrontEngine(v)) return;
   494 	}
   495 	}
   495 
   496 
   496 	switch (v->type) {
   497 	switch (v->type) {
   497 		case VEH_TRAIN:    error_str = CMD_MSG(STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE); break;
   498 		case VEH_TRAIN:    error_str = CMD_MSG(STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE); break;
   498 		case VEH_ROAD:     error_str = CMD_MSG(STR_9009_CAN_T_BUILD_ROAD_VEHICLE);     break;
   499 		case VEH_ROAD:     error_str = CMD_MSG(STR_9009_CAN_T_BUILD_ROAD_VEHICLE);     break;
   533 {
   534 {
   534 	switch (type) {
   535 	switch (type) {
   535 		case VEH_TRAIN:
   536 		case VEH_TRAIN:
   536 			w->widget[DEPOT_WIDGET_CAPTION].data      = STR_8800_TRAIN_DEPOT;
   537 			w->widget[DEPOT_WIDGET_CAPTION].data      = STR_8800_TRAIN_DEPOT;
   537 			w->widget[DEPOT_WIDGET_STOP_ALL].tooltips = STR_MASS_STOP_DEPOT_TRAIN_TIP;
   538 			w->widget[DEPOT_WIDGET_STOP_ALL].tooltips = STR_MASS_STOP_DEPOT_TRAIN_TIP;
   538 			w->widget[DEPOT_WIDGET_START_ALL].tooltips=	STR_MASS_START_DEPOT_TRAIN_TIP;
   539 			w->widget[DEPOT_WIDGET_START_ALL].tooltips= STR_MASS_START_DEPOT_TRAIN_TIP;
   539 			w->widget[DEPOT_WIDGET_SELL].tooltips     = STR_8841_DRAG_TRAIN_VEHICLE_TO_HERE;
   540 			w->widget[DEPOT_WIDGET_SELL].tooltips     = STR_8841_DRAG_TRAIN_VEHICLE_TO_HERE;
   540 			w->widget[DEPOT_WIDGET_SELL_ALL].tooltips =	STR_DEPOT_SELL_ALL_BUTTON_TRAIN_TIP;
   541 			w->widget[DEPOT_WIDGET_SELL_ALL].tooltips = STR_DEPOT_SELL_ALL_BUTTON_TRAIN_TIP;
   541 			w->widget[DEPOT_WIDGET_MATRIX].tooltips   = STR_883F_TRAINS_CLICK_ON_TRAIN_FOR;
   542 			w->widget[DEPOT_WIDGET_MATRIX].tooltips   = STR_883F_TRAINS_CLICK_ON_TRAIN_FOR;
   542 
   543 
   543 			w->widget[DEPOT_WIDGET_BUILD].data        = STR_8815_NEW_VEHICLES;
   544 			w->widget[DEPOT_WIDGET_BUILD].data        = STR_8815_NEW_VEHICLES;
   544 			w->widget[DEPOT_WIDGET_BUILD].tooltips    = STR_8840_BUILD_NEW_TRAIN_VEHICLE;
   545 			w->widget[DEPOT_WIDGET_BUILD].tooltips    = STR_8840_BUILD_NEW_TRAIN_VEHICLE;
   545 			w->widget[DEPOT_WIDGET_CLONE].data        = STR_CLONE_TRAIN;
   546 			w->widget[DEPOT_WIDGET_CLONE].data        = STR_CLONE_TRAIN;
   557 			break;
   558 			break;
   558 
   559 
   559 		case VEH_ROAD:
   560 		case VEH_ROAD:
   560 			w->widget[DEPOT_WIDGET_CAPTION].data      = STR_9003_ROAD_VEHICLE_DEPOT;
   561 			w->widget[DEPOT_WIDGET_CAPTION].data      = STR_9003_ROAD_VEHICLE_DEPOT;
   561 			w->widget[DEPOT_WIDGET_STOP_ALL].tooltips = STR_MASS_STOP_DEPOT_ROADVEH_TIP;
   562 			w->widget[DEPOT_WIDGET_STOP_ALL].tooltips = STR_MASS_STOP_DEPOT_ROADVEH_TIP;
   562 			w->widget[DEPOT_WIDGET_START_ALL].tooltips=	STR_MASS_START_DEPOT_ROADVEH_TIP;
   563 			w->widget[DEPOT_WIDGET_START_ALL].tooltips= STR_MASS_START_DEPOT_ROADVEH_TIP;
   563 			w->widget[DEPOT_WIDGET_SELL].tooltips     = STR_9024_DRAG_ROAD_VEHICLE_TO_HERE;
   564 			w->widget[DEPOT_WIDGET_SELL].tooltips     = STR_9024_DRAG_ROAD_VEHICLE_TO_HERE;
   564 			w->widget[DEPOT_WIDGET_SELL_ALL].tooltips =	STR_DEPOT_SELL_ALL_BUTTON_ROADVEH_TIP;
   565 			w->widget[DEPOT_WIDGET_SELL_ALL].tooltips = STR_DEPOT_SELL_ALL_BUTTON_ROADVEH_TIP;
   565 			w->widget[DEPOT_WIDGET_MATRIX].tooltips   = STR_9022_VEHICLES_CLICK_ON_VEHICLE;
   566 			w->widget[DEPOT_WIDGET_MATRIX].tooltips   = STR_9022_VEHICLES_CLICK_ON_VEHICLE;
   566 
   567 
   567 			w->widget[DEPOT_WIDGET_BUILD].data        = STR_9004_NEW_VEHICLES;
   568 			w->widget[DEPOT_WIDGET_BUILD].data        = STR_9004_NEW_VEHICLES;
   568 			w->widget[DEPOT_WIDGET_BUILD].tooltips    = STR_9023_BUILD_NEW_ROAD_VEHICLE;
   569 			w->widget[DEPOT_WIDGET_BUILD].tooltips    = STR_9023_BUILD_NEW_ROAD_VEHICLE;
   569 			w->widget[DEPOT_WIDGET_CLONE].data        = STR_CLONE_ROAD_VEHICLE;
   570 			w->widget[DEPOT_WIDGET_CLONE].data        = STR_CLONE_ROAD_VEHICLE;
   581 			break;
   582 			break;
   582 
   583 
   583 		case VEH_SHIP:
   584 		case VEH_SHIP:
   584 			w->widget[DEPOT_WIDGET_CAPTION].data      = STR_9803_SHIP_DEPOT;
   585 			w->widget[DEPOT_WIDGET_CAPTION].data      = STR_9803_SHIP_DEPOT;
   585 			w->widget[DEPOT_WIDGET_STOP_ALL].tooltips = STR_MASS_STOP_DEPOT_SHIP_TIP;
   586 			w->widget[DEPOT_WIDGET_STOP_ALL].tooltips = STR_MASS_STOP_DEPOT_SHIP_TIP;
   586 			w->widget[DEPOT_WIDGET_START_ALL].tooltips=	STR_MASS_START_DEPOT_SHIP_TIP;
   587 			w->widget[DEPOT_WIDGET_START_ALL].tooltips= STR_MASS_START_DEPOT_SHIP_TIP;
   587 			w->widget[DEPOT_WIDGET_SELL].tooltips     = STR_9821_DRAG_SHIP_TO_HERE_TO_SELL;
   588 			w->widget[DEPOT_WIDGET_SELL].tooltips     = STR_9821_DRAG_SHIP_TO_HERE_TO_SELL;
   588 			w->widget[DEPOT_WIDGET_SELL_ALL].tooltips =	STR_DEPOT_SELL_ALL_BUTTON_SHIP_TIP;
   589 			w->widget[DEPOT_WIDGET_SELL_ALL].tooltips = STR_DEPOT_SELL_ALL_BUTTON_SHIP_TIP;
   589 			w->widget[DEPOT_WIDGET_MATRIX].tooltips   = STR_981F_SHIPS_CLICK_ON_SHIP_FOR;
   590 			w->widget[DEPOT_WIDGET_MATRIX].tooltips   = STR_981F_SHIPS_CLICK_ON_SHIP_FOR;
   590 
   591 
   591 			w->widget[DEPOT_WIDGET_BUILD].data        = STR_9804_NEW_SHIPS;
   592 			w->widget[DEPOT_WIDGET_BUILD].data        = STR_9804_NEW_SHIPS;
   592 			w->widget[DEPOT_WIDGET_BUILD].tooltips    = STR_9820_BUILD_NEW_SHIP;
   593 			w->widget[DEPOT_WIDGET_BUILD].tooltips    = STR_9820_BUILD_NEW_SHIP;
   593 			w->widget[DEPOT_WIDGET_CLONE].data        = STR_CLONE_SHIP;
   594 			w->widget[DEPOT_WIDGET_CLONE].data        = STR_CLONE_SHIP;
   605 			break;
   606 			break;
   606 
   607 
   607 		case VEH_AIRCRAFT:
   608 		case VEH_AIRCRAFT:
   608 			w->widget[DEPOT_WIDGET_CAPTION].data      = STR_A002_AIRCRAFT_HANGAR;
   609 			w->widget[DEPOT_WIDGET_CAPTION].data      = STR_A002_AIRCRAFT_HANGAR;
   609 			w->widget[DEPOT_WIDGET_STOP_ALL].tooltips = STR_MASS_STOP_HANGAR_TIP;
   610 			w->widget[DEPOT_WIDGET_STOP_ALL].tooltips = STR_MASS_STOP_HANGAR_TIP;
   610 			w->widget[DEPOT_WIDGET_START_ALL].tooltips=	STR_MASS_START_HANGAR_TIP;
   611 			w->widget[DEPOT_WIDGET_START_ALL].tooltips= STR_MASS_START_HANGAR_TIP;
   611 			w->widget[DEPOT_WIDGET_SELL].tooltips     = STR_A023_DRAG_AIRCRAFT_TO_HERE_TO;
   612 			w->widget[DEPOT_WIDGET_SELL].tooltips     = STR_A023_DRAG_AIRCRAFT_TO_HERE_TO;
   612 			w->widget[DEPOT_WIDGET_SELL_ALL].tooltips =	STR_DEPOT_SELL_ALL_BUTTON_AIRCRAFT_TIP;
   613 			w->widget[DEPOT_WIDGET_SELL_ALL].tooltips = STR_DEPOT_SELL_ALL_BUTTON_AIRCRAFT_TIP;
   613 			w->widget[DEPOT_WIDGET_MATRIX].tooltips   = STR_A021_AIRCRAFT_CLICK_ON_AIRCRAFT;
   614 			w->widget[DEPOT_WIDGET_MATRIX].tooltips   = STR_A021_AIRCRAFT_CLICK_ON_AIRCRAFT;
   614 
   615 
   615 			w->widget[DEPOT_WIDGET_BUILD].data        = STR_A003_NEW_AIRCRAFT;
   616 			w->widget[DEPOT_WIDGET_BUILD].data        = STR_A003_NEW_AIRCRAFT;
   616 			w->widget[DEPOT_WIDGET_BUILD].tooltips    = STR_A022_BUILD_NEW_AIRCRAFT;
   617 			w->widget[DEPOT_WIDGET_BUILD].tooltips    = STR_A022_BUILD_NEW_AIRCRAFT;
   617 			w->widget[DEPOT_WIDGET_CLONE].data        = STR_CLONE_AIRCRAFT;
   618 			w->widget[DEPOT_WIDGET_CLONE].data        = STR_CLONE_AIRCRAFT;
   636 uint _block_sizes[4][2];
   637 uint _block_sizes[4][2];
   637 
   638 
   638 /* Array to hold the default resize capacities
   639 /* Array to hold the default resize capacities
   639 * First part is the vehicle type, while the last is 0 = x, 1 = y */
   640 * First part is the vehicle type, while the last is 0 = x, 1 = y */
   640 const uint _resize_cap[][2] = {
   641 const uint _resize_cap[][2] = {
   641 /* VEH_TRAIN */    {6, 10 * 29 + 36}, ///< flags, unitnumber and unit count uses a total of 36 pixels and we set default to 10 units
   642 /* VEH_TRAIN */    {6, 10 * 29},
   642 /* VEH_ROAD */     {5, 5},
   643 /* VEH_ROAD */     {5, 5},
   643 /* VEH_SHIP */     {3, 3},
   644 /* VEH_SHIP */     {3, 3},
   644 /* VEH_AIRCRAFT */ {3, 4},
   645 /* VEH_AIRCRAFT */ {3, 4},
   645 };
   646 };
   646 
   647 
   654 {
   655 {
   655 	_block_sizes[VEH_ROAD][0] = 56;
   656 	_block_sizes[VEH_ROAD][0] = 56;
   656 	_block_sizes[VEH_ROAD][1] = GetVehicleListHeight(VEH_ROAD);
   657 	_block_sizes[VEH_ROAD][1] = GetVehicleListHeight(VEH_ROAD);
   657 }
   658 }
   658 
   659 
   659 static void ResizeDefaultWindowSize(byte type)
   660 static void ResizeDefaultWindowSize(VehicleType type)
   660 {
   661 {
   661 	EngineID engine;
   662 	EngineID engine;
   662 	uint max_width  = 0;
   663 	uint max_width  = 0;
   663 	uint max_height = 0;
   664 	uint max_height = 0;
   664 
   665 
   694 	ResizeDefaultWindowSizeForRoadVehicles();
   695 	ResizeDefaultWindowSizeForRoadVehicles();
   695 	ResizeDefaultWindowSize(VEH_SHIP);
   696 	ResizeDefaultWindowSize(VEH_SHIP);
   696 	ResizeDefaultWindowSize(VEH_AIRCRAFT);
   697 	ResizeDefaultWindowSize(VEH_AIRCRAFT);
   697 }
   698 }
   698 
   699 
   699 static void CreateDepotListWindow(Window *w, byte type)
   700 static void CreateDepotListWindow(Window *w, VehicleType type)
   700 {
   701 {
   701 	WP(w, depot_d).type = type;
   702 	WP(w, depot_d).type = type;
   702 	_backup_orders_tile = 0;
   703 	_backup_orders_tile = 0;
   703 
   704 
   704 	assert(IsPlayerBuildableVehicleType(type)); // ensure that we make the call with a valid type
   705 	assert(IsPlayerBuildableVehicleType(type)); // ensure that we make the call with a valid type
   717 	ResizeWindow(w,
   718 	ResizeWindow(w,
   718 				 _block_sizes[type][0] * w->hscroll.cap,
   719 				 _block_sizes[type][0] * w->hscroll.cap,
   719 				 _block_sizes[type][1] * w->vscroll.cap);
   720 				 _block_sizes[type][1] * w->vscroll.cap);
   720 
   721 
   721 	if (type == VEH_TRAIN) {
   722 	if (type == VEH_TRAIN) {
   722 		/* The train depot has a horizontal scroller so we should make room for it */
   723 		/* Make space for the horizontal scrollbar vertically, and the unit
   723 		ResizeWindow(w, 0, 12);
   724 		 * number, flag, and length counter horizontally. */
       
   725 		ResizeWindow(w, 36, 12);
   724 		/* substract the newly added space from the matrix since it was meant for the scrollbar */
   726 		/* substract the newly added space from the matrix since it was meant for the scrollbar */
   725 		w->widget[DEPOT_WIDGET_MATRIX].bottom -= 12;
   727 		w->widget[DEPOT_WIDGET_MATRIX].bottom -= 12;
   726 	}
   728 	}
   727 
   729 
   728 	/* Set the minimum window size to the current window size */
   730 	/* Set the minimum window size to the current window size */
   971 
   973 
   972 /** Opens a depot window
   974 /** Opens a depot window
   973  * @param tile The tile where the depot/hangar is located
   975  * @param tile The tile where the depot/hangar is located
   974  * @param type The type of vehicles in the depot
   976  * @param type The type of vehicles in the depot
   975  */
   977  */
   976 void ShowDepotWindow(TileIndex tile, byte type)
   978 void ShowDepotWindow(TileIndex tile, VehicleType type)
   977 {
   979 {
   978 	Window *w;
   980 	Window *w;
   979 
   981 
   980 	switch (type) {
   982 	switch (type) {
   981 		default: NOT_REACHED();
   983 		default: NOT_REACHED();