From 55d9fe1da862bc447c0b08854be514551d10adb1 Mon Sep 17 00:00:00 2001 From: Dan Paulat Date: Mon, 19 Jun 2023 19:08:18 -0500 Subject: [PATCH] Animation widget incorrectly displays auto update disabled when animating --- scwx-qt/source/scwx/qt/main/main_window.cpp | 5 +- .../scwx/qt/manager/timeline_manager.cpp | 2 + .../scwx/qt/ui/animation_dock_widget.cpp | 70 ++++++++++++++----- .../scwx/qt/ui/animation_dock_widget.hpp | 1 + 4 files changed, 61 insertions(+), 17 deletions(-) diff --git a/scwx-qt/source/scwx/qt/main/main_window.cpp b/scwx-qt/source/scwx/qt/main/main_window.cpp index 4d258327..4611e915 100644 --- a/scwx-qt/source/scwx/qt/main/main_window.cpp +++ b/scwx-qt/source/scwx/qt/main/main_window.cpp @@ -711,7 +711,10 @@ void MainWindowImpl::ConnectAnimationSignals() &manager::TimelineManager::AnimationStateUpdated, animationDockWidget_, &ui::AnimationDockWidget::UpdateAnimationState); - + connect(timelineManager_.get(), + &manager::TimelineManager::ViewTypeUpdated, + animationDockWidget_, + &ui::AnimationDockWidget::UpdateViewType); connect(timelineManager_.get(), &manager::TimelineManager::LiveStateUpdated, animationDockWidget_, diff --git a/scwx-qt/source/scwx/qt/manager/timeline_manager.cpp b/scwx-qt/source/scwx/qt/manager/timeline_manager.cpp index cab719e1..2df72d32 100644 --- a/scwx-qt/source/scwx/qt/manager/timeline_manager.cpp +++ b/scwx-qt/source/scwx/qt/manager/timeline_manager.cpp @@ -166,6 +166,8 @@ void TimelineManager::SetViewType(types::MapTime viewType) // If the selected view type is archive, select using the pinned time p->SelectTimeAsync(p->pinnedTime_); } + + Q_EMIT ViewTypeUpdated(viewType); } void TimelineManager::SetLoopTime(std::chrono::minutes loopTime) 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 dc567d63..3d391407 100644 --- a/scwx-qt/source/scwx/qt/ui/animation_dock_widget.cpp +++ b/scwx-qt/source/scwx/qt/ui/animation_dock_widget.cpp @@ -20,20 +20,34 @@ static const auto logger_ = scwx::util::Logger::Create(logPrefix_); class AnimationDockWidgetImpl { public: - explicit AnimationDockWidgetImpl(AnimationDockWidget* self) : self_ {self} {} + explicit AnimationDockWidgetImpl(AnimationDockWidget* self) : self_ {self} + { + static const QString prefix = QObject::tr("Auto Update"); + static const QString disabled = QObject::tr("Disabled"); + static const QString enabled = QObject::tr("Enabled"); + + enabledString_ = QString("%1: %2").arg(prefix).arg(enabled); + disabledString_ = QString("%1: %2").arg(prefix).arg(disabled); + } ~AnimationDockWidgetImpl() = default; const QIcon kPauseIcon_ {":/res/icons/font-awesome-6/pause-solid.svg"}; const QIcon kPlayIcon_ {":/res/icons/font-awesome-6/play-solid.svg"}; + QString enabledString_; + QString disabledString_; + AnimationDockWidget* self_; types::AnimationState animationState_ {types::AnimationState::Pause}; + types::MapTime viewType_ {types::MapTime::Live}; + bool isLive_ {true}; std::chrono::sys_days selectedDate_ {}; std::chrono::seconds selectedTime_ {}; void ConnectSignals(); + void UpdateAutoUpdateLabel(); }; AnimationDockWidget::AnimationDockWidget(QWidget* parent) : @@ -211,32 +225,56 @@ void AnimationDockWidgetImpl::ConnectSignals() void AnimationDockWidget::UpdateAnimationState(types::AnimationState state) { - // Update icon to opposite of state - switch (state) + if (p->animationState_ != state) { - case types::AnimationState::Pause: - ui->playButton->setIcon(p->kPlayIcon_); - break; + // Update icon to opposite of state + switch (state) + { + case types::AnimationState::Pause: + ui->playButton->setIcon(p->kPlayIcon_); + break; - case types::AnimationState::Play: - ui->playButton->setIcon(p->kPauseIcon_); - break; + case types::AnimationState::Play: + ui->playButton->setIcon(p->kPauseIcon_); + break; + } + + p->animationState_ = state; + p->UpdateAutoUpdateLabel(); } } 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) + if (p->isLive_ != isLive) { - ui->autoUpdateLabel->setText(QString("%1: %2").arg(prefix).arg(enabled)); + p->isLive_ = isLive; + p->UpdateAutoUpdateLabel(); + } +} + +void AnimationDockWidget::UpdateViewType(types::MapTime viewType) +{ + if (p->viewType_ != viewType) + { + p->viewType_ = viewType; + p->UpdateAutoUpdateLabel(); + } +} + +void AnimationDockWidgetImpl::UpdateAutoUpdateLabel() +{ + // Display "Auto Update: Enabled" if: + // - The map is live, and auto-updating (map widget update) + // - "Live" is selected, and the map is playing (timeline manager update) + if (isLive_ || (viewType_ == types::MapTime::Live && + animationState_ == types::AnimationState::Play)) + { + self_->ui->autoUpdateLabel->setText(enabledString_); } else { - ui->autoUpdateLabel->setText(QString("%1: %2").arg(prefix).arg(disabled)); + self_->ui->autoUpdateLabel->setText(disabledString_); } } 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 ea42a541..8b64d0c6 100644 --- a/scwx-qt/source/scwx/qt/ui/animation_dock_widget.hpp +++ b/scwx-qt/source/scwx/qt/ui/animation_dock_widget.hpp @@ -31,6 +31,7 @@ public: public slots: void UpdateAnimationState(types::AnimationState state); void UpdateLiveState(bool isLive); + void UpdateViewType(types::MapTime viewType); signals: void ViewTypeChanged(types::MapTime viewType);