enhance notification sounds with volume control
This commit is contained in:
parent
8b7b57a2fd
commit
5c5a5b004c
|
@ -39,7 +39,6 @@ void NotificationsEditor::loadNotifications(const QList<Notification>& notificat
|
||||||
connect(notif_editor, &SingleNotificationEditor::notificationChanged, this, &NotificationsEditor::someNotificationChanged);
|
connect(notif_editor, &SingleNotificationEditor::notificationChanged, this, &NotificationsEditor::someNotificationChanged);
|
||||||
|
|
||||||
m_layout->addWidget(notif_editor);
|
m_layout->addWidget(notif_editor);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -26,6 +26,7 @@ SingleNotificationEditor::SingleNotificationEditor(const Notification& notificat
|
||||||
connect(m_ui.m_btnBrowseSound, &QPushButton::clicked, this, &SingleNotificationEditor::selectSoundFile);
|
connect(m_ui.m_btnBrowseSound, &QPushButton::clicked, this, &SingleNotificationEditor::selectSoundFile);
|
||||||
connect(m_ui.m_txtSound, &QLineEdit::textChanged, this, &SingleNotificationEditor::notificationChanged);
|
connect(m_ui.m_txtSound, &QLineEdit::textChanged, this, &SingleNotificationEditor::notificationChanged);
|
||||||
connect(m_ui.m_cbBalloon, &QCheckBox::toggled, this, &SingleNotificationEditor::notificationChanged);
|
connect(m_ui.m_cbBalloon, &QCheckBox::toggled, this, &SingleNotificationEditor::notificationChanged);
|
||||||
|
connect(m_ui.m_slidVolume, &QSlider::valueChanged, this, &SingleNotificationEditor::notificationChanged);
|
||||||
|
|
||||||
QCompleter* completer = new QCompleter(qApp->builtinSounds(), this);
|
QCompleter* completer = new QCompleter(qApp->builtinSounds(), this);
|
||||||
m_ui.m_txtSound->setCompleter(completer);
|
m_ui.m_txtSound->setCompleter(completer);
|
||||||
|
@ -34,13 +35,13 @@ SingleNotificationEditor::SingleNotificationEditor(const Notification& notificat
|
||||||
}
|
}
|
||||||
|
|
||||||
Notification SingleNotificationEditor::notification() const {
|
Notification SingleNotificationEditor::notification() const {
|
||||||
return Notification(m_notificationEvent, m_ui.m_cbBalloon->isChecked(), m_ui.m_txtSound->text());
|
return Notification(m_notificationEvent, m_ui.m_cbBalloon->isChecked(), m_ui.m_txtSound->text(), m_ui.m_slidVolume->value());
|
||||||
}
|
}
|
||||||
|
|
||||||
void SingleNotificationEditor::selectSoundFile() {
|
void SingleNotificationEditor::selectSoundFile() {
|
||||||
auto fil = QFileDialog::getOpenFileName(window(), tr("Select sound file"),
|
auto fil = QFileDialog::getOpenFileName(window(), tr("Select sound file"),
|
||||||
qApp->homeFolder(),
|
qApp->homeFolder(),
|
||||||
tr("WAV files (*.wav)"));
|
tr("WAV files (*.wav);;MP3 files (*.mp3)"));
|
||||||
|
|
||||||
if (!fil.isEmpty()) {
|
if (!fil.isEmpty()) {
|
||||||
m_ui.m_txtSound->setText(fil);
|
m_ui.m_txtSound->setText(fil);
|
||||||
|
@ -48,13 +49,14 @@ void SingleNotificationEditor::selectSoundFile() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void SingleNotificationEditor::playSound() {
|
void SingleNotificationEditor::playSound() {
|
||||||
Notification({}, {}, m_ui.m_txtSound->text()).playSound(qApp);
|
notification().playSound(qApp);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SingleNotificationEditor::loadNotification(const Notification& notification) {
|
void SingleNotificationEditor::loadNotification(const Notification& notification) {
|
||||||
m_ui.m_txtSound->setText(notification.soundPath());
|
m_ui.m_txtSound->setText(notification.soundPath());
|
||||||
|
m_ui.m_slidVolume->setValue(notification.volume());
|
||||||
m_ui.m_cbBalloon->setChecked(notification.balloonEnabled());
|
m_ui.m_cbBalloon->setChecked(notification.balloonEnabled());
|
||||||
setTitle(Notification::nameForEvent(notification.event()));
|
|
||||||
|
|
||||||
m_notificationEvent = notification.event();
|
m_notificationEvent = notification.event();
|
||||||
|
|
||||||
|
setTitle(Notification::nameForEvent(notification.event()));
|
||||||
}
|
}
|
||||||
|
|
|
@ -80,6 +80,23 @@
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
|
<item row="1" column="1">
|
||||||
|
<widget class="QSlider" name="m_slidVolume">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="0">
|
||||||
|
<widget class="QLabel" name="label_2">
|
||||||
|
<property name="text">
|
||||||
|
<string>Volume</string>
|
||||||
|
</property>
|
||||||
|
<property name="buddy">
|
||||||
|
<cstring>m_slidVolume</cstring>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
|
|
@ -7,17 +7,17 @@
|
||||||
#include <QDir>
|
#include <QDir>
|
||||||
|
|
||||||
#if !defined(Q_OS_OS2)
|
#if !defined(Q_OS_OS2)
|
||||||
#include <QSound>
|
#include <QMediaPlayer>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
Notification::Notification(Notification::Event event, bool balloon, const QString& sound_path)
|
Notification::Notification(Notification::Event event, bool balloon, const QString& sound_path, int volume)
|
||||||
: m_event(event), m_balloonEnabled(balloon), m_soundPath(sound_path) {}
|
: m_event(event), m_balloonEnabled(balloon), m_soundPath(sound_path), m_volume(volume) {}
|
||||||
|
|
||||||
Notification::Event Notification::event() const {
|
Notification::Event Notification::event() const {
|
||||||
return m_event;
|
return m_event;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Notification::setEvent(const Event& event) {
|
void Notification::setEvent(Event event) {
|
||||||
m_event = event;
|
m_event = event;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -32,7 +32,26 @@ void Notification::setSoundPath(const QString& sound_path) {
|
||||||
void Notification::playSound(Application* app) const {
|
void Notification::playSound(Application* app) const {
|
||||||
if (!m_soundPath.isEmpty()) {
|
if (!m_soundPath.isEmpty()) {
|
||||||
#if !defined(Q_OS_OS2)
|
#if !defined(Q_OS_OS2)
|
||||||
QSound::play(QDir::toNativeSeparators(app->replaceDataUserDataFolderPlaceholder(m_soundPath)));
|
QMediaPlayer* play = new QMediaPlayer(app);
|
||||||
|
|
||||||
|
QObject::connect(play, &QMediaPlayer::stateChanged, play, [play](QMediaPlayer::State state) {
|
||||||
|
if (state == QMediaPlayer::State::StoppedState) {
|
||||||
|
play->deleteLater();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
if (m_soundPath.startsWith(QSL(":"))) {
|
||||||
|
play->setMedia(QMediaContent(QUrl(QSL("qrc") + m_soundPath)));
|
||||||
|
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
play->setMedia(QMediaContent(
|
||||||
|
QUrl::fromLocalFile(
|
||||||
|
QDir::toNativeSeparators(app->replaceDataUserDataFolderPlaceholder(m_soundPath)))));
|
||||||
|
}
|
||||||
|
|
||||||
|
play->setVolume(m_volume);
|
||||||
|
play->play();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -63,7 +82,7 @@ QString Notification::nameForEvent(Notification::Event event) {
|
||||||
return QObject::tr("Login failed");
|
return QObject::tr("Login failed");
|
||||||
|
|
||||||
case Notification::Event::NewAppVersionAvailable:
|
case Notification::Event::NewAppVersionAvailable:
|
||||||
return QObject::tr("New %1 version is available").arg(APP_NAME);
|
return QObject::tr("New %1 version is available").arg(QSL(APP_NAME));
|
||||||
|
|
||||||
case Notification::Event::GeneralEvent:
|
case Notification::Event::GeneralEvent:
|
||||||
return QObject::tr("Miscellaneous events");
|
return QObject::tr("Miscellaneous events");
|
||||||
|
@ -73,6 +92,14 @@ QString Notification::nameForEvent(Notification::Event event) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int Notification::volume() const {
|
||||||
|
return m_volume;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Notification::setVolume(int volume) {
|
||||||
|
m_volume = volume;
|
||||||
|
}
|
||||||
|
|
||||||
bool Notification::balloonEnabled() const {
|
bool Notification::balloonEnabled() const {
|
||||||
return m_balloonEnabled;
|
return m_balloonEnabled;
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,12 +33,16 @@ class Notification {
|
||||||
LoginFailure = 6
|
LoginFailure = 6
|
||||||
};
|
};
|
||||||
|
|
||||||
explicit Notification(Event event = Event::NoEvent, bool balloon = {}, const QString& sound_path = {});
|
explicit Notification(Event event = Event::NoEvent, bool balloon = {}, const QString& sound_path = {},
|
||||||
|
int volume = {});
|
||||||
|
|
||||||
bool balloonEnabled() const;
|
bool balloonEnabled() const;
|
||||||
|
|
||||||
Event event() const;
|
Event event() const;
|
||||||
void setEvent(const Event& event);
|
void setEvent(Event event);
|
||||||
|
|
||||||
|
int volume() const;
|
||||||
|
void setVolume(int volume);
|
||||||
|
|
||||||
// Returns full path to audio file which should be played when notification
|
// Returns full path to audio file which should be played when notification
|
||||||
// is launched.
|
// is launched.
|
||||||
|
@ -55,6 +59,7 @@ class Notification {
|
||||||
Event m_event;
|
Event m_event;
|
||||||
bool m_balloonEnabled;
|
bool m_balloonEnabled;
|
||||||
QString m_soundPath;
|
QString m_soundPath;
|
||||||
|
int m_volume;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // NOTIFICATION_H
|
#endif // NOTIFICATION_H
|
||||||
|
|
|
@ -48,8 +48,9 @@ void NotificationFactory::load(Settings* settings) {
|
||||||
auto data = settings->value(GROUP(Notifications), key).toStringList();
|
auto data = settings->value(GROUP(Notifications), key).toStringList();
|
||||||
auto enabled = data.at(0).toInt() != 0;
|
auto enabled = data.at(0).toInt() != 0;
|
||||||
auto sound = data.at(1);
|
auto sound = data.at(1);
|
||||||
|
auto volume = data.size() > 2 ? data.at(2).toInt() : 100;
|
||||||
|
|
||||||
m_notifications.append(Notification(event, enabled, sound));
|
m_notifications.append(Notification(event, enabled, sound, volume));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -60,7 +61,8 @@ void NotificationFactory::save(const QList<Notification>& new_notifications, Set
|
||||||
for (const auto& n : qAsConst(m_notifications)) {
|
for (const auto& n : qAsConst(m_notifications)) {
|
||||||
settings->setValue(GROUP(Notifications), QString::number(int(n.event())), QStringList {
|
settings->setValue(GROUP(Notifications), QString::number(int(n.event())), QStringList {
|
||||||
n.balloonEnabled() ? QSL("1") : QSL("0"),
|
n.balloonEnabled() ? QSL("1") : QSL("0"),
|
||||||
n.soundPath()
|
n.soundPath(),
|
||||||
|
QString::number(n.volume())
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue