Add settings filter to only show non-vanilla settings

pull/602/head
Jonathan G Rennison 8 months ago
parent 0620026d56
commit cd091e04f5

@ -2192,6 +2192,8 @@ STR_CONFIG_SETTING_STATION_RATING_TOOLTIP_MODE_DETAILED :Detailed
STR_CONFIG_SETTING_CITY_IN_LABEL :Show city in town name label: {STRING2}
STR_CONFIG_SETTING_CITY_IN_LABEL_HELPTEXT :Display if a town is also a city in their label on the map
STR_CONFIG_SETTING_RESTRICT_PATCH :Non-standard settings which are not in vanilla OpenTTD
###length 4
STR_VIEWPORT_TOWN_COLOUR :{1:COLOUR}{0:TOWN}
STR_VIEWPORT_TOWN_COLOUR_POP :{WHITE}{TOWN} {COLOUR}({COMMA})

@ -1021,6 +1021,7 @@ enum RestrictionMode {
RM_ALL, ///< List all settings regardless of the default/newgame/... values.
RM_CHANGED_AGAINST_DEFAULT, ///< Show only settings which are different compared to default values.
RM_CHANGED_AGAINST_NEW, ///< Show only settings which are different compared to the user's new game setting values.
RM_PATCH, ///< Show only "patch" settings which are not in vanilla.
RM_END, ///< End for iteration.
};
DECLARE_POSTFIX_INCREMENT(RestrictionMode)
@ -1376,6 +1377,7 @@ bool SettingEntry::IsVisibleByRestrictionMode(RestrictionMode mode) const
if (mode == RM_BASIC) return (this->setting->cat & SC_BASIC_LIST) != 0;
if (mode == RM_ADVANCED) return (this->setting->cat & SC_ADVANCED_LIST) != 0;
if (mode == RM_PATCH) return (this->setting->cat & SC_PATCH_LIST) != 0;
/* Read the current value. */
const void *object = ResolveObject(&GetGameSettings(), sd);
@ -1436,6 +1438,7 @@ bool SettingEntry::UpdateFilterState(SettingFilter &filter, bool force_visible)
visible = false;
}
if (!this->IsVisibleByRestrictionMode(filter.mode)) {
if (filter.mode == RM_PATCH) filter.min_cat = RM_ALL;
while (filter.min_cat < RM_ALL && (filter.min_cat == filter.mode || !this->IsVisibleByRestrictionMode(filter.min_cat))) filter.min_cat++;
visible = false;
}
@ -2527,6 +2530,7 @@ static const StringID _game_settings_restrict_dropdown[] = {
STR_CONFIG_SETTING_RESTRICT_ALL, // RM_ALL
STR_CONFIG_SETTING_RESTRICT_CHANGED_AGAINST_DEFAULT, // RM_CHANGED_AGAINST_DEFAULT
STR_CONFIG_SETTING_RESTRICT_CHANGED_AGAINST_NEW, // RM_CHANGED_AGAINST_NEW
STR_CONFIG_SETTING_RESTRICT_PATCH, // RM_PATCH
};
static_assert(lengthof(_game_settings_restrict_dropdown) == RM_END);
@ -3100,14 +3104,14 @@ struct GameSettingsWindow : Window {
if (!gui_scope) return;
/* Update which settings are to be visible. */
RestrictionMode min_level = (this->filter.mode <= RM_ALL) ? this->filter.mode : RM_BASIC;
RestrictionMode min_level = (this->filter.mode <= RM_ALL || this->filter.mode == RM_PATCH) ? this->filter.mode : RM_BASIC;
this->filter.min_cat = min_level;
this->filter.type_hides = false;
GetSettingsTree().UpdateFilterState(this->filter, false);
if (this->filter.string.IsEmpty()) {
this->warn_missing = WHR_NONE;
} else if (min_level < this->filter.min_cat) {
} else if (min_level < this->filter.min_cat || (min_level == RM_PATCH && min_level != this->filter.min_cat)) {
this->warn_missing = this->filter.type_hides ? WHR_CATEGORY_TYPE : WHR_CATEGORY;
} else {
this->warn_missing = this->filter.type_hides ? WHR_TYPE : WHR_NONE;

@ -62,14 +62,17 @@ enum SettingCategory {
SC_BASIC_LIST = 1 << 0, ///< Settings displayed in the list of basic settings.
SC_ADVANCED_LIST = 1 << 1, ///< Settings displayed in the list of advanced settings.
SC_EXPERT_LIST = 1 << 2, ///< Settings displayed in the list of expert settings.
SC_PATCH_LIST = 1 << 3, ///< Settings displayed in the list of non-vanilla settings.
/* Setting classification */
SC_BASIC = SC_BASIC_LIST | SC_ADVANCED_LIST | SC_EXPERT_LIST, ///< Basic settings are part of all lists.
SC_ADVANCED = SC_ADVANCED_LIST | SC_EXPERT_LIST, ///< Advanced settings are part of advanced and expert list.
SC_EXPERT = SC_EXPERT_LIST, ///< Expert settings can only be seen in the expert list.
SC_PATCH = SC_PATCH_LIST, ///< Patch settings which are shown in the patch list.
SC_END,
};
DECLARE_ENUM_AS_BIT_SET(SettingCategory)
/**
* Type of settings for filtering.

@ -16,8 +16,8 @@ static const SettingTable _company_settings{
[post-amble]
};
[templates]
SDT_BOOL = SDT_BOOL(CompanySettings, $var, $flags, $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $extver, $cat, $guiproc, $startup, $patxname),
SDT_VAR = SDT_VAR(CompanySettings, $var, $type, $flags, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $extver, $cat, $guiproc, $startup, $patxname),
SDT_BOOL = SDT_BOOL(CompanySettings, $var, $flags, $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $extver, $cat | $patchcat, $guiproc, $startup, $patxname),
SDT_VAR = SDT_VAR(CompanySettings, $var, $type, $flags, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $extver, $cat | $patchcat, $guiproc, $startup, $patxname),
SDT_NULL = SDT_NULL($length, $from, $to, $extver),
[validation]
@ -36,6 +36,7 @@ load = nullptr
from = SL_MIN_VERSION
to = SL_MAX_VERSION
cat = SC_ADVANCED
patchcat = SC_NONE
startup = false
extver = SlXvFeatureTest()
patxname = nullptr
@ -150,6 +151,7 @@ flags = SF_PER_COMPANY
def = false
str = STR_CONFIG_SETTING_AUTO_TIMETABLE_BY_DEFAULT
strhelp = STR_CONFIG_SETTING_AUTO_TIMETABLE_BY_DEFAULT_HELPTEXT
patchcat = SC_PATCH
patxname = ""vehicle.auto_timetable_by_default""
[SDT_BOOL]
@ -159,6 +161,7 @@ flags = SF_PER_COMPANY
def = true
str = STR_CONFIG_SETTING_TIMETABLE_SEPARATION_BY_DEFAULT
strhelp = STR_CONFIG_SETTING_TIMETABLE_SEPARATION_BY_DEFAULT_HELPTEXT
patchcat = SC_PATCH
patxname = ""vehicle.auto_separation_by_default""
[SDT_VAR]
@ -174,6 +177,7 @@ str = STR_CONFIG_SETTING_TIMETABLE_SEPARATION_RATE
strhelp = STR_CONFIG_SETTING_TIMETABLE_SEPARATION_RATE_HELPTEXT
strval = STR_CONFIG_SETTING_PERCENTAGE
cat = SC_EXPERT
patchcat = SC_PATCH
patxname = ""auto_timetable_separation_rate""
[SDT_VAR]
@ -189,6 +193,7 @@ str = STR_CONFIG_SETTING_TIMETABLE_AUTOFILL_ROUNDING_TICKS
strhelp = STR_CONFIG_SETTING_TIMETABLE_AUTOFILL_ROUNDING_TICKS_HELPTEXT
strval = STR_CONFIG_SETTING_TIMETABLE_AUTOFILL_ROUNDING_TICKS_VALUE
cat = SC_EXPERT
patchcat = SC_PATCH
patxname = ""timetable_autofill_rounding""
[SDT_VAR]
@ -204,6 +209,7 @@ str = STR_CONFIG_OCCUPANCY_SMOOTHNESS
strhelp = STR_CONFIG_OCCUPANCY_SMOOTHNESS_HELPTEXT
strval = STR_CONFIG_SETTING_PERCENTAGE
cat = SC_EXPERT
patchcat = SC_PATCH
patxname = ""order_occupancy_smoothness""
[SDT_BOOL]
@ -212,6 +218,7 @@ var = infra_others_buy_in_depot[0]
flags = SF_PER_COMPANY
def = false
str = STR_CONFIG_SETTING_INFRA_OTHERS_BUY_IN_DEPOT_RAIL
patchcat = SC_PATCH
patxname = ""infra_sharing.infra_others_buy_in_depot.rail""
[SDT_BOOL]
@ -220,6 +227,7 @@ var = infra_others_buy_in_depot[1]
flags = SF_PER_COMPANY
def = false
str = STR_CONFIG_SETTING_INFRA_OTHERS_BUY_IN_DEPOT_ROAD
patchcat = SC_PATCH
patxname = ""infra_sharing.infra_others_buy_in_depot.road""
[SDT_BOOL]
@ -228,6 +236,7 @@ var = infra_others_buy_in_depot[2]
flags = SF_PER_COMPANY
def = false
str = STR_CONFIG_SETTING_INFRA_OTHERS_BUY_IN_DEPOT_WATER
patchcat = SC_PATCH
patxname = ""infra_sharing.infra_others_buy_in_depot.water""
[SDT_BOOL]
@ -236,6 +245,7 @@ var = infra_others_buy_in_depot[3]
flags = SF_PER_COMPANY
def = false
str = STR_CONFIG_SETTING_INFRA_OTHERS_BUY_IN_DEPOT_AIR
patchcat = SC_PATCH
patxname = ""infra_sharing.infra_others_buy_in_depot.air""
@ -246,6 +256,7 @@ flags = SF_PER_COMPANY
def = false
str = STR_CONFIG_SETTING_ADVANCE_ORDER_ON_CLONE
strhelp = STR_CONFIG_SETTING_ADVANCE_ORDER_ON_CLONE_HELPTEXT
patchcat = SC_PATCH
patxname = ""advance_order_on_clone""
[SDT_BOOL]
@ -255,6 +266,7 @@ flags = SF_PER_COMPANY
def = true
str = STR_CONFIG_SETTING_COPY_CLONE_ADD_TO_GROUP
strhelp = STR_CONFIG_SETTING_COPY_CLONE_ADD_TO_GROUP_HELPTEXT
patchcat = SC_PATCH
patxname = ""copy_clone_add_to_group""
[SDT_BOOL]
@ -264,6 +276,7 @@ flags = SF_PER_COMPANY
def = true
str = STR_CONFIG_SETTING_REMAIN_IF_NEXT_ORDER_SAME_STATION
strhelp = STR_CONFIG_SETTING_REMAIN_IF_NEXT_ORDER_SAME_STATION_HELPTEXT
patchcat = SC_PATCH
patxname = ""remain_if_next_order_same_station""
[SDT_VAR]

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save