src/depot_gui.cpp
changeset 9782 f89be25a12ae
parent 9751 9e9c726170cc
child 9826 f44c82f8f26e
equal deleted inserted replaced
9781:31e0e461d7bf 9782:f89be25a12ae
   607 				this->widget[DEPOT_WIDGET_CAPTION].data      = STR_8800_TRAIN_DEPOT;
   607 				this->widget[DEPOT_WIDGET_CAPTION].data      = STR_8800_TRAIN_DEPOT;
   608 				this->widget[DEPOT_WIDGET_STOP_ALL].tooltips = STR_MASS_STOP_DEPOT_TRAIN_TIP;
   608 				this->widget[DEPOT_WIDGET_STOP_ALL].tooltips = STR_MASS_STOP_DEPOT_TRAIN_TIP;
   609 				this->widget[DEPOT_WIDGET_START_ALL].tooltips= STR_MASS_START_DEPOT_TRAIN_TIP;
   609 				this->widget[DEPOT_WIDGET_START_ALL].tooltips= STR_MASS_START_DEPOT_TRAIN_TIP;
   610 				this->widget[DEPOT_WIDGET_SELL].tooltips     = STR_8841_DRAG_TRAIN_VEHICLE_TO_HERE;
   610 				this->widget[DEPOT_WIDGET_SELL].tooltips     = STR_8841_DRAG_TRAIN_VEHICLE_TO_HERE;
   611 				this->widget[DEPOT_WIDGET_SELL_ALL].tooltips = STR_DEPOT_SELL_ALL_BUTTON_TRAIN_TIP;
   611 				this->widget[DEPOT_WIDGET_SELL_ALL].tooltips = STR_DEPOT_SELL_ALL_BUTTON_TRAIN_TIP;
   612 				this->widget[DEPOT_WIDGET_MATRIX].tooltips   = STR_883F_TRAINS_CLICK_ON_TRAIN_FOR;
       
   613 
   612 
   614 				this->widget[DEPOT_WIDGET_BUILD].data        = STR_8815_NEW_VEHICLES;
   613 				this->widget[DEPOT_WIDGET_BUILD].data        = STR_8815_NEW_VEHICLES;
   615 				this->widget[DEPOT_WIDGET_BUILD].tooltips    = STR_8840_BUILD_NEW_TRAIN_VEHICLE;
   614 				this->widget[DEPOT_WIDGET_BUILD].tooltips    = STR_8840_BUILD_NEW_TRAIN_VEHICLE;
   616 				this->widget[DEPOT_WIDGET_CLONE].data        = STR_CLONE_TRAIN;
   615 				this->widget[DEPOT_WIDGET_CLONE].data        = STR_CLONE_TRAIN;
   617 				this->widget[DEPOT_WIDGET_CLONE].tooltips    = STR_CLONE_TRAIN_DEPOT_INFO;
   616 				this->widget[DEPOT_WIDGET_CLONE].tooltips    = STR_CLONE_TRAIN_DEPOT_INFO;
   631 				this->widget[DEPOT_WIDGET_CAPTION].data      = STR_9003_ROAD_VEHICLE_DEPOT;
   630 				this->widget[DEPOT_WIDGET_CAPTION].data      = STR_9003_ROAD_VEHICLE_DEPOT;
   632 				this->widget[DEPOT_WIDGET_STOP_ALL].tooltips = STR_MASS_STOP_DEPOT_ROADVEH_TIP;
   631 				this->widget[DEPOT_WIDGET_STOP_ALL].tooltips = STR_MASS_STOP_DEPOT_ROADVEH_TIP;
   633 				this->widget[DEPOT_WIDGET_START_ALL].tooltips= STR_MASS_START_DEPOT_ROADVEH_TIP;
   632 				this->widget[DEPOT_WIDGET_START_ALL].tooltips= STR_MASS_START_DEPOT_ROADVEH_TIP;
   634 				this->widget[DEPOT_WIDGET_SELL].tooltips     = STR_9024_DRAG_ROAD_VEHICLE_TO_HERE;
   633 				this->widget[DEPOT_WIDGET_SELL].tooltips     = STR_9024_DRAG_ROAD_VEHICLE_TO_HERE;
   635 				this->widget[DEPOT_WIDGET_SELL_ALL].tooltips = STR_DEPOT_SELL_ALL_BUTTON_ROADVEH_TIP;
   634 				this->widget[DEPOT_WIDGET_SELL_ALL].tooltips = STR_DEPOT_SELL_ALL_BUTTON_ROADVEH_TIP;
   636 				this->widget[DEPOT_WIDGET_MATRIX].tooltips   = STR_9022_VEHICLES_CLICK_ON_VEHICLE;
       
   637 
   635 
   638 				this->widget[DEPOT_WIDGET_BUILD].data        = STR_9004_NEW_VEHICLES;
   636 				this->widget[DEPOT_WIDGET_BUILD].data        = STR_9004_NEW_VEHICLES;
   639 				this->widget[DEPOT_WIDGET_BUILD].tooltips    = STR_9023_BUILD_NEW_ROAD_VEHICLE;
   637 				this->widget[DEPOT_WIDGET_BUILD].tooltips    = STR_9023_BUILD_NEW_ROAD_VEHICLE;
   640 				this->widget[DEPOT_WIDGET_CLONE].data        = STR_CLONE_ROAD_VEHICLE;
   638 				this->widget[DEPOT_WIDGET_CLONE].data        = STR_CLONE_ROAD_VEHICLE;
   641 				this->widget[DEPOT_WIDGET_CLONE].tooltips    = STR_CLONE_ROAD_VEHICLE_DEPOT_INFO;
   639 				this->widget[DEPOT_WIDGET_CLONE].tooltips    = STR_CLONE_ROAD_VEHICLE_DEPOT_INFO;
   655 				this->widget[DEPOT_WIDGET_CAPTION].data      = STR_9803_SHIP_DEPOT;
   653 				this->widget[DEPOT_WIDGET_CAPTION].data      = STR_9803_SHIP_DEPOT;
   656 				this->widget[DEPOT_WIDGET_STOP_ALL].tooltips = STR_MASS_STOP_DEPOT_SHIP_TIP;
   654 				this->widget[DEPOT_WIDGET_STOP_ALL].tooltips = STR_MASS_STOP_DEPOT_SHIP_TIP;
   657 				this->widget[DEPOT_WIDGET_START_ALL].tooltips= STR_MASS_START_DEPOT_SHIP_TIP;
   655 				this->widget[DEPOT_WIDGET_START_ALL].tooltips= STR_MASS_START_DEPOT_SHIP_TIP;
   658 				this->widget[DEPOT_WIDGET_SELL].tooltips     = STR_9821_DRAG_SHIP_TO_HERE_TO_SELL;
   656 				this->widget[DEPOT_WIDGET_SELL].tooltips     = STR_9821_DRAG_SHIP_TO_HERE_TO_SELL;
   659 				this->widget[DEPOT_WIDGET_SELL_ALL].tooltips = STR_DEPOT_SELL_ALL_BUTTON_SHIP_TIP;
   657 				this->widget[DEPOT_WIDGET_SELL_ALL].tooltips = STR_DEPOT_SELL_ALL_BUTTON_SHIP_TIP;
   660 				this->widget[DEPOT_WIDGET_MATRIX].tooltips   = STR_981F_SHIPS_CLICK_ON_SHIP_FOR;
       
   661 
   658 
   662 				this->widget[DEPOT_WIDGET_BUILD].data        = STR_9804_NEW_SHIPS;
   659 				this->widget[DEPOT_WIDGET_BUILD].data        = STR_9804_NEW_SHIPS;
   663 				this->widget[DEPOT_WIDGET_BUILD].tooltips    = STR_9820_BUILD_NEW_SHIP;
   660 				this->widget[DEPOT_WIDGET_BUILD].tooltips    = STR_9820_BUILD_NEW_SHIP;
   664 				this->widget[DEPOT_WIDGET_CLONE].data        = STR_CLONE_SHIP;
   661 				this->widget[DEPOT_WIDGET_CLONE].data        = STR_CLONE_SHIP;
   665 				this->widget[DEPOT_WIDGET_CLONE].tooltips    = STR_CLONE_SHIP_DEPOT_INFO;
   662 				this->widget[DEPOT_WIDGET_CLONE].tooltips    = STR_CLONE_SHIP_DEPOT_INFO;
   679 				this->widget[DEPOT_WIDGET_CAPTION].data      = STR_A002_AIRCRAFT_HANGAR;
   676 				this->widget[DEPOT_WIDGET_CAPTION].data      = STR_A002_AIRCRAFT_HANGAR;
   680 				this->widget[DEPOT_WIDGET_STOP_ALL].tooltips = STR_MASS_STOP_HANGAR_TIP;
   677 				this->widget[DEPOT_WIDGET_STOP_ALL].tooltips = STR_MASS_STOP_HANGAR_TIP;
   681 				this->widget[DEPOT_WIDGET_START_ALL].tooltips= STR_MASS_START_HANGAR_TIP;
   678 				this->widget[DEPOT_WIDGET_START_ALL].tooltips= STR_MASS_START_HANGAR_TIP;
   682 				this->widget[DEPOT_WIDGET_SELL].tooltips     = STR_A023_DRAG_AIRCRAFT_TO_HERE_TO;
   679 				this->widget[DEPOT_WIDGET_SELL].tooltips     = STR_A023_DRAG_AIRCRAFT_TO_HERE_TO;
   683 				this->widget[DEPOT_WIDGET_SELL_ALL].tooltips = STR_DEPOT_SELL_ALL_BUTTON_AIRCRAFT_TIP;
   680 				this->widget[DEPOT_WIDGET_SELL_ALL].tooltips = STR_DEPOT_SELL_ALL_BUTTON_AIRCRAFT_TIP;
   684 				this->widget[DEPOT_WIDGET_MATRIX].tooltips   = STR_A021_AIRCRAFT_CLICK_ON_AIRCRAFT;
       
   685 
   681 
   686 				this->widget[DEPOT_WIDGET_BUILD].data        = STR_A003_NEW_AIRCRAFT;
   682 				this->widget[DEPOT_WIDGET_BUILD].data        = STR_A003_NEW_AIRCRAFT;
   687 				this->widget[DEPOT_WIDGET_BUILD].tooltips    = STR_A022_BUILD_NEW_AIRCRAFT;
   683 				this->widget[DEPOT_WIDGET_BUILD].tooltips    = STR_A022_BUILD_NEW_AIRCRAFT;
   688 				this->widget[DEPOT_WIDGET_CLONE].data        = STR_CLONE_AIRCRAFT;
   684 				this->widget[DEPOT_WIDGET_CLONE].data        = STR_CLONE_AIRCRAFT;
   689 				this->widget[DEPOT_WIDGET_CLONE].tooltips    = STR_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW;
   685 				this->widget[DEPOT_WIDGET_CLONE].tooltips    = STR_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW;
   839 				DoCommandP(this->window_number, this->type, 0, NULL, CMD_DEPOT_MASS_AUTOREPLACE);
   835 				DoCommandP(this->window_number, this->type, 0, NULL, CMD_DEPOT_MASS_AUTOREPLACE);
   840 				break;
   836 				break;
   841 
   837 
   842 		}
   838 		}
   843 	}
   839 	}
       
   840 
       
   841 	virtual void OnRightClick(Point pt, int widget)
       
   842 	{
       
   843 		if (widget != DEPOT_WIDGET_MATRIX) return;
       
   844 
       
   845 		GetDepotVehiclePtData gdvp = { NULL, NULL };
       
   846 		const Vehicle *v = NULL;
       
   847 		DepotGUIAction mode = this->GetVehicleFromDepotWndPt(pt.x, pt.y, &v, &gdvp);
       
   848 
       
   849 		if (this->type == VEH_TRAIN) v = gdvp.wagon;
       
   850 
       
   851 		if (v != NULL && mode == MODE_DRAG_VEHICLE) {
       
   852 			AcceptedCargo capacity, loaded;
       
   853 			memset(capacity, 0, sizeof(capacity));
       
   854 			memset(loaded, 0, sizeof(loaded));
       
   855 
       
   856 			/* Display info for single (articulated) vehicle, or for whole chain starting with selected vehicle */
       
   857 			bool whole_chain = (this->type == VEH_TRAIN && _ctrl_pressed);
       
   858 
       
   859 			/* loop through vehicle chain and collect cargos */
       
   860 			uint num = 0;
       
   861 			for (const Vehicle *w = v; w != NULL; w = w->Next()) {
       
   862 				if (w->cargo_cap > 0 && w->cargo_type < NUM_CARGO) {
       
   863 					capacity[w->cargo_type] += w->cargo_cap;
       
   864 					loaded  [w->cargo_type] += w->cargo.Count();
       
   865 				}
       
   866 
       
   867 				if (w->type == VEH_TRAIN && !EngineHasArticPart(w)) {
       
   868 					num++;
       
   869 					if (!whole_chain) break;
       
   870 				}
       
   871 			}
       
   872 
       
   873 			/* Build tooltipstring */
       
   874 			static char details[1024];
       
   875 			details[0] = '\0';
       
   876 			char *pos = details;
       
   877 
       
   878 			for (CargoID cargo_type = 0; cargo_type < NUM_CARGO; cargo_type++) {
       
   879 				if (capacity[cargo_type] == 0) continue;
       
   880 
       
   881 				SetDParam(0, cargo_type);           // {CARGO} #1
       
   882 				SetDParam(1, loaded[cargo_type]);   // {CARGO} #2
       
   883 				SetDParam(2, cargo_type);           // {SHORTCARGO} #1
       
   884 				SetDParam(3, capacity[cargo_type]); // {SHORTCARGO} #2
       
   885 				pos = GetString(pos, STR_DEPOT_VEHICLE_TOOLTIP_CARGO, lastof(details));
       
   886 			}
       
   887 
       
   888 			/* Show tooltip window */
       
   889 			uint64 args[2];
       
   890 			args[0] = (whole_chain ? num : v->engine_type);
       
   891 			args[1] = (uint64)details;
       
   892 			GuiShowTooltips(whole_chain ? STR_DEPOT_VEHICLE_TOOLTIP_CHAIN : STR_DEPOT_VEHICLE_TOOLTIP, 2, args);
       
   893 		} else {
       
   894 			/* Show tooltip help */
       
   895 			StringID tooltip = INVALID_STRING_ID;
       
   896 			switch (this->type) {
       
   897 				case VEH_TRAIN:    tooltip = STR_883F_TRAINS_CLICK_ON_TRAIN_FOR; break;
       
   898 				case VEH_ROAD:     tooltip = STR_9022_VEHICLES_CLICK_ON_VEHICLE; break;
       
   899 				case VEH_SHIP:     tooltip = STR_981F_SHIPS_CLICK_ON_SHIP_FOR;   break;
       
   900 				case VEH_AIRCRAFT: tooltip = STR_A021_AIRCRAFT_CLICK_ON_AIRCRAFT;break;
       
   901 				default: NOT_REACHED();
       
   902 			}
       
   903 			GuiShowTooltips(tooltip);
       
   904 		}
       
   905 	}
       
   906 
   844 
   907 
   845 	virtual void OnPlaceObject(Point pt, TileIndex tile)
   908 	virtual void OnPlaceObject(Point pt, TileIndex tile)
   846 	{
   909 	{
   847 		const Vehicle *v = CheckMouseOverVehicle();
   910 		const Vehicle *v = CheckMouseOverVehicle();
   848 
   911