Update radar product and elevation selection when active map changes

This commit is contained in:
Dan Paulat 2021-11-28 10:44:34 -06:00
parent b78011a2d3
commit 337296ac3c
8 changed files with 159 additions and 31 deletions

View file

@ -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();

View file

@ -115,19 +115,61 @@ MapWidget::~MapWidget()
}
float MapWidget::GetElevation() const
{
if (p->context_->radarProductView_ != nullptr)
{
return p->context_->radarProductView_->elevation();
}
else
{
return 0.0f;
}
}
std::vector<float> MapWidget::GetElevationCuts() const
{
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)
{
if (p->context_->radarProductView_ != nullptr)
{
p->context_->radarProductView_->SelectElevation(elevation);
}
}
void MapWidget::SelectRadarProduct(common::Level2Product product)
{

View file

@ -33,6 +33,9 @@ public:
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);

View file

@ -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_;

View file

@ -40,6 +40,8 @@ public:
void LoadColorTable(std::shared_ptr<common::ColorTable> colorTable) override;
void SelectElevation(float elevation) 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;

View file

@ -1,6 +1,7 @@
#pragma once
#include <scwx/common/color_table.hpp>
#include <scwx/common/products.hpp>
#include <chrono>
#include <memory>
@ -38,6 +39,8 @@ public:
LoadColorTable(std::shared_ptr<common::ColorTable> colorTable) = 0;
virtual void SelectElevation(float elevation);
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;

View file

@ -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

View file

@ -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);