From f54f6d1b4aaa5078b3c710c1797c67af407448de Mon Sep 17 00:00:00 2001 From: Dan Paulat Date: Sun, 7 Jan 2024 01:54:27 -0600 Subject: [PATCH] Add mouse geo coordinates and UTC time to status bar --- scwx-qt/source/scwx/qt/main/main_window.cpp | 58 ++++++++++++++++++++- scwx-qt/source/scwx/qt/map/map_widget.cpp | 3 ++ scwx-qt/source/scwx/qt/map/map_widget.hpp | 2 + 3 files changed, 62 insertions(+), 1 deletion(-) diff --git a/scwx-qt/source/scwx/qt/main/main_window.cpp b/scwx-qt/source/scwx/qt/main/main_window.cpp index d546b1fb..c8614b8f 100644 --- a/scwx-qt/source/scwx/qt/main/main_window.cpp +++ b/scwx-qt/source/scwx/qt/main/main_window.cpp @@ -34,6 +34,7 @@ #include #include #include +#include #include #include @@ -42,6 +43,7 @@ #include #include #include +#include #include #if !defined(_MSC_VER) @@ -125,7 +127,11 @@ public: positionManager_->TrackLocation(true); } } - ~MainWindowImpl() { threadPool_.join(); } + ~MainWindowImpl() + { + clockTimer_.stop(); + threadPool_.join(); + } void AddRadarSitePreset(const std::string& id); void AsyncSetup(); @@ -169,6 +175,9 @@ public: ui::Level3ProductsWidget* level3ProductsWidget_; + QLabel* coordinateLabel_ {nullptr}; + QLabel* timeLabel_ {nullptr}; + ui::AlertDockWidget* alertDockWidget_; ui::AnimationDockWidget* animationDockWidget_; ui::AboutDialog* aboutDialog_; @@ -179,6 +188,8 @@ public: ui::SettingsDialog* settingsDialog_; ui::UpdateDialog* updateDialog_; + QTimer clockTimer_ {}; + std::shared_ptr alertManager_; std::shared_ptr placefileManager_; std::shared_ptr positionManager_; @@ -317,6 +328,25 @@ MainWindow::MainWindow(QWidget* parent) : ui->radarToolboxScrollAreaContents->layout()->addItem( ui->radarToolboxSpacer); + // Status Bar + QWidget* statusBarWidget = new QWidget(this); + + p->coordinateLabel_ = new QLabel(this); + p->coordinateLabel_->setFrameShape(QFrame::Shape::Box); + p->coordinateLabel_->setFrameShadow(QFrame::Shadow::Sunken); + p->coordinateLabel_->setVisible(false); + + p->timeLabel_ = new QLabel(this); + p->timeLabel_->setFrameShape(QFrame::Shape::Box); + p->timeLabel_->setFrameShadow(QFrame::Shadow::Sunken); + p->timeLabel_->setVisible(false); + + QGridLayout* statusBarLayout = new QGridLayout(statusBarWidget); + statusBarLayout->setContentsMargins(0, 0, 0, 0); + statusBarLayout->addWidget(p->coordinateLabel_, 0, 0); + statusBarLayout->addWidget(p->timeLabel_, 0, 1); + ui->statusbar->addPermanentWidget(statusBarWidget); + // ImGui Debug Dialog p->imGuiDebugDialog_ = new ui::ImGuiDebugDialog(this); @@ -715,6 +745,21 @@ void MainWindowImpl::ConnectMapSignals() } }); + connect(mapWidget, + &map::MapWidget::MouseCoordinateChanged, + this, + [this](common::Coordinate coordinate) + { + const QString latitude = QString::fromStdString( + common::GetLatitudeString(coordinate.latitude_)); + const QString longitude = QString::fromStdString( + common::GetLongitudeString(coordinate.longitude_)); + + coordinateLabel_->setText( + QString("%1, %2").arg(latitude).arg(longitude)); + coordinateLabel_->setVisible(true); + }); + connect( mapWidget, &map::MapWidget::RadarSweepUpdated, @@ -986,6 +1031,17 @@ void MainWindowImpl::ConnectOtherSignals() updateDialog_->UpdateReleaseInfo(latestVersion, latestRelease); updateDialog_->show(); }); + + connect(&clockTimer_, + &QTimer::timeout, + this, + [this]() + { + timeLabel_->setText(QString("%1 UTC").arg(QString::fromStdString( + util::TimeString(std::chrono::system_clock::now())))); + timeLabel_->setVisible(true); + }); + clockTimer_.start(1000); } void MainWindowImpl::AddRadarSitePreset(const std::string& siteId) diff --git a/scwx-qt/source/scwx/qt/map/map_widget.cpp b/scwx-qt/source/scwx/qt/map/map_widget.cpp index 913ab0b8..9cdd94ea 100644 --- a/scwx-qt/source/scwx/qt/map/map_widget.cpp +++ b/scwx-qt/source/scwx/qt/map/map_widget.cpp @@ -1231,6 +1231,9 @@ void MapWidgetImpl::RunMousePicking() util::tooltip::Hide(); } + Q_EMIT widget_->MouseCoordinateChanged( + {coordinate.first, coordinate.second}); + lastItemPicked_ = itemPicked; } diff --git a/scwx-qt/source/scwx/qt/map/map_widget.hpp b/scwx-qt/source/scwx/qt/map/map_widget.hpp index 1f863df3..7ab02bf1 100644 --- a/scwx-qt/source/scwx/qt/map/map_widget.hpp +++ b/scwx-qt/source/scwx/qt/map/map_widget.hpp @@ -1,5 +1,6 @@ #pragma once +#include #include #include #include @@ -147,6 +148,7 @@ signals: double bearing, double pitch); void MapStyleChanged(const std::string& styleName); + void MouseCoordinateChanged(common::Coordinate coordinate); void RadarSiteRequested(const std::string& id); void RadarSiteUpdated(std::shared_ptr radarSite); void RadarSweepUpdated();