From 6509fc7043fc7d77885e82182d99fcdcef6ce91b Mon Sep 17 00:00:00 2001 From: AdenKoperczak Date: Fri, 14 Mar 2025 12:10:58 -0400 Subject: [PATCH] Update L3 product category selection to work better for tdwr --- .../scwx/qt/ui/level3_products_widget.cpp | 17 ++++++++++++-- wxdata/include/scwx/common/products.hpp | 5 +++-- wxdata/source/scwx/common/products.cpp | 22 +++++++++++++++++-- 3 files changed, 38 insertions(+), 6 deletions(-) diff --git a/scwx-qt/source/scwx/qt/ui/level3_products_widget.cpp b/scwx-qt/source/scwx/qt/ui/level3_products_widget.cpp index 98f091ac..18a90313 100644 --- a/scwx-qt/source/scwx/qt/ui/level3_products_widget.cpp +++ b/scwx-qt/source/scwx/qt/ui/level3_products_widget.cpp @@ -60,7 +60,9 @@ public: categoryButtons_ {}, productTiltMap_ {}, awipsProductMap_ {}, - awipsProductMutex_ {} + awipsProductMutex_ {}, + categoryMap_ {}, + categoryMapMutex_ {} { layout_->setContentsMargins(0, 0, 0, 0); layout_->addWidget(productsWidget_); @@ -183,6 +185,9 @@ public: std::unordered_map awipsProductMap_; std::shared_mutex awipsProductMutex_; + common::Level3ProductCategoryMap categoryMap_; + std::shared_mutex categoryMapMutex_; + std::string currentAwipsId_ {}; QAction* currentProductTiltAction_ {nullptr}; @@ -322,9 +327,11 @@ void Level3ProductsWidgetImpl::SelectProductCategory( { UpdateCategorySelection(category); + std::shared_lock lock {categoryMapMutex_}; + Q_EMIT self_->RadarProductSelected( common::RadarProductGroup::Level3, - common::GetLevel3CategoryDefaultProduct(category), + common::GetLevel3CategoryDefaultProduct(category, categoryMap_), 0); } @@ -333,6 +340,12 @@ void Level3ProductsWidget::UpdateAvailableProducts( { logger_->trace("UpdateAvailableProducts()"); + // Save the category map + { + std::unique_lock lock {p->categoryMapMutex_}; + p->categoryMap_ = updatedCategoryMap; + } + // Iterate through each category tool button std::for_each( p->categoryButtons_.cbegin(), diff --git a/wxdata/include/scwx/common/products.hpp b/wxdata/include/scwx/common/products.hpp index 97d9c324..f4891c6a 100644 --- a/wxdata/include/scwx/common/products.hpp +++ b/wxdata/include/scwx/common/products.hpp @@ -73,8 +73,9 @@ Level2Product GetLevel2Product(const std::string& name); const std::string& GetLevel3CategoryName(Level3ProductCategory category); const std::string& GetLevel3CategoryDescription(Level3ProductCategory category); -const std::string& -GetLevel3CategoryDefaultProduct(Level3ProductCategory category); +std::string +GetLevel3CategoryDefaultProduct(Level3ProductCategory category, + const Level3ProductCategoryMap& categoryMap); Level3ProductCategory GetLevel3Category(const std::string& categoryName); Level3ProductCategory GetLevel3CategoryByProduct(const std::string& productName); diff --git a/wxdata/source/scwx/common/products.cpp b/wxdata/source/scwx/common/products.cpp index 3e7a3fe6..3478b7dd 100644 --- a/wxdata/source/scwx/common/products.cpp +++ b/wxdata/source/scwx/common/products.cpp @@ -298,9 +298,27 @@ const std::string& GetLevel3CategoryDescription(Level3ProductCategory category) return level3CategoryDescription_.at(category); } -const std::string& -GetLevel3CategoryDefaultProduct(Level3ProductCategory category) +std::string +GetLevel3CategoryDefaultProduct(Level3ProductCategory category, + const Level3ProductCategoryMap& categoryMap) { + const auto& productsIt = categoryMap.find(category); + if (productsIt == categoryMap.cend()) + { + return level3CategoryDefaultAwipsId_.at(category); + } + + const auto& productsSiteHas = productsIt->second; + const auto& productList = level3CategoryProductList_.at(category); + for (auto& product : productList) + { + const auto& tiltsIt = productsSiteHas.find(product); + if (tiltsIt != productsSiteHas.cend() && tiltsIt->second.size() > 0) + { + return tiltsIt->second[0]; + } + } + return level3CategoryDefaultAwipsId_.at(category); }