@ -54,9 +54,6 @@ static bool _convert_signal_button; ///< convert signal button in the s
static SignalVariant _cur_signal_variant ; ///< set the signal variant (for signal GUI)
static SignalType _cur_signal_type ; ///< set the signal type (for signal GUI)
/* Map the setting: default_signal_type to the corresponding signal type */
static const SignalType _default_signal_type [ ] = { SIGTYPE_NORMAL , SIGTYPE_PBS , SIGTYPE_PBS_ONEWAY } ;
struct RailStationGUISettings {
Axis orientation ; ///< Currently selected rail station orientation
@ -231,25 +228,31 @@ static void GenericPlaceSignals(TileIndex tile)
} else {
const Window * w = FindWindowById ( WC_BUILD_SIGNAL , 0 ) ;
/* Map the setting cycle_signal_types to the lower and upper allowed signal type. */
static const uint cycle_bounds [ ] = { SIGTYPE_NORMAL | ( SIGTYPE_LAST_NOPBS < < 3 ) , SIGTYPE_PBS | ( SIGTYPE_LAST < < 3 ) , SIGTYPE_NORMAL | ( SIGTYPE_LAST < < 3 ) } ;
/* various bitstuffed elements for CmdBuildSingleSignal() */
uint32 p1 = track ;
/* Which signals should we cycle through? */
uint8 cycle_types ;
if ( _settings_client . gui . cycle_signal_types = = SIGNAL_CYCLE_ALL & & _settings_client . gui . signal_gui_mode = = SIGNAL_GUI_ALL ) {
cycle_types = SIGTYPE_NORMAL | ( SIGTYPE_LAST < < 3 ) ;
} else {
cycle_types = SIGTYPE_PBS | ( SIGTYPE_LAST < < 3 ) ;
}
if ( w ! = nullptr ) {
/* signal GUI is used */
SB ( p1 , 3 , 1 , _ctrl_pressed ) ;
SB ( p1 , 4 , 1 , _cur_signal_variant ) ;
SB ( p1 , 5 , 3 , _cur_signal_type ) ;
SB ( p1 , 8 , 1 , _convert_signal_button ) ;
SB ( p1 , 9 , 6 , cycle_bounds [ _settings_client . gui . cycle_signal_types ] ) ;
SB ( p1 , 9 , 6 , cycle_ types) ;
} else {
SB ( p1 , 3 , 1 , _ctrl_pressed ) ;
SB ( p1 , 4 , 1 , ( _cur_year < _settings_client . gui . semaphore_build_before ? SIG_SEMAPHORE : SIG_ELECTRIC ) ) ;
SB ( p1 , 5 , 3 , _default_signal_type[ _settings_client . gui . default_signal_type ] ) ;
SB ( p1 , 5 , 3 , SIGTYPE_PBS_ONEWAY ) ;
SB ( p1 , 8 , 1 , 0 ) ;
SB ( p1 , 9 , 6 , cycle_ bounds[ _settings_client . gui . cycle_signal_ types] ) ;
SB ( p1 , 9 , 6 , cycle_ types) ;
}
DoCommandP ( tile , p1 , 0 , CMD_BUILD_SIGNALS |
@ -404,7 +407,7 @@ static void HandleAutoSignalPlacement()
SB ( p2 , 3 , 1 , 0 ) ;
SB ( p2 , 4 , 1 , ( _cur_year < _settings_client . gui . semaphore_build_before ? SIG_SEMAPHORE : SIG_ELECTRIC ) ) ;
SB ( p2 , 6 , 1 , _ctrl_pressed ) ;
SB ( p2 , 7 , 3 , _default_signal_type[ _settings_client . gui . default_signal_type ] ) ;
SB ( p2 , 7 , 3 , SIGTYPE_PBS_ONEWAY ) ;
SB ( p2 , 24 , 8 , _settings_client . gui . drag_signals_density ) ;
SB ( p2 , 10 , 1 , ! _settings_client . gui . drag_signals_fixed_distance ) ;
}
@ -576,7 +579,7 @@ struct BuildRailToolbarWindow : Window {
case WID_RAT_BUILD_SIGNALS : {
this - > last_user_action = widget ;
bool started = HandlePlacePushButton ( this , WID_RAT_BUILD_SIGNALS , ANIMCURSOR_BUILDSIGNALS , HT_RECT ) ;
if ( started && _settings_client . gui . enable_signal_gui != _ctrl_pressed ) {
if ( started != _ctrl_pressed ) {
ShowSignalBuilder ( this ) ;
}
break ;
@ -1690,10 +1693,27 @@ private:
y + this - > IsWidgetLowered ( widget_index ) ) ;
}
/** Show or hide buttons for non-path signals in the signal GUI */
void SetSignalUIMode ( )
{
bool show_non_path_signals = ( _settings_client . gui . signal_gui_mode = = SIGNAL_GUI_ALL ) ;
this - > GetWidget < NWidgetStacked > ( WID_BS_SEMAPHORE_NORM_SEL ) - > SetDisplayedPlane ( show_non_path_signals ? 0 : SZSP_NONE ) ;
this - > GetWidget < NWidgetStacked > ( WID_BS_ELECTRIC_NORM_SEL ) - > SetDisplayedPlane ( show_non_path_signals ? 0 : SZSP_NONE ) ;
this - > GetWidget < NWidgetStacked > ( WID_BS_SEMAPHORE_ENTRY_SEL ) - > SetDisplayedPlane ( show_non_path_signals ? 0 : SZSP_NONE ) ;
this - > GetWidget < NWidgetStacked > ( WID_BS_ELECTRIC_ENTRY_SEL ) - > SetDisplayedPlane ( show_non_path_signals ? 0 : SZSP_NONE ) ;
this - > GetWidget < NWidgetStacked > ( WID_BS_SEMAPHORE_EXIT_SEL ) - > SetDisplayedPlane ( show_non_path_signals ? 0 : SZSP_NONE ) ;
this - > GetWidget < NWidgetStacked > ( WID_BS_ELECTRIC_EXIT_SEL ) - > SetDisplayedPlane ( show_non_path_signals ? 0 : SZSP_NONE ) ;
this - > GetWidget < NWidgetStacked > ( WID_BS_SEMAPHORE_COMBO_SEL ) - > SetDisplayedPlane ( show_non_path_signals ? 0 : SZSP_NONE ) ;
this - > GetWidget < NWidgetStacked > ( WID_BS_ELECTRIC_COMBO_SEL ) - > SetDisplayedPlane ( show_non_path_signals ? 0 : SZSP_NONE ) ;
}
public :
BuildSignalWindow ( WindowDesc * desc , Window * parent ) : PickerWindowBase ( desc , parent )
{
this - > InitNested ( TRANSPORT_RAIL ) ;
this - > CreateNestedTree ( ) ;
this - > SetSignalUIMode ( ) ;
this - > FinishInitNested ( TRANSPORT_RAIL ) ;
this - > OnInvalidateData ( ) ;
}
@ -1731,6 +1751,8 @@ public:
} else if ( IsInsideMM ( widget , WID_BS_SEMAPHORE_NORM , WID_BS_ELECTRIC_PBS_OWAY + 1 ) ) {
size - > width = std : : max ( size - > width , this - > sig_sprite_size . width + WD_IMGBTN_LEFT + WD_IMGBTN_RIGHT ) ;
size - > height = std : : max ( size - > height , this - > sig_sprite_size . height + WD_IMGBTN_TOP + WD_IMGBTN_BOTTOM ) ;
} else if ( widget = = WID_BS_CAPTION ) {
size - > width + = WD_FRAMETEXT_LEFT + WD_FRAMETEXT_RIGHT ;
}
}
@ -1828,23 +1850,39 @@ public:
static const NWidgetPart _nested_signal_builder_widgets [ ] = {
NWidget ( NWID_HORIZONTAL ) ,
NWidget ( WWT_CLOSEBOX , COLOUR_DARK_GREEN ) ,
NWidget ( WWT_CAPTION , COLOUR_DARK_GREEN ), SetDataTip ( STR_BUILD_SIGNAL_CAPTION , STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS ) ,
NWidget ( WWT_CAPTION , COLOUR_DARK_GREEN , WID_BS_CAPTION ), 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 ( NWID_SELECTION , INVALID_COLOUR , WID_BS_SEMAPHORE_NORM_SEL ) ,
NWidget ( WWT_PANEL , COLOUR_DARK_GREEN , WID_BS_SEMAPHORE_NORM ) , SetDataTip ( STR_NULL , STR_BUILD_SIGNAL_SEMAPHORE_NORM_TOOLTIP ) , EndContainer ( ) , SetFill ( 1 , 1 ) ,
EndContainer ( ) ,
NWidget ( NWID_SELECTION , INVALID_COLOUR , WID_BS_SEMAPHORE_ENTRY_SEL ) ,
NWidget ( WWT_PANEL , COLOUR_DARK_GREEN , WID_BS_SEMAPHORE_ENTRY ) , SetDataTip ( STR_NULL , STR_BUILD_SIGNAL_SEMAPHORE_ENTRY_TOOLTIP ) , EndContainer ( ) , SetFill ( 1 , 1 ) ,
EndContainer ( ) ,
NWidget ( NWID_SELECTION , INVALID_COLOUR , WID_BS_SEMAPHORE_EXIT_SEL ) ,
NWidget ( WWT_PANEL , COLOUR_DARK_GREEN , WID_BS_SEMAPHORE_EXIT ) , SetDataTip ( STR_NULL , STR_BUILD_SIGNAL_SEMAPHORE_EXIT_TOOLTIP ) , EndContainer ( ) , SetFill ( 1 , 1 ) ,
EndContainer ( ) ,
NWidget ( NWID_SELECTION , INVALID_COLOUR , WID_BS_SEMAPHORE_COMBO_SEL ) ,
NWidget ( WWT_PANEL , COLOUR_DARK_GREEN , WID_BS_SEMAPHORE_COMBO ) , SetDataTip ( STR_NULL , STR_BUILD_SIGNAL_SEMAPHORE_COMBO_TOOLTIP ) , EndContainer ( ) , SetFill ( 1 , 1 ) ,
EndContainer ( ) ,
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 ( NWID_SELECTION , INVALID_COLOUR , WID_BS_ELECTRIC_NORM_SEL ) ,
NWidget ( WWT_PANEL , COLOUR_DARK_GREEN , WID_BS_ELECTRIC_NORM ) , SetDataTip ( STR_NULL , STR_BUILD_SIGNAL_ELECTRIC_NORM_TOOLTIP ) , EndContainer ( ) , SetFill ( 1 , 1 ) ,
EndContainer ( ) ,
NWidget ( NWID_SELECTION , INVALID_COLOUR , WID_BS_ELECTRIC_ENTRY_SEL ) ,
NWidget ( WWT_PANEL , COLOUR_DARK_GREEN , WID_BS_ELECTRIC_ENTRY ) , SetDataTip ( STR_NULL , STR_BUILD_SIGNAL_ELECTRIC_ENTRY_TOOLTIP ) , EndContainer ( ) , SetFill ( 1 , 1 ) ,
EndContainer ( ) ,
NWidget ( NWID_SELECTION , INVALID_COLOUR , WID_BS_ELECTRIC_EXIT_SEL ) ,
NWidget ( WWT_PANEL , COLOUR_DARK_GREEN , WID_BS_ELECTRIC_EXIT ) , SetDataTip ( STR_NULL , STR_BUILD_SIGNAL_ELECTRIC_EXIT_TOOLTIP ) , EndContainer ( ) , SetFill ( 1 , 1 ) ,
EndContainer ( ) ,
NWidget ( NWID_SELECTION , INVALID_COLOUR , WID_BS_ELECTRIC_COMBO_SEL ) ,
NWidget ( WWT_PANEL , COLOUR_DARK_GREEN , WID_BS_ELECTRIC_COMBO ) , SetDataTip ( STR_NULL , STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP ) , EndContainer ( ) , SetFill ( 1 , 1 ) ,
EndContainer ( ) ,
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 ) ,
@ -2158,7 +2196,7 @@ void InitializeRailGUI()
SetDefaultRailGui ( ) ;
_convert_signal_button = false ;
_cur_signal_type = _default_signal_type[ _settings_client . gui . default_signal_type ] ;
_cur_signal_type = SIGTYPE_PBS_ONEWAY ;
ResetSignalVariant ( ) ;
}