From 2345855a97c448492409fe9a6cfb13702d82c988 Mon Sep 17 00:00:00 2001 From: Dan Paulat Date: Sat, 2 Dec 2023 23:26:54 -0600 Subject: [PATCH] Add alert audio sound to settings dialog --- .../res/icons/font-awesome-6/stop-solid.svg | 1 + scwx-qt/scwx-qt.qrc | 1 + .../source/scwx/qt/manager/media_manager.cpp | 24 +++- .../source/scwx/qt/manager/media_manager.hpp | 2 + scwx-qt/source/scwx/qt/ui/settings_dialog.cpp | 23 ++++ scwx-qt/source/scwx/qt/ui/settings_dialog.ui | 116 ++++++++++++------ 6 files changed, 128 insertions(+), 39 deletions(-) create mode 100644 scwx-qt/res/icons/font-awesome-6/stop-solid.svg diff --git a/scwx-qt/res/icons/font-awesome-6/stop-solid.svg b/scwx-qt/res/icons/font-awesome-6/stop-solid.svg new file mode 100644 index 00000000..778163e8 --- /dev/null +++ b/scwx-qt/res/icons/font-awesome-6/stop-solid.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/scwx-qt/scwx-qt.qrc b/scwx-qt/scwx-qt.qrc index c094673a..53d7aec2 100644 --- a/scwx-qt/scwx-qt.qrc +++ b/scwx-qt/scwx-qt.qrc @@ -44,6 +44,7 @@ res/icons/font-awesome-6/square-caret-right-regular.svg res/icons/font-awesome-6/square-minus-regular.svg res/icons/font-awesome-6/square-plus-regular.svg + res/icons/font-awesome-6/stop-solid.svg res/icons/font-awesome-6/volume-high-solid.svg res/palettes/wct/CC.pal res/palettes/wct/Default16.pal diff --git a/scwx-qt/source/scwx/qt/manager/media_manager.cpp b/scwx-qt/source/scwx/qt/manager/media_manager.cpp index 60457fbc..349e73b9 100644 --- a/scwx-qt/source/scwx/qt/manager/media_manager.cpp +++ b/scwx-qt/source/scwx/qt/manager/media_manager.cpp @@ -81,15 +81,33 @@ void MediaManager::Impl::ConnectSignals() void MediaManager::Play(types::AudioFile media) { const std::string path = types::GetMediaPath(media); +} - logger_->debug("Playing audio: {}", path); +void MediaManager::Play(const std::string& mediaPath) +{ + logger_->debug("Playing audio: {}", mediaPath); - p->mediaPlayer_->setSource( - QUrl(QString("qrc:%1").arg(QString::fromStdString(path)))); + if (mediaPath.starts_with(':')) + { + p->mediaPlayer_->setSource( + QUrl(QString("qrc%1").arg(QString::fromStdString(mediaPath)))); + } + else + { + p->mediaPlayer_->setSource( + QUrl::fromLocalFile(QString::fromStdString(mediaPath))); + } + + p->mediaPlayer_->setPosition(0); QMetaObject::invokeMethod(p->mediaPlayer_, &QMediaPlayer::play); } +void MediaManager::Stop() +{ + QMetaObject::invokeMethod(p->mediaPlayer_, &QMediaPlayer::stop); +} + std::shared_ptr MediaManager::Instance() { static std::weak_ptr mediaManagerReference_ {}; diff --git a/scwx-qt/source/scwx/qt/manager/media_manager.hpp b/scwx-qt/source/scwx/qt/manager/media_manager.hpp index 1b6f7ce9..f1d73656 100644 --- a/scwx-qt/source/scwx/qt/manager/media_manager.hpp +++ b/scwx-qt/source/scwx/qt/manager/media_manager.hpp @@ -23,6 +23,8 @@ public: ~MediaManager(); void Play(types::AudioFile media); + void Play(const std::string& mediaPath); + void Stop(); static std::shared_ptr Instance(); diff --git a/scwx-qt/source/scwx/qt/ui/settings_dialog.cpp b/scwx-qt/source/scwx/qt/ui/settings_dialog.cpp index 5bf68ddb..fe8a9dfc 100644 --- a/scwx-qt/source/scwx/qt/ui/settings_dialog.cpp +++ b/scwx-qt/source/scwx/qt/ui/settings_dialog.cpp @@ -4,6 +4,7 @@ #include #include #include +#include #include #include #include @@ -126,6 +127,7 @@ public: &antiAliasingEnabled_, &updateNotificationsEnabled_, &debugEnabled_, + &alertAudioSoundFile_, &alertAudioLocationMethod_, &alertAudioLatitude_, &alertAudioLongitude_, @@ -196,6 +198,8 @@ public: types::FontCategory selectedFontCategory_ {types::FontCategory::Unknown}; + std::shared_ptr mediaManager_ { + manager::MediaManager::Instance()}; std::shared_ptr positionManager_ { manager::PositionManager::Instance()}; @@ -220,6 +224,7 @@ public: settings::SettingsInterface> inactiveAlertColors_ {}; + settings::SettingsInterface alertAudioSoundFile_ {}; settings::SettingsInterface alertAudioLocationMethod_ {}; settings::SettingsInterface alertAudioLatitude_ {}; settings::SettingsInterface alertAudioLongitude_ {}; @@ -309,6 +314,20 @@ void SettingsDialogImpl::ConnectSignals() [this](const std::string& newValue) { UpdateRadarDialogLocation(newValue); }); + QObject::connect( + self_->ui->alertAudioSoundTestButton, + &QAbstractButton::clicked, + self_, + [this]() + { + mediaManager_->Play( + self_->ui->alertAudioSoundLineEdit->text().toStdString()); + }); + QObject::connect(self_->ui->alertAudioSoundStopButton, + &QAbstractButton::clicked, + self_, + [this]() { mediaManager_->Stop(); }); + QObject::connect( self_->ui->fontListView->selectionModel(), &QItemSelectionModel::selectionChanged, @@ -830,6 +849,10 @@ void SettingsDialogImpl::SetupAudioTab() settings::AudioSettings& audioSettings = settings::AudioSettings::Instance(); + alertAudioSoundFile_.SetSettingsVariable(audioSettings.alert_sound_file()); + alertAudioSoundFile_.SetEditWidget(self_->ui->alertAudioSoundLineEdit); + alertAudioSoundFile_.SetResetButton(self_->ui->resetAlertAudioSoundButton); + for (const auto& locationMethod : types::LocationMethodIterator()) { self_->ui->alertAudioLocationMethodComboBox->addItem( diff --git a/scwx-qt/source/scwx/qt/ui/settings_dialog.ui b/scwx-qt/source/scwx/qt/ui/settings_dialog.ui index 22cf1c32..681923f5 100644 --- a/scwx-qt/source/scwx/qt/ui/settings_dialog.ui +++ b/scwx-qt/source/scwx/qt/ui/settings_dialog.ui @@ -453,14 +453,14 @@ Alerts - + Latitude - + 4 @@ -476,36 +476,7 @@ - - - - ... - - - - :/res/icons/font-awesome-6/rotate-left-solid.svg:/res/icons/font-awesome-6/rotate-left-solid.svg - - - - - - - Longitude - - - - - - - ... - - - - :/res/icons/font-awesome-6/rotate-left-solid.svg:/res/icons/font-awesome-6/rotate-left-solid.svg - - - - + ... @@ -516,14 +487,28 @@ - + + + + Longitude + + + + + + + ... + + + + Location Method - + 4 @@ -539,7 +524,58 @@ - + + + + ... + + + + :/res/icons/font-awesome-6/rotate-left-solid.svg:/res/icons/font-awesome-6/rotate-left-solid.svg + + + + + + + ... + + + + :/res/icons/font-awesome-6/rotate-left-solid.svg:/res/icons/font-awesome-6/rotate-left-solid.svg + + + + + + + + + + ... + + + + :/res/icons/font-awesome-6/rotate-left-solid.svg:/res/icons/font-awesome-6/rotate-left-solid.svg + + + + + + + + :/res/icons/font-awesome-6/play-solid.svg:/res/icons/font-awesome-6/play-solid.svg + + + + + + + Sound + + + + @@ -549,6 +585,14 @@ + + + + + :/res/icons/font-awesome-6/stop-solid.svg:/res/icons/font-awesome-6/stop-solid.svg + + + @@ -560,7 +604,7 @@ 20 - 309 + 281