#pragma once #include "export.hpp" #include "slider.hpp" #include #include namespace options::detail { template struct default_value_traits { virtual ~default_value_traits() = default; using stored_type = std::decay_t; using value_type = std::decay_t; static value_type from_value(const value_type& val, const value_type&) { return val; } static value_type from_storage(const stored_type& x) { return static_cast(x); } static stored_type to_storage(const value_type& val) { return static_cast(val); } static value_type value_from_variant(const QVariant& x) { return from_storage(storage_from_variant(x)); } static stored_type storage_from_variant(const QVariant& x) { return x.value(); } }; template struct value_traits : default_value_traits { }; template<> struct value_traits : default_value_traits { static inline slider_value from_value(const slider_value& val, const slider_value& def) { return { val.cur(), def.min(), def.max() }; } }; // Qt uses int a lot in slots so use it for all enums template struct value_traits>> : public default_value_traits { }; template<> struct value_traits : public default_value_traits { }; } // ns options::detail