diff --git a/scwx-qt/scwx-qt.cmake b/scwx-qt/scwx-qt.cmake index b9c14701..af2339b9 100644 --- a/scwx-qt/scwx-qt.cmake +++ b/scwx-qt/scwx-qt.cmake @@ -78,7 +78,8 @@ set(SRC_GL_DRAW source/scwx/qt/gl/draw/draw_item.cpp source/scwx/qt/gl/draw/placefile_text.cpp source/scwx/qt/gl/draw/placefile_triangles.cpp source/scwx/qt/gl/draw/rectangle.cpp) -set(HDR_MANAGER source/scwx/qt/manager/font_manager.hpp +set(HDR_MANAGER source/scwx/qt/manager/alert_manager.hpp + source/scwx/qt/manager/font_manager.hpp source/scwx/qt/manager/media_manager.hpp source/scwx/qt/manager/placefile_manager.hpp source/scwx/qt/manager/position_manager.hpp @@ -89,7 +90,8 @@ set(HDR_MANAGER source/scwx/qt/manager/font_manager.hpp source/scwx/qt/manager/text_event_manager.hpp source/scwx/qt/manager/timeline_manager.hpp source/scwx/qt/manager/update_manager.hpp) -set(SRC_MANAGER source/scwx/qt/manager/font_manager.cpp +set(SRC_MANAGER source/scwx/qt/manager/alert_manager.cpp + source/scwx/qt/manager/font_manager.cpp source/scwx/qt/manager/media_manager.cpp source/scwx/qt/manager/placefile_manager.cpp source/scwx/qt/manager/position_manager.cpp diff --git a/scwx-qt/source/scwx/qt/main/main_window.cpp b/scwx-qt/source/scwx/qt/main/main_window.cpp index 3f4765b4..d94612be 100644 --- a/scwx-qt/source/scwx/qt/main/main_window.cpp +++ b/scwx-qt/source/scwx/qt/main/main_window.cpp @@ -3,6 +3,7 @@ #include #include +#include #include #include #include @@ -82,6 +83,7 @@ public: radarSiteDialog_ {nullptr}, settingsDialog_ {nullptr}, updateDialog_ {nullptr}, + alertManager_ {manager::AlertManager::Instance()}, placefileManager_ {manager::PlacefileManager::Instance()}, positionManager_ {manager::PositionManager::Instance()}, textEventManager_ {manager::TextEventManager::Instance()}, @@ -178,6 +180,7 @@ public: ui::SettingsDialog* settingsDialog_; ui::UpdateDialog* updateDialog_; + std::shared_ptr alertManager_; std::shared_ptr placefileManager_; std::shared_ptr positionManager_; std::shared_ptr textEventManager_; diff --git a/scwx-qt/source/scwx/qt/manager/alert_manager.cpp b/scwx-qt/source/scwx/qt/manager/alert_manager.cpp new file mode 100644 index 00000000..c7c9f7e1 --- /dev/null +++ b/scwx-qt/source/scwx/qt/manager/alert_manager.cpp @@ -0,0 +1,77 @@ +#include +#include +#include +#include +#include + +#include + +namespace scwx +{ +namespace qt +{ +namespace manager +{ + +static const std::string logPrefix_ = "scwx::qt::manager::alert_manager"; +static const auto logger_ = scwx::util::Logger::Create(logPrefix_); + +class AlertManager::Impl +{ +public: + explicit Impl(AlertManager* self) : self_ {self} + { + settings::AudioSettings& audioSettings = + settings::AudioSettings::Instance(); + + UpdateLocationTracking(audioSettings.alert_location_method().GetValue()); + + audioSettings.alert_location_method().RegisterValueChangedCallback( + [this](const std::string& value) { UpdateLocationTracking(value); }); + } + + ~Impl() {} + + void UpdateLocationTracking(const std::string& value) const; + + AlertManager* self_; + + boost::uuids::uuid uuid_ {boost::uuids::random_generator()()}; + + std::shared_ptr positionManager_ { + PositionManager::Instance()}; +}; + +AlertManager::AlertManager() : p(std::make_unique(this)) {} +AlertManager::~AlertManager() = default; + +void AlertManager::Impl::UpdateLocationTracking( + const std::string& locationMethodName) const +{ + types::LocationMethod locationMethod = + types::GetLocationMethod(locationMethodName); + bool locationEnabled = locationMethod == types::LocationMethod::Track; + positionManager_->EnablePositionUpdates(uuid_, locationEnabled); +} + +std::shared_ptr AlertManager::Instance() +{ + static std::weak_ptr alertManagerReference_ {}; + static std::mutex instanceMutex_ {}; + + std::unique_lock lock(instanceMutex_); + + std::shared_ptr alertManager = alertManagerReference_.lock(); + + if (alertManager == nullptr) + { + alertManager = std::make_shared(); + alertManagerReference_ = alertManager; + } + + return alertManager; +} + +} // namespace manager +} // namespace qt +} // namespace scwx diff --git a/scwx-qt/source/scwx/qt/manager/alert_manager.hpp b/scwx-qt/source/scwx/qt/manager/alert_manager.hpp new file mode 100644 index 00000000..5bdfd923 --- /dev/null +++ b/scwx-qt/source/scwx/qt/manager/alert_manager.hpp @@ -0,0 +1,32 @@ +#pragma once + +#include + +#include + +namespace scwx +{ +namespace qt +{ +namespace manager +{ + +class AlertManager : public QObject +{ + Q_OBJECT + Q_DISABLE_COPY_MOVE(AlertManager) + +public: + explicit AlertManager(); + ~AlertManager(); + + static std::shared_ptr Instance(); + +private: + class Impl; + std::unique_ptr p; +}; + +} // namespace manager +} // namespace qt +} // namespace scwx