diff --git a/scwx-qt/source/scwx/qt/manager/timeline_manager.cpp b/scwx-qt/source/scwx/qt/manager/timeline_manager.cpp index ebf7d43a..cd0958ca 100644 --- a/scwx-qt/source/scwx/qt/manager/timeline_manager.cpp +++ b/scwx-qt/source/scwx/qt/manager/timeline_manager.cpp @@ -1,5 +1,9 @@ #include #include +#include +#include + +#include namespace scwx { @@ -19,11 +23,109 @@ public: ~Impl() {} TimelineManager* self_; + + void SelectTime(std::chrono::system_clock::time_point selectedTime = {}); + + std::chrono::system_clock::time_point pinnedTime_ {}; + std::chrono::system_clock::time_point currentTime_ {}; + types::MapTime viewType_ {types::MapTime::Live}; + std::chrono::minutes loopTime_ {30}; + double loopSpeed_ {1.0}; }; TimelineManager::TimelineManager() : p(std::make_unique(this)) {} TimelineManager::~TimelineManager() = default; +void TimelineManager::SetDateTime( + std::chrono::system_clock::time_point dateTime) +{ + logger_->debug("SetDateTime: {}", scwx::util::TimeString(dateTime)); + + p->pinnedTime_ = dateTime; + + if (p->viewType_ == types::MapTime::Archive) + { + // Only select if the view type is archive + p->SelectTime(dateTime); + } + + // Ignore a date/time selection if the view type is live +} + +void TimelineManager::SetViewType(types::MapTime viewType) +{ + logger_->debug("SetViewType: {}", types::GetMapTimeName(viewType)); + + p->viewType_ = viewType; + + if (p->viewType_ == types::MapTime::Live) + { + // If the selected view type is live, select the current products + p->SelectTime(); + } + else + { + // If the selected view type is archive, select using the pinned time + p->SelectTime(p->pinnedTime_); + } +} + +void TimelineManager::SetLoopTime(std::chrono::minutes loopTime) +{ + logger_->debug("SetLoopTime: {}", loopTime); + + p->loopTime_ = loopTime; +} + +void TimelineManager::SetLoopSpeed(double loopSpeed) +{ + logger_->debug("SetLoopSpeed: {}", loopSpeed); + + p->loopSpeed_ = loopSpeed; +} + +void TimelineManager::AnimationStepBegin() +{ + logger_->debug("AnimationStepBegin"); +} + +void TimelineManager::AnimationStepBack() +{ + logger_->debug("AnimationStepBack"); +} + +void TimelineManager::AnimationPlay() +{ + logger_->debug("AnimationPlay"); +} + +void TimelineManager::AnimationPause() +{ + logger_->debug("AnimationPause"); +} + +void TimelineManager::AnimationStepNext() +{ + logger_->debug("AnimationStepNext"); +} + +void TimelineManager::AnimationStepEnd() +{ + logger_->debug("AnimationStepEnd"); +} + +void TimelineManager::Impl::SelectTime( + std::chrono::system_clock::time_point selectedTime) +{ + if (currentTime_ == selectedTime) + { + // Nothing to do + return; + } + + currentTime_ = selectedTime; +} + std::shared_ptr TimelineManager::Instance() { static std::weak_ptr timelineManagerReference_ {}; diff --git a/scwx-qt/source/scwx/qt/manager/timeline_manager.hpp b/scwx-qt/source/scwx/qt/manager/timeline_manager.hpp index f37eadd3..9d98857e 100644 --- a/scwx-qt/source/scwx/qt/manager/timeline_manager.hpp +++ b/scwx-qt/source/scwx/qt/manager/timeline_manager.hpp @@ -1,5 +1,8 @@ #pragma once +#include + +#include #include #include @@ -21,6 +24,24 @@ public: static std::shared_ptr Instance(); +public slots: + void SetDateTime(std::chrono::system_clock::time_point dateTime); + void SetViewType(types::MapTime viewType); + + void SetLoopTime(std::chrono::minutes loopTime); + void SetLoopSpeed(double loopSpeed); + + void AnimationStepBegin(); + void AnimationStepBack(); + void AnimationPlay(); + void AnimationPause(); + void AnimationStepNext(); + void AnimationStepEnd(); + +signals: + void TimeUpdated(std::chrono::system_clock::time_point dateTime); + void ViewTypeUpdated(types::MapTime viewType); + private: class Impl; std::unique_ptr p;