1
0
Fork 0

Feature: Hide block signals in GUI by default (#8688)

pull/9544/head
Tyler Trahan 2021-09-05 14:22:27 -04:00 committed by GitHub
parent f656b0ae96
commit 7469f00c5b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 127 additions and 90 deletions

View File

@ -1814,22 +1814,17 @@ STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE_HELPTEXT :Select the beha
STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE :Automatically build semaphores before: {STRING2} STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE :Automatically build semaphores before: {STRING2}
STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Set the year when electric signals will be used for tracks. Before this year, non-electric signals will be used (which have the exact same function, but different looks) STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Set the year when electric signals will be used for tracks. Before this year, non-electric signals will be used (which have the exact same function, but different looks)
STR_CONFIG_SETTING_ENABLE_SIGNAL_GUI :Enable the signal GUI: {STRING2}
STR_CONFIG_SETTING_ENABLE_SIGNAL_GUI_HELPTEXT :Display a window for choosing signal types to build, instead of only window-less signal-type rotation with Ctrl+clicking on built signals
STR_CONFIG_SETTING_DEFAULT_SIGNAL_TYPE :Signal type to build by default: {STRING2}
STR_CONFIG_SETTING_DEFAULT_SIGNAL_TYPE_HELPTEXT :Default signal type to use
###length 3
STR_CONFIG_SETTING_DEFAULT_SIGNAL_NORMAL :Block signals
STR_CONFIG_SETTING_DEFAULT_SIGNAL_PBS :Path signals
STR_CONFIG_SETTING_DEFAULT_SIGNAL_PBSOWAY :One-way path signals
STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :Cycle through signal types: {STRING2} STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :Cycle through signal types: {STRING2}
STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Select which signal types to cycle through, when Ctrl+clicking on a build signal with the signal tool STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Select which signal types to cycle through when Ctrl+clicking on a built signal with the signal tool
###length 3 ###length 2
STR_CONFIG_SETTING_CYCLE_SIGNAL_NORMAL :Block signals only
STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :Path signals only STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :Path signals only
STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :All STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :All visible
STR_CONFIG_SETTING_SIGNAL_GUI_MODE :Show signal types: {STRING2}
STR_CONFIG_SETTING_SIGNAL_GUI_MODE_HELPTEXT :Choose which signal types are shown in the signal toolbar
###length 2
STR_CONFIG_SETTING_SIGNAL_GUI_MODE_PATH :Path signals only
STR_CONFIG_SETTING_SIGNAL_GUI_MODE_ALL_CYCLE_PATH :All signals
STR_CONFIG_SETTING_TOWN_LAYOUT :Road layout for new towns: {STRING2} STR_CONFIG_SETTING_TOWN_LAYOUT :Road layout for new towns: {STRING2}
STR_CONFIG_SETTING_TOWN_LAYOUT_HELPTEXT :Layout for the road network of towns STR_CONFIG_SETTING_TOWN_LAYOUT_HELPTEXT :Layout for the road network of towns

View File

@ -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 SignalVariant _cur_signal_variant; ///< set the signal variant (for signal GUI)
static SignalType _cur_signal_type; ///< set the signal type (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 { struct RailStationGUISettings {
Axis orientation; ///< Currently selected rail station orientation Axis orientation; ///< Currently selected rail station orientation
@ -231,25 +228,31 @@ static void GenericPlaceSignals(TileIndex tile)
} else { } else {
const Window *w = FindWindowById(WC_BUILD_SIGNAL, 0); 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() */ /* various bitstuffed elements for CmdBuildSingleSignal() */
uint32 p1 = track; 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) { if (w != nullptr) {
/* signal GUI is used */ /* signal GUI is used */
SB(p1, 3, 1, _ctrl_pressed); SB(p1, 3, 1, _ctrl_pressed);
SB(p1, 4, 1, _cur_signal_variant); SB(p1, 4, 1, _cur_signal_variant);
SB(p1, 5, 3, _cur_signal_type); SB(p1, 5, 3, _cur_signal_type);
SB(p1, 8, 1, _convert_signal_button); 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 { } else {
SB(p1, 3, 1, _ctrl_pressed); SB(p1, 3, 1, _ctrl_pressed);
SB(p1, 4, 1, (_cur_year < _settings_client.gui.semaphore_build_before ? SIG_SEMAPHORE : SIG_ELECTRIC)); 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, 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 | DoCommandP(tile, p1, 0, CMD_BUILD_SIGNALS |
@ -404,7 +407,7 @@ static void HandleAutoSignalPlacement()
SB(p2, 3, 1, 0); SB(p2, 3, 1, 0);
SB(p2, 4, 1, (_cur_year < _settings_client.gui.semaphore_build_before ? SIG_SEMAPHORE : SIG_ELECTRIC)); SB(p2, 4, 1, (_cur_year < _settings_client.gui.semaphore_build_before ? SIG_SEMAPHORE : SIG_ELECTRIC));
SB(p2, 6, 1, _ctrl_pressed); 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, 24, 8, _settings_client.gui.drag_signals_density);
SB(p2, 10, 1, !_settings_client.gui.drag_signals_fixed_distance); SB(p2, 10, 1, !_settings_client.gui.drag_signals_fixed_distance);
} }
@ -576,7 +579,7 @@ struct BuildRailToolbarWindow : Window {
case WID_RAT_BUILD_SIGNALS: { case WID_RAT_BUILD_SIGNALS: {
this->last_user_action = widget; this->last_user_action = widget;
bool started = HandlePlacePushButton(this, WID_RAT_BUILD_SIGNALS, ANIMCURSOR_BUILDSIGNALS, HT_RECT); 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); ShowSignalBuilder(this);
} }
break; break;
@ -1690,10 +1693,27 @@ private:
y + this->IsWidgetLowered(widget_index)); 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: public:
BuildSignalWindow(WindowDesc *desc, Window *parent) : PickerWindowBase(desc, parent) BuildSignalWindow(WindowDesc *desc, Window *parent) : PickerWindowBase(desc, parent)
{ {
this->InitNested(TRANSPORT_RAIL); this->CreateNestedTree();
this->SetSignalUIMode();
this->FinishInitNested(TRANSPORT_RAIL);
this->OnInvalidateData(); this->OnInvalidateData();
} }
@ -1731,6 +1751,8 @@ public:
} else if (IsInsideMM(widget, WID_BS_SEMAPHORE_NORM, WID_BS_ELECTRIC_PBS_OWAY + 1)) { } 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->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); 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[] = { static const NWidgetPart _nested_signal_builder_widgets[] = {
NWidget(NWID_HORIZONTAL), NWidget(NWID_HORIZONTAL),
NWidget(WWT_CLOSEBOX, COLOUR_DARK_GREEN), 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(), EndContainer(),
NWidget(NWID_VERTICAL, NC_EQUALSIZE), NWidget(NWID_VERTICAL, NC_EQUALSIZE),
NWidget(NWID_HORIZONTAL, 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(NWID_SELECTION, INVALID_COLOUR, WID_BS_SEMAPHORE_NORM_SEL),
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_NORM), SetDataTip(STR_NULL, STR_BUILD_SIGNAL_SEMAPHORE_NORM_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), EndContainer(),
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_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), 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_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), NWidget(WWT_IMGBTN, COLOUR_DARK_GREEN, WID_BS_CONVERT), SetDataTip(SPR_IMG_SIGNAL_CONVERT, STR_BUILD_SIGNAL_CONVERT_TOOLTIP), SetFill(1, 1),
EndContainer(), EndContainer(),
NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), 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(NWID_SELECTION, INVALID_COLOUR, WID_BS_ELECTRIC_NORM_SEL),
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_NORM), SetDataTip(STR_NULL, STR_BUILD_SIGNAL_ELECTRIC_NORM_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), EndContainer(),
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_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), 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, 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_PANEL, COLOUR_DARK_GREEN), SetDataTip(STR_NULL, STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP), SetFill(1, 1),
@ -2158,7 +2196,7 @@ void InitializeRailGUI()
SetDefaultRailGui(); SetDefaultRailGui();
_convert_signal_button = false; _convert_signal_button = false;
_cur_signal_type = _default_signal_type[_settings_client.gui.default_signal_type]; _cur_signal_type = SIGTYPE_PBS_ONEWAY;
ResetSignalVariant(); ResetSignalVariant();
} }

View File

@ -19,4 +19,16 @@ void ResetSignalVariant(int32 = 0);
void InitializeRailGUI(); void InitializeRailGUI();
DropDownList GetRailTypeDropDownList(bool for_replacement = false, bool all_option = false); DropDownList GetRailTypeDropDownList(bool for_replacement = false, bool all_option = false);
/** Settings for which signals are shown by the signal GUI. */
enum SignalGUISettings : uint8 {
SIGNAL_GUI_PATH = 0, ///< Show path signals only.
SIGNAL_GUI_ALL = 1, ///< Show all signals, including block and presignals.
};
/** Settings for which signals are cycled through by control-clicking on the signal with the signal tool. */
enum SignalCycleSettings : uint8 {
SIGNAL_CYCLE_PATH = 0, ///< Cycle through path signals only.
SIGNAL_CYCLE_ALL = 1, ///< Cycle through all signals visible.
};
#endif /* RAIL_GUI_H */ #endif /* RAIL_GUI_H */

View File

@ -1622,7 +1622,6 @@ static SettingsContainer &GetSettingsTree()
SettingsPage *construction = interface->Add(new SettingsPage(STR_CONFIG_SETTING_INTERFACE_CONSTRUCTION)); SettingsPage *construction = interface->Add(new SettingsPage(STR_CONFIG_SETTING_INTERFACE_CONSTRUCTION));
{ {
construction->Add(new SettingEntry("gui.link_terraform_toolbar")); construction->Add(new SettingEntry("gui.link_terraform_toolbar"));
construction->Add(new SettingEntry("gui.enable_signal_gui"));
construction->Add(new SettingEntry("gui.persistent_buildingtools")); construction->Add(new SettingEntry("gui.persistent_buildingtools"));
construction->Add(new SettingEntry("gui.quick_goto")); construction->Add(new SettingEntry("gui.quick_goto"));
construction->Add(new SettingEntry("gui.default_rail_type")); construction->Add(new SettingEntry("gui.default_rail_type"));
@ -1667,8 +1666,8 @@ static SettingsContainer &GetSettingsTree()
SettingsPage *company = main->Add(new SettingsPage(STR_CONFIG_SETTING_COMPANY)); SettingsPage *company = main->Add(new SettingsPage(STR_CONFIG_SETTING_COMPANY));
{ {
company->Add(new SettingEntry("gui.semaphore_build_before")); company->Add(new SettingEntry("gui.semaphore_build_before"));
company->Add(new SettingEntry("gui.default_signal_type"));
company->Add(new SettingEntry("gui.cycle_signal_types")); company->Add(new SettingEntry("gui.cycle_signal_types"));
company->Add(new SettingEntry("gui.signal_gui_mode"));
company->Add(new SettingEntry("gui.drag_signals_fixed_distance")); company->Add(new SettingEntry("gui.drag_signals_fixed_distance"));
company->Add(new SettingEntry("gui.auto_remove_signals")); company->Add(new SettingEntry("gui.auto_remove_signals"));
company->Add(new SettingEntry("gui.new_nonstop")); company->Add(new SettingEntry("gui.new_nonstop"));

View File

@ -109,13 +109,6 @@ static void StationSpreadChanged(int32 p1)
InvalidateWindowData(WC_BUILD_STATION, 0); InvalidateWindowData(WC_BUILD_STATION, 0);
} }
static void CloseSignalGUI(int32 new_value)
{
if (new_value == 0) {
CloseWindowByClass(WC_BUILD_SIGNAL);
}
}
static void UpdateConsists(int32 new_value) static void UpdateConsists(int32 new_value)
{ {
for (Train *t : Train::Iterate()) { for (Train *t : Train::Iterate()) {

View File

@ -20,6 +20,7 @@
#include "linkgraph/linkgraph_type.h" #include "linkgraph/linkgraph_type.h"
#include "zoom_type.h" #include "zoom_type.h"
#include "openttd.h" #include "openttd.h"
#include "rail_gui.h"
/* Used to validate sizes of "max" value in settings. */ /* Used to validate sizes of "max" value in settings. */
const size_t MAX_SLE_UINT8 = UINT8_MAX; const size_t MAX_SLE_UINT8 = UINT8_MAX;
@ -143,7 +144,8 @@ struct GUISettings {
bool timetable_arrival_departure; ///< show arrivals and departures in vehicle timetables bool timetable_arrival_departure; ///< show arrivals and departures in vehicle timetables
bool right_mouse_wnd_close; ///< close window with right click bool right_mouse_wnd_close; ///< close window with right click
bool pause_on_newgame; ///< whether to start new games paused or not bool pause_on_newgame; ///< whether to start new games paused or not
bool enable_signal_gui; ///< show the signal GUI when the signal button is pressed SignalGUISettings signal_gui_mode; ///< select which signal types are shown in the signal GUI
SignalCycleSettings cycle_signal_types; ///< Which signal types to cycle with the build signal tool.
Year coloured_news_year; ///< when does newspaper become coloured? Year coloured_news_year; ///< when does newspaper become coloured?
bool timetable_in_ticks; ///< whether to show the timetable in ticks rather than days bool timetable_in_ticks; ///< whether to show the timetable in ticks rather than days
bool quick_goto; ///< Allow quick access to 'goto button' in vehicle orders window bool quick_goto; ///< Allow quick access to 'goto button' in vehicle orders window
@ -153,8 +155,6 @@ struct GUISettings {
Year semaphore_build_before; ///< build semaphore signals automatically before this year Year semaphore_build_before; ///< build semaphore signals automatically before this year
byte news_message_timeout; ///< how much longer than the news message "age" should we keep the message in the history byte news_message_timeout; ///< how much longer than the news message "age" should we keep the message in the history
bool show_track_reservation; ///< highlight reserved tracks. bool show_track_reservation; ///< highlight reserved tracks.
uint8 default_signal_type; ///< the signal type to build by default.
uint8 cycle_signal_types; ///< what signal types to cycle with the build signal tool.
byte station_numtracks; ///< the number of platforms to default on for rail stations byte station_numtracks; ///< the number of platforms to default on for rail stations
byte station_platlength; ///< the platform length, in tiles, for rail stations byte station_platlength; ///< the platform length, in tiles, for rail stations
bool station_dragdrop; ///< whether drag and drop is enabled for stations bool station_dragdrop; ///< whether drag and drop is enabled for stations

View File

@ -10,7 +10,6 @@
static void v_PositionMainToolbar(int32 new_value); static void v_PositionMainToolbar(int32 new_value);
static void v_PositionStatusbar(int32 new_value); static void v_PositionStatusbar(int32 new_value);
static void RedrawSmallmap(int32 new_value); static void RedrawSmallmap(int32 new_value);
static void CloseSignalGUI(int32 new_value);
static void InvalidateCompanyLiveryWindow(int32 new_value); static void InvalidateCompanyLiveryWindow(int32 new_value);
static void InvalidateNewGRFChangeWindows(int32 new_value); static void InvalidateNewGRFChangeWindows(int32 new_value);
static void ZoomMinMaxChanged(int32 new_value); static void ZoomMinMaxChanged(int32 new_value);
@ -446,14 +445,18 @@ strhelp = STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_HELPTEXT
strval = STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_FIRST strval = STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_FIRST
cat = SC_BASIC cat = SC_BASIC
[SDTC_BOOL] [SDTC_VAR]
var = gui.enable_signal_gui var = gui.signal_gui_mode
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC type = SLE_UINT8
def = true flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN
str = STR_CONFIG_SETTING_ENABLE_SIGNAL_GUI def = 0
strhelp = STR_CONFIG_SETTING_ENABLE_SIGNAL_GUI_HELPTEXT min = 0
post_cb = CloseSignalGUI max = 1
cat = SC_EXPERT str = STR_CONFIG_SETTING_SIGNAL_GUI_MODE
strhelp = STR_CONFIG_SETTING_SIGNAL_GUI_MODE_HELPTEXT
strval = STR_CONFIG_SETTING_SIGNAL_GUI_MODE_PATH
post_cb = [](auto) { CloseWindowByClass(WC_BUILD_SIGNAL); }
cat = SC_ADVANCED
[SDTC_VAR] [SDTC_VAR]
var = gui.coloured_news_year var = gui.coloured_news_year
@ -468,6 +471,19 @@ strhelp = STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT
strval = STR_JUST_INT strval = STR_JUST_INT
cat = SC_EXPERT cat = SC_EXPERT
[SDTC_VAR]
var = gui.cycle_signal_types
type = SLE_UINT8
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN
def = 0
min = 0
max = 1
interval = 1
str = STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES
strhelp = STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT
strval = STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS
cat = SC_ADVANCED
[SDTC_VAR] [SDTC_VAR]
var = gui.drag_signals_density var = gui.drag_signals_density
type = SLE_UINT8 type = SLE_UINT8
@ -597,31 +613,6 @@ strhelp = STR_CONFIG_SETTING_SHOW_TRACK_RESERVATION_HELPTEXT
post_cb = [](auto) { MarkWholeScreenDirty(); } post_cb = [](auto) { MarkWholeScreenDirty(); }
cat = SC_BASIC cat = SC_BASIC
[SDTC_VAR]
var = gui.default_signal_type
type = SLE_UINT8
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN
def = 1
min = 0
max = 2
interval = 1
str = STR_CONFIG_SETTING_DEFAULT_SIGNAL_TYPE
strhelp = STR_CONFIG_SETTING_DEFAULT_SIGNAL_TYPE_HELPTEXT
strval = STR_CONFIG_SETTING_DEFAULT_SIGNAL_NORMAL
cat = SC_BASIC
[SDTC_VAR]
var = gui.cycle_signal_types
type = SLE_UINT8
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN
def = 2
min = 0
max = 2
interval = 1
str = STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES
strhelp = STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT
strval = STR_CONFIG_SETTING_CYCLE_SIGNAL_NORMAL
[SDTC_VAR] [SDTC_VAR]
var = gui.station_numtracks var = gui.station_numtracks
type = SLE_UINT8 type = SLE_UINT8

View File

@ -78,22 +78,31 @@ enum BuildRailStationWidgets {
/** Widgets of the #BuildSignalWindow class. */ /** Widgets of the #BuildSignalWindow class. */
enum BuildSignalWidgets { enum BuildSignalWidgets {
WID_BS_SEMAPHORE_NORM, ///< Build a semaphore normal block signal WID_BS_CAPTION, ///< Caption for the Signal Selection window.
WID_BS_SEMAPHORE_ENTRY, ///< Build a semaphore entry block signal WID_BS_SEMAPHORE_NORM, ///< Build a semaphore normal block signal.
WID_BS_SEMAPHORE_EXIT, ///< Build a semaphore exit block signal WID_BS_SEMAPHORE_ENTRY, ///< Build a semaphore entry block signal.
WID_BS_SEMAPHORE_COMBO, ///< Build a semaphore combo block signal WID_BS_SEMAPHORE_EXIT, ///< Build a semaphore exit block signal.
WID_BS_SEMAPHORE_COMBO, ///< Build a semaphore combo block signal.
WID_BS_SEMAPHORE_PBS, ///< Build a semaphore path signal. WID_BS_SEMAPHORE_PBS, ///< Build a semaphore path signal.
WID_BS_SEMAPHORE_PBS_OWAY, ///< Build a semaphore one way path signal. WID_BS_SEMAPHORE_PBS_OWAY, ///< Build a semaphore one way path signal.
WID_BS_ELECTRIC_NORM, ///< Build an electric normal block signal WID_BS_ELECTRIC_NORM, ///< Build an electric normal block signal.
WID_BS_ELECTRIC_ENTRY, ///< Build an electric entry block signal WID_BS_ELECTRIC_ENTRY, ///< Build an electric entry block signal.
WID_BS_ELECTRIC_EXIT, ///< Build an electric exit block signal WID_BS_ELECTRIC_EXIT, ///< Build an electric exit block signal.
WID_BS_ELECTRIC_COMBO, ///< Build an electric combo block signal WID_BS_ELECTRIC_COMBO, ///< Build an electric combo block signal.
WID_BS_ELECTRIC_PBS, ///< Build an electric path signal. WID_BS_ELECTRIC_PBS, ///< Build an electric path signal.
WID_BS_ELECTRIC_PBS_OWAY, ///< Build an electric one way path signal. WID_BS_ELECTRIC_PBS_OWAY, ///< Build an electric one way path signal.
WID_BS_CONVERT, ///< Convert the signal. WID_BS_CONVERT, ///< Convert the signal.
WID_BS_DRAG_SIGNALS_DENSITY_LABEL, ///< The current signal density. 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_DECREASE, ///< Decrease the signal density.
WID_BS_DRAG_SIGNALS_DENSITY_INCREASE, ///< Increase the signal density. WID_BS_DRAG_SIGNALS_DENSITY_INCREASE, ///< Increase the signal density.
WID_BS_SEMAPHORE_NORM_SEL, ///< NWID_SELECTION for WID_BS_SEMAPHORE_NORM.
WID_BS_ELECTRIC_NORM_SEL, ///< NWID_SELECTION for WID_BS_ELECTRIC_NORM.
WID_BS_SEMAPHORE_ENTRY_SEL, ///< NWID_SELECTION for WID_BS_SEMAPHORE_ENTRY.
WID_BS_ELECTRIC_ENTRY_SEL, ///< NWID_SELECTION for WID_BS_ELECTRIC_ENTRY.
WID_BS_SEMAPHORE_EXIT_SEL, ///< NWID_SELECTION for WID_BS_SEMAPHORE_EXIT.
WID_BS_ELECTRIC_EXIT_SEL, ///< NWID_SELECTION for WID_BS_ELECTRIC_EXIT.
WID_BS_SEMAPHORE_COMBO_SEL, ///< NWID_SELECTION for WID_BS_SEMAPHORE_COMBO.
WID_BS_ELECTRIC_COMBO_SEL, ///< NWID_SELECTION for WID_BS_ELECTRIC_COMBO.
}; };
/** Widgets of the #BuildRailDepotWindow class. */ /** Widgets of the #BuildRailDepotWindow class. */