diff --git a/scwx-qt/source/scwx/qt/main/main_window.cpp b/scwx-qt/source/scwx/qt/main/main_window.cpp index 43ef66af..e0b8254b 100644 --- a/scwx-qt/source/scwx/qt/main/main_window.cpp +++ b/scwx-qt/source/scwx/qt/main/main_window.cpp @@ -706,6 +706,20 @@ void MainWindowImpl::ConnectAnimationSignals() &manager::TimelineManager::AnimationStateUpdated, animationDockWidget_, &ui::AnimationDockWidget::UpdateAnimationState); + + connect(timelineManager_.get(), + &manager::TimelineManager::LiveStateUpdated, + animationDockWidget_, + &ui::AnimationDockWidget::UpdateLiveState); + connect(timelineManager_.get(), + &manager::TimelineManager::LiveStateUpdated, + [this](bool isLive) + { + for (auto map : maps_) + { + map->SetAutoUpdate(isLive); + } + }); } void MainWindowImpl::ConnectOtherSignals() diff --git a/scwx-qt/source/scwx/qt/manager/timeline_manager.cpp b/scwx-qt/source/scwx/qt/manager/timeline_manager.cpp index a597e824..fd2413cd 100644 --- a/scwx-qt/source/scwx/qt/manager/timeline_manager.cpp +++ b/scwx-qt/source/scwx/qt/manager/timeline_manager.cpp @@ -366,6 +366,7 @@ void TimelineManager::Impl::SelectTime( logger_->debug("Time updated: Live"); + emit self_->LiveStateUpdated(true); emit self_->VolumeTimeUpdated(selectedTime); emit self_->SelectedTimeUpdated(selectedTime); @@ -391,6 +392,9 @@ void TimelineManager::Impl::SelectTime( auto elementPtr = util::GetBoundedElementPointer(volumeTimes, selectedTime); + // The timeline is no longer live + emit self_->LiveStateUpdated(false); + if (elementPtr != nullptr) { @@ -469,6 +473,13 @@ void TimelineManager::Impl::Step(Direction direction) adjustedTime_); } + if (it == volumeTimes.cend()) + { + // Should not get here, but protect against an error + logger_->error("No suitable volume time found"); + return; + } + if (direction == Direction::Back) { // Only if we aren't at the beginning of the volume times set @@ -481,6 +492,7 @@ void TimelineManager::Impl::Step(Direction direction) logger_->debug("Volume time updated: {}", scwx::util::TimeString(adjustedTime_)); + emit self_->LiveStateUpdated(false); emit self_->VolumeTimeUpdated(adjustedTime_); emit self_->SelectedTimeUpdated(adjustedTime_); } @@ -497,6 +509,7 @@ void TimelineManager::Impl::Step(Direction direction) logger_->debug("Volume time updated: {}", scwx::util::TimeString(adjustedTime_)); + emit self_->LiveStateUpdated(false); emit self_->VolumeTimeUpdated(adjustedTime_); emit self_->SelectedTimeUpdated(adjustedTime_); } diff --git a/scwx-qt/source/scwx/qt/manager/timeline_manager.hpp b/scwx-qt/source/scwx/qt/manager/timeline_manager.hpp index 2f3a3fd9..a29278b9 100644 --- a/scwx-qt/source/scwx/qt/manager/timeline_manager.hpp +++ b/scwx-qt/source/scwx/qt/manager/timeline_manager.hpp @@ -44,6 +44,7 @@ signals: void VolumeTimeUpdated(std::chrono::system_clock::time_point dateTime); void AnimationStateUpdated(types::AnimationState state); + void LiveStateUpdated(bool isLive); void ViewTypeUpdated(types::MapTime viewType); private: diff --git a/scwx-qt/source/scwx/qt/map/map_widget.cpp b/scwx-qt/source/scwx/qt/map/map_widget.cpp index b7fe9ec1..779a16b4 100644 --- a/scwx-qt/source/scwx/qt/map/map_widget.cpp +++ b/scwx-qt/source/scwx/qt/map/map_widget.cpp @@ -62,6 +62,7 @@ public: overlayLayer_ {nullptr}, colorTableLayer_ {nullptr}, autoRefreshEnabled_ {true}, + autoUpdateEnabled_ {true}, selectedLevel2Product_ {common::Level2Product::Unknown}, lastPos_(), currentStyleIndex_ {0}, @@ -146,6 +147,7 @@ public: std::shared_ptr colorTableLayer_; bool autoRefreshEnabled_; + bool autoUpdateEnabled_; common::Level2Product selectedLevel2Product_; @@ -520,6 +522,11 @@ void MapWidget::SetAutoRefresh(bool enabled) } } +void MapWidget::SetAutoUpdate(bool enabled) +{ + p->autoUpdateEnabled_ = enabled; +} + void MapWidget::SetMapLocation(double latitude, double longitude, bool updateRadarSite) @@ -869,7 +876,7 @@ void MapWidgetImpl::RadarProductManagerConnect() const std::string& product, std::chrono::system_clock::time_point latestTime) { - if (autoRefreshEnabled_ && + if (autoUpdateEnabled_ && context_->radar_product_group() == group && (group == common::RadarProductGroup::Level2 || context_->radar_product() == product)) diff --git a/scwx-qt/source/scwx/qt/map/map_widget.hpp b/scwx-qt/source/scwx/qt/map/map_widget.hpp index 22b6da40..d6d0214b 100644 --- a/scwx-qt/source/scwx/qt/map/map_widget.hpp +++ b/scwx-qt/source/scwx/qt/map/map_widget.hpp @@ -89,6 +89,7 @@ public: void SetActive(bool isActive); void SetAutoRefresh(bool enabled); + void SetAutoUpdate(bool enabled); /** * @brief Sets the current map location. diff --git a/scwx-qt/source/scwx/qt/ui/animation_dock_widget.cpp b/scwx-qt/source/scwx/qt/ui/animation_dock_widget.cpp index d48ea020..f503c8bf 100644 --- a/scwx-qt/source/scwx/qt/ui/animation_dock_widget.cpp +++ b/scwx-qt/source/scwx/qt/ui/animation_dock_widget.cpp @@ -198,6 +198,22 @@ void AnimationDockWidget::UpdateAnimationState(types::AnimationState state) } } +void AnimationDockWidget::UpdateLiveState(bool isLive) +{ + static const QString prefix = tr("Auto Update"); + static const QString disabled = tr("Disabled"); + static const QString enabled = tr("Enabled"); + + if (isLive) + { + ui->autoUpdateLabel->setText(QString("%1: %2").arg(prefix).arg(enabled)); + } + else + { + ui->autoUpdateLabel->setText(QString("%1: %2").arg(prefix).arg(disabled)); + } +} + } // namespace ui } // namespace qt } // namespace scwx diff --git a/scwx-qt/source/scwx/qt/ui/animation_dock_widget.hpp b/scwx-qt/source/scwx/qt/ui/animation_dock_widget.hpp index a80d8912..705ca02f 100644 --- a/scwx-qt/source/scwx/qt/ui/animation_dock_widget.hpp +++ b/scwx-qt/source/scwx/qt/ui/animation_dock_widget.hpp @@ -30,6 +30,7 @@ public: public slots: void UpdateAnimationState(types::AnimationState state); + void UpdateLiveState(bool isLive); signals: void ViewTypeChanged(types::MapTime viewType); diff --git a/scwx-qt/source/scwx/qt/ui/animation_dock_widget.ui b/scwx-qt/source/scwx/qt/ui/animation_dock_widget.ui index 562561f5..4e3502ca 100644 --- a/scwx-qt/source/scwx/qt/ui/animation_dock_widget.ui +++ b/scwx-qt/source/scwx/qt/ui/animation_dock_widget.ui @@ -21,6 +21,13 @@ Timeline + + + + Auto Update: Enabled + + + @@ -103,46 +110,76 @@ - - - Loop Time (Minutes) + + + QFrame::StyledPanel - - - - - - QAbstractSpinBox::CorrectToNearestValue - - - 1 - - - 1440 - - - 30 - - - - - - - Loop Speed - - - - - - - QAbstractSpinBox::CorrectToNearestValue - - - 1.000000000000000 - - - 1.000000000000000 + + QFrame::Raised + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Loop Time + + + + + + + QAbstractSpinBox::CorrectToNearestValue + + + min + + + 1 + + + 1440 + + + 30 + + + + + + + Loop Speed + + + + + + + QAbstractSpinBox::CorrectToNearestValue + + + x + + + 1.000000000000000 + + + 1.000000000000000 + + + +