diff --git a/scwx-qt/source/scwx/qt/manager/alert_manager.cpp b/scwx-qt/source/scwx/qt/manager/alert_manager.cpp index 890a8e0e..edd2f28b 100644 --- a/scwx-qt/source/scwx/qt/manager/alert_manager.cpp +++ b/scwx-qt/source/scwx/qt/manager/alert_manager.cpp @@ -106,16 +106,23 @@ common::Coordinate AlertManager::Impl::CurrentCoordinate( } else if (locationMethod == types::LocationMethod::RadarSite) { + std::string radarSiteSelection = + audioSettings.alert_radar_site().GetValue(); std::shared_ptr radarSite; - if (radarSite_ == nullptr) + if (radarSiteSelection == "default") { - std::string siteId = - settings::GeneralSettings::Instance().default_radar_site().GetValue(); + std::string siteId = settings::GeneralSettings::Instance() + .default_radar_site() + .GetValue(); radarSite = config::RadarSite::Get(siteId); } + else if (radarSiteSelection == "follow") + { + radarSite = radarSite_; + } else { - radarSite = radarSite_; + radarSite = config::RadarSite::Get(radarSiteSelection); } if (radarSite != nullptr) @@ -145,8 +152,6 @@ void AlertManager::Impl::HandleAlert(const types::TextEventKey& key, auto alertRadius = units::length::kilometers( audioSettings.alert_radius().GetValue()); - logger_->debug("alertRadius: {}", (double)alertRadius); - auto message = textEventManager_->message_list(key).at(messageIndex); for (auto& segment : message->segments()) diff --git a/scwx-qt/source/scwx/qt/settings/audio_settings.cpp b/scwx-qt/source/scwx/qt/settings/audio_settings.cpp index d38bee64..8a9db458 100644 --- a/scwx-qt/source/scwx/qt/settings/audio_settings.cpp +++ b/scwx-qt/source/scwx/qt/settings/audio_settings.cpp @@ -38,6 +38,7 @@ public: alertLatitude_.SetDefault(0.0); alertLongitude_.SetDefault(0.0); alertRadius_.SetDefault(0.0); + alertRadarSite_.SetDefault("default"); ignoreMissingCodecs_.SetDefault(false); alertLatitude_.SetMinimum(-90.0); @@ -90,6 +91,7 @@ public: SettingsVariable alertLocationMethod_ {"alert_location_method"}; SettingsVariable alertLatitude_ {"alert_latitude"}; SettingsVariable alertLongitude_ {"alert_longitude"}; + SettingsVariable alertRadarSite_ {"alert_radar_site"}; SettingsVariable alertRadius_ {"alert_radius"}; SettingsVariable alertCounty_ {"alert_county"}; SettingsVariable ignoreMissingCodecs_ {"ignore_missing_codecs"}; @@ -106,6 +108,7 @@ AudioSettings::AudioSettings() : &p->alertLocationMethod_, &p->alertLatitude_, &p->alertLongitude_, + &p->alertRadarSite_, &p->alertRadius_, &p->alertCounty_, &p->ignoreMissingCodecs_}); @@ -139,6 +142,11 @@ SettingsVariable& AudioSettings::alert_longitude() const return p->alertLongitude_; } +SettingsVariable& AudioSettings::alert_radar_site() const +{ + return p->alertRadarSite_; +} + SettingsVariable& AudioSettings::alert_radius() const { return p->alertRadius_; diff --git a/scwx-qt/source/scwx/qt/settings/audio_settings.hpp b/scwx-qt/source/scwx/qt/settings/audio_settings.hpp index 6f9318fb..466c4f3a 100644 --- a/scwx-qt/source/scwx/qt/settings/audio_settings.hpp +++ b/scwx-qt/source/scwx/qt/settings/audio_settings.hpp @@ -31,6 +31,7 @@ public: SettingsVariable& alert_latitude() const; SettingsVariable& alert_longitude() const; SettingsVariable& alert_radius() const; + SettingsVariable& alert_radar_site() 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/ui/settings_dialog.cpp b/scwx-qt/source/scwx/qt/ui/settings_dialog.cpp index 3336c6e2..81dc3ce4 100644 --- a/scwx-qt/source/scwx/qt/ui/settings_dialog.cpp +++ b/scwx-qt/source/scwx/qt/ui/settings_dialog.cpp @@ -105,6 +105,7 @@ public: explicit SettingsDialogImpl(SettingsDialog* self) : self_ {self}, radarSiteDialog_ {new RadarSiteDialog(self)}, + alertAudioRadarSiteDialog_ {new RadarSiteDialog(self)}, gpsSourceDialog_ {new SerialPortDialog(self)}, countyDialog_ {new CountyDialog(self)}, fontDialog_ {new QFontDialog(self)}, @@ -136,6 +137,7 @@ public: &alertAudioLocationMethod_, &alertAudioLatitude_, &alertAudioLongitude_, + &alertAudioRadarSite_, &alertAudioRadius_, &alertAudioCounty_, &hoverTextWrap_, @@ -178,6 +180,7 @@ public: void ShowColorDialog(QLineEdit* lineEdit, QFrame* frame = nullptr); void UpdateRadarDialogLocation(const std::string& id); + void UpdateAlertRadarDialogLocation(const std::string& id); QFont GetSelectedFont(); void SelectFontCategory(types::FontCategory fontCategory); @@ -202,6 +205,7 @@ public: SettingsDialog* self_; RadarSiteDialog* radarSiteDialog_; + RadarSiteDialog* alertAudioRadarSiteDialog_; SerialPortDialog* gpsSourceDialog_; CountyDialog* countyDialog_; QFontDialog* fontDialog_; @@ -255,6 +259,7 @@ public: settings::SettingsInterface alertAudioLocationMethod_ {}; settings::SettingsInterface alertAudioLatitude_ {}; settings::SettingsInterface alertAudioLongitude_ {}; + settings::SettingsInterface alertAudioRadarSite_ {}; settings::SettingsInterface alertAudioRadius_ {}; settings::SettingsInterface alertAudioCounty_ {}; @@ -343,6 +348,30 @@ void SettingsDialogImpl::ConnectSignals() } }); + QObject::connect(self_->ui->alertAudioRadarSiteSelectButton, + &QAbstractButton::clicked, + self_, + [this]() { alertAudioRadarSiteDialog_->show(); }); + + QObject::connect(alertAudioRadarSiteDialog_, + &RadarSiteDialog::accepted, + self_, + [this]() + { + std::string id = + alertAudioRadarSiteDialog_->radar_site(); + + std::shared_ptr radarSite = + config::RadarSite::Get(id); + + if (radarSite != nullptr) + { + self_->ui->alertAudioRadarSiteComboBox + ->setCurrentText(QString::fromStdString( + RadarSiteLabel(radarSite))); + } + }); + QObject::connect(self_->ui->gpsSourceSelectButton, &QAbstractButton::clicked, self_, @@ -509,11 +538,18 @@ void SettingsDialogImpl::SetupGeneralTab() const std::shared_ptr& b) { return a->id() < b->id(); }); + // Add default and follow options to radar sites + self_->ui->alertAudioRadarSiteComboBox->addItem( + QString::fromStdString("default")); + self_->ui->alertAudioRadarSiteComboBox->addItem( + QString::fromStdString("follow")); + // Add sorted radar sites for (std::shared_ptr& radarSite : radarSites) { QString text = QString::fromStdString(RadarSiteLabel(radarSite)); self_->ui->radarSiteComboBox->addItem(text); + self_->ui->alertAudioRadarSiteComboBox->addItem(text); } defaultRadarSite_.SetSettingsVariable(generalSettings.default_radar_site()); @@ -905,6 +941,8 @@ void SettingsDialogImpl::SetupAudioTab() bool coordinateEntryEnabled = locationMethod == types::LocationMethod::Fixed; + bool radarSiteEntryEnable = + locationMethod == types::LocationMethod::RadarSite; bool radiusEntryEnable = locationMethod == types::LocationMethod::Fixed || locationMethod == types::LocationMethod::Track || @@ -921,6 +959,13 @@ void SettingsDialogImpl::SetupAudioTab() self_->ui->resetAlertAudioLongitudeButton->setEnabled( coordinateEntryEnabled); + self_->ui->alertAudioRadarSiteComboBox->setEnabled( + radarSiteEntryEnable); + self_->ui->alertAudioRadarSiteSelectButton->setEnabled( + radarSiteEntryEnable); + self_->ui->resetAlertAudioRadarSiteButton->setEnabled( + radarSiteEntryEnable); + self_->ui->alertAudioRadiusSpinBox->setEnabled( radiusEntryEnable); self_->ui->resetAlertAudioRadiusButton->setEnabled( @@ -997,12 +1042,48 @@ void SettingsDialogImpl::SetupAudioTab() alertAudioLongitude_.SetResetButton( self_->ui->resetAlertAudioLongitudeButton); + alertAudioRadarSite_.SetSettingsVariable(audioSettings.alert_radar_site()); + alertAudioRadarSite_.SetMapFromValueFunction( + [](const std::string& id) -> std::string + { + // Get the radar site associated with the ID + std::shared_ptr radarSite = + config::RadarSite::Get(id); + + if (radarSite == nullptr) + { + // No radar site found, just return the ID + return id; + } + + // Add location details to the radar site + return RadarSiteLabel(radarSite); + }); + alertAudioRadarSite_.SetMapToValueFunction( + [](const std::string& text) -> std::string + { + // Find the position of location details + size_t pos = text.rfind(" ("); + + if (pos == std::string::npos) + { + // No location details found, just return the text + return text; + } + + // Remove location details from the radar site + return text.substr(0, pos); + }); + alertAudioRadarSite_.SetEditWidget(self_->ui->alertAudioRadarSiteComboBox); + alertAudioRadarSite_.SetResetButton( + self_->ui->resetAlertAudioRadarSiteButton); + UpdateAlertRadarDialogLocation(audioSettings.alert_radar_site().GetValue()); + alertAudioRadius_.SetSettingsVariable(audioSettings.alert_radius()); alertAudioRadius_.SetEditWidget(self_->ui->alertAudioRadiusSpinBox); alertAudioRadius_.SetResetButton( self_->ui->resetAlertAudioRadiusButton); alertAudioRadius_.SetUnitLabel(self_->ui->alertAudioRadiusUnitsLabel); - auto alertAudioRadiusUpdateUnits = [this](const std::string& newValue) { types::DistanceUnits radiusUnits = @@ -1304,6 +1385,19 @@ void SettingsDialogImpl::UpdateRadarDialogLocation(const std::string& id) } } +void SettingsDialogImpl::UpdateAlertRadarDialogLocation(const std::string& id) +{ + std::shared_ptr radarSite = config::RadarSite::Get(id); + + if (radarSite != nullptr) + { + alertAudioRadarSiteDialog_->HandleMapUpdate(radarSite->latitude(), + radarSite->longitude()); + } +} + + + QFont SettingsDialogImpl::GetSelectedFont() { std::string fontFamily = fontFamilies_.at(selectedFontCategory_) diff --git a/scwx-qt/source/scwx/qt/ui/settings_dialog.ui b/scwx-qt/source/scwx/qt/ui/settings_dialog.ui index c46de4cd..8d69be46 100644 --- a/scwx-qt/source/scwx/qt/ui/settings_dialog.ui +++ b/scwx-qt/source/scwx/qt/ui/settings_dialog.ui @@ -136,7 +136,7 @@ 0 0 - 270 + 511 647 @@ -610,7 +610,7 @@ 0 0 - 80 + 66 18 @@ -691,15 +691,32 @@ Alerts - - + + - Latitude + ... + + + + :/res/icons/font-awesome-6/rotate-left-solid.svg:/res/icons/font-awesome-6/rotate-left-solid.svg - - + + + + 2 + + + 0.000000000000000 + + + 9999999999999.000000000000000 + + + 0.010000000000000 + + @@ -712,11 +729,38 @@ - - + + + + + 0 + 0 + + + + + + + + County + + + + + + + ... + - :/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 + + + + + + + @@ -736,24 +780,6 @@ - - - - ... - - - - - - - ... - - - - :/res/icons/font-awesome-6/rotate-left-solid.svg:/res/icons/font-awesome-6/rotate-left-solid.svg - - - @@ -765,14 +791,23 @@ - - - - - :/res/icons/font-awesome-6/play-solid.svg:/res/icons/font-awesome-6/play-solid.svg + + + + ... + + + + ... + + + + + + @@ -789,39 +824,16 @@ - - - - Longitude - - - - - - - County - - - - - - - ... - - - - - - - - 0 - 0 - + + + + + :/res/icons/font-awesome-6/stop-solid.svg:/res/icons/font-awesome-6/stop-solid.svg - + ... @@ -831,6 +843,13 @@ + + + + Latitude + + + @@ -838,7 +857,7 @@ - + @@ -851,7 +870,15 @@ - + + + + + :/res/icons/font-awesome-6/play-solid.svg:/res/icons/font-awesome-6/play-solid.svg + + + + @@ -871,8 +898,8 @@ - - + + ... @@ -882,31 +909,36 @@ - + Radius - - - - 2 + + + + Longitude - - 0.000000000000000 + + + + + + Radar Site - - 9999999999999.000000000000000 - - - 0.010000000000000 + + + + + + ... - + ... @@ -916,12 +948,8 @@ - - - - - - + +