refs #258, notification sounds for voice room joined/left

* settings for notification sounds
* wav files
* changes in GUI
This commit is contained in:
Klaus Basan
2014-06-05 02:19:00 +02:00
parent 02bb054f5a
commit 1b804ca8d7
9 changed files with 292 additions and 6 deletions

View File

@@ -29,12 +29,10 @@ void MainWindow::reloadSettings()
// update hot keys
this->ui->tvp_SettingsMiscHotkeys->update(this->getIContextSettings()->getHotkeys());
// fake setting for sound notifications
this->ui->cb_SettingsAudioPlayNotificationSounds->setChecked(true);
this->ui->cb_SettingsAudioNotificationTextMessage->setChecked(true);
this->ui->cb_SettingsAudioNotificationVoiceRoom->setChecked(true);
}
/*

View File

@@ -237,6 +237,5 @@ void MainWindow::playNotifcationSound(CNotificationSounds::Notification notifica
{
if (!this->m_contextAudioAvailable) return;
if (!this->ui->cb_SettingsAudioPlayNotificationSounds->isChecked()) return;
if (notification == CNotificationSounds::NotificationTextMessage && !this->ui->cb_SettingsAudioNotificationTextMessage->isChecked()) return;
this->getIContextAudio()->playNotification(static_cast<uint>(notification));
this->getIContextAudio()->playNotification(static_cast<uint>(notification), true);
}

165
src/blackmisc/setaudio.cpp Normal file
View File

@@ -0,0 +1,165 @@
#include "setaudio.h"
using namespace BlackSound;
namespace BlackMisc
{
namespace Settings
{
/*
* Constructor
*/
CSettingsAudio::CSettingsAudio()
{
this->initDefaultValues();
}
/*
* Flag
*/
bool CSettingsAudio::getNotificationFlag(CNotificationSounds::Notification notification) const
{
QChar f = m_notificationFlags.at(static_cast<int>(notification));
return '1' == f;
}
/*
* Convert to string
*/
QString CSettingsAudio::convertToQString(bool i18n) const
{
Q_UNUSED(i18n);
QString s("Notification flags:");
s.append(" ").append(m_notificationFlags);
return s;
}
/*
* metaTypeId
*/
int CSettingsAudio::getMetaTypeId() const
{
return qMetaTypeId<CSettingsAudio>();
}
/*
* is a
*/
bool CSettingsAudio::isA(int metaTypeId) const
{
if (metaTypeId == qMetaTypeId<CSettingsAudio>()) { return true; }
return this->CValueObject::isA(metaTypeId);
}
/*
* Compare
*/
int CSettingsAudio::compareImpl(const CValueObject &otherBase) const
{
const auto &other = static_cast<const CSettingsAudio &>(otherBase);
return compare(TupleConverter<CSettingsAudio>::toTuple(*this), TupleConverter<CSettingsAudio>::toTuple(other));
}
/*
* Marshall
*/
void CSettingsAudio::marshallToDbus(QDBusArgument &argument) const
{
argument << TupleConverter<CSettingsAudio>::toTuple(*this);
}
/*
* Unmarshall
*/
void CSettingsAudio::unmarshallFromDbus(const QDBusArgument &argument)
{
argument >> TupleConverter<CSettingsAudio>::toTuple(*this);
}
/*
* Equal?
*/
bool CSettingsAudio::operator ==(const CSettingsAudio &other) const
{
if (this == &other) return true;
return compare(*this, other) == 0;
}
/*
* Unequal?
*/
bool CSettingsAudio::operator !=(const CSettingsAudio &other) const
{
return !((*this) == other);
}
/*
* Hash
*/
uint CSettingsAudio::getValueHash() const
{
return qHash(TupleConverter<CSettingsAudio>::toTuple(*this));
}
/*
* To JSON
*/
QJsonObject CSettingsAudio::toJson() const
{
return BlackMisc::serializeJson(CSettingsAudio::jsonMembers(), TupleConverter<CSettingsAudio>::toTuple(*this));
}
/*
* From JSON
*/
void CSettingsAudio::fromJson(const QJsonObject &json)
{
BlackMisc::deserializeJson(json, CSettingsAudio::jsonMembers(), TupleConverter<CSettingsAudio>::toTuple(*this));
}
/*
* Members
*/
const QStringList &CSettingsAudio::jsonMembers()
{
return TupleConverter<CSettingsAudio>::jsonMembers();
}
/*
* Default values
*/
void CSettingsAudio::initDefaultValues()
{
this->m_notificationFlags = QString(1 + static_cast<int>(CNotificationSounds::Notification::NotificationsLoadSounds), '1');
}
/*
* Register metadata
*/
void CSettingsAudio::registerMetadata()
{
qRegisterMetaType<CSettingsAudio>();
qDBusRegisterMetaType<CSettingsAudio>();
}
/*
* Value
*/
BlackMisc::CStatusMessageList CSettingsAudio::value(const QString &path, const QString &command, const QVariant &value, bool &changedFlag)
{
// TODO: This needs to be refactored to a smarter way to delegate commands
changedFlag = false;
CStatusMessageList msgs;
if (path == CSettingsAudio::ValueNotificationFlag())
{
if (command == CSettingUtilities::CmdSetTrue() || command == CSettingUtilities::CmdSetFalse())
{
CNotificationSounds::Notification index = static_cast<CNotificationSounds::Notification>(value.toInt());
char value = (command == CSettingUtilities::CmdSetTrue()) ? '1' : '0' ;
this->m_notificationFlags.replace(index, 1, value);
return msgs;
}
}
return CSettingUtilities::wrongPathMessages(path);
}
} // namespace
} // namespace

105
src/blackmisc/setaudio.h Normal file
View File

@@ -0,0 +1,105 @@
/* Copyright (C) 2013 VATSIM Community / authors
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#ifndef BLACKMISC_SETTINGS_AUDIO_H
#define BLACKMISC_SETTINGS_AUDIO_H
#include "valueobject.h"
#include "statusmessagelist.h"
#include "settingutilities.h"
#include "notificationsounds.h"
#include <QJsonObject>
namespace BlackMisc
{
namespace Settings
{
//! Value object encapsulating information of audio related settings.
class CSettingsAudio : public BlackMisc::CValueObject
{
public:
//! Default constructor.
CSettingsAudio();
//! Destructor.
virtual ~CSettingsAudio() {}
//! Path
static const QString &ValueNotificationFlag()
{
static const QString value("notificationflag");
return value;
}
//! \copydoc CValueObject::toQVariant()
virtual QVariant toQVariant() const override
{
return QVariant::fromValue(*this);
}
//! Notification flag (play notification?)
bool getNotificationFlag(BlackSound::CNotificationSounds::Notification notification) const;
//! Notification flag (play notification?)
void setNotificationFlag(BlackSound::CNotificationSounds::Notification notification, bool value);
//! Equal operator ==
bool operator ==(const CSettingsAudio &other) const;
//! Unequal operator !=
bool operator !=(const CSettingsAudio &other) const;
//! \copydoc BlackCore::IContextSettings
virtual BlackMisc::CStatusMessageList value(const QString &path, const QString &command, const QVariant &value, bool &changedFlag);
//! \copydoc CValueObject::getValueHash
virtual uint getValueHash() const override;
//! \copydoc CValueObject::toJson
virtual QJsonObject toJson() const override;
//! \copydoc CValueObject::fromJson
virtual void fromJson(const QJsonObject &json) override;
//! Init with meaningful default values
void initDefaultValues();
//! \copydoc CValueObject::registerMetadata
static void registerMetadata();
//! \copydoc TupleConverter<>::jsonMembers()
static const QStringList &jsonMembers();
protected:
//! \copydoc CValueObject::convertToQString
virtual QString convertToQString(bool i18n = false) const override;
//! \copydoc CValueObject::getMetaTypeId
virtual int getMetaTypeId() const override;
//! \copydoc CValueObject::isA
virtual bool isA(int metaTypeId) const override;
//! \copydoc CValueObject::compareImpl
virtual int compareImpl(const CValueObject &other) const override;
//! \copydoc CValueObject::marshallToDbus
virtual void marshallToDbus(QDBusArgument &argument) const override;
//! \copydoc CValueObject::unmarshallFromDbus
virtual void unmarshallFromDbus(const QDBusArgument &argument) override;
private:
BLACK_ENABLE_TUPLE_CONVERSION(CSettingsAudio)
QString m_notificationFlags; //!< play notification for notification x, a little trick to use a string here (streamable, hashable, ..)
};
} // namespace
} // namespace
Q_DECLARE_METATYPE(BlackMisc::Settings::CSettingsAudio)
BLACK_DECLARE_TUPLE_CONVERSION(BlackMisc::Settings::CSettingsAudio, (o.m_notificationFlags))
#endif // guard

View File

@@ -7,5 +7,6 @@
#define BLACKMISC_SETTINGSALLCLASSES_H
#include "blackmisc/setnetwork.h"
#include "blackmisc/setaudio.h"
#endif // guard

View File

@@ -7,7 +7,7 @@ namespace BlackMisc
{
namespace Settings
{
//! \brief Helper / utility methods for settings
//! Helper / utility methods for settings
class CSettingUtilities
{
private:
@@ -43,6 +43,20 @@ namespace BlackMisc
return cmd;
}
//! Command Set boolean value true
static const QString &CmdSetTrue()
{
static const QString cmd("set:true");
return cmd;
}
//! Command Set boolean value false
static const QString &CmdSetFalse()
{
static const QString cmd("set:false");
return cmd;
}
//! \brief Wrong path message
static BlackMisc::CStatusMessage wrongPathMessage(const QString &path = "");

View File

@@ -474,10 +474,14 @@ namespace BlackSound
success = playlist->addMedia(QUrl::fromLocalFile(QCoreApplication::applicationDirPath().append("/sounds/login.wav"))) && success;
success = playlist->addMedia(QUrl::fromLocalFile(QCoreApplication::applicationDirPath().append("/sounds/logoff.wav"))) && success;
success = playlist->addMedia(QUrl::fromLocalFile(QCoreApplication::applicationDirPath().append("/sounds/privatemessage.wav"))) && success;
success = playlist->addMedia(QUrl::fromLocalFile(QCoreApplication::applicationDirPath().append("/sounds/voiceroomjoined.wav"))) && success;
success = playlist->addMedia(QUrl::fromLocalFile(QCoreApplication::applicationDirPath().append("/sounds/voiceroomleft.wav"))) && success;
Q_ASSERT(success);
playlist->setPlaybackMode(QMediaPlaylist::CurrentItemOnce);
mediaPlayer->setPlaylist(playlist);
}
if (notification == CNotificationSounds::NotificationsLoadSounds) return;
int index = static_cast<int>(notification);
playlist->setCurrentIndex(index);
mediaPlayer->setVolume(volume); // 0-100

Binary file not shown.

Binary file not shown.