changeset 9771:2dd0e71c4356 draft

(svn r13908) -Codechange: merge two tables into a single one (Alberth)
author rubidium <rubidium@openttd.org>
date Fri, 01 Aug 2008 09:17:27 +0000
parents 9f72f4a2aee0
children 9d8bf03ff7fa
files src/rail_gui.cpp
diffstat 1 files changed, 28 insertions(+), 36 deletions(-) [+]
line wrap: on
line diff
--- a/src/rail_gui.cpp
+++ b/src/rail_gui.cpp
@@ -571,41 +571,33 @@
 
 typedef void OnButtonClick(Window *w);
 
-static OnButtonClick * const _build_railroad_button_proc[] = {
-	BuildRailClick_N,
-	BuildRailClick_NE,
-	BuildRailClick_E,
-	BuildRailClick_NW,
-	BuildRailClick_AutoRail,
-	BuildRailClick_Demolish,
-	BuildRailClick_Depot,
-	BuildRailClick_Waypoint,
-	BuildRailClick_Station,
-	BuildRailClick_AutoSignals,
-	BuildRailClick_Bridge,
-	BuildRailClick_Tunnel,
-	BuildRailClick_Remove,
-	BuildRailClick_Convert
+/** Data associated with a push button in the build rail toolbar window */
+struct RailBuildingGUIButtonData {
+	uint16 keycode;            ///< Keycode associated with the button
+	OnButtonClick *click_proc; ///< Procedure to call when button is clicked
 };
 
-static const uint16 _rail_keycodes[] = {
-	'1',
-	'2',
-	'3',
-	'4',
-	'5',
-	'6',
-	'7', // depot
-	'8', // waypoint
-	'9', // station
-	'S', // signals
-	'B', // bridge
-	'T', // tunnel
-	'R', // remove
-	'C', // convert rail
+/**
+ * GUI rail-building button data constants.
+ * Offsets match widget order, starting at RTW_BUILD_NS
+ */
+static const RailBuildingGUIButtonData _rail_build_button_data[] = {
+	{'1', BuildRailClick_N          },
+	{'2', BuildRailClick_NE         },
+	{'3', BuildRailClick_E          },
+	{'4', BuildRailClick_NW         },
+	{'5', BuildRailClick_AutoRail   },
+	{'6', BuildRailClick_Demolish   },
+	{'7', BuildRailClick_Depot      },
+	{'8', BuildRailClick_Waypoint   },
+	{'9', BuildRailClick_Station    },
+	{'S', BuildRailClick_AutoSignals},
+	{'B', BuildRailClick_Bridge     },
+	{'T', BuildRailClick_Tunnel     },
+	{'R', BuildRailClick_Remove     },
+	{'C', BuildRailClick_Convert    }
 };
 
-
 /**
  * Based on the widget clicked, update the status of the 'remove' button.
  * @param w              Rail toolbar window
@@ -664,7 +656,7 @@
 	{
 		if (widget >= RTW_BUILD_NS) {
 			_remove_button_clicked = false;
-			_build_railroad_button_proc[widget - RTW_BUILD_NS](this);
+			_rail_build_button_data[widget - RTW_BUILD_NS].click_proc(this);
 		}
 		this->UpdateRemoveWidgetStatus(widget);
 		if (_ctrl_pressed) RailToolbar_CtrlChanged(this);
@@ -673,10 +665,10 @@
 	virtual EventState OnKeyPress(uint16 key, uint16 keycode)
 	{
 		EventState state = ES_NOT_HANDLED;
-		for (uint8 i = 0; i != lengthof(_rail_keycodes); i++) {
-			if (keycode == _rail_keycodes[i]) {
+		for (uint8 i = 0; i != lengthof(_rail_build_button_data); i++) {
+			if (keycode == _rail_build_button_data[i].keycode) {
 				_remove_button_clicked = false;
-				_build_railroad_button_proc[i](this);
+				_rail_build_button_data[i].click_proc(this);
 				this->UpdateRemoveWidgetStatus(i + RTW_BUILD_NS);
 				if (_ctrl_pressed) RailToolbar_CtrlChanged(this);
 				state = ES_HANDLED;
@@ -852,7 +844,7 @@
 
 	_remove_button_clicked = false;
 	if (w != NULL && button >= RTW_CLOSEBOX) {
-		_build_railroad_button_proc[button](w);
+		_rail_build_button_data[button].click_proc(w);
 		w->UpdateRemoveWidgetStatus(button + RTW_BUILD_NS);
 	}
 }