10#ifndef SETTINGS_INTERNAL_H
11#define SETTINGS_INTERNAL_H
80 bool IsEditable(
bool do_command =
false)
const;
87 constexpr const std::string &
GetName()
const
89 return this->save.
name;
151 typedef void SetValueDParamsCallback(
const IntSettingDesc &sd, uint first_param, int32_t value);
179 std::enable_if_t<std::disjunction_v<std::is_convertible<Tdef, int32_t>, std::is_base_of<StrongTypedefBase, Tdef>>,
int> = 0,
180 std::enable_if_t<std::disjunction_v<std::is_convertible<Tmin, int32_t>, std::is_base_of<StrongTypedefBase, Tmin>>,
int> = 0,
181 std::enable_if_t<std::disjunction_v<std::is_convertible<Tmax, uint32_t>, std::is_base_of<StrongTypedefBase, Tmax>>,
int> = 0,
182 std::enable_if_t<std::disjunction_v<std::is_convertible<Tinterval, int32_t>, std::is_base_of<StrongTypedefBase, Tinterval>>,
int> = 0
187 GetTitleCallback get_title_cb, GetHelpCallback get_help_cb, SetValueDParamsCallback set_value_dparams_cb,
192 get_title_cb(get_title_cb), get_help_cb(get_help_cb), set_value_dparams_cb(set_value_dparams_cb),
194 if constexpr (std::is_base_of_v<StrongTypedefBase, Tdef>) {
195 this->def =
def.base();
200 if constexpr (std::is_base_of_v<StrongTypedefBase, Tmin>) {
201 this->min =
min.base();
206 if constexpr (std::is_base_of_v<StrongTypedefBase, Tmax>) {
207 this->max =
max.base();
212 if constexpr (std::is_base_of_v<StrongTypedefBase, Tinterval>) {
229 GetTitleCallback *get_title_cb;
230 GetHelpCallback *get_help_cb;
231 SetValueDParamsCallback *set_value_dparams_cb;
245 void ChangeValue(
const void *
object, int32_t newvalue)
const;
249 std::string
FormatValue(
const void *
object)
const override;
254 int32_t
Read(
const void *
object)
const;
258 void Write(
const void *
object, int32_t value)
const;
266 GetTitleCallback get_title_cb, GetHelpCallback get_help_cb, SetValueDParamsCallback set_value_dparams_cb,
268 IntSettingDesc(
save,
flags,
startup,
def ? 1 : 0, 0, 1, 0,
str,
str_help,
str_val,
cat,
275 std::string
FormatValue(
const void *
object)
const override;
285 GetTitleCallback get_title_cb, GetHelpCallback get_help_cb, SetValueDParamsCallback set_value_dparams_cb,
287 IntSettingDesc(
save,
flags,
startup,
def, 0,
max, 0,
str,
str_help,
str_val,
cat,
290 for (
auto one :
many) this->
many.push_back(one);
297 std::string FormatSingleValue(uint
id)
const;
300 std::string
FormatValue(
const void *
object)
const override;
308 GetTitleCallback get_title_cb, GetHelpCallback get_help_cb, SetValueDParamsCallback set_value_dparams_cb,
314 std::string
FormatValue(
const void *
object)
const override;
345 void ChangeValue(
const void *
object, std::string &newval)
const;
347 std::string
FormatValue(
const void *
object)
const override;
352 const std::string &
Read(
const void *
object)
const;
356 void Write(
const void *
object,
const std::string &str)
const;
366 std::string
FormatValue(
const void *
object)
const override;
378 std::string
FormatValue(
const void *)
const override { NOT_REACHED(); }
385typedef std::variant<IntSettingDesc, BoolSettingDesc, OneOfManySettingDesc, ManyOfManySettingDesc, StringSettingDesc, ListSettingDesc, NullSettingDesc> SettingVariant;
394 return std::visit([](
auto&& arg) ->
const SettingDesc * {
return &arg; }, desc);
397typedef std::span<const SettingVariant> SettingTable;
#define DECLARE_ENUM_AS_BIT_SET(enum_type)
Operators to allow to work with enum as with type safe bit set in C++.
fluid_settings_t * settings
FluidSynth settings handle.
Functions/types related to saving and loading games.
const SettingDesc * GetSettingFromName(const std::string_view name)
Given a name of any setting, return any setting description of it.
void GetSaveLoadFromSettingTable(SettingTable settings, std::vector< SaveLoad > &saveloads)
Get the SaveLoad for all settings in the settings table.
bool SetSettingValue(const IntSettingDesc *sd, int32_t value, bool force_newgame=false)
Top function to save the new value of an element of the Settings struct.
SettingType
Type of settings for filtering.
@ ST_CLIENT
Client setting.
@ ST_ALL
Used in setting filter to match all types.
@ ST_COMPANY
Company setting.
@ SF_NOT_IN_CONFIG
Do not save to config file.
@ SF_GUI_DROPDOWN
The value represents a limited number of string-options (internally integer) presented as dropdown.
@ SF_PER_COMPANY
This setting can be different for each company (saved in company struct).
@ SF_NETWORK_ONLY
This setting only applies to network games.
@ SF_NOT_IN_SAVE
Do not save with savegame, basically client-based.
@ SF_NEWGAME_ONLY
This setting cannot be changed in a game.
@ SF_SCENEDIT_ONLY
This setting can only be changed in the scenario editor.
@ SF_NO_NETWORK_SYNC
Do not synchronize over network (but it is saved if SF_NOT_IN_SAVE is not set).
@ SF_NO_NETWORK
This setting does not apply to network games; it may not be changed during the game.
@ SF_GUI_CURRENCY
The number represents money, so when reading value multiply by exchange rate.
@ SF_SCENEDIT_TOO
This setting can be changed in the scenario editor (only makes sense when SF_NEWGAME_ONLY is set).
@ SF_GUI_0_IS_SPECIAL
A value of zero is possible and has a custom string (the one after "strval").
SettingCategory
A SettingCategory defines a grouping of the settings.
@ SC_ADVANCED
Advanced settings are part of advanced and expert list.
@ SC_EXPERT
Expert settings can only be seen in the expert list.
@ SC_ADVANCED_LIST
Settings displayed in the list of advanced settings.
@ SC_EXPERT_LIST
Settings displayed in the list of expert settings.
@ SC_BASIC_LIST
Settings displayed in the list of basic settings.
@ SC_BASIC
Basic settings are part of all lists.
static constexpr const SettingDesc * GetSettingDesc(const SettingVariant &desc)
Helper to convert the type of the iterated settings description to a pointer to it.
uint32_t StringID
Numeric value that represents a string, independent of the selected language.
std::string FormatValue(const void *object) const override
Format the value of the setting associated with this object.
bool IsBoolSetting() const override
Check whether this setting is a boolean type setting.
static std::optional< bool > ParseSingleValue(const char *str)
Find whether a string was a boolean true or a boolean false.
size_t ParseValue(const char *str) const override
Convert a string representation (external) of an integer-like setting to an integer.
A single "line" in an ini file.
Base integer type, including boolean, settings.
void SetValueDParams(uint first_param, int32_t value) const
Set the DParams for drawing the value of the setting.
int32_t GetDefaultValueCallback()
A callback to get the correct default value.
StringID str_help
(Translated) string with help text; gui only.
StringID str_val
(Translated) first string describing the value.
void MakeValueValid(int32_t &value) const
Make the value valid given the limitations of this setting.
void ResetToDefault(void *object) const override
Reset the setting to its default value.
std::string FormatValue(const void *object) const override
Format the value of the setting associated with this object.
int32_t def
default value given when none is present
SettingCategory cat
assigned categories of the setting
bool IsIntSetting() const override
Check whether this setting is an integer type setting.
StringID GetTitle() const
Get the title of the setting.
void ChangeValue(const void *object, int32_t newvalue) const
Handle changing a value.
uint32_t max
maximum values
void PostChangeCallback(int32_t value)
A callback to denote that a setting has been changed.
GetDefaultValueCallback * get_def_cb
Callback to set the correct default value.
bool IsSameValue(const IniItem *item, void *object) const override
Check whether the value in the Ini item is the same as is saved in this setting in the object.
int32_t min
minimum values
PreChangeCheck * pre_check
Callback to check for the validity of the setting.
bool PreChangeCheck(int32_t &value)
A check to be performed before the setting gets changed.
void Write(const void *object, int32_t value) const
Set the value of a setting.
StringID GetHelp() const
Get the help text of the setting.
virtual bool IsBoolSetting() const
Check whether this setting is a boolean type setting.
PostChangeCallback * post_callback
Callback when the setting has been changed.
StringID str
(translated) string with descriptive text; gui and console
void MakeValueValidAndWrite(const void *object, int32_t value) const
Make the value valid and then write it to the setting.
virtual size_t ParseValue(const char *str) const
Convert a string representation (external) of an integer-like setting to an integer.
int32_t Read(const void *object) const
Read the integer from the the actual setting.
int32_t interval
the interval to use between settings in the 'settings' window. If interval is '0' the interval is dyn...
bool IsDefaultValue(void *object) const override
Check whether the value is the same as the default value.
void ParseValue(const IniItem *item, void *object) const override
Parse/read the value from the Ini item into the setting associated with this object.
void ResetToDefault(void *object) const override
Reset the setting to its default value.
bool IsSameValue(const IniItem *item, void *object) const override
Check whether the value in the Ini item is the same as is saved in this setting in the object.
std::string FormatValue(const void *object) const override
Convert an integer-array (intlist) to a string representation.
const char * def
default value given when none is present
bool IsDefaultValue(void *object) const override
Check whether the value is the same as the default value.
std::string FormatValue(const void *object) const override
Format the value of the setting associated with this object.
size_t ParseValue(const char *str) const override
Convert a string representation (external) of an integer-like setting to an integer.
Placeholder for settings that have been removed, but might still linger in the savegame.
bool IsSameValue(const IniItem *, void *) const override
Check whether the value in the Ini item is the same as is saved in this setting in the object.
void ParseValue(const IniItem *, void *) const override
Parse/read the value from the Ini item into the setting associated with this object.
std::string FormatValue(const void *) const override
Format the value of the setting associated with this object.
bool IsDefaultValue(void *) const override
Check whether the value is the same as the default value.
void ResetToDefault(void *) const override
Reset the setting to its default value.
OnConvert * many_cnvt
callback procedure when loading value mechanism fails
size_t ParseValue(const char *str) const override
Convert a string representation (external) of an integer-like setting to an integer.
static size_t ParseSingleValue(const char *str, size_t len, const std::vector< std::string > &many)
Find the index value of a ONEofMANY type in a string separated by |.
std::string FormatValue(const void *object) const override
Format the value of the setting associated with this object.
size_t OnConvert(const char *value)
callback prototype for conversion error
std::vector< std::string > many
possible values for this type
std::string name
Name of this field (optional, used for tables).
Properties of config file settings.
virtual void ParseValue(const IniItem *item, void *object) const =0
Parse/read the value from the Ini item into the setting associated with this object.
bool IsEditable(bool do_command=false) const
Check whether the setting is editable in the current gamemode.
virtual bool IsStringSetting() const
Check whether this setting is an string type setting.
virtual void ResetToDefault(void *object) const =0
Reset the setting to its default value.
SettingType GetType() const
Return the type of the setting.
constexpr const std::string & GetName() const
Get the name of this setting.
bool startup
Setting has to be loaded directly at startup?.
virtual std::string FormatValue(const void *object) const =0
Format the value of the setting associated with this object.
const struct StringSettingDesc * AsStringSetting() const
Get the setting description of this setting as a string setting.
virtual bool IsSameValue(const IniItem *item, void *object) const =0
Check whether the value in the Ini item is the same as is saved in this setting in the object.
virtual bool IsDefaultValue(void *object) const =0
Check whether the value is the same as the default value.
SaveLoad save
Internal structure (going to savegame, parts to config).
virtual bool IsIntSetting() const
Check whether this setting is an integer type setting.
const struct IntSettingDesc * AsIntSetting() const
Get the setting description of this setting as an integer setting.
SettingFlag flags
Handles how a setting would show up in the GUI (text/currency, etc.).
const std::string & Read(const void *object) const
Read the string from the the actual setting.
void PostChangeCallback(const std::string &value)
A callback to denote that a setting has been changed.
std::string def
Default value given when none is present.
uint32_t max_length
Maximum length of the string, 0 means no maximum length.
PreChangeCheck * pre_check
Callback to check for the validity of the setting.
void MakeValueValid(std::string &str) const
Make the value valid given the limitations of this setting.
bool IsSameValue(const IniItem *item, void *object) const override
Check whether the value in the Ini item is the same as is saved in this setting in the object.
bool IsDefaultValue(void *object) const override
Check whether the value is the same as the default value.
PostChangeCallback * post_callback
Callback when the setting has been changed.
void ResetToDefault(void *object) const override
Reset the setting to its default value.
void Write(const void *object, const std::string &str) const
Write a string to the actual setting.
void ChangeValue(const void *object, std::string &newval) const
Handle changing a string value.
bool PreChangeCheck(std::string &value)
A check to be performed before the setting gets changed.
std::string FormatValue(const void *object) const override
Format the value of the setting associated with this object.
bool IsStringSetting() const override
Check whether this setting is an string type setting.
void ParseValue(const IniItem *item, void *object) const override
Parse/read the value from the Ini item into the setting associated with this object.