Changed Radar Site mode to use its own selection (+default/follow)

This commit is contained in:
AdenKoperczak 2024-07-15 12:46:10 -04:00
parent 146055fb99
commit f7abda15c8
5 changed files with 228 additions and 92 deletions

View file

@ -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<config::RadarSite> 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<double>(
audioSettings.alert_radius().GetValue());
logger_->debug("alertRadius: {}", (double)alertRadius);
auto message = textEventManager_->message_list(key).at(messageIndex);
for (auto& segment : message->segments())

View file

@ -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<std::string> alertLocationMethod_ {"alert_location_method"};
SettingsVariable<double> alertLatitude_ {"alert_latitude"};
SettingsVariable<double> alertLongitude_ {"alert_longitude"};
SettingsVariable<std::string> alertRadarSite_ {"alert_radar_site"};
SettingsVariable<double> alertRadius_ {"alert_radius"};
SettingsVariable<std::string> alertCounty_ {"alert_county"};
SettingsVariable<bool> 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<double>& AudioSettings::alert_longitude() const
return p->alertLongitude_;
}
SettingsVariable<std::string>& AudioSettings::alert_radar_site() const
{
return p->alertRadarSite_;
}
SettingsVariable<double>& AudioSettings::alert_radius() const
{
return p->alertRadius_;

View file

@ -31,6 +31,7 @@ public:
SettingsVariable<double>& alert_latitude() const;
SettingsVariable<double>& alert_longitude() const;
SettingsVariable<double>& alert_radius() const;
SettingsVariable<std::string>& alert_radar_site() const;
SettingsVariable<std::string>& alert_county() const;
SettingsVariable<bool>& alert_enabled(awips::Phenomenon phenomenon) const;
SettingsVariable<bool>& ignore_missing_codecs() const;

View file

@ -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<std::string> alertAudioLocationMethod_ {};
settings::SettingsInterface<double> alertAudioLatitude_ {};
settings::SettingsInterface<double> alertAudioLongitude_ {};
settings::SettingsInterface<std::string> alertAudioRadarSite_ {};
settings::SettingsInterface<double> alertAudioRadius_ {};
settings::SettingsInterface<std::string> 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<config::RadarSite> 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<config::RadarSite>& 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<config::RadarSite>& 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<config::RadarSite> 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<config::RadarSite> radarSite = config::RadarSite::Get(id);
if (radarSite != nullptr)
{
alertAudioRadarSiteDialog_->HandleMapUpdate(radarSite->latitude(),
radarSite->longitude());
}
}
QFont SettingsDialogImpl::GetSelectedFont()
{
std::string fontFamily = fontFamilies_.at(selectedFontCategory_)

View file

@ -136,7 +136,7 @@
<rect>
<x>0</x>
<y>0</y>
<width>270</width>
<width>511</width>
<height>647</height>
</rect>
</property>
@ -610,7 +610,7 @@
<rect>
<x>0</x>
<y>0</y>
<width>80</width>
<width>66</width>
<height>18</height>
</rect>
</property>
@ -691,15 +691,32 @@
<string>Alerts</string>
</property>
<layout class="QGridLayout" name="gridLayout_10">
<item row="2" column="0">
<widget class="QLabel" name="label_14">
<item row="3" column="6">
<widget class="QToolButton" name="resetAlertAudioLongitudeButton">
<property name="text">
<string>Latitude</string>
<string>...</string>
</property>
<property name="icon">
<iconset resource="../../../../scwx-qt.qrc">
<normaloff>:/res/icons/font-awesome-6/rotate-left-solid.svg</normaloff>:/res/icons/font-awesome-6/rotate-left-solid.svg</iconset>
</property>
</widget>
</item>
<item row="0" column="1" colspan="2">
<widget class="QLineEdit" name="alertAudioSoundLineEdit"/>
<item row="5" column="1" colspan="2">
<widget class="QDoubleSpinBox" name="alertAudioRadiusSpinBox">
<property name="decimals">
<number>2</number>
</property>
<property name="minimum">
<double>0.000000000000000</double>
</property>
<property name="maximum">
<double>9999999999999.000000000000000</double>
</property>
<property name="singleStep">
<double>0.010000000000000</double>
</property>
</widget>
</item>
<item row="2" column="6">
<widget class="QToolButton" name="resetAlertAudioLatitudeButton">
@ -712,11 +729,38 @@
</property>
</widget>
</item>
<item row="0" column="5">
<widget class="QToolButton" name="alertAudioSoundStopButton">
<item row="1" column="1" colspan="2">
<widget class="QComboBox" name="alertAudioLocationMethodComboBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item row="7" column="0">
<widget class="QLabel" name="label_19">
<property name="text">
<string>County</string>
</property>
</widget>
</item>
<item row="0" column="6">
<widget class="QToolButton" name="resetAlertAudioSoundButton">
<property name="text">
<string>...</string>
</property>
<property name="icon">
<iconset resource="../../../../scwx-qt.qrc">
<normaloff>:/res/icons/font-awesome-6/stop-solid.svg</normaloff>:/res/icons/font-awesome-6/stop-solid.svg</iconset>
<normaloff>:/res/icons/font-awesome-6/rotate-left-solid.svg</normaloff>:/res/icons/font-awesome-6/rotate-left-solid.svg</iconset>
</property>
</widget>
</item>
<item row="5" column="3">
<widget class="QLabel" name="alertAudioRadiusUnitsLabel">
<property name="text">
<string/>
</property>
</widget>
</item>
@ -736,24 +780,6 @@
</property>
</widget>
</item>
<item row="5" column="3">
<widget class="QToolButton" name="alertAudioCountySelectButton">
<property name="text">
<string>...</string>
</property>
</widget>
</item>
<item row="0" column="6">
<widget class="QToolButton" name="resetAlertAudioSoundButton">
<property name="text">
<string>...</string>
</property>
<property name="icon">
<iconset resource="../../../../scwx-qt.qrc">
<normaloff>:/res/icons/font-awesome-6/rotate-left-solid.svg</normaloff>:/res/icons/font-awesome-6/rotate-left-solid.svg</iconset>
</property>
</widget>
</item>
<item row="1" column="6">
<widget class="QToolButton" name="resetAlertAudioLocationMethodButton">
<property name="text">
@ -765,14 +791,23 @@
</property>
</widget>
</item>
<item row="0" column="4">
<widget class="QToolButton" name="alertAudioSoundTestButton">
<property name="icon">
<iconset resource="../../../../scwx-qt.qrc">
<normaloff>:/res/icons/font-awesome-6/play-solid.svg</normaloff>:/res/icons/font-awesome-6/play-solid.svg</iconset>
<item row="0" column="3">
<widget class="QToolButton" name="alertAudioSoundSelectButton">
<property name="text">
<string>...</string>
</property>
</widget>
</item>
<item row="7" column="3">
<widget class="QToolButton" name="alertAudioCountySelectButton">
<property name="text">
<string>...</string>
</property>
</widget>
</item>
<item row="0" column="1" colspan="2">
<widget class="QLineEdit" name="alertAudioSoundLineEdit"/>
</item>
<item row="2" column="1" colspan="2">
<widget class="QDoubleSpinBox" name="alertAudioLatitudeSpinBox">
<property name="decimals">
@ -789,39 +824,16 @@
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_16">
<property name="text">
<string>Longitude</string>
</property>
</widget>
</item>
<item row="5" column="0">
<widget class="QLabel" name="label_19">
<property name="text">
<string>County</string>
</property>
</widget>
</item>
<item row="0" column="3">
<widget class="QToolButton" name="alertAudioSoundSelectButton">
<property name="text">
<string>...</string>
</property>
</widget>
</item>
<item row="1" column="1" colspan="2">
<widget class="QComboBox" name="alertAudioLocationMethodComboBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
<item row="0" column="5">
<widget class="QToolButton" name="alertAudioSoundStopButton">
<property name="icon">
<iconset resource="../../../../scwx-qt.qrc">
<normaloff>:/res/icons/font-awesome-6/stop-solid.svg</normaloff>:/res/icons/font-awesome-6/stop-solid.svg</iconset>
</property>
</widget>
</item>
<item row="5" column="6">
<widget class="QToolButton" name="resetAlertAudioCountyButton">
<widget class="QToolButton" name="resetAlertAudioRadiusButton">
<property name="text">
<string>...</string>
</property>
@ -831,6 +843,13 @@
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_14">
<property name="text">
<string>Latitude</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label_17">
<property name="text">
@ -838,7 +857,7 @@
</property>
</widget>
</item>
<item row="5" column="2">
<item row="7" column="2">
<widget class="QLabel" name="alertAudioCountyLabel">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
@ -851,7 +870,15 @@
</property>
</widget>
</item>
<item row="5" column="1">
<item row="0" column="4">
<widget class="QToolButton" name="alertAudioSoundTestButton">
<property name="icon">
<iconset resource="../../../../scwx-qt.qrc">
<normaloff>:/res/icons/font-awesome-6/play-solid.svg</normaloff>:/res/icons/font-awesome-6/play-solid.svg</iconset>
</property>
</widget>
</item>
<item row="7" column="1">
<widget class="QLineEdit" name="alertAudioCountyLineEdit">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
@ -871,8 +898,8 @@
</property>
</widget>
</item>
<item row="3" column="6">
<widget class="QToolButton" name="resetAlertAudioLongitudeButton">
<item row="7" column="6">
<widget class="QToolButton" name="resetAlertAudioCountyButton">
<property name="text">
<string>...</string>
</property>
@ -882,31 +909,36 @@
</property>
</widget>
</item>
<item row="4" column="0">
<item row="5" column="0">
<widget class="QLabel" name="alertAudioRadiusLabel">
<property name="text">
<string>Radius</string>
</property>
</widget>
</item>
<item row="4" column="1" colspan="2">
<widget class="QDoubleSpinBox" name="alertAudioRadiusSpinBox">
<property name="decimals">
<number>2</number>
<item row="3" column="0">
<widget class="QLabel" name="label_16">
<property name="text">
<string>Longitude</string>
</property>
<property name="minimum">
<double>0.000000000000000</double>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="label_28">
<property name="text">
<string>Radar Site</string>
</property>
<property name="maximum">
<double>9999999999999.000000000000000</double>
</property>
<property name="singleStep">
<double>0.010000000000000</double>
</widget>
</item>
<item row="4" column="3">
<widget class="QToolButton" name="alertAudioRadarSiteSelectButton">
<property name="text">
<string>...</string>
</property>
</widget>
</item>
<item row="4" column="6">
<widget class="QToolButton" name="resetAlertAudioRadiusButton">
<widget class="QToolButton" name="resetAlertAudioRadarSiteButton">
<property name="text">
<string>...</string>
</property>
@ -916,12 +948,8 @@
</property>
</widget>
</item>
<item row="4" column="3">
<widget class="QLabel" name="alertAudioRadiusUnitsLabel">
<property name="text">
<string/>
</property>
</widget>
<item row="4" column="1" colspan="2">
<widget class="QComboBox" name="alertAudioRadarSiteComboBox"/>
</item>
</layout>
</widget>