diff options
author | rubidium42 <rubidium@openttd.org> | 2021-05-23 19:16:56 +0200 |
---|---|---|
committer | rubidium42 <rubidium42@users.noreply.github.com> | 2021-05-27 18:49:43 +0200 |
commit | e666a962b1f0f8eeb3bab2232ce77556ddab974a (patch) | |
tree | b7802361743f548da4d6e12c3380a5395cca45f3 /src/settings_internal.h | |
parent | 860003458fc17f02e44b50f98ef570aff824142a (diff) | |
download | openttd-e666a962b1f0f8eeb3bab2232ce77556ddab974a.tar.xz |
Codechange: let OneOfMany and ManyOfMany be their own classes as well
Diffstat (limited to 'src/settings_internal.h')
-rw-r--r-- | src/settings_internal.h | 41 |
1 files changed, 37 insertions, 4 deletions
diff --git a/src/settings_internal.h b/src/settings_internal.h index 1174a1f63..488b85441 100644 --- a/src/settings_internal.h +++ b/src/settings_internal.h @@ -133,9 +133,9 @@ struct SettingDesc { struct IntSettingDesc : SettingDesc { IntSettingDesc(SaveLoad save, const char *name, SettingGuiFlag flags, SettingDescType cmd, bool startup, int32 def, int32 min, uint32 max, int32 interval, StringID str, StringID str_help, StringID str_val, - SettingCategory cat, OnChange *proc, const char *many = nullptr, OnConvert *many_cnvt = nullptr) : + SettingCategory cat, OnChange *proc) : SettingDesc(save, name, flags, cmd, startup), def(def), min(min), max(max), interval(interval), - str(str), str_help(str_help), str_val(str_val), cat(cat), proc(proc), many(many), many_cnvt(many_cnvt) {} + str(str), str_help(str_help), str_val(str_val), cat(cat), proc(proc) {} virtual ~IntSettingDesc() {} int32 def; ///< default value given when none is present @@ -147,8 +147,6 @@ struct IntSettingDesc : SettingDesc { StringID str_val; ///< (Translated) first string describing the value. SettingCategory cat; ///< assigned categories of the setting OnChange *proc; ///< callback procedure for when the value is changed - const char *many; ///< ONE/MANY_OF_MANY: string of possible values for this type - OnConvert *many_cnvt; ///< callback procedure when loading value mechanism fails void ChangeValue(const void *object, int32 newvalue) const; void Write_ValidateSetting(const void *object, int32 value) const; @@ -170,6 +168,41 @@ struct BoolSettingDesc : IntSettingDesc { void FormatValue(char *buf, const char *last, const void *object) const override; }; +/** One of many setting. */ +struct OneOfManySettingDesc : IntSettingDesc { + OneOfManySettingDesc(SaveLoad save, const char *name, SettingGuiFlag flags, SettingDescType cmd, bool startup, + int32 def, int32 max, StringID str, StringID str_help, StringID str_val, SettingCategory cat, OnChange *proc, + std::initializer_list<const char *> many, OnConvert *many_cnvt) : + IntSettingDesc(save, name, flags, cmd, startup, def, 0, max, 0, str, str_help, str_val, cat, proc), many_cnvt(many_cnvt) + { + for (auto one : many) this->many.push_back(one); + } + + virtual ~OneOfManySettingDesc() {} + + std::vector<std::string> many; ///< possible values for this type + OnConvert *many_cnvt; ///< callback procedure when loading value mechanism fails + + static size_t ParseSingleValue(const char *str, size_t len, const std::vector<std::string> &many); + char *FormatSingleValue(char *buf, const char *last, uint id) const; + + size_t ParseValue(const char *str) const override; + void FormatValue(char *buf, const char *last, const void *object) const override; +}; + +/** Many of many setting. */ +struct ManyOfManySettingDesc : OneOfManySettingDesc { + ManyOfManySettingDesc(SaveLoad save, const char *name, SettingGuiFlag flags, SettingDescType cmd, bool startup, + int32 def, StringID str, StringID str_help, StringID str_val, SettingCategory cat, OnChange *proc, + std::initializer_list<const char *> many, OnConvert *many_cnvt) : + OneOfManySettingDesc(save, name, flags, cmd, startup, def, (1 << many.size()) - 1, str, str_help, + str_val, cat, proc, many, many_cnvt) {} + virtual ~ManyOfManySettingDesc() {} + + size_t ParseValue(const char *str) const override; + void FormatValue(char *buf, const char *last, const void *object) const override; +}; + /** String settings. */ struct StringSettingDesc : SettingDesc { StringSettingDesc(SaveLoad save, const char *name, SettingGuiFlag flags, SettingDescType cmd, bool startup, const char *def, |