added **BASIC** unit handling to radius field.

This commit is contained in:
AdenKoperczak 2024-07-11 12:56:31 -04:00
parent b421251bcd
commit c53836e91a
6 changed files with 95 additions and 4 deletions

View file

@ -8,6 +8,8 @@
#include <scwx/util/logger.hpp> #include <scwx/util/logger.hpp>
#include <scwx/qt/config/radar_site.hpp> #include <scwx/qt/config/radar_site.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 <boost/asio/post.hpp> #include <boost/asio/post.hpp>
#include <boost/asio/thread_pool.hpp> #include <boost/asio/thread_pool.hpp>
@ -138,12 +140,19 @@ void AlertManager::Impl::HandleAlert(const types::TextEventKey& key,
} }
settings::AudioSettings& audioSettings = settings::AudioSettings::Instance(); settings::AudioSettings& audioSettings = settings::AudioSettings::Instance();
settings::UnitSettings& unitSettings = settings::UnitSettings::Instance();
types::LocationMethod locationMethod = types::GetLocationMethod( types::LocationMethod locationMethod = types::GetLocationMethod(
audioSettings.alert_location_method().GetValue()); audioSettings.alert_location_method().GetValue());
common::Coordinate currentCoordinate = CurrentCoordinate(locationMethod); common::Coordinate currentCoordinate = CurrentCoordinate(locationMethod);
std::string alertCounty = audioSettings.alert_county().GetValue(); std::string alertCounty = audioSettings.alert_county().GetValue();
auto alertRadius =
units::length::meters<double>(audioSettings.alert_radius().GetValue()); types::DistanceUnits radiusUnits =
types::GetDistanceUnitsFromName(unitSettings.distance_units().GetValue());
double radiusScale = types::GetDistanceUnitsScale(radiusUnits);
auto alertRadius = units::length::kilometers<double>(
audioSettings.alert_radius().GetValue() / radiusScale);
logger_->debug("alertRadius: {}", (double)alertRadius);
auto message = textEventManager_->message_list(key).at(messageIndex); auto message = textEventManager_->message_list(key).at(messageIndex);

View file

@ -26,16 +26,20 @@ public:
types::GetOtherUnitsName(types::OtherUnits::Default); types::GetOtherUnitsName(types::OtherUnits::Default);
std::string defaultSpeedUnitsValue = std::string defaultSpeedUnitsValue =
types::GetSpeedUnitsName(types::SpeedUnits::Knots); types::GetSpeedUnitsName(types::SpeedUnits::Knots);
std::string defaultDistanceUnitsValue =
types::GetDistanceUnitsName(types::DistanceUnits::Kilometers);
boost::to_lower(defaultAccumulationUnitsValue); boost::to_lower(defaultAccumulationUnitsValue);
boost::to_lower(defaultEchoTopsUnitsValue); boost::to_lower(defaultEchoTopsUnitsValue);
boost::to_lower(defaultOtherUnitsValue); boost::to_lower(defaultOtherUnitsValue);
boost::to_lower(defaultSpeedUnitsValue); boost::to_lower(defaultSpeedUnitsValue);
boost::to_lower(defaultDistanceUnitsValue);
accumulationUnits_.SetDefault(defaultAccumulationUnitsValue); accumulationUnits_.SetDefault(defaultAccumulationUnitsValue);
echoTopsUnits_.SetDefault(defaultEchoTopsUnitsValue); echoTopsUnits_.SetDefault(defaultEchoTopsUnitsValue);
otherUnits_.SetDefault(defaultOtherUnitsValue); otherUnits_.SetDefault(defaultOtherUnitsValue);
speedUnits_.SetDefault(defaultSpeedUnitsValue); speedUnits_.SetDefault(defaultSpeedUnitsValue);
distanceUnits_.SetDefault(defaultDistanceUnitsValue);
accumulationUnits_.SetValidator( accumulationUnits_.SetValidator(
SCWX_SETTINGS_ENUM_VALIDATOR(types::AccumulationUnits, SCWX_SETTINGS_ENUM_VALIDATOR(types::AccumulationUnits,
@ -53,6 +57,10 @@ public:
SCWX_SETTINGS_ENUM_VALIDATOR(types::SpeedUnits, SCWX_SETTINGS_ENUM_VALIDATOR(types::SpeedUnits,
types::SpeedUnitsIterator(), types::SpeedUnitsIterator(),
types::GetSpeedUnitsName)); types::GetSpeedUnitsName));
distanceUnits_.SetValidator(
SCWX_SETTINGS_ENUM_VALIDATOR(types::DistanceUnits,
types::DistanceUnitsIterator(),
types::GetDistanceUnitsName));
} }
~Impl() {} ~Impl() {}
@ -61,6 +69,7 @@ public:
SettingsVariable<std::string> echoTopsUnits_ {"echo_tops_units"}; SettingsVariable<std::string> echoTopsUnits_ {"echo_tops_units"};
SettingsVariable<std::string> otherUnits_ {"other_units"}; SettingsVariable<std::string> otherUnits_ {"other_units"};
SettingsVariable<std::string> speedUnits_ {"speed_units"}; SettingsVariable<std::string> speedUnits_ {"speed_units"};
SettingsVariable<std::string> distanceUnits_ {"speed_units"};
}; };
UnitSettings::UnitSettings() : UnitSettings::UnitSettings() :
@ -69,7 +78,8 @@ UnitSettings::UnitSettings() :
RegisterVariables({&p->accumulationUnits_, RegisterVariables({&p->accumulationUnits_,
&p->echoTopsUnits_, &p->echoTopsUnits_,
&p->otherUnits_, &p->otherUnits_,
&p->speedUnits_}); &p->speedUnits_,
&p->distanceUnits_});
SetDefaults(); SetDefaults();
} }
UnitSettings::~UnitSettings() = default; UnitSettings::~UnitSettings() = default;
@ -97,6 +107,11 @@ SettingsVariable<std::string>& UnitSettings::speed_units() const
return p->speedUnits_; return p->speedUnits_;
} }
SettingsVariable<std::string>& UnitSettings::distance_units() const
{
return p->distanceUnits_;
}
UnitSettings& UnitSettings::Instance() UnitSettings& UnitSettings::Instance()
{ {
static UnitSettings generalSettings_; static UnitSettings generalSettings_;
@ -108,7 +123,8 @@ bool operator==(const UnitSettings& lhs, const UnitSettings& rhs)
return (lhs.p->accumulationUnits_ == rhs.p->accumulationUnits_ && return (lhs.p->accumulationUnits_ == rhs.p->accumulationUnits_ &&
lhs.p->echoTopsUnits_ == rhs.p->echoTopsUnits_ && lhs.p->echoTopsUnits_ == rhs.p->echoTopsUnits_ &&
lhs.p->otherUnits_ == rhs.p->otherUnits_ && lhs.p->otherUnits_ == rhs.p->otherUnits_ &&
lhs.p->speedUnits_ == rhs.p->speedUnits_); lhs.p->speedUnits_ == rhs.p->speedUnits_ &&
lhs.p->distanceUnits_ == rhs.p->distanceUnits_);
} }
} // namespace settings } // namespace settings

View file

@ -29,6 +29,7 @@ public:
SettingsVariable<std::string>& echo_tops_units() const; SettingsVariable<std::string>& echo_tops_units() const;
SettingsVariable<std::string>& other_units() const; SettingsVariable<std::string>& other_units() const;
SettingsVariable<std::string>& speed_units() const; SettingsVariable<std::string>& speed_units() const;
SettingsVariable<std::string>& distance_units() const;
static UnitSettings& Instance(); static UnitSettings& Instance();

View file

@ -89,12 +89,35 @@ static const std::unordered_map<SpeedUnits, float> speedUnitsScale_ {
{SpeedUnits::User, 1.0f}, {SpeedUnits::User, 1.0f},
{SpeedUnits::Unknown, 1.0f}}; {SpeedUnits::Unknown, 1.0f}};
static const std::unordered_map<DistanceUnits, std::string>
distanceUnitsAbbreviation_ {{DistanceUnits::Kilometers, "km"},
{DistanceUnits::Miles, "mi"},
{DistanceUnits::User, ""},
{DistanceUnits::Unknown, ""}};
static const std::unordered_map<DistanceUnits, std::string> distanceUnitsName_ {
{DistanceUnits::Kilometers, "Kilometers"},
{DistanceUnits::Miles, "Miles"},
{DistanceUnits::User, "User-defined"},
{DistanceUnits::Unknown, "?"}};
static constexpr auto distanceUnitsBase_ = units::kilometers<float> {1.0f};
static const std::unordered_map<DistanceUnits, float> distanceUnitsScale_ {
{DistanceUnits::Kilometers,
(distanceUnitsBase_ / units::kilometers<float> {1.0f})},
{DistanceUnits::Miles,
(distanceUnitsBase_ / units::miles<float> {1.0f})},
{DistanceUnits::User, 1.0f},
{DistanceUnits::Unknown, 1.0f}};
SCWX_GET_ENUM(AccumulationUnits, SCWX_GET_ENUM(AccumulationUnits,
GetAccumulationUnitsFromName, GetAccumulationUnitsFromName,
accumulationUnitsName_) accumulationUnitsName_)
SCWX_GET_ENUM(EchoTopsUnits, GetEchoTopsUnitsFromName, echoTopsUnitsName_) SCWX_GET_ENUM(EchoTopsUnits, GetEchoTopsUnitsFromName, echoTopsUnitsName_)
SCWX_GET_ENUM(OtherUnits, GetOtherUnitsFromName, otherUnitsName_) SCWX_GET_ENUM(OtherUnits, GetOtherUnitsFromName, otherUnitsName_)
SCWX_GET_ENUM(SpeedUnits, GetSpeedUnitsFromName, speedUnitsName_) SCWX_GET_ENUM(SpeedUnits, GetSpeedUnitsFromName, speedUnitsName_)
SCWX_GET_ENUM(DistanceUnits, GetDistanceUnitsFromName, distanceUnitsName_)
const std::string& GetAccumulationUnitsAbbreviation(AccumulationUnits units) const std::string& GetAccumulationUnitsAbbreviation(AccumulationUnits units)
{ {
@ -146,6 +169,21 @@ float GetSpeedUnitsScale(SpeedUnits units)
return speedUnitsScale_.at(units); return speedUnitsScale_.at(units);
} }
const std::string& GetDistanceUnitsAbbreviation(DistanceUnits units)
{
return distanceUnitsAbbreviation_.at(units);
}
const std::string& GetDistanceUnitsName(DistanceUnits units)
{
return distanceUnitsName_.at(units);
}
float GetDistanceUnitsScale(DistanceUnits units)
{
return distanceUnitsScale_.at(units);
}
} // namespace types } // namespace types
} // namespace qt } // namespace qt
} // namespace scwx } // namespace scwx

View file

@ -56,6 +56,17 @@ typedef scwx::util::
Iterator<SpeedUnits, SpeedUnits::KilometersPerHour, SpeedUnits::User> Iterator<SpeedUnits, SpeedUnits::KilometersPerHour, SpeedUnits::User>
SpeedUnitsIterator; SpeedUnitsIterator;
enum class DistanceUnits
{
Kilometers,
Miles,
User,
Unknown
};
typedef scwx::util::
Iterator<DistanceUnits, DistanceUnits::Kilometers, DistanceUnits::User>
DistanceUnitsIterator;
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);
@ -74,6 +85,11 @@ const std::string& GetSpeedUnitsName(SpeedUnits units);
SpeedUnits GetSpeedUnitsFromName(const std::string& name); SpeedUnits GetSpeedUnitsFromName(const std::string& name);
float GetSpeedUnitsScale(SpeedUnits units); float GetSpeedUnitsScale(SpeedUnits units);
const std::string& GetDistanceUnitsAbbreviation(DistanceUnits units);
const std::string& GetDistanceUnitsName(DistanceUnits units);
DistanceUnits GetDistanceUnitsFromName(const std::string& name);
float GetDistanceUnitsScale(DistanceUnits units);
} // namespace types } // namespace types
} // namespace qt } // namespace qt
} // namespace scwx } // namespace scwx

View file

@ -102,6 +102,16 @@ public:
types::GetSpeedUnitsName); types::GetSpeedUnitsName);
AddRow(speedUnits_, "Speed", speedComboBox); AddRow(speedUnits_, "Speed", speedComboBox);
QComboBox* distanceComboBox = new QComboBox(self);
distanceComboBox->setSizePolicy(QSizePolicy::Expanding,
QSizePolicy::Preferred);
distanceUnits_.SetSettingsVariable(unitSettings.distance_units());
SCWX_SETTINGS_COMBO_BOX(distanceUnits_,
distanceComboBox,
types::DistanceUnitsIterator(),
types::GetDistanceUnitsName);
AddRow(distanceUnits_, "Distance", distanceComboBox);
QComboBox* otherComboBox = new QComboBox(self); QComboBox* otherComboBox = new QComboBox(self);
otherComboBox->setSizePolicy(QSizePolicy::Expanding, otherComboBox->setSizePolicy(QSizePolicy::Expanding,
QSizePolicy::Preferred); QSizePolicy::Preferred);
@ -127,6 +137,7 @@ public:
settings::SettingsInterface<std::string> echoTopsUnits_ {}; settings::SettingsInterface<std::string> echoTopsUnits_ {};
settings::SettingsInterface<std::string> otherUnits_ {}; settings::SettingsInterface<std::string> otherUnits_ {};
settings::SettingsInterface<std::string> speedUnits_ {}; settings::SettingsInterface<std::string> speedUnits_ {};
settings::SettingsInterface<std::string> distanceUnits_ {};
}; };
UnitSettingsWidget::UnitSettingsWidget(QWidget* parent) : UnitSettingsWidget::UnitSettingsWidget(QWidget* parent) :