=== modified file 'src/rail_gui.cpp' --- src/rail_gui.cpp 2008-04-20 16:53:01 +0000 +++ src/rail_gui.cpp 2008-04-20 16:53:39 +0000 @@ -586,40 +586,32 @@ 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 -}; - -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 -}; - +/** 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 +}; + +/** + * 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. @@ -672,18 +664,18 @@ case WE_CLICK: if (e->we.click.widget >= RTW_BUILD_NS) { _remove_button_clicked = false; - _build_railroad_button_proc[e->we.click.widget - RTW_BUILD_NS](w); + _rail_build_button_data[e->we.click.widget - RTW_BUILD_NS].click_proc(w); } UpdateRemoveWidgetStatus(w, e->we.click.widget); if (_ctrl_pressed) RailToolbar_CtrlChanged(w); break; case WE_KEYPRESS: - for (uint8 i = 0; i != lengthof(_rail_keycodes); i++) { - if (e->we.keypress.keycode == _rail_keycodes[i]) { + for (uint8 i = 0; i != lengthof(_rail_build_button_data); i++) { + if (e->we.keypress.keycode == _rail_build_button_data[i].keycode) { e->we.keypress.cont = false; _remove_button_clicked = false; - _build_railroad_button_proc[i](w); + _rail_build_button_data[i].click_proc(w); UpdateRemoveWidgetStatus(w, i + RTW_BUILD_NS); if (_ctrl_pressed) RailToolbar_CtrlChanged(w); break; @@ -864,7 +856,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); UpdateRemoveWidgetStatus(w, button + RTW_BUILD_NS); } if (_patches.link_terraform_toolbar) ShowTerraformToolbar(w);