mirror of
				https://github.com/ciphervance/supercell-wx.git
				synced 2025-10-31 17:40:05 +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
	
	 Dan Paulat
						Dan Paulat