diff -r 558715823bc3 src/hotkeys.cpp --- a/src/hotkeys.cpp Sun Feb 20 21:10:58 2011 +0000 +++ b/src/hotkeys.cpp Mon Feb 21 15:49:28 2011 +0100 @@ -252,6 +252,7 @@ struct BuildRailToolbarWindow; struct BuildRoadToolbarWindow; struct SignListWindow; +struct BuildSignalWindow; static void SaveLoadHotkeys(bool save) { @@ -276,6 +277,7 @@ SL_HOTKEYS(railtoolbar, BuildRailToolbarWindow); SL_HOTKEYS(roadtoolbar, BuildRoadToolbarWindow); SL_HOTKEYS(signlist, SignListWindow); + SL_HOTKEYS(buildsignal, BuildSignalWindow); #undef SL_HOTKEYS diff -r 558715823bc3 src/rail_gui.cpp --- a/src/rail_gui.cpp Sun Feb 20 21:10:58 2011 +0000 +++ b/src/rail_gui.cpp Mon Feb 21 15:49:28 2011 +0100 @@ -1539,6 +1539,24 @@ widget_center_x - sprite_center_x_offset + this->IsWidgetLowered(widget_index), widget_bottom_y - sprite_bottom_y_offset + this->IsWidgetLowered(widget_index)); } + + void BuildSignalHotkey_CycleSignalTypes(int i) + { + this->RaiseWidget((_cur_signal_variant == SIG_ELECTRIC ? BSW_ELECTRIC_NORM : BSW_SEMAPHORE_NORM) + _cur_signal_type); + static const uint cycle_starts[] = {SIGTYPE_NORMAL, SIGTYPE_PBS, SIGTYPE_NORMAL}; + static const uint cycle_ends[] = {SIGTYPE_LAST_NOPBS, SIGTYPE_LAST, SIGTYPE_LAST}; + const uint cycletype = _settings_client.gui.cycle_signal_types; + _cur_signal_type = (SignalType)max((uint)_cur_signal_type + 1, cycle_starts[cycletype]); + if (_cur_signal_type > (SignalType)cycle_ends[cycletype]) _cur_signal_type = (SignalType)cycle_starts[cycletype]; + + this->InvalidateData(); + } + + void BuildSignalHotkey_ToggleConvert(int i) + { + _convert_signal_button = !_convert_signal_button; + this->InvalidateData(); + } public: BuildSignalWindow(const WindowDesc *desc, Window *parent) : PickerWindowBase(parent) @@ -1626,8 +1644,22 @@ this->SetWidgetDisabledState(BSW_DRAG_SIGNALS_DENSITY_DECREASE, _settings_client.gui.drag_signals_density == 1); this->SetWidgetDisabledState(BSW_DRAG_SIGNALS_DENSITY_INCREASE, _settings_client.gui.drag_signals_density == 20); } + + virtual EventState OnKeyPress(uint16 key, uint16 keycode) + { + return CheckHotkeyMatch(buildsignal_hotkeys, keycode, this) != -1 ? ES_HANDLED : ES_NOT_HANDLED; + } + + static Hotkey buildsignal_hotkeys[]; }; +Hotkey BuildSignalWindow::buildsignal_hotkeys[] = { + Hotkey((uint16)0, "cycle_signal_types", 0, &BuildSignalWindow::BuildSignalHotkey_CycleSignalTypes), + Hotkey((uint16)0, "toggle_convert", 0, &BuildSignalWindow::BuildSignalHotkey_ToggleConvert), + HOTKEY_LIST_END(BuildSignalWindow) +}; +Hotkey *_buildsignal_hotkeys = BuildSignalWindow::buildsignal_hotkeys; + /** Nested widget definition of the build signal window */ static const NWidgetPart _nested_signal_builder_widgets[] = { NWidget(NWID_HORIZONTAL),