#pragma once // system includes #include #include // 3rdparty lib includes #include // local includes #include "utils.h" #include "newsettings.h" //! Special type of RefAccessor that also saves settings after setValue() template struct RefAccessorSaveSettings : public virtual espgui::RefAccessor { typename espgui::AccessorInterface::setter_result_t setValue(T value) override { espgui::RefAccessor::setValue(value); if (!saveProfileSettings()) return std::unexpected("saveProfileSettings() failed!"); return {}; }; }; template struct NewSettingsAccessor : public virtual espgui::AccessorInterface { virtual ConfigWrapper& getConfig() const = 0; T getValue() const override { return getConfig().value(); } typename espgui::AccessorInterface::setter_result_t setValue(T value) override { return configs.write_config(getConfig(), value); } }; template struct NewSettingsChronoAdaptorAccessor; template<> struct NewSettingsChronoAdaptorAccessor : public virtual espgui::AccessorInterface { virtual ConfigWrapper& getConfig() const = 0; int32_t getValue() const override { return getConfig().value().count(); } typename espgui::AccessorInterface::setter_result_t setValue(int32_t value) override { return configs.write_config(getConfig(), espchrono::minutes32{value}); } }; template<> struct NewSettingsChronoAdaptorAccessor : public virtual espgui::AccessorInterface { virtual ConfigWrapper& getConfig() const = 0; int32_t getValue() const override { return getConfig().value().count(); } typename espgui::AccessorInterface::setter_result_t setValue(int32_t value) override { return configs.write_config(getConfig(), espchrono::milliseconds32{value}); } };