From a6974e31a2277da4435262caf959841f2c31218c Mon Sep 17 00:00:00 2001 From: Dan Paulat Date: Wed, 21 Dec 2022 15:41:49 -0600 Subject: [PATCH] Radar site selection dialog in settings --- scwx-qt/source/scwx/qt/ui/settings_dialog.cpp | 63 ++++++++++++++++--- scwx-qt/source/scwx/qt/ui/settings_dialog.ui | 33 ++++++---- 2 files changed, 73 insertions(+), 23 deletions(-) diff --git a/scwx-qt/source/scwx/qt/ui/settings_dialog.cpp b/scwx-qt/source/scwx/qt/ui/settings_dialog.cpp index 6aa8963d..2df86120 100644 --- a/scwx-qt/source/scwx/qt/ui/settings_dialog.cpp +++ b/scwx-qt/source/scwx/qt/ui/settings_dialog.cpp @@ -5,6 +5,7 @@ #include #include #include +#include #include @@ -46,14 +47,22 @@ static const std::array, 17> class SettingsDialogImpl { public: - explicit SettingsDialogImpl(SettingsDialog* self) : self_ {self} {} + explicit SettingsDialogImpl(SettingsDialog* self) : + self_ {self}, radarSiteDialog_ {new RadarSiteDialog(self)} + { + } ~SettingsDialogImpl() = default; + void ConnectSignals(); void SetupGeneralTab(); void SetupPalettesColorTablesTab(); void SetupPalettesAlertsTab(); - SettingsDialog* self_; + static std::string + RadarSiteLabel(std::shared_ptr& radarSite); + + SettingsDialog* self_; + RadarSiteDialog* radarSiteDialog_; settings::SettingsInterface defaultRadarSite_ {}; settings::SettingsInterface> fontSizes_ {}; @@ -82,10 +91,7 @@ SettingsDialog::SettingsDialog(QWidget* parent) : // Palettes > Alerts p->SetupPalettesAlertsTab(); - connect(ui->listWidget, - &QListWidget::currentRowChanged, - ui->stackedWidget, - &QStackedWidget::setCurrentIndex); + p->ConnectSignals(); } SettingsDialog::~SettingsDialog() @@ -93,6 +99,39 @@ SettingsDialog::~SettingsDialog() delete ui; } +void SettingsDialogImpl::ConnectSignals() +{ + QObject::connect(self_->ui->listWidget, + &QListWidget::currentRowChanged, + self_->ui->stackedWidget, + &QStackedWidget::setCurrentIndex); + + QObject::connect(self_->ui->radarSiteSelectButton, + &QAbstractButton::clicked, + self_, + [this]() { radarSiteDialog_->show(); }); + + QObject::connect(radarSiteDialog_, + &RadarSiteDialog::accepted, + self_, + [this]() + { + std::string id = radarSiteDialog_->radar_site(); + + std::shared_ptr radarSite = + config::RadarSite::Get(id); + + if (radarSite != nullptr) + { + self_->ui->radarSiteComboBox->setCurrentText( + QString::fromStdString(RadarSiteLabel(radarSite))); + } + }); + + // TODO: HandleMapUpdate for RadarSiteDialog, based on currently selected + // radar site +} + void SettingsDialogImpl::SetupGeneralTab() { auto radarSites = config::RadarSite::GetAll(); @@ -107,8 +146,7 @@ void SettingsDialogImpl::SetupGeneralTab() // Add sorted radar sites for (std::shared_ptr& radarSite : radarSites) { - QString text = QString::fromStdString( - std::format("{} ({})", radarSite->id(), radarSite->location_name())); + QString text = QString::fromStdString(RadarSiteLabel(radarSite)); self_->ui->radarSiteComboBox->addItem(text); } @@ -130,8 +168,7 @@ void SettingsDialogImpl::SetupGeneralTab() } // Add location details to the radar site - return std::format( - "{} ({})", radarSite->id(), radarSite->location_name()); + return RadarSiteLabel(radarSite); }); defaultRadarSite_.SetMapToValueFunction( [](const std::string& text) -> std::string @@ -268,6 +305,12 @@ void SettingsDialogImpl::SetupPalettesAlertsTab() } } +std::string SettingsDialogImpl::RadarSiteLabel( + std::shared_ptr& radarSite) +{ + return std::format("{} ({})", radarSite->id(), radarSite->location_name()); +} + } // namespace ui } // namespace qt } // namespace scwx diff --git a/scwx-qt/source/scwx/qt/ui/settings_dialog.ui b/scwx-qt/source/scwx/qt/ui/settings_dialog.ui index 0c72ab61..44b7456a 100644 --- a/scwx-qt/source/scwx/qt/ui/settings_dialog.ui +++ b/scwx-qt/source/scwx/qt/ui/settings_dialog.ui @@ -126,7 +126,7 @@ - + ... @@ -137,7 +137,7 @@ - + ... @@ -148,7 +148,7 @@ - + ... @@ -165,7 +165,7 @@ - + ... @@ -176,6 +176,9 @@ + + + @@ -183,6 +186,17 @@ + + + + ... + + + + :/res/icons/font-awesome-6/rotate-left-solid.svg:/res/icons/font-awesome-6/rotate-left-solid.svg + + + @@ -200,18 +214,11 @@ - - - - - + + ... - - - :/res/icons/font-awesome-6/rotate-left-solid.svg:/res/icons/font-awesome-6/rotate-left-solid.svg -