(svn r8337) -Cleanup: removed some more switch-cases in build_vehicle_gui.cpp and added arrays + VehTypeToIndex() instead
authorbjarni
Mon, 22 Jan 2007 01:35:53 +0000
changeset 5785 5205f8b7fef5
parent 5784 a3b23f0fc794
child 5786 9bbd2d7f2a30
(svn r8337) -Cleanup: removed some more switch-cases in build_vehicle_gui.cpp and added arrays + VehTypeToIndex() instead
src/build_vehicle_gui.cpp
--- a/src/build_vehicle_gui.cpp	Mon Jan 22 01:13:10 2007 +0000
+++ b/src/build_vehicle_gui.cpp	Mon Jan 22 01:35:53 2007 +0000
@@ -287,7 +287,7 @@
 	return _internal_sort_order ? -r : r;
 }
 
-static EngList_SortTypeFunction * const _train_sorter[] = {
+static EngList_SortTypeFunction * const _sorter[][9] = {{
 	&EngineNumberSorter,
 	&TrainEngineCostSorter,
 	&TrainEngineSpeedSorter,
@@ -297,9 +297,28 @@
 	&TrainEngineRunningCostSorter,
 	&TrainEnginePowerVsRunningCostSorter,
 	&EngineReliabilitySorter,
-};
+},{
+	&EngineNumberSorter,
+	&EngineIntroDateSorter,
+	&EngineNameSorter,
+	&EngineReliabilitySorter,
+},{
+	&EngineNumberSorter,
+	&EngineIntroDateSorter,
+	&EngineNameSorter,
+	&EngineReliabilitySorter,
+},{
+	&EngineNumberSorter,
+	&AircraftEngineCostSorter,
+	&AircraftEngineSpeedSorter,
+	&EngineIntroDateSorter,
+	&EngineNameSorter,
+	&AircraftEngineRunningCostSorter,
+	&EngineReliabilitySorter,
+	&AircraftEngineCargoSorter,
+}};
 
-static const StringID _train_sort_listing[] = {
+static const StringID _sort_listing[][10] = {{
 	STR_ENGINE_SORT_ENGINE_ID,
 	STR_ENGINE_SORT_COST,
 	STR_SORT_BY_MAX_SPEED,
@@ -310,35 +329,19 @@
 	STR_ENGINE_SORT_POWER_VS_RUNNING_COST,
 	STR_SORT_BY_RELIABILITY,
 	INVALID_STRING_ID
-};
-
-static EngList_SortTypeFunction * const _ship_sorter[] = {
-	&EngineNumberSorter,
-	&EngineIntroDateSorter,
-	&EngineNameSorter,
-	&EngineReliabilitySorter,
-};
-
-static const StringID _ship_sort_listing[] = {
+},{
 	STR_ENGINE_SORT_ENGINE_ID,
 	STR_ENGINE_SORT_INTRO_DATE,
 	STR_SORT_BY_DROPDOWN_NAME,
 	STR_SORT_BY_RELIABILITY,
 	INVALID_STRING_ID
-};
-
-static EngList_SortTypeFunction * const _aircraft_sorter[] = {
-	&EngineNumberSorter,
-	&AircraftEngineCostSorter,
-	&AircraftEngineSpeedSorter,
-	&EngineIntroDateSorter,
-	&EngineNameSorter,
-	&AircraftEngineRunningCostSorter,
-	&EngineReliabilitySorter,
-	&AircraftEngineCargoSorter,
-};
-
-static const StringID _aircraft_sort_listing[] = {
+},{
+	STR_ENGINE_SORT_ENGINE_ID,
+	STR_ENGINE_SORT_INTRO_DATE,
+	STR_SORT_BY_DROPDOWN_NAME,
+	STR_SORT_BY_RELIABILITY,
+	INVALID_STRING_ID
+},{
 	STR_ENGINE_SORT_ENGINE_ID,
 	STR_ENGINE_SORT_COST,
 	STR_SORT_BY_MAX_SPEED,
@@ -348,8 +351,7 @@
 	STR_SORT_BY_RELIABILITY,
 	STR_ENGINE_SORT_CARGO_CAPACITY,
 	INVALID_STRING_ID
-};
-
+}};
 
 /* Draw rail wagon specific details */
 static int DrawVehiclePurchaseInfo(int x, int y, EngineID engine_number, const RailVehicleInfo *rvi)
@@ -590,10 +592,10 @@
 
 	// and then sort engines
 	_internal_sort_order = bv->descending_sort_order;
-	EngList_SortPartial(&bv->eng_list, _train_sorter[bv->sort_criteria], 0, num_engines);
+	EngList_SortPartial(&bv->eng_list, _sorter[0][bv->sort_criteria], 0, num_engines);
 
 	// and finally sort wagons
-	EngList_SortPartial(&bv->eng_list, _train_sorter[bv->sort_criteria], num_engines, num_wagons);
+	EngList_SortPartial(&bv->eng_list, _sorter[0][bv->sort_criteria], num_engines, num_wagons);
 }
 
 /* Figure out what aircraft EngineIDs to put in the list */
@@ -661,18 +663,16 @@
 	switch (bv->vehicle_type) {
 		case VEH_Train:
 			GenerateBuildTrainList(w);
-			break;
+			return; // trains should not reach the last sorting
 		case VEH_Ship:
 			GenerateBuildShipList(w);
-			_internal_sort_order = bv->descending_sort_order;
-			EngList_Sort(&bv->eng_list, _ship_sorter[bv->sort_criteria]);
 			break;
 		case VEH_Aircraft:
 			GenerateBuildAircraftList(w);
-			_internal_sort_order = bv->descending_sort_order;
-			EngList_Sort(&bv->eng_list, _aircraft_sorter[bv->sort_criteria]);
 			break;
 	}
+	_internal_sort_order = bv->descending_sort_order;
+	EngList_Sort(&bv->eng_list, _sorter[VehTypeToIndex(bv->vehicle_type)][bv->sort_criteria]);
 }
 
 static void DrawBuildVehicleWindow(Window *w)
@@ -724,17 +724,8 @@
 			DrawVehiclePurchaseInfo(x, wi->top + 1, wi->right - wi->left - 2, selected_id);
 		}
 	}
-	{
-		StringID str = STR_NULL;
-		switch (bv->vehicle_type) {
-			case VEH_Train:    str = _train_sort_listing[bv->sort_criteria];    break;
-			case VEH_Ship:     str = _ship_sort_listing[bv->sort_criteria];     break;
-			case VEH_Aircraft: str = _aircraft_sort_listing[bv->sort_criteria]; break;
-		}
-
-		DrawString(85, 15, str, 0x10);
-		DoDrawString(bv->descending_sort_order ? DOWNARROW : UPARROW, 69, 15, 0x10);
-	}
+	DrawString(85, 15, _sort_listing[VehTypeToIndex(bv->vehicle_type)][bv->sort_criteria], 0x10);
+	DoDrawString(bv->descending_sort_order ? DOWNARROW : UPARROW, 69, 15, 0x10);
 }
 
 static void BuildVehicleClickEvent(Window *w, WindowEvent *e)
@@ -758,18 +749,8 @@
 		}
 
 		case BUILD_VEHICLE_WIDGET_SORT_TEXT: case BUILD_VEHICLE_WIDGET_SORT_DROPDOWN: // Select sorting criteria dropdown menu
-			switch (bv->vehicle_type) {
-				case VEH_Train:
-					ShowDropDownMenu(w, _train_sort_listing, bv->sort_criteria, BUILD_VEHICLE_WIDGET_SORT_DROPDOWN, 0, 0);
-					break;
-				case VEH_Ship:
-					ShowDropDownMenu(w, _ship_sort_listing, bv->sort_criteria, BUILD_VEHICLE_WIDGET_SORT_DROPDOWN, 0, 0);
-					break;
-				case VEH_Aircraft:
-					ShowDropDownMenu(w, _aircraft_sort_listing, bv->sort_criteria, BUILD_VEHICLE_WIDGET_SORT_DROPDOWN, 0, 0);
-					break;
-			}
-			return;
+			ShowDropDownMenu(w, _sort_listing[VehTypeToIndex(bv->vehicle_type)], bv->sort_criteria, BUILD_VEHICLE_WIDGET_SORT_DROPDOWN, 0, 0);
+			break;
 
 		case BUILD_VEHICLE_WIDGET_BUILD: {
 			EngineID sel_eng = bv->sel_engine;