mirror of
https://github.com/ciphervance/supercell-wx.git
synced 2025-10-30 23:30:04 +00:00
Add audio settings
This commit is contained in:
parent
9486d2364a
commit
ec97231bca
6 changed files with 206 additions and 3 deletions
|
|
@ -145,18 +145,21 @@ set(SRC_MODEL source/scwx/qt/model/alert_model.cpp
|
||||||
source/scwx/qt/model/tree_model.cpp)
|
source/scwx/qt/model/tree_model.cpp)
|
||||||
set(HDR_REQUEST source/scwx/qt/request/nexrad_file_request.hpp)
|
set(HDR_REQUEST source/scwx/qt/request/nexrad_file_request.hpp)
|
||||||
set(SRC_REQUEST source/scwx/qt/request/nexrad_file_request.cpp)
|
set(SRC_REQUEST source/scwx/qt/request/nexrad_file_request.cpp)
|
||||||
set(HDR_SETTINGS source/scwx/qt/settings/general_settings.hpp
|
set(HDR_SETTINGS source/scwx/qt/settings/audio_settings.hpp
|
||||||
|
source/scwx/qt/settings/general_settings.hpp
|
||||||
source/scwx/qt/settings/map_settings.hpp
|
source/scwx/qt/settings/map_settings.hpp
|
||||||
source/scwx/qt/settings/palette_settings.hpp
|
source/scwx/qt/settings/palette_settings.hpp
|
||||||
source/scwx/qt/settings/settings_category.hpp
|
source/scwx/qt/settings/settings_category.hpp
|
||||||
source/scwx/qt/settings/settings_container.hpp
|
source/scwx/qt/settings/settings_container.hpp
|
||||||
|
source/scwx/qt/settings/settings_definitions.hpp
|
||||||
source/scwx/qt/settings/settings_interface.hpp
|
source/scwx/qt/settings/settings_interface.hpp
|
||||||
source/scwx/qt/settings/settings_interface_base.hpp
|
source/scwx/qt/settings/settings_interface_base.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)
|
||||||
set(SRC_SETTINGS source/scwx/qt/settings/general_settings.cpp
|
set(SRC_SETTINGS source/scwx/qt/settings/audio_settings.cpp
|
||||||
|
source/scwx/qt/settings/general_settings.cpp
|
||||||
source/scwx/qt/settings/map_settings.cpp
|
source/scwx/qt/settings/map_settings.cpp
|
||||||
source/scwx/qt/settings/palette_settings.cpp
|
source/scwx/qt/settings/palette_settings.cpp
|
||||||
source/scwx/qt/settings/settings_category.cpp
|
source/scwx/qt/settings/settings_category.cpp
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
#include <scwx/qt/manager/settings_manager.hpp>
|
#include <scwx/qt/manager/settings_manager.hpp>
|
||||||
#include <scwx/qt/map/map_provider.hpp>
|
#include <scwx/qt/map/map_provider.hpp>
|
||||||
|
#include <scwx/qt/settings/audio_settings.hpp>
|
||||||
#include <scwx/qt/settings/general_settings.hpp>
|
#include <scwx/qt/settings/general_settings.hpp>
|
||||||
#include <scwx/qt/settings/map_settings.hpp>
|
#include <scwx/qt/settings/map_settings.hpp>
|
||||||
#include <scwx/qt/settings/palette_settings.hpp>
|
#include <scwx/qt/settings/palette_settings.hpp>
|
||||||
|
|
@ -128,6 +129,7 @@ boost::json::value SettingsManager::Impl::ConvertSettingsToJson()
|
||||||
boost::json::object settingsJson;
|
boost::json::object settingsJson;
|
||||||
|
|
||||||
settings::GeneralSettings::Instance().WriteJson(settingsJson);
|
settings::GeneralSettings::Instance().WriteJson(settingsJson);
|
||||||
|
settings::AudioSettings::Instance().WriteJson(settingsJson);
|
||||||
settings::MapSettings::Instance().WriteJson(settingsJson);
|
settings::MapSettings::Instance().WriteJson(settingsJson);
|
||||||
settings::PaletteSettings::Instance().WriteJson(settingsJson);
|
settings::PaletteSettings::Instance().WriteJson(settingsJson);
|
||||||
settings::TextSettings::Instance().WriteJson(settingsJson);
|
settings::TextSettings::Instance().WriteJson(settingsJson);
|
||||||
|
|
@ -141,6 +143,7 @@ void SettingsManager::Impl::GenerateDefaultSettings()
|
||||||
logger_->info("Generating default settings");
|
logger_->info("Generating default settings");
|
||||||
|
|
||||||
settings::GeneralSettings::Instance().SetDefaults();
|
settings::GeneralSettings::Instance().SetDefaults();
|
||||||
|
settings::AudioSettings::Instance().SetDefaults();
|
||||||
settings::MapSettings::Instance().SetDefaults();
|
settings::MapSettings::Instance().SetDefaults();
|
||||||
settings::PaletteSettings::Instance().SetDefaults();
|
settings::PaletteSettings::Instance().SetDefaults();
|
||||||
settings::TextSettings::Instance().SetDefaults();
|
settings::TextSettings::Instance().SetDefaults();
|
||||||
|
|
@ -155,6 +158,7 @@ bool SettingsManager::Impl::LoadSettings(
|
||||||
bool jsonDirty = false;
|
bool jsonDirty = false;
|
||||||
|
|
||||||
jsonDirty |= !settings::GeneralSettings::Instance().ReadJson(settingsJson);
|
jsonDirty |= !settings::GeneralSettings::Instance().ReadJson(settingsJson);
|
||||||
|
jsonDirty |= !settings::AudioSettings::Instance().ReadJson(settingsJson);
|
||||||
jsonDirty |= !settings::MapSettings::Instance().ReadJson(settingsJson);
|
jsonDirty |= !settings::MapSettings::Instance().ReadJson(settingsJson);
|
||||||
jsonDirty |= !settings::PaletteSettings::Instance().ReadJson(settingsJson);
|
jsonDirty |= !settings::PaletteSettings::Instance().ReadJson(settingsJson);
|
||||||
jsonDirty |= !settings::TextSettings::Instance().ReadJson(settingsJson);
|
jsonDirty |= !settings::TextSettings::Instance().ReadJson(settingsJson);
|
||||||
|
|
|
||||||
131
scwx-qt/source/scwx/qt/settings/audio_settings.cpp
Normal file
131
scwx-qt/source/scwx/qt/settings/audio_settings.cpp
Normal file
|
|
@ -0,0 +1,131 @@
|
||||||
|
#include <scwx/qt/settings/audio_settings.hpp>
|
||||||
|
#include <scwx/qt/settings/settings_definitions.hpp>
|
||||||
|
#include <scwx/qt/settings/settings_variable.hpp>
|
||||||
|
#include <scwx/qt/types/alert_types.hpp>
|
||||||
|
#include <scwx/qt/types/location_types.hpp>
|
||||||
|
|
||||||
|
#include <boost/algorithm/string.hpp>
|
||||||
|
#include <fmt/format.h>
|
||||||
|
|
||||||
|
namespace scwx
|
||||||
|
{
|
||||||
|
namespace qt
|
||||||
|
{
|
||||||
|
namespace settings
|
||||||
|
{
|
||||||
|
|
||||||
|
static const std::string logPrefix_ = "scwx::qt::settings::audio_settings";
|
||||||
|
|
||||||
|
static const bool kDefaultAlertEnabled_ {false};
|
||||||
|
static const awips::Phenomenon kDefaultPhenomenon_ {
|
||||||
|
awips::Phenomenon::FlashFlood};
|
||||||
|
|
||||||
|
class AudioSettings::Impl
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
explicit Impl()
|
||||||
|
{
|
||||||
|
std::string defaultAlertLocationMethodValue =
|
||||||
|
types::GetLocationMethodName(types::LocationMethod::Fixed);
|
||||||
|
|
||||||
|
boost::to_lower(defaultAlertLocationMethodValue);
|
||||||
|
|
||||||
|
alertLocationMethod_.SetDefault(defaultAlertLocationMethodValue);
|
||||||
|
alertLatitude_.SetDefault(0.0);
|
||||||
|
alertLongitude_.SetDefault(0.0);
|
||||||
|
|
||||||
|
alertLatitude_.SetMinimum(-90.0);
|
||||||
|
alertLatitude_.SetMaximum(90.0);
|
||||||
|
alertLongitude_.SetMinimum(-180.0);
|
||||||
|
alertLongitude_.SetMaximum(180.0);
|
||||||
|
|
||||||
|
alertLocationMethod_.SetValidator(
|
||||||
|
SCWX_SETTINGS_ENUM_VALIDATOR(types::LocationMethod,
|
||||||
|
types::LocationMethodIterator(),
|
||||||
|
types::GetLocationMethodName));
|
||||||
|
|
||||||
|
for (auto& phenomenon : types::GetAlertAudioPhenomena())
|
||||||
|
{
|
||||||
|
std::string phenomenonCode = awips::GetPhenomenonCode(phenomenon);
|
||||||
|
std::string name = fmt::format("{}_enabled", phenomenonCode);
|
||||||
|
|
||||||
|
auto result =
|
||||||
|
alertEnabled_.emplace(phenomenon, SettingsVariable<bool> {name});
|
||||||
|
|
||||||
|
SettingsVariable<bool>& variable = result.first->second;
|
||||||
|
|
||||||
|
variable.SetDefault(kDefaultAlertEnabled_);
|
||||||
|
|
||||||
|
variables_.push_back(&variable);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
~Impl() {}
|
||||||
|
|
||||||
|
SettingsVariable<std::string> alertLocationMethod_ {"alert_location_method"};
|
||||||
|
SettingsVariable<double> alertLatitude_ {"alert_latitude"};
|
||||||
|
SettingsVariable<double> alertLongitude_ {"alert_longitude"};
|
||||||
|
|
||||||
|
std::unordered_map<awips::Phenomenon, SettingsVariable<bool>>
|
||||||
|
alertEnabled_ {};
|
||||||
|
std::vector<SettingsVariableBase*> variables_ {};
|
||||||
|
};
|
||||||
|
|
||||||
|
AudioSettings::AudioSettings() :
|
||||||
|
SettingsCategory("audio"), p(std::make_unique<Impl>())
|
||||||
|
{
|
||||||
|
RegisterVariables(
|
||||||
|
{&p->alertLocationMethod_, &p->alertLatitude_, &p->alertLongitude_});
|
||||||
|
RegisterVariables(p->variables_);
|
||||||
|
SetDefaults();
|
||||||
|
|
||||||
|
p->variables_.clear();
|
||||||
|
}
|
||||||
|
AudioSettings::~AudioSettings() = default;
|
||||||
|
|
||||||
|
AudioSettings::AudioSettings(AudioSettings&&) noexcept = default;
|
||||||
|
AudioSettings& AudioSettings::operator=(AudioSettings&&) noexcept = default;
|
||||||
|
|
||||||
|
SettingsVariable<std::string>& AudioSettings::alert_location_method() const
|
||||||
|
{
|
||||||
|
return p->alertLocationMethod_;
|
||||||
|
}
|
||||||
|
|
||||||
|
SettingsVariable<double>& AudioSettings::alert_latitude() const
|
||||||
|
{
|
||||||
|
return p->alertLatitude_;
|
||||||
|
}
|
||||||
|
|
||||||
|
SettingsVariable<double>& AudioSettings::alert_longitude() const
|
||||||
|
{
|
||||||
|
return p->alertLongitude_;
|
||||||
|
}
|
||||||
|
|
||||||
|
SettingsVariable<bool>&
|
||||||
|
AudioSettings::alert_enabled(awips::Phenomenon phenomenon) const
|
||||||
|
{
|
||||||
|
auto alert = p->alertEnabled_.find(phenomenon);
|
||||||
|
if (alert == p->alertEnabled_.cend())
|
||||||
|
{
|
||||||
|
alert = p->alertEnabled_.find(kDefaultPhenomenon_);
|
||||||
|
}
|
||||||
|
return alert->second;
|
||||||
|
}
|
||||||
|
|
||||||
|
AudioSettings& AudioSettings::Instance()
|
||||||
|
{
|
||||||
|
static AudioSettings audioSettings_;
|
||||||
|
return audioSettings_;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool operator==(const AudioSettings& lhs, const AudioSettings& rhs)
|
||||||
|
{
|
||||||
|
return (lhs.p->alertLocationMethod_ == rhs.p->alertLocationMethod_ &&
|
||||||
|
lhs.p->alertLatitude_ == rhs.p->alertLatitude_ &&
|
||||||
|
lhs.p->alertLongitude_ == rhs.p->alertLongitude_ &&
|
||||||
|
lhs.p->alertEnabled_ == rhs.p->alertEnabled_);
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace settings
|
||||||
|
} // namespace qt
|
||||||
|
} // namespace scwx
|
||||||
45
scwx-qt/source/scwx/qt/settings/audio_settings.hpp
Normal file
45
scwx-qt/source/scwx/qt/settings/audio_settings.hpp
Normal file
|
|
@ -0,0 +1,45 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <scwx/qt/settings/settings_category.hpp>
|
||||||
|
#include <scwx/qt/settings/settings_variable.hpp>
|
||||||
|
#include <scwx/awips/phenomenon.hpp>
|
||||||
|
|
||||||
|
#include <memory>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
namespace scwx
|
||||||
|
{
|
||||||
|
namespace qt
|
||||||
|
{
|
||||||
|
namespace settings
|
||||||
|
{
|
||||||
|
|
||||||
|
class AudioSettings : public SettingsCategory
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
explicit AudioSettings();
|
||||||
|
~AudioSettings();
|
||||||
|
|
||||||
|
AudioSettings(const AudioSettings&) = delete;
|
||||||
|
AudioSettings& operator=(const AudioSettings&) = delete;
|
||||||
|
|
||||||
|
AudioSettings(AudioSettings&&) noexcept;
|
||||||
|
AudioSettings& operator=(AudioSettings&&) noexcept;
|
||||||
|
|
||||||
|
SettingsVariable<std::string>& alert_location_method() const;
|
||||||
|
SettingsVariable<double>& alert_latitude() const;
|
||||||
|
SettingsVariable<double>& alert_longitude() const;
|
||||||
|
SettingsVariable<bool>& alert_enabled(awips::Phenomenon phenomenon) const;
|
||||||
|
|
||||||
|
static AudioSettings& Instance();
|
||||||
|
|
||||||
|
friend bool operator==(const AudioSettings& lhs, const AudioSettings& rhs);
|
||||||
|
|
||||||
|
private:
|
||||||
|
class Impl;
|
||||||
|
std::unique_ptr<Impl> p;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace settings
|
||||||
|
} // namespace qt
|
||||||
|
} // namespace scwx
|
||||||
20
scwx-qt/source/scwx/qt/settings/settings_definitions.hpp
Normal file
20
scwx-qt/source/scwx/qt/settings/settings_definitions.hpp
Normal file
|
|
@ -0,0 +1,20 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#define SCWX_SETTINGS_ENUM_VALIDATOR(Type, Iterator, ToName) \
|
||||||
|
[](const std::string& value) \
|
||||||
|
{ \
|
||||||
|
for (Type enumValue : Iterator) \
|
||||||
|
{ \
|
||||||
|
/* If the value is equal to a lower case name */ \
|
||||||
|
std::string enumName = ToName(enumValue); \
|
||||||
|
boost::to_lower(enumName); \
|
||||||
|
if (value == enumName) \
|
||||||
|
{ \
|
||||||
|
/* Regard as a match, valid */ \
|
||||||
|
return true; \
|
||||||
|
} \
|
||||||
|
} \
|
||||||
|
\
|
||||||
|
/* No match found, invalid */ \
|
||||||
|
return false; \
|
||||||
|
}
|
||||||
|
|
@ -1 +1 @@
|
||||||
Subproject commit cd36a74a9c678d90d10ec397eae65b389a9640fc
|
Subproject commit 85525670368987258d41f2a7b0e92266dcec9048
|
||||||
Loading…
Add table
Add a link
Reference in a new issue