mirror of
https://git.eden-emu.dev/eden-emu/eden
synced 2026-06-28 22:45:26 +02:00
[qt] fix various crashes due to invalid/corrupted/outdated settings (#4070)
lots of "out of index" errors :) Signed-off-by: lizzie <lizzie@eden-emu.dev> Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/4070 Reviewed-by: crueter <crueter@eden-emu.dev> Reviewed-by: MaranBr <maranbr@eden-emu.dev>
This commit is contained in:
parent
1071353291
commit
60e1032771
13 changed files with 149 additions and 71 deletions
|
|
@ -11,6 +11,7 @@
|
|||
#include <optional>
|
||||
#include <stdexcept>
|
||||
#include <string>
|
||||
#include <type_traits>
|
||||
#include <typeindex>
|
||||
#include <typeinfo>
|
||||
#include <fmt/core.h>
|
||||
|
|
@ -101,7 +102,15 @@ public:
|
|||
* @param val The desired value
|
||||
*/
|
||||
virtual void SetValue(const Type& val) {
|
||||
Type temp{ranged ? std::clamp(val, minimum, maximum) : val};
|
||||
// Enums have a maximal range which they're allowed
|
||||
Type temp{};
|
||||
if constexpr (std::is_enum_v<Type>) {
|
||||
auto const r_min = std::underlying_type_t<Type>(0);
|
||||
auto const r_max = std::underlying_type_t<Type>(EnumMetadata<Type>::GetLast());
|
||||
temp = Type(std::clamp(std::underlying_type_t<Type>(val), r_min, r_max));
|
||||
} else {
|
||||
temp = ranged ? std::clamp(val, this->minimum, this->maximum) : val;
|
||||
}
|
||||
std::swap(value, temp);
|
||||
}
|
||||
|
||||
|
|
@ -129,7 +138,7 @@ protected:
|
|||
} else if constexpr (std::is_floating_point_v<Type>) {
|
||||
return fmt::format("{:f}", value_);
|
||||
} else if constexpr (std::is_enum_v<Type>) {
|
||||
return std::to_string(u32(value_));
|
||||
return std::to_string(std::underlying_type_t<Type>(value_));
|
||||
} else {
|
||||
return std::to_string(value_);
|
||||
}
|
||||
|
|
@ -371,7 +380,15 @@ public:
|
|||
* @param val The new value
|
||||
*/
|
||||
void SetValue(const Type& val) override final {
|
||||
Type temp{ranged ? std::clamp(val, this->minimum, this->maximum) : val};
|
||||
// Enums have a maximal range which they're allowed
|
||||
Type temp{};
|
||||
if constexpr (std::is_enum_v<Type>) {
|
||||
auto const r_min = std::underlying_type_t<Type>(0);
|
||||
auto const r_max = std::underlying_type_t<Type>(EnumMetadata<Type>::GetLast());
|
||||
temp = Type(std::clamp(std::underlying_type_t<Type>(val), r_min, r_max));
|
||||
} else {
|
||||
temp = ranged ? std::clamp(val, this->minimum, this->maximum) : val;
|
||||
}
|
||||
if (use_global) {
|
||||
std::swap(this->value, temp);
|
||||
} else {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue