diff --git a/scwx-qt/source/scwx/qt/main/main_window.cpp b/scwx-qt/source/scwx/qt/main/main_window.cpp index 73491f52..7c3531df 100644 --- a/scwx-qt/source/scwx/qt/main/main_window.cpp +++ b/scwx-qt/source/scwx/qt/main/main_window.cpp @@ -207,6 +207,8 @@ void MainWindow::on_actionOpen_triggered() dialog->setNameFilter(tr(nexradFilter.c_str())); dialog->setAttribute(Qt::WA_DeleteOnClose); + map::MapWidget* currentMap = p->activeMap_; + // Make sure the parent window properly repaints on close connect( dialog, @@ -234,22 +236,13 @@ void MainWindow::on_actionOpen_triggered() { std::shared_ptr record = request->radar_product_record(); - std::shared_ptr level2File = nullptr; - std::shared_ptr level3File = nullptr; if (record != nullptr) { - level2File = record->level2_file(); - level3File = record->level3_file(); - } - - if (level2File != nullptr) - { - // TODO: Handle - } - else if (level3File != nullptr) - { - // TODO: Handle + currentMap->SelectRadarProduct(record->radar_id(), + record->radar_product_group(), + record->radar_product(), + record->time()); } else { diff --git a/scwx-qt/source/scwx/qt/map/map_widget.cpp b/scwx-qt/source/scwx/qt/map/map_widget.cpp index bee41266..79cea908 100644 --- a/scwx-qt/source/scwx/qt/map/map_widget.cpp +++ b/scwx-qt/source/scwx/qt/map/map_widget.cpp @@ -8,6 +8,7 @@ #include #include #include +#include #include #include @@ -246,6 +247,17 @@ void MapWidget::SelectRadarProduct(common::Level2Product product) } } +void MapWidget::SelectRadarProduct(const std::string& radarId, + common::RadarProductGroup group, + const std::string& product, + std::chrono::system_clock::time_point time) +{ + BOOST_LOG_TRIVIAL(debug) + << logPrefix_ << "SelectRadarProduct(" << radarId << ", " + << common::GetRadarProductGroupName(group) << ", " << product << ", " + << util::TimeString(time) << ")"; +} + void MapWidget::SetActive(bool isActive) { p->context_->settings_.isActive_ = isActive; diff --git a/scwx-qt/source/scwx/qt/map/map_widget.hpp b/scwx-qt/source/scwx/qt/map/map_widget.hpp index 6ed7a19a..774b34fd 100644 --- a/scwx-qt/source/scwx/qt/map/map_widget.hpp +++ b/scwx-qt/source/scwx/qt/map/map_widget.hpp @@ -2,6 +2,7 @@ #include +#include #include #include @@ -39,6 +40,10 @@ public: void SelectElevation(float elevation); void SelectRadarProduct(common::Level2Product product); + void SelectRadarProduct(const std::string& radarId, + common::RadarProductGroup group, + const std::string& product, + std::chrono::system_clock::time_point time); void SetActive(bool isActive); void SetMapParameters(double latitude, double longitude, diff --git a/scwx-qt/source/scwx/qt/map/overlay_layer.cpp b/scwx-qt/source/scwx/qt/map/overlay_layer.cpp index a9267b44..dad34a9b 100644 --- a/scwx-qt/source/scwx/qt/map/overlay_layer.cpp +++ b/scwx-qt/source/scwx/qt/map/overlay_layer.cpp @@ -1,13 +1,9 @@ -// Enable chrono formatters -#ifndef __cpp_lib_format -# define __cpp_lib_format 202110L -#endif - #include #include #include #include #include +#include #include #include @@ -105,18 +101,9 @@ void OverlayLayer::Render(const QMapbox::CustomLayerRenderParameters& params) if (p->sweepTimeNeedsUpdate_ && context()->radarProductView_ != nullptr) { - using namespace std::chrono; - auto sweepTime = - time_point_cast(context()->radarProductView_->sweep_time()); - - if (sweepTime.time_since_epoch().count() != 0) - { - zoned_time zt = {current_zone(), sweepTime}; - std::ostringstream os; - os << zt; - p->sweepTimeString_ = os.str(); - } - + p->sweepTimeString_ = + scwx::util::TimeString(context()->radarProductView_->sweep_time(), + std::chrono::current_zone()); p->sweepTimeNeedsUpdate_ = false; } diff --git a/scwx-qt/ts/scwx_en_US.ts b/scwx-qt/ts/scwx_en_US.ts index e1342f99..ddaba3d2 100644 --- a/scwx-qt/ts/scwx_en_US.ts +++ b/scwx-qt/ts/scwx_en_US.ts @@ -102,7 +102,7 @@ scwx::qt::main::MainWindow - + Unrecognized NEXRAD Product: diff --git a/wxdata/include/scwx/util/time.hpp b/wxdata/include/scwx/util/time.hpp index 7fa9576b..2f1be0d5 100644 --- a/wxdata/include/scwx/util/time.hpp +++ b/wxdata/include/scwx/util/time.hpp @@ -10,5 +10,8 @@ namespace util std::chrono::system_clock::time_point TimePoint(uint16_t modifiedJulianDate, uint32_t milliseconds); +std::string TimeString(std::chrono::system_clock::time_point time, + const std::chrono::time_zone* timeZone = nullptr); + } // namespace util } // namespace scwx diff --git a/wxdata/source/scwx/common/products.cpp b/wxdata/source/scwx/common/products.cpp index 86524416..3ed4cc74 100644 --- a/wxdata/source/scwx/common/products.cpp +++ b/wxdata/source/scwx/common/products.cpp @@ -8,9 +8,9 @@ namespace common { static const std::unordered_map - productGroupName_ {{RadarProductGroup::Level2, "L2"}, - {RadarProductGroup::Level3, "L3"}, - {RadarProductGroup::Unknown, "?"}}; + radarProductGroupName_ {{RadarProductGroup::Level2, "L2"}, + {RadarProductGroup::Level3, "L3"}, + {RadarProductGroup::Unknown, "?"}}; static const std::unordered_map level2Name_ { {Level2Product::Reflectivity, "REF"}, @@ -42,20 +42,20 @@ static const std::unordered_map level2Palette_ { {Level2Product::ClutterFilterPowerRemoved, "???"}, {Level2Product::Unknown, "???"}}; -const std::string& GetProductGroupName(RadarProductGroup group) +const std::string& GetRadarProductGroupName(RadarProductGroup group) { - return productGroupName_.at(group); + return radarProductGroupName_.at(group); } -RadarProductGroup GetProductGroup(const std::string& name) +RadarProductGroup GetRadarProductGroup(const std::string& name) { auto result = std::find_if( - productGroupName_.cbegin(), - productGroupName_.cend(), + radarProductGroupName_.cbegin(), + radarProductGroupName_.cend(), [&](const std::pair& pair) -> bool { return pair.second == name; }); - if (result != productGroupName_.cend()) + if (result != radarProductGroupName_.cend()) { return result->first; } diff --git a/wxdata/source/scwx/util/time.cpp b/wxdata/source/scwx/util/time.cpp index 7bba1d51..b3af417b 100644 --- a/wxdata/source/scwx/util/time.cpp +++ b/wxdata/source/scwx/util/time.cpp @@ -1,3 +1,8 @@ +// Enable chrono formatters +#ifndef __cpp_lib_format +# define __cpp_lib_format 202110L +#endif + #include namespace scwx @@ -5,8 +10,8 @@ namespace scwx namespace util { -std::chrono::system_clock::time_point -TimePoint(uint16_t modifiedJulianDate, uint32_t milliseconds) +std::chrono::system_clock::time_point TimePoint(uint16_t modifiedJulianDate, + uint32_t milliseconds) { using namespace std::chrono; using sys_days = time_point; @@ -16,5 +21,25 @@ TimePoint(uint16_t modifiedJulianDate, uint32_t milliseconds) std::chrono::milliseconds {milliseconds}; } -} // namespace qt +std::string TimeString(std::chrono::system_clock::time_point time, + const std::chrono::time_zone* timeZone) +{ + using namespace std::chrono; + auto timeInSeconds = time_point_cast(time); + std::ostringstream os; + + if (timeZone != nullptr) + { + zoned_time zt = {current_zone(), timeInSeconds}; + os << zt; + } + else + { + os << timeInSeconds; + } + + return os.str(); +} + +} // namespace util } // namespace scwx