# HG changeset patch # Parent 76d9790527b5b981ec82b34cdf15864f1475dedc diff -r 76d9790527b5 src/rail_gui.cpp --- a/src/rail_gui.cpp Thu Sep 05 14:17:32 2013 +0200 +++ b/src/rail_gui.cpp Fri Sep 06 19:26:20 2013 +0200 @@ -1525,30 +1525,51 @@ virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) { - if (widget == WID_BS_DRAG_SIGNALS_DENSITY_LABEL) { - /* Two digits for signals density. */ - size->width = max(size->width, 2 * GetDigitWidth() + padding.width + WD_FRAMERECT_LEFT + WD_FRAMERECT_RIGHT); - } else if (IsInsideMM(widget, WID_BS_SEMAPHORE_NORM, WID_BS_ELECTRIC_PBS_OWAY + 1)) { - size->width = max(size->width, this->sig_sprite_size.width + padding.width + WD_IMGBTN_LEFT + WD_IMGBTN_RIGHT); - size->height = max(size->height, this->sig_sprite_size.height + padding.height + WD_IMGBTN_TOP + WD_IMGBTN_BOTTOM); + switch (widget) { + case WID_BS_DRAG_SIGNALS_DENSITY_LABEL: + /* Two digits for signals density. */ + size->width = max(size->width, 2 * GetDigitWidth() + padding.width + WD_FRAMERECT_LEFT + WD_FRAMERECT_RIGHT); + break; + + case WID_BS_SEMAPHORE: + case WID_BS_ELECTRIC: + case WID_BS_SEMAPHORE_NORM: case WID_BS_SEMAPHORE_ENTRY: case WID_BS_SEMAPHORE_EXIT: case WID_BS_SEMAPHORE_COMBO: case WID_BS_SEMAPHORE_PBS: case WID_BS_SEMAPHORE_PBS_OWAY: + case WID_BS_ELECTRIC_NORM: case WID_BS_ELECTRIC_ENTRY: case WID_BS_ELECTRIC_EXIT: case WID_BS_ELECTRIC_COMBO: case WID_BS_ELECTRIC_PBS: case WID_BS_ELECTRIC_PBS_OWAY: + size->width = max(size->width, this->sig_sprite_size.width + padding.width + WD_IMGBTN_LEFT + WD_IMGBTN_RIGHT); + size->height = max(size->height, this->sig_sprite_size.height + padding.height + WD_IMGBTN_TOP + WD_IMGBTN_BOTTOM); + break; } } virtual void DrawWidget(const Rect &r, int widget) const { - if (IsInsideMM(widget, WID_BS_SEMAPHORE_NORM, WID_BS_ELECTRIC_PBS_OWAY + 1)) { - /* Extract signal from widget number. */ - int type = (widget - WID_BS_SEMAPHORE_NORM) % SIGTYPE_END; - int var = SIG_SEMAPHORE - (widget - WID_BS_SEMAPHORE_NORM) / SIGTYPE_END; // SignalVariant order is reversed compared to the widgets. - SpriteID sprite = GetRailTypeInfo(_cur_railtype)->gui_sprites.signals[type][var][this->IsWidgetLowered(widget)]; - - this->DrawSignalSprite(widget, sprite); + /* Extract signal from widget number. */ + int type, var; + if (widget == WID_BS_SEMAPHORE) { + type = _cur_signal_type; + var = SIG_SEMAPHORE; + } else if (widget == WID_BS_ELECTRIC) { + type = _cur_signal_type; + var = SIG_ELECTRIC; + } else if (IsInsideMM(widget, WID_BS_SEMAPHORE_NORM, WID_BS_ELECTRIC_PBS_OWAY + 1)) { + type = (widget - WID_BS_SEMAPHORE_NORM) % SIGTYPE_END; + var = SIG_SEMAPHORE - (widget - WID_BS_SEMAPHORE_NORM) / SIGTYPE_END; // SignalVariant order is reversed compared to the widgets. + } else { + return; } + SpriteID sprite = GetRailTypeInfo(_cur_railtype)->gui_sprites.signals[type][var][this->IsWidgetLowered(widget)]; + this->DrawSignalSprite(widget, sprite); } virtual void OnClick(Point pt, int widget, int click_count) { switch (widget) { + case WID_BS_SEMAPHORE: + case WID_BS_ELECTRIC: + this->RaiseWidget((_cur_signal_variant == SIG_ELECTRIC ? WID_BS_ELECTRIC_NORM : WID_BS_SEMAPHORE_NORM) + _cur_signal_type); + _cur_signal_variant = (widget == WID_BS_SEMAPHORE) ? SIG_SEMAPHORE : SIG_ELECTRIC; + break; + case WID_BS_SEMAPHORE_NORM: case WID_BS_SEMAPHORE_ENTRY: case WID_BS_SEMAPHORE_EXIT: @@ -1606,6 +1627,10 @@ virtual void OnInvalidateData(int data = 0, bool gui_scope = true) { if (!gui_scope) return; + this->SetWidgetLoweredState(WID_BS_SEMAPHORE, _cur_signal_variant == SIG_SEMAPHORE); + this->SetWidgetLoweredState(WID_BS_ELECTRIC, _cur_signal_variant == SIG_ELECTRIC); + this->GetWidget(WID_BS_SIGNALS_PANEL)->SetDisplayedPlane(_cur_signal_variant == SIG_SEMAPHORE ? 0 : 1); + this->LowerWidget((_cur_signal_variant == SIG_ELECTRIC ? WID_BS_ELECTRIC_NORM : WID_BS_SEMAPHORE_NORM) + _cur_signal_type); this->SetWidgetLoweredState(WID_BS_CONVERT, _convert_signal_button); @@ -1621,33 +1646,55 @@ NWidget(WWT_CLOSEBOX, COLOUR_DARK_GREEN), NWidget(WWT_CAPTION, COLOUR_DARK_GREEN), SetDataTip(STR_BUILD_SIGNAL_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), EndContainer(), - NWidget(NWID_VERTICAL, NC_EQUALSIZE), - NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), - NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BS_SEMAPHORE_NORM), SetDataTip(STR_NULL, STR_BUILD_SIGNAL_SEMAPHORE_NORM_TOOLTIP), EndContainer(), SetFill(1, 1), - NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BS_SEMAPHORE_ENTRY), SetDataTip(STR_NULL, STR_BUILD_SIGNAL_SEMAPHORE_ENTRY_TOOLTIP), EndContainer(), SetFill(1, 1), - NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BS_SEMAPHORE_EXIT), SetDataTip(STR_NULL, STR_BUILD_SIGNAL_SEMAPHORE_EXIT_TOOLTIP), EndContainer(), SetFill(1, 1), - NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BS_SEMAPHORE_COMBO), SetDataTip(STR_NULL, STR_BUILD_SIGNAL_SEMAPHORE_COMBO_TOOLTIP), EndContainer(), SetFill(1, 1), - NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BS_SEMAPHORE_PBS), SetDataTip(STR_NULL, STR_BUILD_SIGNAL_SEMAPHORE_PBS_TOOLTIP), EndContainer(), SetFill(1, 1), - NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BS_SEMAPHORE_PBS_OWAY), SetDataTip(STR_NULL, STR_BUILD_SIGNAL_SEMAPHORE_PBS_OWAY_TOOLTIP), EndContainer(), SetFill(1, 1), - NWidget(WWT_IMGBTN, COLOUR_DARK_GREEN, WID_BS_CONVERT), SetDataTip(SPR_IMG_SIGNAL_CONVERT, STR_BUILD_SIGNAL_CONVERT_TOOLTIP), SetFill(1, 1), - EndContainer(), - NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), - NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BS_ELECTRIC_NORM), SetDataTip(STR_NULL, STR_BUILD_SIGNAL_ELECTRIC_NORM_TOOLTIP), EndContainer(), SetFill(1, 1), - NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BS_ELECTRIC_ENTRY), SetDataTip(STR_NULL, STR_BUILD_SIGNAL_ELECTRIC_ENTRY_TOOLTIP), EndContainer(), SetFill(1, 1), - NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BS_ELECTRIC_EXIT), SetDataTip(STR_NULL, STR_BUILD_SIGNAL_ELECTRIC_EXIT_TOOLTIP), EndContainer(), SetFill(1, 1), - NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BS_ELECTRIC_COMBO), SetDataTip(STR_NULL, STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP), EndContainer(), SetFill(1, 1), - NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BS_ELECTRIC_PBS), SetDataTip(STR_NULL, STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP), EndContainer(), SetFill(1, 1), - NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BS_ELECTRIC_PBS_OWAY), SetDataTip(STR_NULL, STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP), EndContainer(), SetFill(1, 1), - NWidget(WWT_PANEL, COLOUR_DARK_GREEN), SetDataTip(STR_NULL, STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP), SetFill(1, 1), - NWidget(WWT_LABEL, COLOUR_DARK_GREEN, WID_BS_DRAG_SIGNALS_DENSITY_LABEL), SetDataTip(STR_ORANGE_INT, STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP), SetFill(1, 1), - NWidget(NWID_HORIZONTAL), SetPIP(2, 0, 2), + NWidget(WWT_PANEL, COLOUR_DARK_GREEN), SetPIP(6, 0, 6), + NWidget(NWID_HORIZONTAL), SetPIP(10, 0, 10), + /* SIGNAL VARIANT */ + NWidget(NWID_VERTICAL), + NWidget(NWID_SPACER), SetFill(0, 1), + NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), + NWidget(WWT_PANEL, COLOUR_GREY, WID_BS_SEMAPHORE), SetMinimalSize(20, 0), SetFill(1, 0), SetDataTip(STR_NULL, STR_NULL), EndContainer(), + NWidget(WWT_PANEL, COLOUR_GREY, WID_BS_ELECTRIC), SetMinimalSize(20, 0), SetFill(1, 0), SetDataTip(STR_NULL, STR_NULL), EndContainer(), + EndContainer(), + NWidget(NWID_SPACER), SetFill(0, 1), + EndContainer(), + NWidget(NWID_SPACER), SetFill(1, 0), SetMinimalSize(5, 0), + /* SIGNAL DENSITY */ + NWidget(NWID_VERTICAL), + NWidget(NWID_SPACER), SetFill(0, 1), + NWidget(WWT_LABEL, COLOUR_DARK_GREEN, WID_BS_DRAG_SIGNALS_DENSITY_LABEL), SetDataTip(STR_ORANGE_INT, STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP), + NWidget(NWID_HORIZONTAL), NWidget(NWID_SPACER), SetFill(1, 0), NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_BS_DRAG_SIGNALS_DENSITY_DECREASE), SetMinimalSize(9, 12), SetDataTip(AWV_DECREASE, STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP), NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_BS_DRAG_SIGNALS_DENSITY_INCREASE), SetMinimalSize(9, 12), SetDataTip(AWV_INCREASE, STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP), NWidget(NWID_SPACER), SetFill(1, 0), EndContainer(), - NWidget(NWID_SPACER), SetMinimalSize(0, 2), SetFill(1, 0), + NWidget(NWID_SPACER), SetFill(0, 1), EndContainer(), + NWidget(NWID_SPACER), SetFill(1, 0), SetMinimalSize(5, 0), + /* CONVERT SIGNALS */ + NWidget(NWID_VERTICAL), + NWidget(NWID_SPACER), SetFill(0, 1), + NWidget(WWT_IMGBTN, COLOUR_GREY, WID_BS_CONVERT), SetDataTip(SPR_IMG_SIGNAL_CONVERT, STR_BUILD_SIGNAL_CONVERT_TOOLTIP), + NWidget(NWID_SPACER), SetFill(0, 1), + EndContainer(), + EndContainer(), + EndContainer(), + NWidget(NWID_SELECTION, INVALID_COLOUR, WID_BS_SIGNALS_PANEL), + NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), + NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BS_SEMAPHORE_NORM), SetMinimalSize(24, 0), SetDataTip(STR_NULL, STR_BUILD_SIGNAL_SEMAPHORE_NORM_TOOLTIP), EndContainer(), SetFill(1, 1), + NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BS_SEMAPHORE_ENTRY), SetMinimalSize(24, 0), SetDataTip(STR_NULL, STR_BUILD_SIGNAL_SEMAPHORE_ENTRY_TOOLTIP), EndContainer(), SetFill(1, 1), + NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BS_SEMAPHORE_EXIT), SetMinimalSize(24, 0), SetDataTip(STR_NULL, STR_BUILD_SIGNAL_SEMAPHORE_EXIT_TOOLTIP), EndContainer(), SetFill(1, 1), + NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BS_SEMAPHORE_COMBO), SetMinimalSize(24, 0), SetDataTip(STR_NULL, STR_BUILD_SIGNAL_SEMAPHORE_COMBO_TOOLTIP), EndContainer(), SetFill(1, 1), + NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BS_SEMAPHORE_PBS), SetMinimalSize(24, 0), SetDataTip(STR_NULL, STR_BUILD_SIGNAL_SEMAPHORE_PBS_TOOLTIP), EndContainer(), SetFill(1, 1), + NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BS_SEMAPHORE_PBS_OWAY), SetMinimalSize(24, 0), SetDataTip(STR_NULL, STR_BUILD_SIGNAL_SEMAPHORE_PBS_OWAY_TOOLTIP), EndContainer(), SetFill(1, 1), + EndContainer(), + NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), + NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BS_ELECTRIC_NORM), SetMinimalSize(24, 0), SetDataTip(STR_NULL, STR_BUILD_SIGNAL_ELECTRIC_NORM_TOOLTIP), EndContainer(), SetFill(1, 1), + NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BS_ELECTRIC_ENTRY), SetMinimalSize(24, 0), SetDataTip(STR_NULL, STR_BUILD_SIGNAL_ELECTRIC_ENTRY_TOOLTIP), EndContainer(), SetFill(1, 1), + NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BS_ELECTRIC_EXIT), SetMinimalSize(24, 0), SetDataTip(STR_NULL, STR_BUILD_SIGNAL_ELECTRIC_EXIT_TOOLTIP), EndContainer(), SetFill(1, 1), + NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BS_ELECTRIC_COMBO), SetMinimalSize(24, 0), SetDataTip(STR_NULL, STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP), EndContainer(), SetFill(1, 1), + NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BS_ELECTRIC_PBS), SetMinimalSize(24, 0), SetDataTip(STR_NULL, STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP), EndContainer(), SetFill(1, 1), + NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_BS_ELECTRIC_PBS_OWAY), SetMinimalSize(24, 0), SetDataTip(STR_NULL, STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP), EndContainer(), SetFill(1, 1), EndContainer(), EndContainer(), }; diff -r 76d9790527b5 src/widgets/rail_widget.h --- a/src/widgets/rail_widget.h Thu Sep 05 14:17:32 2013 +0200 +++ b/src/widgets/rail_widget.h Fri Sep 06 19:26:20 2013 +0200 @@ -78,6 +78,13 @@ /** Widgets of the #BuildSignalWindow class. */ enum BuildSignalWidgets { + WID_BS_SEMAPHORE, ///< Chose "semaphore" signal variant + WID_BS_ELECTRIC, ///< Chose "electric" signal variant + WID_BS_CONVERT, ///< Convert the signal. + WID_BS_DRAG_SIGNALS_DENSITY_LABEL, ///< The current signal density. + WID_BS_DRAG_SIGNALS_DENSITY_DECREASE, ///< Decrease the signal density. + WID_BS_DRAG_SIGNALS_DENSITY_INCREASE, ///< Increase the signal density. + WID_BS_SIGNALS_PANEL, ///< Panel with all signals WID_BS_SEMAPHORE_NORM, ///< Build a semaphore normal block signal WID_BS_SEMAPHORE_ENTRY, ///< Build a semaphore entry block signal WID_BS_SEMAPHORE_EXIT, ///< Build a semaphore exit block signal @@ -90,10 +97,6 @@ WID_BS_ELECTRIC_COMBO, ///< Build an electric combo block signal WID_BS_ELECTRIC_PBS, ///< Build an electric path signal. WID_BS_ELECTRIC_PBS_OWAY, ///< Build an electric one way path signal. - WID_BS_CONVERT, ///< Convert the signal. - WID_BS_DRAG_SIGNALS_DENSITY_LABEL, ///< The current signal density. - WID_BS_DRAG_SIGNALS_DENSITY_DECREASE, ///< Decrease the signal density. - WID_BS_DRAG_SIGNALS_DENSITY_INCREASE, ///< Increase the signal density. }; /** Widgets of the #BuildRailDepotWindow class. */