|
|
|
@ -461,8 +461,9 @@ size_t BoolSettingDesc::ParseValue(const char *str) const
|
|
|
|
|
return this->def;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static bool ValidateEnumSetting(const IntSettingDesc *sdb, int32 val)
|
|
|
|
|
static bool ValidateEnumSetting(const IntSettingDesc *sdb, int32 &val)
|
|
|
|
|
{
|
|
|
|
|
if (sdb->pre_check != nullptr && !sdb->pre_check(val)) return false;
|
|
|
|
|
for (const SettingDescEnumEntry *enumlist = sdb->enumlist; enumlist != nullptr && enumlist->str != STR_NULL; enumlist++) {
|
|
|
|
|
if (enumlist->val == val) {
|
|
|
|
|
return true;
|
|
|
|
@ -526,7 +527,11 @@ void IntSettingDesc::MakeValueValid(int32 &val) const
|
|
|
|
|
uint32 uval = (uint32)val;
|
|
|
|
|
if (!(this->flags & SF_GUI_0_IS_SPECIAL) || uval != 0) {
|
|
|
|
|
if (this->flags & SF_ENUM) {
|
|
|
|
|
if (!ValidateEnumSetting(this, val)) uval = (uint32)(size_t)this->def;
|
|
|
|
|
if (!ValidateEnumSetting(this, val)) {
|
|
|
|
|
uval = (uint32)(size_t)this->def;
|
|
|
|
|
} else {
|
|
|
|
|
uval = (uint32)val;
|
|
|
|
|
}
|
|
|
|
|
} else if (!(this->flags & SF_GUI_DROPDOWN)) {
|
|
|
|
|
/* Clamp value-type setting to its valid range */
|
|
|
|
|
uval = ClampU(uval, this->min, this->max);
|
|
|
|
|