Add unit settings

This commit is contained in:
Dan Paulat 2024-04-26 23:26:39 -05:00
parent 7a71b9e244
commit 3bfcaede96
5 changed files with 151 additions and 3 deletions

View file

@ -176,7 +176,8 @@ set(HDR_SETTINGS source/scwx/qt/settings/audio_settings.hpp
source/scwx/qt/settings/settings_variable.hpp source/scwx/qt/settings/settings_variable.hpp
source/scwx/qt/settings/settings_variable_base.hpp source/scwx/qt/settings/settings_variable_base.hpp
source/scwx/qt/settings/text_settings.hpp source/scwx/qt/settings/text_settings.hpp
source/scwx/qt/settings/ui_settings.hpp) source/scwx/qt/settings/ui_settings.hpp
source/scwx/qt/settings/unit_settings.hpp)
set(SRC_SETTINGS source/scwx/qt/settings/audio_settings.cpp set(SRC_SETTINGS source/scwx/qt/settings/audio_settings.cpp
source/scwx/qt/settings/general_settings.cpp source/scwx/qt/settings/general_settings.cpp
source/scwx/qt/settings/hotkey_settings.cpp source/scwx/qt/settings/hotkey_settings.cpp
@ -190,7 +191,8 @@ set(SRC_SETTINGS source/scwx/qt/settings/audio_settings.cpp
source/scwx/qt/settings/settings_variable.cpp source/scwx/qt/settings/settings_variable.cpp
source/scwx/qt/settings/settings_variable_base.cpp source/scwx/qt/settings/settings_variable_base.cpp
source/scwx/qt/settings/text_settings.cpp source/scwx/qt/settings/text_settings.cpp
source/scwx/qt/settings/ui_settings.cpp) source/scwx/qt/settings/ui_settings.cpp
source/scwx/qt/settings/unit_settings.cpp)
set(HDR_TYPES source/scwx/qt/types/alert_types.hpp set(HDR_TYPES source/scwx/qt/types/alert_types.hpp
source/scwx/qt/types/event_types.hpp source/scwx/qt/types/event_types.hpp
source/scwx/qt/types/font_types.hpp source/scwx/qt/types/font_types.hpp

View file

@ -8,6 +8,7 @@
#include <scwx/qt/settings/product_settings.hpp> #include <scwx/qt/settings/product_settings.hpp>
#include <scwx/qt/settings/text_settings.hpp> #include <scwx/qt/settings/text_settings.hpp>
#include <scwx/qt/settings/ui_settings.hpp> #include <scwx/qt/settings/ui_settings.hpp>
#include <scwx/qt/settings/unit_settings.hpp>
#include <scwx/qt/util/json.hpp> #include <scwx/qt/util/json.hpp>
#include <scwx/util/logger.hpp> #include <scwx/util/logger.hpp>
@ -139,6 +140,7 @@ boost::json::value SettingsManager::Impl::ConvertSettingsToJson()
settings::ProductSettings::Instance().WriteJson(settingsJson); settings::ProductSettings::Instance().WriteJson(settingsJson);
settings::TextSettings::Instance().WriteJson(settingsJson); settings::TextSettings::Instance().WriteJson(settingsJson);
settings::UiSettings::Instance().WriteJson(settingsJson); settings::UiSettings::Instance().WriteJson(settingsJson);
settings::UnitSettings::Instance().WriteJson(settingsJson);
return settingsJson; return settingsJson;
} }
@ -155,6 +157,7 @@ void SettingsManager::Impl::GenerateDefaultSettings()
settings::ProductSettings::Instance().SetDefaults(); settings::ProductSettings::Instance().SetDefaults();
settings::TextSettings::Instance().SetDefaults(); settings::TextSettings::Instance().SetDefaults();
settings::UiSettings::Instance().SetDefaults(); settings::UiSettings::Instance().SetDefaults();
settings::UnitSettings::Instance().SetDefaults();
} }
bool SettingsManager::Impl::LoadSettings( bool SettingsManager::Impl::LoadSettings(
@ -172,6 +175,7 @@ bool SettingsManager::Impl::LoadSettings(
jsonDirty |= !settings::ProductSettings::Instance().ReadJson(settingsJson); jsonDirty |= !settings::ProductSettings::Instance().ReadJson(settingsJson);
jsonDirty |= !settings::TextSettings::Instance().ReadJson(settingsJson); jsonDirty |= !settings::TextSettings::Instance().ReadJson(settingsJson);
jsonDirty |= !settings::UiSettings::Instance().ReadJson(settingsJson); jsonDirty |= !settings::UiSettings::Instance().ReadJson(settingsJson);
jsonDirty |= !settings::UnitSettings::Instance().ReadJson(settingsJson);
return jsonDirty; return jsonDirty;
} }

View file

@ -0,0 +1,99 @@
#include <scwx/qt/settings/unit_settings.hpp>
#include <scwx/qt/settings/settings_definitions.hpp>
#include <scwx/qt/types/unit_types.hpp>
#include <boost/algorithm/string.hpp>
namespace scwx
{
namespace qt
{
namespace settings
{
static const std::string logPrefix_ = "scwx::qt::settings::unit_settings";
class UnitSettings::Impl
{
public:
explicit Impl()
{
std::string defaultAccumulationUnitsValue =
types::GetAccumulationUnitsName(types::AccumulationUnits::Inches);
std::string defaultEchoTopsUnitsValue =
types::GetEchoTopsUnitsName(types::EchoTopsUnits::Kilofeet);
std::string defaultSpeedUnitsValue =
types::GetSpeedUnitsName(types::SpeedUnits::Knots);
boost::to_lower(defaultAccumulationUnitsValue);
boost::to_lower(defaultEchoTopsUnitsValue);
boost::to_lower(defaultSpeedUnitsValue);
accumulationUnits_.SetDefault(defaultAccumulationUnitsValue);
echoTopsUnits_.SetDefault(defaultEchoTopsUnitsValue);
speedUnits_.SetDefault(defaultSpeedUnitsValue);
accumulationUnits_.SetValidator(
SCWX_SETTINGS_ENUM_VALIDATOR(types::AccumulationUnits,
types::AccumulationUnitsIterator(),
types::GetAccumulationUnitsName));
echoTopsUnits_.SetValidator(
SCWX_SETTINGS_ENUM_VALIDATOR(types::EchoTopsUnits,
types::EchoTopsUnitsIterator(),
types::GetEchoTopsUnitsName));
speedUnits_.SetValidator(
SCWX_SETTINGS_ENUM_VALIDATOR(types::SpeedUnits,
types::SpeedUnitsIterator(),
types::GetSpeedUnitsName));
}
~Impl() {}
SettingsVariable<std::string> accumulationUnits_ {"accumulation_units"};
SettingsVariable<std::string> echoTopsUnits_ {"echo_tops_units"};
SettingsVariable<std::string> speedUnits_ {"speed_units"};
};
UnitSettings::UnitSettings() :
SettingsCategory("unit"), p(std::make_unique<Impl>())
{
RegisterVariables(
{&p->accumulationUnits_, &p->echoTopsUnits_, &p->speedUnits_});
SetDefaults();
}
UnitSettings::~UnitSettings() = default;
UnitSettings::UnitSettings(UnitSettings&&) noexcept = default;
UnitSettings& UnitSettings::operator=(UnitSettings&&) noexcept = default;
SettingsVariable<std::string>& UnitSettings::accumulation_units() const
{
return p->accumulationUnits_;
}
SettingsVariable<std::string>& UnitSettings::echo_tops_units() const
{
return p->echoTopsUnits_;
}
SettingsVariable<std::string>& UnitSettings::speed_units() const
{
return p->speedUnits_;
}
UnitSettings& UnitSettings::Instance()
{
static UnitSettings generalSettings_;
return generalSettings_;
}
bool operator==(const UnitSettings& lhs, const UnitSettings& rhs)
{
return (lhs.p->accumulationUnits_ == rhs.p->accumulationUnits_ &&
lhs.p->echoTopsUnits_ == rhs.p->echoTopsUnits_ &&
lhs.p->speedUnits_ == rhs.p->speedUnits_);
}
} // namespace settings
} // namespace qt
} // namespace scwx

View file

@ -0,0 +1,43 @@
#pragma once
#include <scwx/qt/settings/settings_category.hpp>
#include <scwx/qt/settings/settings_variable.hpp>
#include <memory>
#include <string>
namespace scwx
{
namespace qt
{
namespace settings
{
class UnitSettings : public SettingsCategory
{
public:
explicit UnitSettings();
~UnitSettings();
UnitSettings(const UnitSettings&) = delete;
UnitSettings& operator=(const UnitSettings&) = delete;
UnitSettings(UnitSettings&&) noexcept;
UnitSettings& operator=(UnitSettings&&) noexcept;
SettingsVariable<std::string>& accumulation_units() const;
SettingsVariable<std::string>& echo_tops_units() const;
SettingsVariable<std::string>& speed_units() const;
static UnitSettings& Instance();
friend bool operator==(const UnitSettings& lhs, const UnitSettings& rhs);
private:
class Impl;
std::unique_ptr<Impl> p;
};
} // namespace settings
} // namespace qt
} // namespace scwx

@ -1 +1 @@
Subproject commit e350743fd8ca6858ce49a22bb8e40a0c6710ca86 Subproject commit 03b6188cdf1b85f65bae0de822194bc6fab9bd14