mirror of
				https://github.com/ciphervance/supercell-wx.git
				synced 2025-10-31 10:10:05 +00:00 
			
		
		
		
	Update radar product and elevation selection when active map changes
This commit is contained in:
		
							parent
							
								
									b78011a2d3
								
							
						
					
					
						commit
						337296ac3c
					
				
					 8 changed files with 159 additions and 31 deletions
				
			
		|  | @ -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<QToolButton*>()) | ||||
|       { | ||||
|          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<QToolButton*>()) | ||||
|    { | ||||
|       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(); | ||||
|  |  | |||
|  | @ -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<float> 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) | ||||
|  |  | |||
|  | @ -31,16 +31,19 @@ public: | |||
|    explicit MapWidget(const QMapboxGLSettings&); | ||||
|    ~MapWidget(); | ||||
| 
 | ||||
|    float              GetElevation() const; | ||||
|    std::vector<float> 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<float>        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(); | ||||
|  |  | |||
|  | @ -178,6 +178,16 @@ const std::vector<float>& 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<float> Level2ProductView::GetElevationCuts() const | ||||
| { | ||||
|    return p->elevationCuts_; | ||||
|  |  | |||
|  | @ -40,7 +40,9 @@ public: | |||
|    void LoadColorTable(std::shared_ptr<common::ColorTable> colorTable) override; | ||||
|    void SelectElevation(float elevation) override; | ||||
| 
 | ||||
|    std::vector<float>                      GetElevationCuts() const override; | ||||
|    common::RadarProductGroup GetRadarProductGroup() const override; | ||||
|    std::string               GetRadarProductName() const override; | ||||
|    std::vector<float>        GetElevationCuts() const override; | ||||
|    std::tuple<const void*, size_t, size_t> GetMomentData() const override; | ||||
|    std::tuple<const void*, size_t, size_t> GetCfpMomentData() const override; | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,6 +1,7 @@ | |||
| #pragma once | ||||
| 
 | ||||
| #include <scwx/common/color_table.hpp> | ||||
| #include <scwx/common/products.hpp> | ||||
| 
 | ||||
| #include <chrono> | ||||
| #include <memory> | ||||
|  | @ -38,7 +39,9 @@ public: | |||
|    LoadColorTable(std::shared_ptr<common::ColorTable> colorTable) = 0; | ||||
|    virtual void SelectElevation(float elevation); | ||||
| 
 | ||||
|    virtual std::vector<float>                      GetElevationCuts() const; | ||||
|    virtual common::RadarProductGroup GetRadarProductGroup() const = 0; | ||||
|    virtual std::string               GetRadarProductName() const  = 0; | ||||
|    virtual std::vector<float>        GetElevationCuts() const; | ||||
|    virtual std::tuple<const void*, size_t, size_t> GetMomentData() const = 0; | ||||
|    virtual std::tuple<const void*, size_t, size_t> GetCfpMomentData() const; | ||||
| 
 | ||||
|  |  | |||
|  | @ -9,7 +9,16 @@ namespace scwx | |||
| namespace common | ||||
| { | ||||
| 
 | ||||
| const std::string LEVEL2_GROUP_ID = "L2"; | ||||
| enum class RadarProductGroup | ||||
| { | ||||
|    Level2, | ||||
|    Level3, | ||||
|    Unknown | ||||
| }; | ||||
| typedef util::Iterator<RadarProductGroup, | ||||
|                        RadarProductGroup::Level2, | ||||
|                        RadarProductGroup::Level3> | ||||
|    RadarProductGroupIterator; | ||||
| 
 | ||||
| enum class Level2Product | ||||
| { | ||||
|  | @ -27,10 +36,13 @@ typedef util::Iterator<Level2Product, | |||
|                        Level2Product::ClutterFilterPowerRemoved> | ||||
|    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
 | ||||
|  |  | |||
|  | @ -7,6 +7,11 @@ namespace scwx | |||
| namespace common | ||||
| { | ||||
| 
 | ||||
| static const std::unordered_map<RadarProductGroup, std::string> | ||||
|    productGroupName_ {{RadarProductGroup::Level2, "L2"}, | ||||
|                       {RadarProductGroup::Level3, "L3"}, | ||||
|                       {RadarProductGroup::Unknown, "?"}}; | ||||
| 
 | ||||
| static const std::unordered_map<Level2Product, std::string> level2Name_ { | ||||
|    {Level2Product::Reflectivity, "REF"}, | ||||
|    {Level2Product::Velocity, "VEL"}, | ||||
|  | @ -37,6 +42,30 @@ static const std::unordered_map<Level2Product, std::string> 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<RadarProductGroup, std::string>& 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); | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Dan Paulat
						Dan Paulat