diff --git a/scwx-qt/scwx-qt.cmake b/scwx-qt/scwx-qt.cmake index 530f93a1..06646bbe 100644 --- a/scwx-qt/scwx-qt.cmake +++ b/scwx-qt/scwx-qt.cmake @@ -169,7 +169,8 @@ set(HDR_REQUEST source/scwx/qt/request/download_request.hpp source/scwx/qt/request/nexrad_file_request.hpp) set(SRC_REQUEST source/scwx/qt/request/download_request.cpp source/scwx/qt/request/nexrad_file_request.cpp) -set(HDR_SETTINGS source/scwx/qt/settings/audio_settings.hpp +set(HDR_SETTINGS source/scwx/qt/settings/alert_palette_settings.hpp + source/scwx/qt/settings/audio_settings.hpp source/scwx/qt/settings/general_settings.hpp source/scwx/qt/settings/hotkey_settings.hpp source/scwx/qt/settings/line_settings.hpp @@ -186,7 +187,8 @@ set(HDR_SETTINGS source/scwx/qt/settings/audio_settings.hpp source/scwx/qt/settings/text_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/alert_palette_settings.cpp + source/scwx/qt/settings/audio_settings.cpp source/scwx/qt/settings/general_settings.cpp source/scwx/qt/settings/hotkey_settings.cpp source/scwx/qt/settings/line_settings.cpp diff --git a/scwx-qt/source/scwx/qt/settings/alert_palette_settings.cpp b/scwx-qt/source/scwx/qt/settings/alert_palette_settings.cpp new file mode 100644 index 00000000..ed82ef7e --- /dev/null +++ b/scwx-qt/source/scwx/qt/settings/alert_palette_settings.cpp @@ -0,0 +1,112 @@ +#include +#include + +#include + +#include +#include + +namespace scwx +{ +namespace qt +{ +namespace settings +{ + +static const std::string logPrefix_ = + "scwx::qt::settings::alert_palette_settings"; + +class AlertPaletteSettings::Impl +{ +public: + explicit Impl(awips::Phenomenon phenomenon) : phenomenon_ {phenomenon} + { + auto& info = awips::ibw::GetImpactBasedWarningInfo(phenomenon); + for (auto& threatCategory : info.threatCategories_) + { + std::string threatCategoryName = + awips::ibw::GetThreatCategoryName(threatCategory); + boost::algorithm::to_lower(threatCategoryName); + threatCategoryMap_.emplace(threatCategory, threatCategoryName); + } + } + ~Impl() {} + + awips::Phenomenon phenomenon_; + + std::map threatCategoryMap_ {}; + + LineSettings observed_ {"observed"}; + LineSettings tornadoPossible_ {"tornado_possible"}; + LineSettings inactive_ {"inactive"}; +}; + +AlertPaletteSettings::AlertPaletteSettings(awips::Phenomenon phenomenon) : + SettingsCategory(awips::GetPhenomenonCode(phenomenon)), + p(std::make_unique(phenomenon)) +{ + auto& info = awips::ibw::GetImpactBasedWarningInfo(p->phenomenon_); + for (auto& threatCategory : p->threatCategoryMap_) + { + RegisterSubcategory(threatCategory.second); + } + + if (info.hasObservedTag_) + { + RegisterSubcategory(p->observed_); + } + + if (info.hasTornadoPossibleTag_) + { + RegisterSubcategory(p->tornadoPossible_); + } + + RegisterSubcategory(p->inactive_); + + SetDefaults(); +} +AlertPaletteSettings::~AlertPaletteSettings() = default; + +AlertPaletteSettings::AlertPaletteSettings(AlertPaletteSettings&&) noexcept = + default; +AlertPaletteSettings& +AlertPaletteSettings::operator=(AlertPaletteSettings&&) noexcept = default; + +LineSettings& AlertPaletteSettings::threat_category( + awips::ibw::ThreatCategory threatCategory) const +{ + auto it = p->threatCategoryMap_.find(threatCategory); + if (it != p->threatCategoryMap_.cend()) + { + return it->second; + } + return p->threatCategoryMap_.at(awips::ibw::ThreatCategory::Base); +} + +LineSettings& AlertPaletteSettings::inactive() const +{ + return p->inactive_; +} + +LineSettings& AlertPaletteSettings::observed() const +{ + return p->observed_; +} + +LineSettings& AlertPaletteSettings::tornado_possible() const +{ + return p->tornadoPossible_; +} + +bool operator==(const AlertPaletteSettings& lhs, + const AlertPaletteSettings& rhs) +{ + return (lhs.p->threatCategoryMap_ == rhs.p->threatCategoryMap_ && + lhs.p->inactive_ == rhs.p->inactive_ && + lhs.p->observed_ == rhs.p->observed_ && + lhs.p->tornadoPossible_ == rhs.p->tornadoPossible_); +} + +} // namespace settings +} // namespace qt +} // namespace scwx diff --git a/scwx-qt/source/scwx/qt/settings/alert_palette_settings.hpp b/scwx-qt/source/scwx/qt/settings/alert_palette_settings.hpp new file mode 100644 index 00000000..152a6351 --- /dev/null +++ b/scwx-qt/source/scwx/qt/settings/alert_palette_settings.hpp @@ -0,0 +1,46 @@ +#pragma once + +#include +#include +#include +#include + +#include +#include + +namespace scwx +{ +namespace qt +{ +namespace settings +{ + +class AlertPaletteSettings : public SettingsCategory +{ +public: + explicit AlertPaletteSettings(awips::Phenomenon phenomenon); + ~AlertPaletteSettings(); + + AlertPaletteSettings(const AlertPaletteSettings&) = delete; + AlertPaletteSettings& operator=(const AlertPaletteSettings&) = delete; + + AlertPaletteSettings(AlertPaletteSettings&&) noexcept; + AlertPaletteSettings& operator=(AlertPaletteSettings&&) noexcept; + + LineSettings& + threat_category(awips::ibw::ThreatCategory threatCategory) const; + LineSettings& inactive() const; + LineSettings& observed() const; + LineSettings& tornado_possible() const; + + friend bool operator==(const AlertPaletteSettings& lhs, + const AlertPaletteSettings& rhs); + +private: + class Impl; + std::unique_ptr p; +}; + +} // namespace settings +} // namespace qt +} // namespace scwx