Skip to content

Commit

Permalink
Display clock format defined in settings on map
Browse files Browse the repository at this point in the history
  • Loading branch information
dpaulat committed Mar 29, 2024
1 parent a7cb459 commit 5fb9dc6
Show file tree
Hide file tree
Showing 4 changed files with 55 additions and 9 deletions.
27 changes: 25 additions & 2 deletions scwx-qt/source/scwx/qt/map/overlay_layer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,20 @@ class OverlayLayerImpl
{
auto& generalSettings = settings::GeneralSettings::Instance();

clockFormatCallbackUuid_ =
generalSettings.clock_format().RegisterValueChangedCallback(
[this](const std::string&)
{
sweepTimeNeedsUpdate_ = true;
Q_EMIT self_->NeedsRendering();
});
defaultTimeZoneCallbackUuid_ =
generalSettings.default_time_zone().RegisterValueChangedCallback(
[this](const std::string&)
{
sweepTimeNeedsUpdate_ = true;
Q_EMIT self_->NeedsRendering();
});
showMapAttributionCallbackUuid_ =
generalSettings.show_map_attribution().RegisterValueChangedCallback(
[this](const bool&) { Q_EMIT self_->NeedsRendering(); });
Expand All @@ -64,6 +78,10 @@ class OverlayLayerImpl
{
auto& generalSettings = settings::GeneralSettings::Instance();

generalSettings.clock_format().UnregisterValueChangedCallback(
clockFormatCallbackUuid_);
generalSettings.default_time_zone().UnregisterValueChangedCallback(
defaultTimeZoneCallbackUuid_);
generalSettings.show_map_attribution().UnregisterValueChangedCallback(
showMapAttributionCallbackUuid_);
generalSettings.show_map_logo().UnregisterValueChangedCallback(
Expand All @@ -72,6 +90,8 @@ class OverlayLayerImpl

OverlayLayer* self_;

boost::uuids::uuid clockFormatCallbackUuid_;
boost::uuids::uuid defaultTimeZoneCallbackUuid_;
boost::uuids::uuid showMapAttributionCallbackUuid_;
boost::uuids::uuid showMapLogoCallbackUuid_;

Expand Down Expand Up @@ -263,8 +283,11 @@ void OverlayLayer::Render(const QMapLibre::CustomLayerRenderParameters& params)

p->sweepTimePicked_ = false;

if (p->sweepTimeNeedsUpdate_ && radarProductView != nullptr)
if (radarProductView != nullptr)
{
scwx::util::ClockFormat clockFormat = scwx::util::GetClockFormat(
settings::GeneralSettings::Instance().clock_format().GetValue());

const scwx::util::time_zone* currentZone;

#if defined(_MSC_VER)
Expand All @@ -274,7 +297,7 @@ void OverlayLayer::Render(const QMapLibre::CustomLayerRenderParameters& params)
#endif

p->sweepTimeString_ = scwx::util::TimeString(
radarProductView->sweep_time(), currentZone, false);
radarProductView->sweep_time(), clockFormat, currentZone, false);
p->sweepTimeNeedsUpdate_ = false;
}

Expand Down
10 changes: 8 additions & 2 deletions scwx-qt/source/scwx/qt/view/level3_product_view.cpp
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
#include <scwx/qt/view/level3_product_view.hpp>
#include <scwx/qt/settings/general_settings.hpp>
#include <scwx/common/characters.hpp>
#include <scwx/common/constants.hpp>
#include <scwx/util/logger.hpp>
Expand Down Expand Up @@ -176,6 +177,9 @@ Level3ProductView::GetDescriptionFields() const

if (p->graphicMessage_ != nullptr)
{
util::ClockFormat clockFormat = util::GetClockFormat(
settings::GeneralSettings::Instance().clock_format().GetValue());

const scwx::util::time_zone* currentZone;

#if defined(_MSC_VER)
Expand All @@ -197,10 +201,12 @@ Level3ProductView::GetDescriptionFields() const

description.emplace_back(
"Volume Time",
scwx::util::TimeString(volumeTime, currentZone, false));
scwx::util::TimeString(
volumeTime, clockFormat, currentZone, false));
description.emplace_back(
"Product Time",
scwx::util::TimeString(productTime, currentZone, false));
scwx::util::TimeString(
productTime, clockFormat, currentZone, false));

description.emplace_back(
"Sequence Number",
Expand Down
5 changes: 3 additions & 2 deletions wxdata/include/scwx/util/time.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,9 @@ std::chrono::system_clock::time_point TimePoint(uint32_t modifiedJulianDate,
uint32_t milliseconds);

std::string TimeString(std::chrono::system_clock::time_point time,
const time_zone* timeZone = nullptr,
bool epochValid = true);
ClockFormat clockFormat = ClockFormat::_24Hour,
const time_zone* timeZone = nullptr,
bool epochValid = true);

template<typename T>
std::optional<std::chrono::sys_time<T>>
Expand Down
22 changes: 19 additions & 3 deletions wxdata/source/scwx/util/time.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ std::chrono::system_clock::time_point TimePoint(uint32_t modifiedJulianDate,
}

std::string TimeString(std::chrono::system_clock::time_point time,
ClockFormat clockFormat,
const time_zone* timeZone,
bool epochValid)
{
Expand All @@ -65,12 +66,27 @@ std::string TimeString(std::chrono::system_clock::time_point time,
{
if (timeZone != nullptr)
{
zoned_time zt = {current_zone(), timeInSeconds};
os << zt;
zoned_time zt = {timeZone, timeInSeconds};

if (clockFormat == ClockFormat::_24Hour)
{
os << format("{:%Y-%m-%d %H:%M:%S %Z}", zt);
}
else
{
os << format("{:%Y-%m-%d %I:%M:%S %p %Z}", zt);
}
}
else
{
os << timeInSeconds;
if (clockFormat == ClockFormat::_24Hour)
{
os << format("{:%Y-%m-%d %H:%M:%S %Z}", timeInSeconds);
}
else
{
os << format("{:%Y-%m-%d %I:%M:%S %p %Z}", timeInSeconds);
}
}
}

Expand Down

0 comments on commit 5fb9dc6

Please sign in to comment.