changeset 12074:26d333fd6c15 draft

(svn r16483) -Codechange: Enumerate tabs in train details window.
author frosch <frosch@openttd.org>
date Sun, 31 May 2009 14:04:19 +0000
parents 02d3a628e6db
children 8c5224ed7d4a
files src/train_gui.cpp src/vehicle_gui.cpp src/vehicle_gui.h
diffstat 3 files changed, 46 insertions(+), 17 deletions(-) [+]
line wrap: on
line diff
--- a/src/train_gui.cpp
+++ b/src/train_gui.cpp
@@ -174,13 +174,19 @@
 	}
 }
 
-int GetTrainDetailsWndVScroll(VehicleID veh_id, byte det_tab)
+/**
+ * Determines the number of lines in the train details window
+ * @param veh_id Train
+ * @param det_tab Selected details tab
+ * @return Number of line
+ */
+int GetTrainDetailsWndVScroll(VehicleID veh_id, TrainDetailsWindowTabs det_tab)
 {
 	AcceptedCargo act_cargo;
 	AcceptedCargo max_cargo;
 	int num = 0;
 
-	if (det_tab == 3) { // Total cargo tab
+	if (det_tab == TDW_TAB_TOTALS) { // Total cargo tab
 		memset(max_cargo, 0, sizeof(max_cargo));
 		memset(act_cargo, 0, sizeof(act_cargo));
 
@@ -212,11 +218,14 @@
  * @param left  The left most coordinate to draw
  * @param right The right most coordinate to draw
  * @param y     The y coordinate
+ * @param vscroll_pos Position of scrollbar
+ * @param vscroll_cap Number of lines currently displayed
+ * @param det_tab Selected details tab
  */
-void DrawTrainDetails(const Vehicle *v, int left, int right, int y, int vscroll_pos, uint16 vscroll_cap, byte det_tab)
+void DrawTrainDetails(const Vehicle *v, int left, int right, int y, int vscroll_pos, uint16 vscroll_cap, TrainDetailsWindowTabs det_tab)
 {
 	/* draw the first 3 details tabs */
-	if (det_tab != 3) {
+	if (det_tab != TDW_TAB_TOTALS) {
 		const Vehicle *u = v;
 		int x = 1;
 		for (;;) {
@@ -235,14 +244,21 @@
 				int py = y + 2;
 				switch (det_tab) {
 					default: NOT_REACHED();
-					case 0: TrainDetailsCargoTab(   v, px, right, py); break;
-					case 1:
+
+					case TDW_TAB_CARGO:
+						TrainDetailsCargoTab(v, px, right, py);
+						break;
+
+					case TDW_TAB_INFO:
 						/* Only show name and value for the 'real' part */
 						if (!IsArticulatedPart(v)) {
 							TrainDetailsInfoTab(v, px, right, py);
 						}
 						break;
-					case 2: TrainDetailsCapacityTab(v, px, right, py); break;
+
+					case TDW_TAB_CAPACITY:
+						TrainDetailsCapacityTab(v, px, right, py);
+						break;
 				}
 				y += 14;
 
--- a/src/vehicle_gui.cpp
+++ b/src/vehicle_gui.cpp
@@ -1272,6 +1272,11 @@
 	VLD_WIDGET_RESIZE,
 };
 
+assert_compile(VLD_WIDGET_DETAILS_CARGO_CARRIED    == VLD_WIDGET_DETAILS_CARGO_CARRIED + TDW_TAB_CARGO   );
+assert_compile(VLD_WIDGET_DETAILS_TRAIN_VEHICLES   == VLD_WIDGET_DETAILS_CARGO_CARRIED + TDW_TAB_INFO    );
+assert_compile(VLD_WIDGET_DETAILS_CAPACITY_OF_EACH == VLD_WIDGET_DETAILS_CARGO_CARRIED + TDW_TAB_CAPACITY);
+assert_compile(VLD_WIDGET_DETAILS_TOTAL_CARGO      == VLD_WIDGET_DETAILS_CARGO_CARRIED + TDW_TAB_TOTALS  );
+
 /** Vehicle details widgets. */
 static const Widget _vehicle_details_widgets[] = {
 	{   WWT_CLOSEBOX,   RESIZE_NONE,  COLOUR_GREY,   0,  10,   0,  13, STR_BLACK_CROSS,                    STR_TOOLTIP_CLOSE_WINDOW},                      // VLD_WIDGET_CLOSEBOX
@@ -1321,14 +1326,14 @@
 };
 
 
-extern int GetTrainDetailsWndVScroll(VehicleID veh_id, byte det_tab);
-extern void DrawTrainDetails(const Vehicle *v, int left, int right, int y, int vscroll_pos, uint16 vscroll_cap, byte det_tab);
+extern int GetTrainDetailsWndVScroll(VehicleID veh_id, TrainDetailsWindowTabs det_tab);
+extern void DrawTrainDetails(const Vehicle *v, int left, int right, int y, int vscroll_pos, uint16 vscroll_cap, TrainDetailsWindowTabs det_tab);
 extern void DrawRoadVehDetails(const Vehicle *v, int left, int right, int y);
 extern void DrawShipDetails(const Vehicle *v, int left, int right, int y);
 extern void DrawAircraftDetails(const Vehicle *v, int left, int right, int y);
 
 struct VehicleDetailsWindow : Window {
-	int tab;
+	TrainDetailsWindowTabs tab;
 
 	/** Initialize a newly created vehicle details window */
 	VehicleDetailsWindow(const WindowDesc *desc, WindowNumber window_number) : Window(desc, window_number)
@@ -1383,7 +1388,7 @@
 		this->widget[VLD_WIDGET_MIDDLE_DETAILS].data = (this->vscroll.cap << 8) + 1;
 		this->owner = v->owner;
 
-		this->tab = 0;
+		this->tab = TDW_TAB_CARGO;
 
 		this->FindWindowPlacementAndResize(desc);
 	}
@@ -1408,11 +1413,11 @@
 	 * @param left  The left most coordinate to draw
 	 * @param right The right most coordinate to draw
 	 * @param y     The y coordinate
-	 * @param vscroll_pos (train only)
-	 * @param vscroll_cap (train only)
-	 * @param det_tab (train only)
+	 * @param vscroll_pos Position of scrollbar (train only)
+	 * @param vscroll_cap Number of lines currently displayed (train only)
+	 * @param det_tab Selected details tab (train only)
 	 */
-	static void DrawVehicleDetails(const Vehicle *v, int left, int right, int y, int vscroll_pos, uint vscroll_cap, byte det_tab)
+	static void DrawVehicleDetails(const Vehicle *v, int left, int right, int y, int vscroll_pos, uint vscroll_cap, TrainDetailsWindowTabs det_tab)
 	{
 		switch (v->type) {
 			case VEH_TRAIN:    DrawTrainDetails(v, left, right, y, vscroll_pos, vscroll_cap, det_tab);  break;
@@ -1427,7 +1432,7 @@
 	virtual void OnPaint()
 	{
 		const Vehicle *v = Vehicle::Get(this->window_number);
-		byte det_tab = this->tab;
+		TrainDetailsWindowTabs det_tab = this->tab;
 
 		this->SetWidgetDisabledState(VLD_WIDGET_RENAME_VEHICLE, v->owner != _local_company);
 
@@ -1556,7 +1561,7 @@
 					widget,
 					WIDGET_LIST_END);
 
-				this->tab = widget - VLD_WIDGET_DETAILS_CARGO_CARRIED;
+				this->tab = (TrainDetailsWindowTabs)(widget - VLD_WIDGET_DETAILS_CARGO_CARRIED);
 				this->SetDirty();
 				break;
 		}
--- a/src/vehicle_gui.h
+++ b/src/vehicle_gui.h
@@ -35,6 +35,14 @@
 	VVW_WIDGET_FORCE_PROCEED,
 };
 
+/** The tabs in the train details window */
+enum TrainDetailsWindowTabs {
+	TDW_TAB_CARGO = 0, ///< Tab with cargo carried by the vehicles
+	TDW_TAB_INFO,      ///< Tab with name and value of the vehicles
+	TDW_TAB_CAPACITY,  ///< Tab with cargo capacity of the vehicles
+	TDW_TAB_TOTALS,    ///< Tab with sum of total cargo transported
+};
+
 /** Vehicle List Window type flags */
 enum {
 	VLW_STANDARD      = 0 << 8,