Add alert audio sound to settings dialog

This commit is contained in:
Dan Paulat 2023-12-02 23:26:54 -06:00
parent a495cf1b3b
commit 2345855a97
6 changed files with 128 additions and 39 deletions

View file

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="16" width="12" viewBox="0 0 384 512"><!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2023 Fonticons, Inc.--><path opacity="1" fill="#000000" d="M0 128C0 92.7 28.7 64 64 64H320c35.3 0 64 28.7 64 64V384c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V128z"/></svg>

After

Width:  |  Height:  |  Size: 388 B

View file

@ -44,6 +44,7 @@
<file>res/icons/font-awesome-6/square-caret-right-regular.svg</file> <file>res/icons/font-awesome-6/square-caret-right-regular.svg</file>
<file>res/icons/font-awesome-6/square-minus-regular.svg</file> <file>res/icons/font-awesome-6/square-minus-regular.svg</file>
<file>res/icons/font-awesome-6/square-plus-regular.svg</file> <file>res/icons/font-awesome-6/square-plus-regular.svg</file>
<file>res/icons/font-awesome-6/stop-solid.svg</file>
<file>res/icons/font-awesome-6/volume-high-solid.svg</file> <file>res/icons/font-awesome-6/volume-high-solid.svg</file>
<file>res/palettes/wct/CC.pal</file> <file>res/palettes/wct/CC.pal</file>
<file>res/palettes/wct/Default16.pal</file> <file>res/palettes/wct/Default16.pal</file>

View file

@ -81,15 +81,33 @@ void MediaManager::Impl::ConnectSignals()
void MediaManager::Play(types::AudioFile media) void MediaManager::Play(types::AudioFile media)
{ {
const std::string path = types::GetMediaPath(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( if (mediaPath.starts_with(':'))
QUrl(QString("qrc:%1").arg(QString::fromStdString(path)))); {
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); QMetaObject::invokeMethod(p->mediaPlayer_, &QMediaPlayer::play);
} }
void MediaManager::Stop()
{
QMetaObject::invokeMethod(p->mediaPlayer_, &QMediaPlayer::stop);
}
std::shared_ptr<MediaManager> MediaManager::Instance() std::shared_ptr<MediaManager> MediaManager::Instance()
{ {
static std::weak_ptr<MediaManager> mediaManagerReference_ {}; static std::weak_ptr<MediaManager> mediaManagerReference_ {};

View file

@ -23,6 +23,8 @@ public:
~MediaManager(); ~MediaManager();
void Play(types::AudioFile media); void Play(types::AudioFile media);
void Play(const std::string& mediaPath);
void Stop();
static std::shared_ptr<MediaManager> Instance(); static std::shared_ptr<MediaManager> Instance();

View file

@ -4,6 +4,7 @@
#include <scwx/awips/phenomenon.hpp> #include <scwx/awips/phenomenon.hpp>
#include <scwx/common/color_table.hpp> #include <scwx/common/color_table.hpp>
#include <scwx/qt/config/radar_site.hpp> #include <scwx/qt/config/radar_site.hpp>
#include <scwx/qt/manager/media_manager.hpp>
#include <scwx/qt/manager/position_manager.hpp> #include <scwx/qt/manager/position_manager.hpp>
#include <scwx/qt/manager/settings_manager.hpp> #include <scwx/qt/manager/settings_manager.hpp>
#include <scwx/qt/map/map_provider.hpp> #include <scwx/qt/map/map_provider.hpp>
@ -126,6 +127,7 @@ public:
&antiAliasingEnabled_, &antiAliasingEnabled_,
&updateNotificationsEnabled_, &updateNotificationsEnabled_,
&debugEnabled_, &debugEnabled_,
&alertAudioSoundFile_,
&alertAudioLocationMethod_, &alertAudioLocationMethod_,
&alertAudioLatitude_, &alertAudioLatitude_,
&alertAudioLongitude_, &alertAudioLongitude_,
@ -196,6 +198,8 @@ public:
types::FontCategory selectedFontCategory_ {types::FontCategory::Unknown}; types::FontCategory selectedFontCategory_ {types::FontCategory::Unknown};
std::shared_ptr<manager::MediaManager> mediaManager_ {
manager::MediaManager::Instance()};
std::shared_ptr<manager::PositionManager> positionManager_ { std::shared_ptr<manager::PositionManager> positionManager_ {
manager::PositionManager::Instance()}; manager::PositionManager::Instance()};
@ -220,6 +224,7 @@ public:
settings::SettingsInterface<std::string>> settings::SettingsInterface<std::string>>
inactiveAlertColors_ {}; inactiveAlertColors_ {};
settings::SettingsInterface<std::string> alertAudioSoundFile_ {};
settings::SettingsInterface<std::string> alertAudioLocationMethod_ {}; settings::SettingsInterface<std::string> alertAudioLocationMethod_ {};
settings::SettingsInterface<double> alertAudioLatitude_ {}; settings::SettingsInterface<double> alertAudioLatitude_ {};
settings::SettingsInterface<double> alertAudioLongitude_ {}; settings::SettingsInterface<double> alertAudioLongitude_ {};
@ -309,6 +314,20 @@ void SettingsDialogImpl::ConnectSignals()
[this](const std::string& newValue) [this](const std::string& newValue)
{ UpdateRadarDialogLocation(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( QObject::connect(
self_->ui->fontListView->selectionModel(), self_->ui->fontListView->selectionModel(),
&QItemSelectionModel::selectionChanged, &QItemSelectionModel::selectionChanged,
@ -830,6 +849,10 @@ void SettingsDialogImpl::SetupAudioTab()
settings::AudioSettings& audioSettings = settings::AudioSettings::Instance(); 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()) for (const auto& locationMethod : types::LocationMethodIterator())
{ {
self_->ui->alertAudioLocationMethodComboBox->addItem( self_->ui->alertAudioLocationMethodComboBox->addItem(

View file

@ -453,14 +453,14 @@
<string>Alerts</string> <string>Alerts</string>
</property> </property>
<layout class="QGridLayout" name="gridLayout_10"> <layout class="QGridLayout" name="gridLayout_10">
<item row="1" column="0"> <item row="2" column="0">
<widget class="QLabel" name="label_14"> <widget class="QLabel" name="label_14">
<property name="text"> <property name="text">
<string>Latitude</string> <string>Latitude</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="1" column="1"> <item row="2" column="2">
<widget class="QDoubleSpinBox" name="alertAudioLatitudeSpinBox"> <widget class="QDoubleSpinBox" name="alertAudioLatitudeSpinBox">
<property name="decimals"> <property name="decimals">
<number>4</number> <number>4</number>
@ -476,36 +476,7 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="1" column="2"> <item row="1" column="6">
<widget class="QToolButton" name="resetAlertAudioLatitudeButton">
<property name="text">
<string>...</string>
</property>
<property name="icon">
<iconset resource="../../../../scwx-qt.qrc">
<normaloff>:/res/icons/font-awesome-6/rotate-left-solid.svg</normaloff>:/res/icons/font-awesome-6/rotate-left-solid.svg</iconset>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_16">
<property name="text">
<string>Longitude</string>
</property>
</widget>
</item>
<item row="2" column="2">
<widget class="QToolButton" name="resetAlertAudioLongitudeButton">
<property name="text">
<string>...</string>
</property>
<property name="icon">
<iconset resource="../../../../scwx-qt.qrc">
<normaloff>:/res/icons/font-awesome-6/rotate-left-solid.svg</normaloff>:/res/icons/font-awesome-6/rotate-left-solid.svg</iconset>
</property>
</widget>
</item>
<item row="0" column="2">
<widget class="QToolButton" name="resetAlertAudioLocationMethodButton"> <widget class="QToolButton" name="resetAlertAudioLocationMethodButton">
<property name="text"> <property name="text">
<string>...</string> <string>...</string>
@ -516,14 +487,28 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="0" column="0"> <item row="3" column="0">
<widget class="QLabel" name="label_16">
<property name="text">
<string>Longitude</string>
</property>
</widget>
</item>
<item row="0" column="3">
<widget class="QToolButton" name="alertAudioSoundSelectButton">
<property name="text">
<string>...</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_12"> <widget class="QLabel" name="label_12">
<property name="text"> <property name="text">
<string>Location Method</string> <string>Location Method</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="2" column="1"> <item row="3" column="2">
<widget class="QDoubleSpinBox" name="alertAudioLongitudeSpinBox"> <widget class="QDoubleSpinBox" name="alertAudioLongitudeSpinBox">
<property name="decimals"> <property name="decimals">
<number>4</number> <number>4</number>
@ -539,7 +524,58 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="0" column="1"> <item row="3" column="6">
<widget class="QToolButton" name="resetAlertAudioLongitudeButton">
<property name="text">
<string>...</string>
</property>
<property name="icon">
<iconset resource="../../../../scwx-qt.qrc">
<normaloff>:/res/icons/font-awesome-6/rotate-left-solid.svg</normaloff>:/res/icons/font-awesome-6/rotate-left-solid.svg</iconset>
</property>
</widget>
</item>
<item row="2" column="6">
<widget class="QToolButton" name="resetAlertAudioLatitudeButton">
<property name="text">
<string>...</string>
</property>
<property name="icon">
<iconset resource="../../../../scwx-qt.qrc">
<normaloff>:/res/icons/font-awesome-6/rotate-left-solid.svg</normaloff>:/res/icons/font-awesome-6/rotate-left-solid.svg</iconset>
</property>
</widget>
</item>
<item row="0" column="2">
<widget class="QLineEdit" name="alertAudioSoundLineEdit"/>
</item>
<item row="0" column="6">
<widget class="QToolButton" name="resetAlertAudioSoundButton">
<property name="text">
<string>...</string>
</property>
<property name="icon">
<iconset resource="../../../../scwx-qt.qrc">
<normaloff>:/res/icons/font-awesome-6/rotate-left-solid.svg</normaloff>:/res/icons/font-awesome-6/rotate-left-solid.svg</iconset>
</property>
</widget>
</item>
<item row="0" column="4">
<widget class="QToolButton" name="alertAudioSoundTestButton">
<property name="icon">
<iconset resource="../../../../scwx-qt.qrc">
<normaloff>:/res/icons/font-awesome-6/play-solid.svg</normaloff>:/res/icons/font-awesome-6/play-solid.svg</iconset>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label_17">
<property name="text">
<string>Sound</string>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QComboBox" name="alertAudioLocationMethodComboBox"> <widget class="QComboBox" name="alertAudioLocationMethodComboBox">
<property name="sizePolicy"> <property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed"> <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
@ -549,6 +585,14 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="0" column="5">
<widget class="QToolButton" name="alertAudioSoundStopButton">
<property name="icon">
<iconset resource="../../../../scwx-qt.qrc">
<normaloff>:/res/icons/font-awesome-6/stop-solid.svg</normaloff>:/res/icons/font-awesome-6/stop-solid.svg</iconset>
</property>
</widget>
</item>
</layout> </layout>
</widget> </widget>
</item> </item>
@ -560,7 +604,7 @@
<property name="sizeHint" stdset="0"> <property name="sizeHint" stdset="0">
<size> <size>
<width>20</width> <width>20</width>
<height>309</height> <height>281</height>
</size> </size>
</property> </property>
</spacer> </spacer>