(svn r13923) -Feature: Show [total-]cargo info in depot when [ctrl-]right-clicking on vehicle.
authorfrosch
Sat, 02 Aug 2008 12:43:45 +0000
changeset 9782 f89be25a12ae
parent 9781 31e0e461d7bf
child 9783 4e3ca2698436
(svn r13923) -Feature: Show [total-]cargo info in depot when [ctrl-]right-clicking on vehicle.
src/depot_gui.cpp
src/lang/english.txt
--- a/src/depot_gui.cpp	Sat Aug 02 11:26:25 2008 +0000
+++ b/src/depot_gui.cpp	Sat Aug 02 12:43:45 2008 +0000
@@ -609,7 +609,6 @@
 				this->widget[DEPOT_WIDGET_START_ALL].tooltips= STR_MASS_START_DEPOT_TRAIN_TIP;
 				this->widget[DEPOT_WIDGET_SELL].tooltips     = STR_8841_DRAG_TRAIN_VEHICLE_TO_HERE;
 				this->widget[DEPOT_WIDGET_SELL_ALL].tooltips = STR_DEPOT_SELL_ALL_BUTTON_TRAIN_TIP;
-				this->widget[DEPOT_WIDGET_MATRIX].tooltips   = STR_883F_TRAINS_CLICK_ON_TRAIN_FOR;
 
 				this->widget[DEPOT_WIDGET_BUILD].data        = STR_8815_NEW_VEHICLES;
 				this->widget[DEPOT_WIDGET_BUILD].tooltips    = STR_8840_BUILD_NEW_TRAIN_VEHICLE;
@@ -633,7 +632,6 @@
 				this->widget[DEPOT_WIDGET_START_ALL].tooltips= STR_MASS_START_DEPOT_ROADVEH_TIP;
 				this->widget[DEPOT_WIDGET_SELL].tooltips     = STR_9024_DRAG_ROAD_VEHICLE_TO_HERE;
 				this->widget[DEPOT_WIDGET_SELL_ALL].tooltips = STR_DEPOT_SELL_ALL_BUTTON_ROADVEH_TIP;
-				this->widget[DEPOT_WIDGET_MATRIX].tooltips   = STR_9022_VEHICLES_CLICK_ON_VEHICLE;
 
 				this->widget[DEPOT_WIDGET_BUILD].data        = STR_9004_NEW_VEHICLES;
 				this->widget[DEPOT_WIDGET_BUILD].tooltips    = STR_9023_BUILD_NEW_ROAD_VEHICLE;
@@ -657,7 +655,6 @@
 				this->widget[DEPOT_WIDGET_START_ALL].tooltips= STR_MASS_START_DEPOT_SHIP_TIP;
 				this->widget[DEPOT_WIDGET_SELL].tooltips     = STR_9821_DRAG_SHIP_TO_HERE_TO_SELL;
 				this->widget[DEPOT_WIDGET_SELL_ALL].tooltips = STR_DEPOT_SELL_ALL_BUTTON_SHIP_TIP;
-				this->widget[DEPOT_WIDGET_MATRIX].tooltips   = STR_981F_SHIPS_CLICK_ON_SHIP_FOR;
 
 				this->widget[DEPOT_WIDGET_BUILD].data        = STR_9804_NEW_SHIPS;
 				this->widget[DEPOT_WIDGET_BUILD].tooltips    = STR_9820_BUILD_NEW_SHIP;
@@ -681,7 +678,6 @@
 				this->widget[DEPOT_WIDGET_START_ALL].tooltips= STR_MASS_START_HANGAR_TIP;
 				this->widget[DEPOT_WIDGET_SELL].tooltips     = STR_A023_DRAG_AIRCRAFT_TO_HERE_TO;
 				this->widget[DEPOT_WIDGET_SELL_ALL].tooltips = STR_DEPOT_SELL_ALL_BUTTON_AIRCRAFT_TIP;
-				this->widget[DEPOT_WIDGET_MATRIX].tooltips   = STR_A021_AIRCRAFT_CLICK_ON_AIRCRAFT;
 
 				this->widget[DEPOT_WIDGET_BUILD].data        = STR_A003_NEW_AIRCRAFT;
 				this->widget[DEPOT_WIDGET_BUILD].tooltips    = STR_A022_BUILD_NEW_AIRCRAFT;
@@ -842,6 +838,73 @@
 		}
 	}
 
+	virtual void OnRightClick(Point pt, int widget)
+	{
+		if (widget != DEPOT_WIDGET_MATRIX) return;
+
+		GetDepotVehiclePtData gdvp = { NULL, NULL };
+		const Vehicle *v = NULL;
+		DepotGUIAction mode = this->GetVehicleFromDepotWndPt(pt.x, pt.y, &v, &gdvp);
+
+		if (this->type == VEH_TRAIN) v = gdvp.wagon;
+
+		if (v != NULL && mode == MODE_DRAG_VEHICLE) {
+			AcceptedCargo capacity, loaded;
+			memset(capacity, 0, sizeof(capacity));
+			memset(loaded, 0, sizeof(loaded));
+
+			/* Display info for single (articulated) vehicle, or for whole chain starting with selected vehicle */
+			bool whole_chain = (this->type == VEH_TRAIN && _ctrl_pressed);
+
+			/* loop through vehicle chain and collect cargos */
+			uint num = 0;
+			for (const Vehicle *w = v; w != NULL; w = w->Next()) {
+				if (w->cargo_cap > 0 && w->cargo_type < NUM_CARGO) {
+					capacity[w->cargo_type] += w->cargo_cap;
+					loaded  [w->cargo_type] += w->cargo.Count();
+				}
+
+				if (w->type == VEH_TRAIN && !EngineHasArticPart(w)) {
+					num++;
+					if (!whole_chain) break;
+				}
+			}
+
+			/* Build tooltipstring */
+			static char details[1024];
+			details[0] = '\0';
+			char *pos = details;
+
+			for (CargoID cargo_type = 0; cargo_type < NUM_CARGO; cargo_type++) {
+				if (capacity[cargo_type] == 0) continue;
+
+				SetDParam(0, cargo_type);           // {CARGO} #1
+				SetDParam(1, loaded[cargo_type]);   // {CARGO} #2
+				SetDParam(2, cargo_type);           // {SHORTCARGO} #1
+				SetDParam(3, capacity[cargo_type]); // {SHORTCARGO} #2
+				pos = GetString(pos, STR_DEPOT_VEHICLE_TOOLTIP_CARGO, lastof(details));
+			}
+
+			/* Show tooltip window */
+			uint64 args[2];
+			args[0] = (whole_chain ? num : v->engine_type);
+			args[1] = (uint64)details;
+			GuiShowTooltips(whole_chain ? STR_DEPOT_VEHICLE_TOOLTIP_CHAIN : STR_DEPOT_VEHICLE_TOOLTIP, 2, args);
+		} else {
+			/* Show tooltip help */
+			StringID tooltip = INVALID_STRING_ID;
+			switch (this->type) {
+				case VEH_TRAIN:    tooltip = STR_883F_TRAINS_CLICK_ON_TRAIN_FOR; break;
+				case VEH_ROAD:     tooltip = STR_9022_VEHICLES_CLICK_ON_VEHICLE; break;
+				case VEH_SHIP:     tooltip = STR_981F_SHIPS_CLICK_ON_SHIP_FOR;   break;
+				case VEH_AIRCRAFT: tooltip = STR_A021_AIRCRAFT_CLICK_ON_AIRCRAFT;break;
+				default: NOT_REACHED();
+			}
+			GuiShowTooltips(tooltip);
+		}
+	}
+
+
 	virtual void OnPlaceObject(Point pt, TileIndex tile)
 	{
 		const Vehicle *v = CheckMouseOverVehicle();
--- a/src/lang/english.txt	Sat Aug 02 11:26:25 2008 +0000
+++ b/src/lang/english.txt	Sat Aug 02 12:43:45 2008 +0000
@@ -2948,6 +2948,9 @@
 STR_902A_COST_SPEED_RUNNING_COST                                :{BLACK}Cost: {CURRENCY}{}Speed: {VELOCITY}{}Running Cost: {CURRENCY}/yr{}Capacity: {CARGO}
 STR_ARTICULATED_RV_CAPACITY                                     :{BLACK}Capacity: {LTBLUE}
 STR_BARE_CARGO                                                  :{CARGO}
+STR_DEPOT_VEHICLE_TOOLTIP                                       :{BLACK}{ENGINE}{RAW_STRING}
+STR_DEPOT_VEHICLE_TOOLTIP_CHAIN                                 :{BLACK}{NUM} vehicle{P "" s}{RAW_STRING}
+STR_DEPOT_VEHICLE_TOOLTIP_CARGO                                 :{}{CARGO} ({SHORTCARGO})
 
 STR_902C_NAME_ROAD_VEHICLE                                      :{WHITE}Name road vehicle
 STR_902D_CAN_T_NAME_ROAD_VEHICLE                                :{WHITE}Can't name road vehicle...