diff --git a/scwx-qt/source/scwx/qt/settings/palette_settings.cpp b/scwx-qt/source/scwx/qt/settings/palette_settings.cpp index 12e3fe99..c5902fb3 100644 --- a/scwx-qt/source/scwx/qt/settings/palette_settings.cpp +++ b/scwx-qt/source/scwx/qt/settings/palette_settings.cpp @@ -76,32 +76,6 @@ static const awips::Phenomenon kDefaultPhenomenon_ {awips::Phenomenon::Marine}; class PaletteSettings::Impl { public: - struct AlertData - { - AlertData(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); - } - } - - void RegisterVariables(SettingsCategory& settings); - - awips::Phenomenon phenomenon_; - - std::map> - threatCategoryMap_ {}; - - SettingsVariable observed_ {"observed"}; - SettingsVariable tornadoPossible_ {"tornado_possible"}; - SettingsVariable inactive_ {"inactive"}; - }; - explicit Impl(PaletteSettings* self) : self_ {self} { InitializeColorTables(); @@ -124,9 +98,8 @@ public: inactiveAlertColor_ {}; std::vector variables_ {}; - std::unordered_map alertDataMap_ {}; - - std::vector alertSettings_ {}; + std::unordered_map + alertPaletteMap_ {}; }; PaletteSettings::PaletteSettings() : @@ -197,43 +170,19 @@ void PaletteSettings::Impl::InitializeLegacyAlerts() void PaletteSettings::Impl::InitializeAlerts() { + std::vector alertSettings {}; + for (auto phenomenon : PaletteSettings::alert_phenomena()) { - auto pair = alertDataMap_.emplace( - std::make_pair(phenomenon, AlertData {phenomenon})); - auto& alertData = pair.first->second; + auto result = alertPaletteMap_.emplace(phenomenon, phenomenon); + auto& it = result.first; + AlertPaletteSettings& alertPaletteSettings = it->second; // Variable registration - auto& settings = alertSettings_.emplace_back( - SettingsCategory {awips::GetPhenomenonCode(phenomenon)}); - - alertData.RegisterVariables(settings); + alertSettings.push_back(&alertPaletteSettings); } - self_->RegisterSubcategoryArray("alerts", alertSettings_); -} - -void PaletteSettings::Impl::AlertData::RegisterVariables( - SettingsCategory& settings) -{ - auto& info = awips::ibw::GetImpactBasedWarningInfo(phenomenon_); - - for (auto& threatCategory : threatCategoryMap_) - { - settings.RegisterVariables({&threatCategory.second}); - } - - if (info.hasObservedTag_) - { - settings.RegisterVariables({&observed_}); - } - - if (info.hasTornadoPossibleTag_) - { - settings.RegisterVariables({&tornadoPossible_}); - } - - settings.RegisterVariables({&inactive_}); + self_->RegisterSubcategoryArray("alerts", alertSettings); } SettingsVariable& @@ -272,6 +221,12 @@ PaletteSettings::alert_color(awips::Phenomenon phenomenon, bool active) const } } +AlertPaletteSettings& +PaletteSettings::alert_palette(awips::Phenomenon phenomenon) +{ + return p->alertPaletteMap_.at(phenomenon); +} + const std::vector& PaletteSettings::alert_phenomena() { static const std::vector kAlertPhenomena_ { diff --git a/scwx-qt/source/scwx/qt/settings/palette_settings.hpp b/scwx-qt/source/scwx/qt/settings/palette_settings.hpp index bf21e119..eb52e600 100644 --- a/scwx-qt/source/scwx/qt/settings/palette_settings.hpp +++ b/scwx-qt/source/scwx/qt/settings/palette_settings.hpp @@ -1,5 +1,6 @@ #pragma once +#include #include #include #include @@ -30,6 +31,7 @@ public: SettingsVariable& palette(const std::string& name) const; SettingsVariable& alert_color(awips::Phenomenon phenomenon, bool active) const; + AlertPaletteSettings& alert_palette(awips::Phenomenon); static const std::vector& alert_phenomena();