diff --git a/scwx-qt/source/scwx/qt/map/overlay_layer.cpp b/scwx-qt/source/scwx/qt/map/overlay_layer.cpp index 1f1844fd..0f7f27b2 100644 --- a/scwx-qt/source/scwx/qt/map/overlay_layer.cpp +++ b/scwx-qt/source/scwx/qt/map/overlay_layer.cpp @@ -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(); }); @@ -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( @@ -72,6 +90,8 @@ class OverlayLayerImpl OverlayLayer* self_; + boost::uuids::uuid clockFormatCallbackUuid_; + boost::uuids::uuid defaultTimeZoneCallbackUuid_; boost::uuids::uuid showMapAttributionCallbackUuid_; boost::uuids::uuid showMapLogoCallbackUuid_; @@ -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) @@ -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; } diff --git a/scwx-qt/source/scwx/qt/view/level3_product_view.cpp b/scwx-qt/source/scwx/qt/view/level3_product_view.cpp index 12f9816c..fb6110dc 100644 --- a/scwx-qt/source/scwx/qt/view/level3_product_view.cpp +++ b/scwx-qt/source/scwx/qt/view/level3_product_view.cpp @@ -1,4 +1,5 @@ #include +#include #include #include #include @@ -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) @@ -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", diff --git a/wxdata/include/scwx/util/time.hpp b/wxdata/include/scwx/util/time.hpp index b5ef06df..62242589 100644 --- a/wxdata/include/scwx/util/time.hpp +++ b/wxdata/include/scwx/util/time.hpp @@ -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 std::optional> diff --git a/wxdata/source/scwx/util/time.cpp b/wxdata/source/scwx/util/time.cpp index a46c28a3..cb961649 100644 --- a/wxdata/source/scwx/util/time.cpp +++ b/wxdata/source/scwx/util/time.cpp @@ -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) { @@ -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); + } } }