diff --git a/scwx-qt/source/scwx/qt/main/main_window.cpp b/scwx-qt/source/scwx/qt/main/main_window.cpp index fdeb2f08..750a5b3f 100644 --- a/scwx-qt/source/scwx/qt/main/main_window.cpp +++ b/scwx-qt/source/scwx/qt/main/main_window.cpp @@ -47,6 +47,9 @@ public: common::Level2Product product); void SetActiveMap(map::MapWidget* mapWidget); void UpdateElevationSelection(float elevation); + void UpdateLevel2ProductSelection(common::Level2Product product); + void UpdateRadarProductSelection(common::RadarProductGroup group, + const std::string& product); void UpdateRadarProductSettings(); MainWindow* mainWindow_; @@ -252,6 +255,9 @@ void MainWindowImpl::HandleFocusChange(QWidget* focused) if (mapWidget != nullptr) { SetActiveMap(mapWidget); + UpdateRadarProductSelection(mapWidget->GetRadarProductGroup(), + mapWidget->GetRadarProductName()); + UpdateRadarProductSettings(); } } @@ -285,20 +291,8 @@ void MainWindowImpl::SelectRadarProduct(map::MapWidget* mapWidget, if (mapWidget == activeMap_) { - for (QToolButton* toolButton : - mainWindow_->ui->level2ProductFrame->findChildren()) - { - if (toolButton->text().toStdString() == productName) - { - toolButton->setCheckable(true); - toolButton->setChecked(true); - } - else - { - toolButton->setChecked(false); - toolButton->setCheckable(false); - } - } + UpdateLevel2ProductSelection(product); + UpdateRadarProductSettings(); } mapWidget->SelectRadarProduct(product); @@ -349,6 +343,39 @@ void MainWindowImpl::UpdateMapParameters( } } +void MainWindowImpl::UpdateLevel2ProductSelection(common::Level2Product product) +{ + const std::string& productName = common::GetLevel2Name(product); + + for (QToolButton* toolButton : + mainWindow_->ui->level2ProductFrame->findChildren()) + { + if (toolButton->text().toStdString() == productName) + { + toolButton->setCheckable(true); + toolButton->setChecked(true); + } + else + { + toolButton->setChecked(false); + toolButton->setCheckable(false); + } + } +} + +void MainWindowImpl::UpdateRadarProductSelection( + common::RadarProductGroup group, const std::string& product) +{ + switch (group) + { + case common::RadarProductGroup::Level2: + UpdateLevel2ProductSelection(common::GetLevel2Product(product)); + break; + + default: UpdateLevel2ProductSelection(common::Level2Product::Unknown); break; + } +} + void MainWindowImpl::UpdateRadarProductSettings() { float currentElevation = activeMap_->GetElevation(); diff --git a/scwx-qt/source/scwx/qt/map/map_widget.cpp b/scwx-qt/source/scwx/qt/map/map_widget.cpp index 77d403d2..dd44658f 100644 --- a/scwx-qt/source/scwx/qt/map/map_widget.cpp +++ b/scwx-qt/source/scwx/qt/map/map_widget.cpp @@ -116,17 +116,59 @@ MapWidget::~MapWidget() float MapWidget::GetElevation() const { - return p->context_->radarProductView_->elevation(); + if (p->context_->radarProductView_ != nullptr) + { + return p->context_->radarProductView_->elevation(); + } + else + { + return 0.0f; + } } std::vector MapWidget::GetElevationCuts() const { - return p->context_->radarProductView_->GetElevationCuts(); + if (p->context_->radarProductView_ != nullptr) + { + return p->context_->radarProductView_->GetElevationCuts(); + } + else + { + return {}; + } +} + +common::RadarProductGroup MapWidget::GetRadarProductGroup() const +{ + if (p->context_->radarProductView_ != nullptr) + { + return p->context_->radarProductView_->GetRadarProductGroup(); + } + else + { + return common::RadarProductGroup::Unknown; + } +} + +std::string MapWidget::GetRadarProductName() const +{ + + if (p->context_->radarProductView_ != nullptr) + { + return p->context_->radarProductView_->GetRadarProductName(); + } + else + { + return "?"; + } } void MapWidget::SelectElevation(float elevation) { - p->context_->radarProductView_->SelectElevation(elevation); + if (p->context_->radarProductView_ != nullptr) + { + p->context_->radarProductView_->SelectElevation(elevation); + } } void MapWidget::SelectRadarProduct(common::Level2Product product) diff --git a/scwx-qt/source/scwx/qt/map/map_widget.hpp b/scwx-qt/source/scwx/qt/map/map_widget.hpp index 21139f33..8b300c35 100644 --- a/scwx-qt/source/scwx/qt/map/map_widget.hpp +++ b/scwx-qt/source/scwx/qt/map/map_widget.hpp @@ -31,16 +31,19 @@ public: explicit MapWidget(const QMapboxGLSettings&); ~MapWidget(); - float GetElevation() const; - std::vector GetElevationCuts() const; - void SelectElevation(float elevation); - void SelectRadarProduct(common::Level2Product product); - void SetActive(bool isActive); - void SetMapParameters(double latitude, - double longitude, - double zoom, - double bearing, - double pitch); + float GetElevation() const; + std::vector GetElevationCuts() const; + common::RadarProductGroup GetRadarProductGroup() const; + std::string GetRadarProductName() const; + + void SelectElevation(float elevation); + void SelectRadarProduct(common::Level2Product product); + void SetActive(bool isActive); + void SetMapParameters(double latitude, + double longitude, + double zoom, + double bearing, + double pitch); private: void changeStyle(); diff --git a/scwx-qt/source/scwx/qt/view/level2_product_view.cpp b/scwx-qt/source/scwx/qt/view/level2_product_view.cpp index 133a0740..dbef9c0e 100644 --- a/scwx-qt/source/scwx/qt/view/level2_product_view.cpp +++ b/scwx-qt/source/scwx/qt/view/level2_product_view.cpp @@ -178,6 +178,16 @@ const std::vector& Level2ProductView::vertices() const return p->vertices_; } +common::RadarProductGroup Level2ProductView::GetRadarProductGroup() const +{ + return common::RadarProductGroup::Level2; +} + +std::string Level2ProductView::GetRadarProductName() const +{ + return common::GetLevel2Name(p->product_); +} + std::vector Level2ProductView::GetElevationCuts() const { return p->elevationCuts_; diff --git a/scwx-qt/source/scwx/qt/view/level2_product_view.hpp b/scwx-qt/source/scwx/qt/view/level2_product_view.hpp index 643b222b..f8758ff3 100644 --- a/scwx-qt/source/scwx/qt/view/level2_product_view.hpp +++ b/scwx-qt/source/scwx/qt/view/level2_product_view.hpp @@ -40,7 +40,9 @@ public: void LoadColorTable(std::shared_ptr colorTable) override; void SelectElevation(float elevation) override; - std::vector GetElevationCuts() const override; + common::RadarProductGroup GetRadarProductGroup() const override; + std::string GetRadarProductName() const override; + std::vector GetElevationCuts() const override; std::tuple GetMomentData() const override; std::tuple GetCfpMomentData() const override; diff --git a/scwx-qt/source/scwx/qt/view/radar_product_view.hpp b/scwx-qt/source/scwx/qt/view/radar_product_view.hpp index 1f91b37c..cc53e688 100644 --- a/scwx-qt/source/scwx/qt/view/radar_product_view.hpp +++ b/scwx-qt/source/scwx/qt/view/radar_product_view.hpp @@ -1,6 +1,7 @@ #pragma once #include +#include #include #include @@ -38,7 +39,9 @@ public: LoadColorTable(std::shared_ptr colorTable) = 0; virtual void SelectElevation(float elevation); - virtual std::vector GetElevationCuts() const; + virtual common::RadarProductGroup GetRadarProductGroup() const = 0; + virtual std::string GetRadarProductName() const = 0; + virtual std::vector GetElevationCuts() const; virtual std::tuple GetMomentData() const = 0; virtual std::tuple GetCfpMomentData() const; diff --git a/wxdata/include/scwx/common/products.hpp b/wxdata/include/scwx/common/products.hpp index 6e733b77..4dac6456 100644 --- a/wxdata/include/scwx/common/products.hpp +++ b/wxdata/include/scwx/common/products.hpp @@ -9,7 +9,16 @@ namespace scwx namespace common { -const std::string LEVEL2_GROUP_ID = "L2"; +enum class RadarProductGroup +{ + Level2, + Level3, + Unknown +}; +typedef util::Iterator + RadarProductGroupIterator; enum class Level2Product { @@ -27,10 +36,13 @@ typedef util::Iterator Level2ProductIterator; +const std::string& GetRadarProductGroupName(RadarProductGroup group); +const RadarProductGroup GetRadarProductGroup(const std::string& name); + const std::string& GetLevel2Name(Level2Product product); const std::string& GetLevel2Description(Level2Product product); const std::string& GetLevel2Palette(Level2Product product); -const Level2Product GetLevel2Product(const std::string& id); +const Level2Product GetLevel2Product(const std::string& name); } // namespace common } // namespace scwx diff --git a/wxdata/source/scwx/common/products.cpp b/wxdata/source/scwx/common/products.cpp index d475a603..69577e16 100644 --- a/wxdata/source/scwx/common/products.cpp +++ b/wxdata/source/scwx/common/products.cpp @@ -7,6 +7,11 @@ namespace scwx namespace common { +static const std::unordered_map + productGroupName_ {{RadarProductGroup::Level2, "L2"}, + {RadarProductGroup::Level3, "L3"}, + {RadarProductGroup::Unknown, "?"}}; + static const std::unordered_map level2Name_ { {Level2Product::Reflectivity, "REF"}, {Level2Product::Velocity, "VEL"}, @@ -37,6 +42,30 @@ static const std::unordered_map level2Palette_ { {Level2Product::ClutterFilterPowerRemoved, "???"}, {Level2Product::Unknown, "???"}}; +const std::string& GetProductGroupName(RadarProductGroup group) +{ + return productGroupName_.at(group); +} + +const RadarProductGroup GetProductGroup(const std::string& name) +{ + auto result = std::find_if( + productGroupName_.cbegin(), + productGroupName_.cend(), + [&](const std::pair& pair) -> bool { + return pair.second == name; + }); + + if (result != productGroupName_.cend()) + { + return result->first; + } + else + { + return RadarProductGroup::Unknown; + } +} + const std::string& GetLevel2Name(Level2Product product) { return level2Name_.at(product);