(svn r13908) -Codechange: merge two tables into a single one (Alberth)

This commit is contained in:
rubidium 2008-08-01 09:17:27 +00:00
parent 69671d3aef
commit 62c94f1b12
1 changed files with 28 additions and 36 deletions

View File

@ -571,41 +571,33 @@ static void HandleAutoSignalPlacement()
typedef void OnButtonClick(Window *w); typedef void OnButtonClick(Window *w);
static OnButtonClick * const _build_railroad_button_proc[] = { /** Data associated with a push button in the build rail toolbar window */
BuildRailClick_N, struct RailBuildingGUIButtonData {
BuildRailClick_NE, uint16 keycode; ///< Keycode associated with the button
BuildRailClick_E, OnButtonClick *click_proc; ///< Procedure to call when button is clicked
BuildRailClick_NW,
BuildRailClick_AutoRail,
BuildRailClick_Demolish,
BuildRailClick_Depot,
BuildRailClick_Waypoint,
BuildRailClick_Station,
BuildRailClick_AutoSignals,
BuildRailClick_Bridge,
BuildRailClick_Tunnel,
BuildRailClick_Remove,
BuildRailClick_Convert
}; };
static const uint16 _rail_keycodes[] = { /**
'1', * GUI rail-building button data constants.
'2', * Offsets match widget order, starting at RTW_BUILD_NS
'3', */
'4', static const RailBuildingGUIButtonData _rail_build_button_data[] = {
'5', {'1', BuildRailClick_N },
'6', {'2', BuildRailClick_NE },
'7', // depot {'3', BuildRailClick_E },
'8', // waypoint {'4', BuildRailClick_NW },
'9', // station {'5', BuildRailClick_AutoRail },
'S', // signals {'6', BuildRailClick_Demolish },
'B', // bridge {'7', BuildRailClick_Depot },
'T', // tunnel {'8', BuildRailClick_Waypoint },
'R', // remove {'9', BuildRailClick_Station },
'C', // convert rail {'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. * Based on the widget clicked, update the status of the 'remove' button.
* @param w Rail toolbar window * @param w Rail toolbar window
@ -664,7 +656,7 @@ struct BuildRailToolbarWindow : Window {
{ {
if (widget >= RTW_BUILD_NS) { if (widget >= RTW_BUILD_NS) {
_remove_button_clicked = false; _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); this->UpdateRemoveWidgetStatus(widget);
if (_ctrl_pressed) RailToolbar_CtrlChanged(this); if (_ctrl_pressed) RailToolbar_CtrlChanged(this);
@ -673,10 +665,10 @@ struct BuildRailToolbarWindow : Window {
virtual EventState OnKeyPress(uint16 key, uint16 keycode) virtual EventState OnKeyPress(uint16 key, uint16 keycode)
{ {
EventState state = ES_NOT_HANDLED; EventState state = ES_NOT_HANDLED;
for (uint8 i = 0; i != lengthof(_rail_keycodes); i++) { for (uint8 i = 0; i != lengthof(_rail_build_button_data); i++) {
if (keycode == _rail_keycodes[i]) { if (keycode == _rail_build_button_data[i].keycode) {
_remove_button_clicked = false; _remove_button_clicked = false;
_build_railroad_button_proc[i](this); _rail_build_button_data[i].click_proc(this);
this->UpdateRemoveWidgetStatus(i + RTW_BUILD_NS); this->UpdateRemoveWidgetStatus(i + RTW_BUILD_NS);
if (_ctrl_pressed) RailToolbar_CtrlChanged(this); if (_ctrl_pressed) RailToolbar_CtrlChanged(this);
state = ES_HANDLED; state = ES_HANDLED;
@ -852,7 +844,7 @@ void ShowBuildRailToolbar(RailType railtype, int button)
_remove_button_clicked = false; _remove_button_clicked = false;
if (w != NULL && button >= RTW_CLOSEBOX) { 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); w->UpdateRemoveWidgetStatus(button + RTW_BUILD_NS);
} }
} }