diff --git a/scwx-qt/source/scwx/qt/manager/alert_manager.cpp b/scwx-qt/source/scwx/qt/manager/alert_manager.cpp index e50babdd..daa7112e 100644 --- a/scwx-qt/source/scwx/qt/manager/alert_manager.cpp +++ b/scwx-qt/source/scwx/qt/manager/alert_manager.cpp @@ -6,6 +6,8 @@ #include #include #include +#include +#include #include #include @@ -85,8 +87,7 @@ common::Coordinate AlertManager::Impl::CurrentCoordinate( settings::AudioSettings& audioSettings = settings::AudioSettings::Instance(); common::Coordinate coordinate {}; - if (locationMethod == types::LocationMethod::Fixed || - locationMethod == types::LocationMethod::Radius) + if (locationMethod == types::LocationMethod::Fixed) { coordinate.latitude_ = audioSettings.alert_latitude().GetValue(); coordinate.longitude_ = audioSettings.alert_longitude().GetValue(); @@ -101,6 +102,14 @@ common::Coordinate AlertManager::Impl::CurrentCoordinate( coordinate.longitude_ = trackedCoordinate.longitude(); } } + else if (locationMethod == types::LocationMethod::RadarSite) + { + std::string siteId = + settings::GeneralSettings::Instance().default_radar_site().GetValue(); + auto radarSite = config::RadarSite::Get(siteId); + coordinate.latitude_ = radarSite->latitude(); + coordinate.longitude_ = radarSite->longitude(); + } return coordinate; } @@ -119,6 +128,8 @@ void AlertManager::Impl::HandleAlert(const types::TextEventKey& key, audioSettings.alert_location_method().GetValue()); common::Coordinate currentCoordinate = CurrentCoordinate(locationMethod); std::string alertCounty = audioSettings.alert_county().GetValue(); + auto alertRadius = + units::length::meters(audioSettings.alert_radius().GetValue()); auto message = textEventManager_->message_list(key).at(messageIndex); @@ -146,22 +157,16 @@ void AlertManager::Impl::HandleAlert(const types::TextEventKey& key, bool activeAtLocation = (locationMethod == types::LocationMethod::All); if (locationMethod == types::LocationMethod::Fixed || - locationMethod == types::LocationMethod::Track) + locationMethod == types::LocationMethod::Track || + locationMethod == types::LocationMethod::RadarSite) { // Determine if the alert is active at the current coordinte auto alertCoordinates = segment->codedLocation_->coordinates(); - activeAtLocation = util::GeographicLib::AreaContainsPoint( - alertCoordinates, currentCoordinate); - } - else if (locationMethod == types::LocationMethod::Radius) - { - auto alertCoordinates = segment->codedLocation_->coordinates(); - activeAtLocation = util::GeographicLib::AreaInRangeOfPoint( alertCoordinates, currentCoordinate, - units::length::meters(1e6)); + alertRadius); } else if (locationMethod == types::LocationMethod::County) { diff --git a/scwx-qt/source/scwx/qt/settings/audio_settings.cpp b/scwx-qt/source/scwx/qt/settings/audio_settings.cpp index 0ee04b2b..d38bee64 100644 --- a/scwx-qt/source/scwx/qt/settings/audio_settings.cpp +++ b/scwx-qt/source/scwx/qt/settings/audio_settings.cpp @@ -37,12 +37,16 @@ public: alertLocationMethod_.SetDefault(defaultAlertLocationMethodValue); alertLatitude_.SetDefault(0.0); alertLongitude_.SetDefault(0.0); + alertRadius_.SetDefault(0.0); ignoreMissingCodecs_.SetDefault(false); alertLatitude_.SetMinimum(-90.0); alertLatitude_.SetMaximum(90.0); alertLongitude_.SetMinimum(-180.0); alertLongitude_.SetMaximum(180.0); + alertRadius_.SetMinimum(0.0); + alertRadius_.SetMaximum(9999999999); + alertLocationMethod_.SetValidator( SCWX_SETTINGS_ENUM_VALIDATOR(types::LocationMethod, @@ -86,6 +90,7 @@ public: SettingsVariable alertLocationMethod_ {"alert_location_method"}; SettingsVariable alertLatitude_ {"alert_latitude"}; SettingsVariable alertLongitude_ {"alert_longitude"}; + SettingsVariable alertRadius_ {"alert_radius"}; SettingsVariable alertCounty_ {"alert_county"}; SettingsVariable ignoreMissingCodecs_ {"ignore_missing_codecs"}; @@ -101,6 +106,7 @@ AudioSettings::AudioSettings() : &p->alertLocationMethod_, &p->alertLatitude_, &p->alertLongitude_, + &p->alertRadius_, &p->alertCounty_, &p->ignoreMissingCodecs_}); RegisterVariables(p->variables_); @@ -133,6 +139,11 @@ SettingsVariable& AudioSettings::alert_longitude() const return p->alertLongitude_; } +SettingsVariable& AudioSettings::alert_radius() const +{ + return p->alertRadius_; +} + SettingsVariable& AudioSettings::alert_county() const { return p->alertCounty_; @@ -166,6 +177,7 @@ bool operator==(const AudioSettings& lhs, const AudioSettings& rhs) lhs.p->alertLocationMethod_ == rhs.p->alertLocationMethod_ && lhs.p->alertLatitude_ == rhs.p->alertLatitude_ && lhs.p->alertLongitude_ == rhs.p->alertLongitude_ && + lhs.p->alertRadius_ == rhs.p->alertRadius_ && lhs.p->alertCounty_ == rhs.p->alertCounty_ && 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 19012e84..6f9318fb 100644 --- a/scwx-qt/source/scwx/qt/settings/audio_settings.hpp +++ b/scwx-qt/source/scwx/qt/settings/audio_settings.hpp @@ -30,6 +30,7 @@ public: SettingsVariable& alert_location_method() const; SettingsVariable& alert_latitude() const; SettingsVariable& alert_longitude() const; + SettingsVariable& alert_radius() const; SettingsVariable& alert_county() 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 f5ad6ac8..ca888332 100644 --- a/scwx-qt/source/scwx/qt/types/location_types.cpp +++ b/scwx-qt/source/scwx/qt/types/location_types.cpp @@ -14,8 +14,8 @@ namespace types static const std::unordered_map locationMethodName_ {{LocationMethod::Fixed, "Fixed"}, - {LocationMethod::Radius, "Radius"}, {LocationMethod::Track, "Track"}, + {LocationMethod::RadarSite, "RadarSite"}, {LocationMethod::County, "County"}, {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 30f793c9..4da1e701 100644 --- a/scwx-qt/source/scwx/qt/types/location_types.hpp +++ b/scwx-qt/source/scwx/qt/types/location_types.hpp @@ -14,8 +14,8 @@ namespace types enum class LocationMethod { Fixed, - Radius, Track, + RadarSite, County, 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 bcebaf0a..7d120839 100644 --- a/scwx-qt/source/scwx/qt/ui/settings_dialog.cpp +++ b/scwx-qt/source/scwx/qt/ui/settings_dialog.cpp @@ -134,6 +134,7 @@ public: &alertAudioLocationMethod_, &alertAudioLatitude_, &alertAudioLongitude_, + &alertAudioRadius_, &alertAudioCounty_, &hoverTextWrap_, &tooltipMethod_, @@ -252,6 +253,7 @@ public: settings::SettingsInterface alertAudioLocationMethod_ {}; settings::SettingsInterface alertAudioLatitude_ {}; settings::SettingsInterface alertAudioLongitude_ {}; + settings::SettingsInterface alertAudioRadius_ {}; settings::SettingsInterface alertAudioCounty_ {}; std::unordered_map> @@ -474,6 +476,7 @@ void SettingsDialogImpl::ConnectSignals() break; case QDialogButtonBox::ButtonRole::ResetRole: // Restore Defaults + logger_->info("ButtonRole Reset"); ResetToDefault(); break; @@ -900,6 +903,10 @@ void SettingsDialogImpl::SetupAudioTab() bool coordinateEntryEnabled = locationMethod == types::LocationMethod::Fixed; + bool radiusEntryEnable = + locationMethod == types::LocationMethod::Fixed || + locationMethod == types::LocationMethod::Track || + locationMethod == types::LocationMethod::RadarSite; bool countyEntryEnabled = locationMethod == types::LocationMethod::County; @@ -912,6 +919,11 @@ void SettingsDialogImpl::SetupAudioTab() self_->ui->resetAlertAudioLongitudeButton->setEnabled( coordinateEntryEnabled); + self_->ui->alertAudioRadiusSpinBox->setEnabled( + radiusEntryEnable); + self_->ui->resetAlertAudioRadiusButton->setEnabled( + radiusEntryEnable); + self_->ui->alertAudioCountyLineEdit->setEnabled(countyEntryEnabled); self_->ui->alertAudioCountySelectButton->setEnabled( countyEntryEnabled); @@ -983,6 +995,11 @@ void SettingsDialogImpl::SetupAudioTab() alertAudioLongitude_.SetResetButton( self_->ui->resetAlertAudioLongitudeButton); + alertAudioRadius_.SetSettingsVariable(audioSettings.alert_radius()); + alertAudioRadius_.SetEditWidget(self_->ui->alertAudioRadiusSpinBox); + alertAudioRadius_.SetResetButton( + self_->ui->resetAlertAudioRadiusButton); + auto& alertAudioPhenomena = types::GetAlertAudioPhenomena(); auto alertAudioLayout = static_cast(self_->ui->alertAudioGroupBox->layout()); diff --git a/scwx-qt/source/scwx/qt/ui/settings_dialog.ui b/scwx-qt/source/scwx/qt/ui/settings_dialog.ui index 983d9b34..566b68ad 100644 --- a/scwx-qt/source/scwx/qt/ui/settings_dialog.ui +++ b/scwx-qt/source/scwx/qt/ui/settings_dialog.ui @@ -698,6 +698,62 @@ + + + + + + + ... + + + + :/res/icons/font-awesome-6/rotate-left-solid.svg:/res/icons/font-awesome-6/rotate-left-solid.svg + + + + + + + + :/res/icons/font-awesome-6/stop-solid.svg:/res/icons/font-awesome-6/stop-solid.svg + + + + + + + 4 + + + -180.000000000000000 + + + 180.000000000000000 + + + 0.000100000000000 + + + + + + + ... + + + + + + + ... + + + + :/res/icons/font-awesome-6/rotate-left-solid.svg:/res/icons/font-awesome-6/rotate-left-solid.svg + + + @@ -709,6 +765,30 @@ + + + + + :/res/icons/font-awesome-6/play-solid.svg:/res/icons/font-awesome-6/play-solid.svg + + + + + + + 4 + + + -90.000000000000000 + + + 90.000000000000000 + + + 0.000100000000000 + + + @@ -716,6 +796,13 @@ + + + + County + + + @@ -723,6 +810,60 @@ + + + + + 0 + 0 + + + + + + + + ... + + + + :/res/icons/font-awesome-6/rotate-left-solid.svg:/res/icons/font-awesome-6/rotate-left-solid.svg + + + + + + + Sound + + + + + + + + 0 + 0 + + + + + + + + + + + + 0 + 0 + + + + true + + + @@ -741,105 +882,31 @@ - - - - - :/res/icons/font-awesome-6/stop-solid.svg:/res/icons/font-awesome-6/stop-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 - - - - - - - - :/res/icons/font-awesome-6/play-solid.svg:/res/icons/font-awesome-6/play-solid.svg - - - - - - - Sound - - - - + - County + Radius - - + + 4 - -180.000000000000000 + 0.000000000000000 - 180.000000000000000 + 9999999999999.000000000000000 - 0.000100000000000 + 0.010000000000000 - - - - 4 - - - -90.000000000000000 - - - 90.000000000000000 - - - 0.000100000000000 - - - - - - - - 0 - 0 - - - - - - - - + ... @@ -849,39 +916,6 @@ - - - - ... - - - - - - - - 0 - 0 - - - - - - - - - - - - 0 - 0 - - - - true - - -