mirror of
https://github.com/ciphervance/supercell-wx.git
synced 2025-10-30 22:30:06 +00:00
Display selected units for level 3 data
This commit is contained in:
parent
c2329d9623
commit
c8f1187755
3 changed files with 158 additions and 4 deletions
|
|
@ -25,6 +25,16 @@ static const std::unordered_map<AccumulationUnits, std::string>
|
||||||
{AccumulationUnits::User, "User-defined"},
|
{AccumulationUnits::User, "User-defined"},
|
||||||
{AccumulationUnits::Unknown, "?"}};
|
{AccumulationUnits::Unknown, "?"}};
|
||||||
|
|
||||||
|
static constexpr auto accumulationUnitsBase_ = units::millimeters<float> {1.0f};
|
||||||
|
static const std::unordered_map<AccumulationUnits, float>
|
||||||
|
accumulationUnitsScale_ {
|
||||||
|
{AccumulationUnits::Inches,
|
||||||
|
(accumulationUnitsBase_ / units::inches<float> {1.0f})},
|
||||||
|
{AccumulationUnits::Millimeters,
|
||||||
|
(accumulationUnitsBase_ / units::millimeters<float> {1.0f})},
|
||||||
|
{AccumulationUnits::User, 1.0f},
|
||||||
|
{AccumulationUnits::Unknown, 1.0f}};
|
||||||
|
|
||||||
static const std::unordered_map<EchoTopsUnits, std::string>
|
static const std::unordered_map<EchoTopsUnits, std::string>
|
||||||
echoTopsUnitsAbbreviation_ {{EchoTopsUnits::Kilofeet, "kft"},
|
echoTopsUnitsAbbreviation_ {{EchoTopsUnits::Kilofeet, "kft"},
|
||||||
{EchoTopsUnits::Kilometers, "km"},
|
{EchoTopsUnits::Kilometers, "km"},
|
||||||
|
|
@ -37,6 +47,15 @@ static const std::unordered_map<EchoTopsUnits, std::string> echoTopsUnitsName_ {
|
||||||
{EchoTopsUnits::User, "User-defined"},
|
{EchoTopsUnits::User, "User-defined"},
|
||||||
{EchoTopsUnits::Unknown, "?"}};
|
{EchoTopsUnits::Unknown, "?"}};
|
||||||
|
|
||||||
|
static constexpr auto echoTopsUnitsBase_ = units::kilometers<float> {1.0f};
|
||||||
|
static const std::unordered_map<EchoTopsUnits, float> echoTopsUnitsScale_ {
|
||||||
|
{EchoTopsUnits::Kilofeet,
|
||||||
|
(echoTopsUnitsBase_ / units::feet<float> {1000.0f})},
|
||||||
|
{EchoTopsUnits::Kilometers,
|
||||||
|
(echoTopsUnitsBase_ / units::kilometers<float> {1.0f})},
|
||||||
|
{EchoTopsUnits::User, 1.0f},
|
||||||
|
{EchoTopsUnits::Unknown, 1.0f}};
|
||||||
|
|
||||||
static const std::unordered_map<OtherUnits, std::string> otherUnitsName_ {
|
static const std::unordered_map<OtherUnits, std::string> otherUnitsName_ {
|
||||||
{OtherUnits::Default, "Default"},
|
{OtherUnits::Default, "Default"},
|
||||||
{OtherUnits::User, "User-defined"},
|
{OtherUnits::User, "User-defined"},
|
||||||
|
|
@ -87,6 +106,11 @@ const std::string& GetAccumulationUnitsName(AccumulationUnits units)
|
||||||
return accumulationUnitsName_.at(units);
|
return accumulationUnitsName_.at(units);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
float GetAccumulationUnitsScale(AccumulationUnits units)
|
||||||
|
{
|
||||||
|
return accumulationUnitsScale_.at(units);
|
||||||
|
}
|
||||||
|
|
||||||
const std::string& GetEchoTopsUnitsAbbreviation(EchoTopsUnits units)
|
const std::string& GetEchoTopsUnitsAbbreviation(EchoTopsUnits units)
|
||||||
{
|
{
|
||||||
return echoTopsUnitsAbbreviation_.at(units);
|
return echoTopsUnitsAbbreviation_.at(units);
|
||||||
|
|
@ -97,6 +121,11 @@ const std::string& GetEchoTopsUnitsName(EchoTopsUnits units)
|
||||||
return echoTopsUnitsName_.at(units);
|
return echoTopsUnitsName_.at(units);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
float GetEchoTopsUnitsScale(EchoTopsUnits units)
|
||||||
|
{
|
||||||
|
return echoTopsUnitsScale_.at(units);
|
||||||
|
}
|
||||||
|
|
||||||
const std::string& GetOtherUnitsName(OtherUnits units)
|
const std::string& GetOtherUnitsName(OtherUnits units)
|
||||||
{
|
{
|
||||||
return otherUnitsName_.at(units);
|
return otherUnitsName_.at(units);
|
||||||
|
|
|
||||||
|
|
@ -59,10 +59,12 @@ typedef scwx::util::
|
||||||
const std::string& GetAccumulationUnitsAbbreviation(AccumulationUnits units);
|
const std::string& GetAccumulationUnitsAbbreviation(AccumulationUnits units);
|
||||||
const std::string& GetAccumulationUnitsName(AccumulationUnits units);
|
const std::string& GetAccumulationUnitsName(AccumulationUnits units);
|
||||||
AccumulationUnits GetAccumulationUnitsFromName(const std::string& name);
|
AccumulationUnits GetAccumulationUnitsFromName(const std::string& name);
|
||||||
|
float GetAccumulationUnitsScale(AccumulationUnits units);
|
||||||
|
|
||||||
const std::string& GetEchoTopsUnitsAbbreviation(EchoTopsUnits units);
|
const std::string& GetEchoTopsUnitsAbbreviation(EchoTopsUnits units);
|
||||||
const std::string& GetEchoTopsUnitsName(EchoTopsUnits units);
|
const std::string& GetEchoTopsUnitsName(EchoTopsUnits units);
|
||||||
EchoTopsUnits GetEchoTopsUnitsFromName(const std::string& name);
|
EchoTopsUnits GetEchoTopsUnitsFromName(const std::string& name);
|
||||||
|
float GetEchoTopsUnitsScale(EchoTopsUnits units);
|
||||||
|
|
||||||
const std::string& GetOtherUnitsName(OtherUnits units);
|
const std::string& GetOtherUnitsName(OtherUnits units);
|
||||||
OtherUnits GetOtherUnitsFromName(const std::string& name);
|
OtherUnits GetOtherUnitsFromName(const std::string& name);
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,7 @@
|
||||||
#include <scwx/qt/view/level3_product_view.hpp>
|
#include <scwx/qt/view/level3_product_view.hpp>
|
||||||
#include <scwx/qt/settings/general_settings.hpp>
|
#include <scwx/qt/settings/general_settings.hpp>
|
||||||
|
#include <scwx/qt/settings/unit_settings.hpp>
|
||||||
|
#include <scwx/qt/types/unit_types.hpp>
|
||||||
#include <scwx/common/characters.hpp>
|
#include <scwx/common/characters.hpp>
|
||||||
#include <scwx/common/constants.hpp>
|
#include <scwx/common/constants.hpp>
|
||||||
#include <scwx/util/logger.hpp>
|
#include <scwx/util/logger.hpp>
|
||||||
|
|
@ -31,11 +33,22 @@ static const auto logger_ = util::Logger::Create(logPrefix_);
|
||||||
|
|
||||||
static constexpr uint16_t RANGE_FOLDED = 1u;
|
static constexpr uint16_t RANGE_FOLDED = 1u;
|
||||||
|
|
||||||
|
static const std::unordered_map<common::Level3ProductCategory, std::string>
|
||||||
|
categoryUnits_ {
|
||||||
|
{common::Level3ProductCategory::Reflectivity, "dBZ"},
|
||||||
|
{common::Level3ProductCategory::DifferentialReflectivity, "dB"},
|
||||||
|
{common::Level3ProductCategory::SpecificDifferentialPhase,
|
||||||
|
common::Unicode::kDegree + "/km"},
|
||||||
|
{common::Level3ProductCategory::CorrelationCoefficient, "%"},
|
||||||
|
{common::Level3ProductCategory::VerticallyIntegratedLiquid,
|
||||||
|
"kg/m\302\262"}};
|
||||||
|
|
||||||
class Level3ProductView::Impl
|
class Level3ProductView::Impl
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
explicit Impl(const std::string& product) :
|
explicit Impl(const std::string& product) :
|
||||||
product_ {product},
|
product_ {product},
|
||||||
|
category_ {common::GetLevel3CategoryByAwipsId(product)},
|
||||||
graphicMessage_ {nullptr},
|
graphicMessage_ {nullptr},
|
||||||
colorTable_ {},
|
colorTable_ {},
|
||||||
colorTableLut_ {},
|
colorTableLut_ {},
|
||||||
|
|
@ -45,10 +58,48 @@ public:
|
||||||
savedScale_ {0.0f},
|
savedScale_ {0.0f},
|
||||||
savedOffset_ {0.0f}
|
savedOffset_ {0.0f}
|
||||||
{
|
{
|
||||||
}
|
auto& unitSettings = settings::UnitSettings::Instance();
|
||||||
~Impl() = default;
|
|
||||||
|
|
||||||
std::string product_;
|
accumulationUnitsCallbackUuid_ =
|
||||||
|
unitSettings.accumulation_units().RegisterValueChangedCallback(
|
||||||
|
[this](const std::string& value)
|
||||||
|
{ UpdateAccumulationUnits(value); });
|
||||||
|
echoTopsUnitsCallbackUuid_ =
|
||||||
|
unitSettings.echo_tops_units().RegisterValueChangedCallback(
|
||||||
|
[this](const std::string& value) { UpdateEchoTopsUnits(value); });
|
||||||
|
otherUnitsCallbackUuid_ =
|
||||||
|
unitSettings.other_units().RegisterValueChangedCallback(
|
||||||
|
[this](const std::string& value) { UpdateOtherUnits(value); });
|
||||||
|
speedUnitsCallbackUuid_ =
|
||||||
|
unitSettings.speed_units().RegisterValueChangedCallback(
|
||||||
|
[this](const std::string& value) { UpdateSpeedUnits(value); });
|
||||||
|
|
||||||
|
UpdateAccumulationUnits(unitSettings.accumulation_units().GetValue());
|
||||||
|
UpdateEchoTopsUnits(unitSettings.echo_tops_units().GetValue());
|
||||||
|
UpdateOtherUnits(unitSettings.other_units().GetValue());
|
||||||
|
UpdateSpeedUnits(unitSettings.speed_units().GetValue());
|
||||||
|
}
|
||||||
|
~Impl()
|
||||||
|
{
|
||||||
|
auto& unitSettings = settings::UnitSettings::Instance();
|
||||||
|
|
||||||
|
unitSettings.accumulation_units().UnregisterValueChangedCallback(
|
||||||
|
accumulationUnitsCallbackUuid_);
|
||||||
|
unitSettings.echo_tops_units().UnregisterValueChangedCallback(
|
||||||
|
echoTopsUnitsCallbackUuid_);
|
||||||
|
unitSettings.other_units().UnregisterValueChangedCallback(
|
||||||
|
otherUnitsCallbackUuid_);
|
||||||
|
unitSettings.speed_units().UnregisterValueChangedCallback(
|
||||||
|
speedUnitsCallbackUuid_);
|
||||||
|
};
|
||||||
|
|
||||||
|
void UpdateAccumulationUnits(const std::string& name);
|
||||||
|
void UpdateEchoTopsUnits(const std::string& name);
|
||||||
|
void UpdateOtherUnits(const std::string& name);
|
||||||
|
void UpdateSpeedUnits(const std::string& name);
|
||||||
|
|
||||||
|
std::string product_;
|
||||||
|
common::Level3ProductCategory category_;
|
||||||
|
|
||||||
std::shared_ptr<wsr88d::rpg::GraphicProductMessage> graphicMessage_;
|
std::shared_ptr<wsr88d::rpg::GraphicProductMessage> graphicMessage_;
|
||||||
|
|
||||||
|
|
@ -63,6 +114,16 @@ public:
|
||||||
std::uint16_t savedLogStart_ {20u};
|
std::uint16_t savedLogStart_ {20u};
|
||||||
float savedLogScale_ {1.0f};
|
float savedLogScale_ {1.0f};
|
||||||
float savedLogOffset_ {0.0f};
|
float savedLogOffset_ {0.0f};
|
||||||
|
|
||||||
|
boost::uuids::uuid accumulationUnitsCallbackUuid_ {};
|
||||||
|
boost::uuids::uuid echoTopsUnitsCallbackUuid_ {};
|
||||||
|
boost::uuids::uuid otherUnitsCallbackUuid_ {};
|
||||||
|
boost::uuids::uuid speedUnitsCallbackUuid_ {};
|
||||||
|
types::AccumulationUnits accumulationUnits_ {
|
||||||
|
types::AccumulationUnits::Unknown};
|
||||||
|
types::EchoTopsUnits echoTopsUnits_ {types::EchoTopsUnits::Unknown};
|
||||||
|
types::OtherUnits otherUnits_ {types::OtherUnits::Unknown};
|
||||||
|
types::SpeedUnits speedUnits_ {types::SpeedUnits::Unknown};
|
||||||
};
|
};
|
||||||
|
|
||||||
Level3ProductView::Level3ProductView(
|
Level3ProductView::Level3ProductView(
|
||||||
|
|
@ -145,11 +206,52 @@ uint16_t Level3ProductView::color_table_max() const
|
||||||
|
|
||||||
float Level3ProductView::unit_scale() const
|
float Level3ProductView::unit_scale() const
|
||||||
{
|
{
|
||||||
|
switch (p->category_)
|
||||||
|
{
|
||||||
|
case common::Level3ProductCategory::Velocity:
|
||||||
|
case common::Level3ProductCategory::SpectrumWidth:
|
||||||
|
return types::GetSpeedUnitsScale(p->speedUnits_);
|
||||||
|
|
||||||
|
case common::Level3ProductCategory::EchoTops:
|
||||||
|
return types::GetEchoTopsUnitsScale(p->echoTopsUnits_);
|
||||||
|
|
||||||
|
case common::Level3ProductCategory::PrecipitationAccumulation:
|
||||||
|
return types::GetAccumulationUnitsScale(p->accumulationUnits_);
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
return 1.0f;
|
return 1.0f;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string Level3ProductView::units() const
|
std::string Level3ProductView::units() const
|
||||||
{
|
{
|
||||||
|
switch (p->category_)
|
||||||
|
{
|
||||||
|
case common::Level3ProductCategory::Velocity:
|
||||||
|
case common::Level3ProductCategory::SpectrumWidth:
|
||||||
|
return types::GetSpeedUnitsAbbreviation(p->speedUnits_);
|
||||||
|
|
||||||
|
case common::Level3ProductCategory::EchoTops:
|
||||||
|
return types::GetEchoTopsUnitsAbbreviation(p->echoTopsUnits_);
|
||||||
|
|
||||||
|
case common::Level3ProductCategory::PrecipitationAccumulation:
|
||||||
|
return types::GetAccumulationUnitsAbbreviation(p->accumulationUnits_);
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (p->otherUnits_ == types::OtherUnits::Default)
|
||||||
|
{
|
||||||
|
auto it = categoryUnits_.find(p->category_);
|
||||||
|
if (it != categoryUnits_.cend())
|
||||||
|
{
|
||||||
|
return it->second;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -175,9 +277,30 @@ std::string Level3ProductView::GetRadarProductName() const
|
||||||
return p->product_;
|
return p->product_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Level3ProductView::Impl::UpdateAccumulationUnits(const std::string& name)
|
||||||
|
{
|
||||||
|
accumulationUnits_ = types::GetAccumulationUnitsFromName(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Level3ProductView::Impl::UpdateEchoTopsUnits(const std::string& name)
|
||||||
|
{
|
||||||
|
echoTopsUnits_ = types::GetEchoTopsUnitsFromName(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Level3ProductView::Impl::UpdateOtherUnits(const std::string& name)
|
||||||
|
{
|
||||||
|
otherUnits_ = types::GetOtherUnitsFromName(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Level3ProductView::Impl::UpdateSpeedUnits(const std::string& name)
|
||||||
|
{
|
||||||
|
speedUnits_ = types::GetSpeedUnitsFromName(name);
|
||||||
|
}
|
||||||
|
|
||||||
void Level3ProductView::SelectProduct(const std::string& productName)
|
void Level3ProductView::SelectProduct(const std::string& productName)
|
||||||
{
|
{
|
||||||
p->product_ = productName;
|
p->product_ = productName;
|
||||||
|
p->category_ = common::GetLevel3CategoryByAwipsId(productName);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<std::pair<std::string, std::string>>
|
std::vector<std::pair<std::string, std::string>>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue