diff --git a/src/departures.cpp b/src/departures.cpp index 57d8563bbf..5a8fc41a56 100644 --- a/src/departures.cpp +++ b/src/departures.cpp @@ -239,7 +239,7 @@ DepartureList* MakeDepartureList(StationID station, const std::vector next_orders; /* The maximum possible date for departures to be scheduled to occur. */ - DateTicksScaled max_date = _settings_client.gui.max_departure_time * DAY_TICKS * _settings_game.economy.day_length_factor; + DateTicksScaled max_date = GetDeparturesMaxTicksAhead(); DateTicksScaled date_only_scaled = DateToScaledDateTicks(_date); DateTicksScaled date_fract_scaled = ((DateTicksScaled)_date_fract * _settings_game.economy.day_length_factor) + _tick_skip_counter; @@ -865,3 +865,12 @@ DepartureList* MakeDepartureList(StationID station, const std::vector &vehicles, DepartureType type = D_DEPARTURE, bool show_vehicles_via = false, bool show_pax = true, bool show_freight = true); +DateTicksScaled GetDeparturesMaxTicksAhead(); + #endif /* DEPARTURES_FUNC_H */ diff --git a/src/departures_gui.cpp b/src/departures_gui.cpp index a296e0731a..469e36924a 100644 --- a/src/departures_gui.cpp +++ b/src/departures_gui.cpp @@ -748,7 +748,7 @@ void DeparturesWindow::DrawDeparturesListItems(const Rect &r) const uint arrival = 0; DateTicksScaled now_date = _scaled_date_ticks; - DateTicksScaled max_date = now_date + (_settings_client.gui.max_departure_time * DAY_TICKS * _settings_game.economy.day_length_factor); + DateTicksScaled max_date = now_date + GetDeparturesMaxTicksAhead(); /* Draw each departure. */ for (uint i = 0; i < max_departures; ++i) { diff --git a/src/lang/extra/english.txt b/src/lang/extra/english.txt index 7f81f5959c..46fe8fed6c 100644 --- a/src/lang/extra/english.txt +++ b/src/lang/extra/english.txt @@ -1347,6 +1347,8 @@ STR_CONFIG_MAX_DEPARTURES :Show at most {S STR_CONFIG_MAX_DEPARTURES_HELPTEXT :The maximum number of entries to show on a departure board STR_CONFIG_MAX_DEPARTURE_TIME :Show arrivals/departures at most {STRING2} days in advance STR_CONFIG_MAX_DEPARTURE_TIME_HELPTEXT :How far in advance to show arrivals and departures, in days +STR_CONFIG_MAX_DEPARTURE_TIME_MINUTES :Show arrivals/departures at most {STRING2} minutes in advance +STR_CONFIG_MAX_DEPARTURE_TIME_MINUTES_HELPTEXT :How far in advance to show arrivals and departures, in minutes STR_CONFIG_DEPARTURE_CALC_FREQUENCY :Calculate departure board entries every {STRING2} ticks STR_CONFIG_DEPARTURE_CALC_FREQUENCY_HELPTEXT :How frequently to refresh a list of arrivals/departures, in ticks STR_CONFIG_DEPARTURE_VEHICLE_NAME :Show vehicle name in entries: {STRING2} diff --git a/src/settings.cpp b/src/settings.cpp index 19d66f35f8..0f5399cf19 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -1272,6 +1272,8 @@ static void UpdateTimeSettings(int32 new_value) SetupTimeSettings(); InvalidateVehTimetableWindow(new_value); InvalidateWindowData(WC_STATUS_BAR, 0, SBI_REINIT); + InvalidateWindowClassesData(WC_GAME_OPTIONS); + InvalidateWindowClassesData(WC_DEPARTURES_BOARD, 1); MarkWholeScreenDirty(); } diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index ef3e7d17a8..c5b71592ad 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -2011,7 +2011,8 @@ static SettingsContainer &GetSettingsTree() SettingsPage *departureboards = interface->Add(new SettingsPage(STR_CONFIG_SETTING_INTERFACE_DEPARTUREBOARDS)); { departureboards->Add(new SettingEntry("gui.max_departures")); - departureboards->Add(new SettingEntry("gui.max_departure_time")); + departureboards->Add(new ConditionallyHiddenSettingEntry("gui.max_departure_time", []() -> bool { return _settings_time.time_in_minutes; })); + departureboards->Add(new ConditionallyHiddenSettingEntry("gui.max_departure_time_minutes", []() -> bool { return !_settings_time.time_in_minutes; })); departureboards->Add(new SettingEntry("gui.departure_calc_frequency")); departureboards->Add(new SettingEntry("gui.departure_show_vehicle")); departureboards->Add(new SettingEntry("gui.departure_show_group")); diff --git a/src/settings_type.h b/src/settings_type.h index 2e2879832b..d5e872c37e 100644 --- a/src/settings_type.h +++ b/src/settings_type.h @@ -174,7 +174,8 @@ struct GUISettings : public TimeSettings { bool use_owner_colour_for_tunnelbridge;///< bridges and tunnels are rendered with their owner's colour bool timetable_arrival_departure; ///< show arrivals and departures in vehicle timetables uint8 max_departures; ///< maximum number of departures to show per station - uint16 max_departure_time; ///< maximum time in advance to show departures + uint16 max_departure_time; ///< maximum time in advance to show departures (days) + uint16 max_departure_time_minutes; ///< maximum time in advance to show departures (minutes) uint16 departure_calc_frequency; ///< how often to calculate departures (in ticks) bool departure_show_vehicle; ///< whether to show vehicle names with departures bool departure_show_group; ///< whether to show group names with departures diff --git a/src/table/settings/settings.ini b/src/table/settings/settings.ini index 8a727f5e27..8b8253590e 100644 --- a/src/table/settings/settings.ini +++ b/src/table/settings/settings.ini @@ -5013,15 +5013,28 @@ post_cb = [](auto) { InvalidateWindowClassesData(WC_DEPARTURES_BOARD, 1); } var = gui.max_departure_time type = SLE_UINT16 flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC -strval = STR_JUST_INT +strval = STR_JUST_COMMA def = 120 min = 30 -max = 240 +max = 365 interval = 1 str = STR_CONFIG_MAX_DEPARTURE_TIME strhelp = STR_CONFIG_MAX_DEPARTURE_TIME_HELPTEXT post_cb = [](auto) { InvalidateWindowClassesData(WC_DEPARTURES_BOARD, 1); } +[SDTC_VAR] +var = gui.max_departure_time_minutes +type = SLE_UINT16 +flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC +strval = STR_JUST_COMMA +def = 1440 +min = 30 +max = 5000 +interval = 30 +str = STR_CONFIG_MAX_DEPARTURE_TIME_MINUTES +strhelp = STR_CONFIG_MAX_DEPARTURE_TIME_MINUTES_HELPTEXT +post_cb = [](auto) { InvalidateWindowClassesData(WC_DEPARTURES_BOARD, 1); } + [SDTC_VAR] var = gui.departure_calc_frequency type = SLE_UINT16