summaryrefslogtreecommitdiff
path: root/src/settings_internal.h
diff options
context:
space:
mode:
authorrubidium42 <rubidium@openttd.org>2021-05-23 19:16:56 +0200
committerrubidium42 <rubidium42@users.noreply.github.com>2021-05-27 18:49:43 +0200
commite666a962b1f0f8eeb3bab2232ce77556ddab974a (patch)
treeb7802361743f548da4d6e12c3380a5395cca45f3 /src/settings_internal.h
parent860003458fc17f02e44b50f98ef570aff824142a (diff)
downloadopenttd-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.h41
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,