From 0a890f5df875d4023dfa70f95703a178a11ddd2e Mon Sep 17 00:00:00 2001 From: Dan Paulat Date: Sun, 5 Jun 2022 08:46:19 -0500 Subject: [PATCH] Allow product code to be retrieved from file instead of always being caller-supplied --- scwx-qt/source/scwx/qt/main/main_window.cpp | 4 +- scwx-qt/source/scwx/qt/map/map_context.hpp | 10 +++- scwx-qt/source/scwx/qt/map/map_widget.cpp | 57 +++++++++---------- .../scwx/qt/types/radar_product_record.cpp | 8 +++ .../scwx/qt/types/radar_product_record.hpp | 1 + 5 files changed, 47 insertions(+), 33 deletions(-) diff --git a/scwx-qt/source/scwx/qt/main/main_window.cpp b/scwx-qt/source/scwx/qt/main/main_window.cpp index 7c4347ce..6a0356a1 100644 --- a/scwx-qt/source/scwx/qt/main/main_window.cpp +++ b/scwx-qt/source/scwx/qt/main/main_window.cpp @@ -148,12 +148,12 @@ MainWindow::MainWindow(QWidget* parent) : if (p->maps_.size() > 2 && p->maps_.at(2) != nullptr) { p->SelectRadarProduct( - p->maps_.at(2), common::RadarProductGroup::Level3, "N0B", 153); + p->maps_.at(2), common::RadarProductGroup::Level3, "N0B", 0); } if (p->maps_.size() > 3 && p->maps_.at(3) != nullptr) { p->SelectRadarProduct( - p->maps_.at(3), common::RadarProductGroup::Level3, "N0G", 154); + p->maps_.at(3), common::RadarProductGroup::Level3, "N0G", 0); } connect(qApp, diff --git a/scwx-qt/source/scwx/qt/map/map_context.hpp b/scwx-qt/source/scwx/qt/map/map_context.hpp index 9087a6bc..7a249286 100644 --- a/scwx-qt/source/scwx/qt/map/map_context.hpp +++ b/scwx-qt/source/scwx/qt/map/map_context.hpp @@ -15,7 +15,12 @@ struct MapContext { explicit MapContext( std::shared_ptr radarProductView = nullptr) : - gl_ {}, settings_ {}, radarProductView_ {radarProductView} + gl_ {}, + settings_ {}, + radarProductView_ {radarProductView}, + radarProductGroup_ {common::RadarProductGroup::Unknown}, + radarProduct_ {"???"}, + radarProductCode_ {0} { } ~MapContext() = default; @@ -29,6 +34,9 @@ struct MapContext gl::OpenGLFunctions gl_; MapSettings settings_; std::shared_ptr radarProductView_; + common::RadarProductGroup radarProductGroup_; + std::string radarProduct_; + int16_t radarProductCode_; }; } // namespace map diff --git a/scwx-qt/source/scwx/qt/map/map_widget.cpp b/scwx-qt/source/scwx/qt/map/map_widget.cpp index a712dc7e..03bce14b 100644 --- a/scwx-qt/source/scwx/qt/map/map_widget.cpp +++ b/scwx-qt/source/scwx/qt/map/map_widget.cpp @@ -266,12 +266,14 @@ void MapWidget::SelectRadarProduct(common::RadarProductGroup group, { common::Level2Product level2Product = p->GetLevel2ProductOrDefault(productName); - productName = common::GetLevel2Name(level2Product); + productName = common::GetLevel2Name(level2Product); + p->selectedLevel2Product_ = level2Product; } if (radarProductView == nullptr || radarProductView->GetRadarProductGroup() != group || - radarProductView->GetRadarProductName() != productName) + radarProductView->GetRadarProductName() != productName || + p->context_->radarProductCode_ != productCode) { p->RadarProductViewDisconnect(); @@ -282,24 +284,27 @@ void MapWidget::SelectRadarProduct(common::RadarProductGroup group, radarProductViewCreated = true; } - radarProductView->SelectTime(p->selectedTime_); - if (group == common::RadarProductGroup::Level2) - { - p->selectedLevel2Product_ = common::GetLevel2Product(productName); - } + p->context_->radarProductGroup_ = group; + p->context_->radarProduct_ = productName; + p->context_->radarProductCode_ = productCode; - if (radarProductViewCreated) + if (radarProductView != nullptr) { - const std::string palette = - (group == common::RadarProductGroup::Level2) ? - common::GetLevel2Palette(common::GetLevel2Product(productName)) : - common::GetLevel3Palette(productCode); - p->InitializeNewRadarProductView(palette); - } - else - { - radarProductView->Update(); + radarProductView->SelectTime(p->selectedTime_); + + if (radarProductViewCreated) + { + const std::string palette = + (group == common::RadarProductGroup::Level2) ? + common::GetLevel2Palette(common::GetLevel2Product(productName)) : + common::GetLevel3Palette(productCode); + p->InitializeNewRadarProductView(palette); + } + else + { + radarProductView->Update(); + } } if (p->autoRefreshEnabled_) @@ -313,16 +318,9 @@ void MapWidget::SelectRadarProduct( { const std::string radarId = record->radar_id(); common::RadarProductGroup group = record->radar_product_group(); - const std::string product = record->radar_product(); - std::chrono::system_clock::time_point time = record->time(); - - int16_t productCode = 0; - - std::shared_ptr level3File = record->level3_file(); - if (level3File != nullptr && level3File->message() != nullptr) - { - productCode = level3File->message()->header().message_code(); - } + const std::string product = record->radar_product(); + std::chrono::system_clock::time_point time = record->time(); + int16_t productCode = record->product_code(); logger_->debug("SelectRadarProduct: {}, {}, {}, {}", radarId, @@ -598,10 +596,9 @@ void MapWidgetImpl::AutoRefreshConnect() const std::string& product, std::chrono::system_clock::time_point latestTime) { - if (autoRefreshEnabled_ && context_->radarProductView_ != nullptr && - context_->radarProductView_->GetRadarProductGroup() == group && + if (autoRefreshEnabled_ && context_->radarProductGroup_ == group && (group == common::RadarProductGroup::Level2 || - context_->radarProductView_->GetRadarProductName() == product)) + context_->radarProduct_ == product)) { // Create file request std::shared_ptr request = diff --git a/scwx-qt/source/scwx/qt/types/radar_product_record.cpp b/scwx-qt/source/scwx/qt/types/radar_product_record.cpp index daf4a306..f16ec0e0 100644 --- a/scwx-qt/source/scwx/qt/types/radar_product_record.cpp +++ b/scwx-qt/source/scwx/qt/types/radar_product_record.cpp @@ -29,6 +29,7 @@ public: ~RadarProductRecordImpl() {} std::shared_ptr nexradFile_; + int16_t productCode_; std::string radarId_; std::string radarProduct_; common::RadarProductGroup radarProductGroup_; @@ -51,6 +52,7 @@ RadarProductRecord::RadarProductRecord( p->radarProductGroup_ = common::RadarProductGroup::Level2; p->radarId_ = level2File->icao(); p->siteId_ = common::GetSiteId(p->radarId_); + p->productCode_ = 0; julianDate = level2File->julian_date(); milliseconds = level2File->milliseconds(); } @@ -60,6 +62,7 @@ RadarProductRecord::RadarProductRecord( p->radarProduct_ = level3File->wmo_header()->product_category(); p->siteId_ = level3File->wmo_header()->product_designator(); p->radarId_ = config::GetRadarIdFromSiteId(p->siteId_); + p->productCode_ = level3File->message()->header().message_code(); auto descriptionBlock = level3File->message()->description_block(); @@ -100,6 +103,11 @@ std::shared_ptr RadarProductRecord::nexrad_file() const return p->nexradFile_; } +int16_t RadarProductRecord::product_code() const +{ + return p->productCode_; +} + std::string RadarProductRecord::radar_id() const { return p->radarId_; diff --git a/scwx-qt/source/scwx/qt/types/radar_product_record.hpp b/scwx-qt/source/scwx/qt/types/radar_product_record.hpp index bea5f59a..ab1775d0 100644 --- a/scwx-qt/source/scwx/qt/types/radar_product_record.hpp +++ b/scwx-qt/source/scwx/qt/types/radar_product_record.hpp @@ -31,6 +31,7 @@ public: std::shared_ptr level2_file() const; std::shared_ptr level3_file() const; std::shared_ptr nexrad_file() const; + int16_t product_code() const; std::string radar_id() const; std::string radar_product() const; common::RadarProductGroup radar_product_group() const;