From bf24dac3176965ad2e4187df52b7effb67b082e8 Mon Sep 17 00:00:00 2001 From: AdenKoperczak Date: Thu, 29 Aug 2024 13:46:52 -0400 Subject: [PATCH] initial basic WFO base alert location method --- .../source/scwx/qt/manager/alert_manager.cpp | 5 + .../scwx/qt/settings/audio_settings.cpp | 17 + .../scwx/qt/settings/audio_settings.hpp | 1 + .../source/scwx/qt/types/location_types.cpp | 1 + .../source/scwx/qt/types/location_types.hpp | 1 + scwx-qt/source/scwx/qt/ui/settings_dialog.cpp | 12 + scwx-qt/source/scwx/qt/ui/settings_dialog.ui | 301 ++++++++++-------- 7 files changed, 198 insertions(+), 140 deletions(-) diff --git a/scwx-qt/source/scwx/qt/manager/alert_manager.cpp b/scwx-qt/source/scwx/qt/manager/alert_manager.cpp index 64c78d8d..4936986b 100644 --- a/scwx-qt/source/scwx/qt/manager/alert_manager.cpp +++ b/scwx-qt/source/scwx/qt/manager/alert_manager.cpp @@ -151,6 +151,7 @@ void AlertManager::Impl::HandleAlert(const types::TextEventKey& key, std::string alertCounty = audioSettings.alert_county().GetValue(); auto alertRadius = units::length::kilometers( audioSettings.alert_radius().GetValue()); + std::string alertWFO = audioSettings.alert_wfo().GetValue(); auto message = textEventManager_->message_list(key).at(messageIndex); @@ -195,6 +196,10 @@ void AlertManager::Impl::HandleAlert(const types::TextEventKey& key, auto fipsIds = segment->header_->ugc_.fips_ids(); auto it = std::find(fipsIds.cbegin(), fipsIds.cend(), alertCounty); activeAtLocation = it != fipsIds.cend(); + } else if (locationMethod == types::LocationMethod::WFO) { + std::string wfoId = vtec.pVtec_.office_id(); + + activeAtLocation = wfoId == alertWFO; } if (activeAtLocation) diff --git a/scwx-qt/source/scwx/qt/settings/audio_settings.cpp b/scwx-qt/source/scwx/qt/settings/audio_settings.cpp index 995ce881..a799793b 100644 --- a/scwx-qt/source/scwx/qt/settings/audio_settings.cpp +++ b/scwx-qt/source/scwx/qt/settings/audio_settings.cpp @@ -39,6 +39,7 @@ public: alertLongitude_.SetDefault(0.0); alertRadius_.SetDefault(0.0); alertRadarSite_.SetDefault("default"); + alertWFO_.SetDefault(""); ignoreMissingCodecs_.SetDefault(false); alertLatitude_.SetMinimum(-90.0); @@ -62,6 +63,14 @@ public: config::CountyDatabase::GetCountyName(value) != value; }); + alertWFO_.SetValidator( + [](const std::string& value) + { + return value.empty() || + config::CountyDatabase::GetWFOs().count(value) != 0; + }); + + auto& alertAudioPhenomena = types::GetAlertAudioPhenomena(); alertEnabled_.reserve(alertAudioPhenomena.size() + 1); @@ -94,6 +103,7 @@ public: SettingsVariable alertRadarSite_ {"alert_radar_site"}; SettingsVariable alertRadius_ {"alert_radius"}; SettingsVariable alertCounty_ {"alert_county"}; + SettingsVariable alertWFO_ {"alert_wfo"}; SettingsVariable ignoreMissingCodecs_ {"ignore_missing_codecs"}; std::unordered_map> @@ -111,6 +121,7 @@ AudioSettings::AudioSettings() : &p->alertRadarSite_, &p->alertRadius_, &p->alertCounty_, + &p->alertWFO_, &p->ignoreMissingCodecs_}); RegisterVariables(p->variables_); SetDefaults(); @@ -157,6 +168,11 @@ SettingsVariable& AudioSettings::alert_county() const return p->alertCounty_; } +SettingsVariable& AudioSettings::alert_wfo() const +{ + return p->alertWFO_; +} + SettingsVariable& AudioSettings::alert_enabled(awips::Phenomenon phenomenon) const { @@ -188,6 +204,7 @@ bool operator==(const AudioSettings& lhs, const AudioSettings& rhs) lhs.p->alertRadarSite_ == rhs.p->alertRadarSite_ && lhs.p->alertRadius_ == rhs.p->alertRadius_ && lhs.p->alertCounty_ == rhs.p->alertCounty_ && + lhs.p->alertWFO_ == rhs.p->alertWFO_ && lhs.p->alertEnabled_ == rhs.p->alertEnabled_); } diff --git a/scwx-qt/source/scwx/qt/settings/audio_settings.hpp b/scwx-qt/source/scwx/qt/settings/audio_settings.hpp index 466c4f3a..579d3599 100644 --- a/scwx-qt/source/scwx/qt/settings/audio_settings.hpp +++ b/scwx-qt/source/scwx/qt/settings/audio_settings.hpp @@ -33,6 +33,7 @@ public: SettingsVariable& alert_radius() const; SettingsVariable& alert_radar_site() const; SettingsVariable& alert_county() const; + SettingsVariable& alert_wfo() const; SettingsVariable& alert_enabled(awips::Phenomenon phenomenon) const; SettingsVariable& ignore_missing_codecs() const; diff --git a/scwx-qt/source/scwx/qt/types/location_types.cpp b/scwx-qt/source/scwx/qt/types/location_types.cpp index f9df0189..228d5718 100644 --- a/scwx-qt/source/scwx/qt/types/location_types.cpp +++ b/scwx-qt/source/scwx/qt/types/location_types.cpp @@ -17,6 +17,7 @@ static const std::unordered_map {LocationMethod::Track, "Track"}, {LocationMethod::RadarSite, "Radar Site"}, {LocationMethod::County, "County"}, + {LocationMethod::WFO, "WFO"}, {LocationMethod::All, "All"}, {LocationMethod::Unknown, "?"}}; diff --git a/scwx-qt/source/scwx/qt/types/location_types.hpp b/scwx-qt/source/scwx/qt/types/location_types.hpp index 4da1e701..78310ea8 100644 --- a/scwx-qt/source/scwx/qt/types/location_types.hpp +++ b/scwx-qt/source/scwx/qt/types/location_types.hpp @@ -17,6 +17,7 @@ enum class LocationMethod Track, RadarSite, County, + WFO, All, Unknown }; diff --git a/scwx-qt/source/scwx/qt/ui/settings_dialog.cpp b/scwx-qt/source/scwx/qt/ui/settings_dialog.cpp index d36efb07..d3a0f73c 100644 --- a/scwx-qt/source/scwx/qt/ui/settings_dialog.cpp +++ b/scwx-qt/source/scwx/qt/ui/settings_dialog.cpp @@ -140,6 +140,7 @@ public: &alertAudioRadarSite_, &alertAudioRadius_, &alertAudioCounty_, + &alertAudioWFO_, &hoverTextWrap_, &tooltipMethod_, &placefileTextDropShadowEnabled_, @@ -262,6 +263,7 @@ public: settings::SettingsInterface alertAudioRadarSite_ {}; settings::SettingsInterface alertAudioRadius_ {}; settings::SettingsInterface alertAudioCounty_ {}; + settings::SettingsInterface alertAudioWFO_ {}; std::unordered_map> alertAudioEnabled_ {}; @@ -1194,6 +1196,16 @@ void SettingsDialogImpl::SetupAudioTab() alertAudioCounty_.SetSettingsVariable(audioSettings.alert_county()); alertAudioCounty_.SetEditWidget(self_->ui->alertAudioCountyLineEdit); alertAudioCounty_.SetResetButton(self_->ui->resetAlertAudioCountyButton); + + alertAudioWFO_.SetSettingsVariable(audioSettings.alert_wfo()); + for (const auto& pair : config::CountyDatabase::GetWFOs()) + { + self_->ui->alertAudioWFOComboBox->addItem( + QString::fromStdString(pair.first)); + } + alertAudioWFO_.SetEditWidget(self_->ui->alertAudioWFOComboBox); + alertAudioWFO_.SetResetButton(self_->ui->resetAlertAudioWFOButton); + } void SettingsDialogImpl::SetupTextTab() diff --git a/scwx-qt/source/scwx/qt/ui/settings_dialog.ui b/scwx-qt/source/scwx/qt/ui/settings_dialog.ui index 8d69be46..71adfb06 100644 --- a/scwx-qt/source/scwx/qt/ui/settings_dialog.ui +++ b/scwx-qt/source/scwx/qt/ui/settings_dialog.ui @@ -136,8 +136,8 @@ 0 0 - 511 - 647 + 274 + 691 @@ -610,8 +610,8 @@ 0 0 - 66 - 18 + 98 + 28 @@ -691,8 +691,15 @@ Alerts - - + + + + County + + + + + ... @@ -702,6 +709,71 @@ + + + + Location Method + + + + + + + + + + ... + + + + :/res/icons/font-awesome-6/rotate-left-solid.svg:/res/icons/font-awesome-6/rotate-left-solid.svg + + + + + + + Longitude + + + + + + + ... + + + + + + + + + + + + + + Latitude + + + + + + + 4 + + + -90.000000000000000 + + + 90.000000000000000 + + + 0.000100000000000 + + + @@ -718,8 +790,8 @@ - - + + ... @@ -729,38 +801,25 @@ - - - - - 0 - 0 - + + + + + :/res/icons/font-awesome-6/play-solid.svg:/res/icons/font-awesome-6/play-solid.svg - - - - County - - - - - + + ... - - - :/res/icons/font-awesome-6/rotate-left-solid.svg:/res/icons/font-awesome-6/rotate-left-solid.svg - - - + + - + Radius @@ -780,14 +839,10 @@ - - + + - ... - - - - :/res/icons/font-awesome-6/rotate-left-solid.svg:/res/icons/font-awesome-6/rotate-left-solid.svg + Radar Site @@ -798,32 +853,6 @@ - - - - ... - - - - - - - - - - 4 - - - -90.000000000000000 - - - 90.000000000000000 - - - 0.000100000000000 - - - @@ -832,8 +861,8 @@ - - + + ... @@ -843,20 +872,6 @@ - - - - Latitude - - - - - - - Sound - - - @@ -870,11 +885,25 @@ - - + + + + ... + - :/res/icons/font-awesome-6/play-solid.svg:/res/icons/font-awesome-6/play-solid.svg + :/res/icons/font-awesome-6/rotate-left-solid.svg:/res/icons/font-awesome-6/rotate-left-solid.svg + + + + + + + ... + + + + :/res/icons/font-awesome-6/rotate-left-solid.svg:/res/icons/font-awesome-6/rotate-left-solid.svg @@ -891,66 +920,58 @@ - - - - Location Method - - - - - - - ... - - - - :/res/icons/font-awesome-6/rotate-left-solid.svg:/res/icons/font-awesome-6/rotate-left-solid.svg - - - - - - - Radius - - - - - - - Longitude - - - - - - - Radar Site - - - - - - - ... - - - - - - - ... - - - - :/res/icons/font-awesome-6/rotate-left-solid.svg:/res/icons/font-awesome-6/rotate-left-solid.svg - - - + + + + + 0 + 0 + + + + + + + + ... + + + + :/res/icons/font-awesome-6/rotate-left-solid.svg:/res/icons/font-awesome-6/rotate-left-solid.svg + + + + + + + Sound + + + + + + + + + + WFO + + + + + + + ... + + + + :/res/icons/font-awesome-6/rotate-left-solid.svg:/res/icons/font-awesome-6/rotate-left-solid.svg + + +