Add alert palette settings

This commit is contained in:
Dan Paulat 2024-09-21 08:29:13 -05:00
parent 1a30743c0a
commit efee1653e1
3 changed files with 162 additions and 2 deletions

View file

@ -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

View file

@ -0,0 +1,112 @@
#include <scwx/qt/settings/alert_palette_settings.hpp>
#include <scwx/qt/util/color.hpp>
#include <map>
#include <boost/algorithm/string/case_conv.hpp>
#include <boost/gil.hpp>
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<awips::ibw::ThreatCategory, LineSettings> threatCategoryMap_ {};
LineSettings observed_ {"observed"};
LineSettings tornadoPossible_ {"tornado_possible"};
LineSettings inactive_ {"inactive"};
};
AlertPaletteSettings::AlertPaletteSettings(awips::Phenomenon phenomenon) :
SettingsCategory(awips::GetPhenomenonCode(phenomenon)),
p(std::make_unique<Impl>(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

View file

@ -0,0 +1,46 @@
#pragma once
#include <scwx/qt/settings/line_settings.hpp>
#include <scwx/qt/settings/settings_category.hpp>
#include <scwx/awips/impact_based_warnings.hpp>
#include <scwx/awips/phenomenon.hpp>
#include <memory>
#include <string>
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<Impl> p;
};
} // namespace settings
} // namespace qt
} // namespace scwx