diff --git a/src/audio/alsapluginmodel.cpp b/src/audio/alsapluginmodel.cpp index cb3f81a5802edd4a85aa1c1517569880f5dd6f24..405e48fa7e266b1989cf117174deef7a4e47113b 100644 --- a/src/audio/alsapluginmodel.cpp +++ b/src/audio/alsapluginmodel.cpp @@ -20,11 +20,28 @@ //SFLPhone #include "dbus/configurationmanager.h" +class AlsaPluginModelPrivate : public QObject +{ + Q_OBJECT +public: + AlsaPluginModelPrivate(Audio::AlsaPluginModel* parent); + QStringList m_lDeviceList; + +private: + Audio::AlsaPluginModel* q_ptr; +}; + +AlsaPluginModelPrivate::AlsaPluginModelPrivate(Audio::AlsaPluginModel* parent) : q_ptr(parent) +{ + +} + ///Constructor -Audio::AlsaPluginModel::AlsaPluginModel(const QObject* parent) : QAbstractListModel(const_cast<QObject*>(parent)) +Audio::AlsaPluginModel::AlsaPluginModel(const QObject* parent) : QAbstractListModel(const_cast<QObject*>(parent)), +d_ptr(new AlsaPluginModelPrivate(this)) { ConfigurationManagerInterface& configurationManager = DBus::ConfigurationManager::instance(); - m_lDeviceList = configurationManager.getAudioPluginList(); + d_ptr->m_lDeviceList = configurationManager.getAudioPluginList(); } ///Destructor @@ -40,7 +57,7 @@ QVariant Audio::AlsaPluginModel::data( const QModelIndex& index, int role) const return QVariant(); switch(role) { case Qt::DisplayRole: - return m_lDeviceList[index.row()]; + return d_ptr->m_lDeviceList[index.row()]; }; return QVariant(); } @@ -50,7 +67,7 @@ int Audio::AlsaPluginModel::rowCount( const QModelIndex& parent ) const { if (parent.isValid()) return 0; - return m_lDeviceList.size(); + return d_ptr->m_lDeviceList.size(); } ///Re-implement QAbstractListModel flags @@ -73,7 +90,7 @@ bool Audio::AlsaPluginModel::setData( const QModelIndex& index, const QVariant & QModelIndex Audio::AlsaPluginModel::currentPlugin() const { ConfigurationManagerInterface& configurationManager = DBus::ConfigurationManager::instance(); - const int idx = m_lDeviceList.indexOf(configurationManager.getCurrentAudioOutputPlugin()); + const int idx = d_ptr->m_lDeviceList.indexOf(configurationManager.getCurrentAudioOutputPlugin()); qDebug() << "Invalid current audio plugin"; if (idx == -1) return QModelIndex(); @@ -87,7 +104,7 @@ void Audio::AlsaPluginModel::setCurrentPlugin(const QModelIndex& idx) if (!idx.isValid()) return; ConfigurationManagerInterface& configurationManager = DBus::ConfigurationManager::instance(); - configurationManager.setAudioPlugin(m_lDeviceList[idx.row()]); + configurationManager.setAudioPlugin(d_ptr->m_lDeviceList[idx.row()]); } ///Set the current index (qcombobox compatibility shim) @@ -100,7 +117,9 @@ void Audio::AlsaPluginModel::setCurrentPlugin(int idx) void Audio::AlsaPluginModel::reload() { ConfigurationManagerInterface& configurationManager = DBus::ConfigurationManager::instance(); - m_lDeviceList = configurationManager.getAudioPluginList(); + d_ptr->m_lDeviceList = configurationManager.getAudioPluginList(); emit layoutChanged(); - emit dataChanged(index(0,0),index(m_lDeviceList.size()-1,0)); -} \ No newline at end of file + emit dataChanged(index(0,0),index(d_ptr->m_lDeviceList.size()-1,0)); +} + +#include <alsapluginmodel.moc> diff --git a/src/audio/alsapluginmodel.h b/src/audio/alsapluginmodel.h index ee82dd6b199c4605523f9f0de46989aad2130010..d5317595a8c512937c1096dc82cc5f41a2621a9c 100644 --- a/src/audio/alsapluginmodel.h +++ b/src/audio/alsapluginmodel.h @@ -26,9 +26,11 @@ //SFLPhone #include "../typedefs.h" +class AlsaPluginModelPrivate; + namespace Audio { -class LIB_EXPORT AlsaPluginModel : public QAbstractListModel { +class LIB_EXPORT AlsaPluginModel : public QAbstractListModel { Q_OBJECT public: explicit AlsaPluginModel(const QObject* parent); @@ -51,7 +53,8 @@ public: void reload(); private: - QStringList m_lDeviceList; + QScopedPointer<AlsaPluginModelPrivate> d_ptr; + Q_DECLARE_PRIVATE(AlsaPluginModel) }; } diff --git a/src/audio/codecmodel.cpp b/src/audio/codecmodel.cpp index 7a51ddbeb14ce44a03a08668abe7d28fec78de7c..e1a3db25f5e4155580e5d1bbff7d22ed1a003026 100644 --- a/src/audio/codecmodel.cpp +++ b/src/audio/codecmodel.cpp @@ -25,10 +25,41 @@ #include "account.h" #include "dbus/configurationmanager.h" +class CodecModelPrivate : public QObject +{ + Q_OBJECT +public: + CodecModelPrivate(Audio::CodecModel* parent); + ///@struct AudioCodecData store audio codec information + struct AudioCodecData { + int id ; + QString name ; + QString bitrate ; + QString samplerate; + }; + + //Attributes + QList<AudioCodecData*> m_lAudioCodecs ; + QMap<int,bool> m_lEnabledCodecs; + Account* m_pAccount ; + + //Helpers + bool findCodec(int id); + +private: + Audio::CodecModel* q_ptr; +}; + +CodecModelPrivate::CodecModelPrivate(Audio::CodecModel* parent) : q_ptr(parent) +{ + +} + ///Constructor Audio::CodecModel::CodecModel(Account* account) : -QAbstractListModel(account?(QObject*)account:(QObject*)QCoreApplication::instance()),m_pAccount(account) +QAbstractListModel(account?(QObject*)account:(QObject*)QCoreApplication::instance()), d_ptr(new CodecModelPrivate(this)) { + d_ptr->m_pAccount = account; setObjectName("CodecModel: "+(account?account->id():"Unknown")); QHash<int, QByteArray> roles = roleNames(); roles.insert(Audio::CodecModel::Role::ID ,QByteArray("id")); @@ -40,9 +71,9 @@ QAbstractListModel(account?(QObject*)account:(QObject*)QCoreApplication::instanc Audio::CodecModel::~CodecModel() { - while (m_lAudioCodecs.size()) { - AudioCodecData* c = m_lAudioCodecs[0]; - m_lAudioCodecs.removeAt(0); + while (d_ptr->m_lAudioCodecs.size()) { + CodecModelPrivate::AudioCodecData* c = d_ptr->m_lAudioCodecs[0]; + d_ptr->m_lAudioCodecs.removeAt(0); delete c; } } @@ -50,22 +81,22 @@ Audio::CodecModel::~CodecModel() ///Model data QVariant Audio::CodecModel::data(const QModelIndex& idx, int role) const { if(idx.column() == 0 && role == Qt::DisplayRole ) { - return QVariant(m_lAudioCodecs[idx.row()]->name); + return QVariant(d_ptr->m_lAudioCodecs[idx.row()]->name); } else if(idx.column() == 0 && role == Qt::CheckStateRole ) { - return QVariant(m_lEnabledCodecs[m_lAudioCodecs[idx.row()]->id] ? Qt::Checked : Qt::Unchecked); + return QVariant(d_ptr->m_lEnabledCodecs[d_ptr->m_lAudioCodecs[idx.row()]->id] ? Qt::Checked : Qt::Unchecked); } else if (idx.column() == 0 && role == Audio::CodecModel::Role::NAME ) { - return m_lAudioCodecs[idx.row()]->name; + return d_ptr->m_lAudioCodecs[idx.row()]->name; } else if (idx.column() == 0 && role == Audio::CodecModel::Role::BITRATE ) { - return m_lAudioCodecs[idx.row()]->bitrate; + return d_ptr->m_lAudioCodecs[idx.row()]->bitrate; } else if (idx.column() == 0 && role == Audio::CodecModel::Role::SAMPLERATE ) { - return m_lAudioCodecs[idx.row()]->samplerate; + return d_ptr->m_lAudioCodecs[idx.row()]->samplerate; } else if (idx.column() == 0 && role == Audio::CodecModel::Role::ID ) { - return m_lAudioCodecs[idx.row()]->id; + return d_ptr->m_lAudioCodecs[idx.row()]->id; } return QVariant(); } @@ -73,7 +104,7 @@ QVariant Audio::CodecModel::data(const QModelIndex& idx, int role) const { ///Number of audio codecs int Audio::CodecModel::rowCount(const QModelIndex& par) const { Q_UNUSED(par) - return m_lAudioCodecs.size(); + return d_ptr->m_lAudioCodecs.size(); } ///Model flags @@ -86,27 +117,27 @@ Qt::ItemFlags Audio::CodecModel::flags(const QModelIndex& idx) const { ///Set audio codec data bool Audio::CodecModel::setData( const QModelIndex& idx, const QVariant &value, int role) { if (idx.column() == 0 && role == Audio::CodecModel::NAME) { - m_lAudioCodecs[idx.row()]->name = value.toString(); + d_ptr->m_lAudioCodecs[idx.row()]->name = value.toString(); emit dataChanged(idx, idx); return true; } else if (idx.column() == 0 && role == Audio::CodecModel::BITRATE) { - m_lAudioCodecs[idx.row()]->bitrate = value.toString(); + d_ptr->m_lAudioCodecs[idx.row()]->bitrate = value.toString(); emit dataChanged(idx, idx); return true; } else if(idx.column() == 0 && role == Qt::CheckStateRole) { - m_lEnabledCodecs[m_lAudioCodecs[idx.row()]->id] = value.toBool(); + d_ptr->m_lEnabledCodecs[d_ptr->m_lAudioCodecs[idx.row()]->id] = value.toBool(); emit dataChanged(idx, idx); return true; } else if (idx.column() == 0 && role == Audio::CodecModel::SAMPLERATE) { - m_lAudioCodecs[idx.row()]->samplerate = value.toString(); + d_ptr->m_lAudioCodecs[idx.row()]->samplerate = value.toString(); emit dataChanged(idx, idx); return true; } else if (idx.column() == 0 && role == Audio::CodecModel::ID) { - m_lAudioCodecs[idx.row()]->id = value.toInt(); + d_ptr->m_lAudioCodecs[idx.row()]->id = value.toInt(); emit dataChanged(idx, idx); return true; } @@ -115,18 +146,18 @@ bool Audio::CodecModel::setData( const QModelIndex& idx, const QVariant &value, ///Add a new audio codec QModelIndex Audio::CodecModel::add() { - m_lAudioCodecs << new AudioCodecData; - emit dataChanged(index(m_lAudioCodecs.size()-1,0), index(m_lAudioCodecs.size()-1,0)); - return index(m_lAudioCodecs.size()-1,0); + d_ptr->m_lAudioCodecs << new CodecModelPrivate::AudioCodecData; + emit dataChanged(index(d_ptr->m_lAudioCodecs.size()-1,0), index(d_ptr->m_lAudioCodecs.size()-1,0)); + return index(d_ptr->m_lAudioCodecs.size()-1,0); } ///Remove audio codec at 'idx' void Audio::CodecModel::remove(const QModelIndex& idx) { if (idx.isValid()) { - AudioCodecData* d = m_lAudioCodecs[idx.row()]; - m_lAudioCodecs.removeAt(idx.row()); + CodecModelPrivate::AudioCodecData* d = d_ptr->m_lAudioCodecs[idx.row()]; + d_ptr->m_lAudioCodecs.removeAt(idx.row()); delete d; - emit dataChanged(idx, index(m_lAudioCodecs.size()-1,0)); + emit dataChanged(idx, index(d_ptr->m_lAudioCodecs.size()-1,0)); } else { qDebug() << "Failed to remove an invalid audio codec"; @@ -136,22 +167,22 @@ void Audio::CodecModel::remove(const QModelIndex& idx) { ///Remove everything void Audio::CodecModel::clear() { - while(m_lAudioCodecs.size()) { - AudioCodecData* d = m_lAudioCodecs[0]; - m_lAudioCodecs.removeAt(0); + while(d_ptr->m_lAudioCodecs.size()) { + CodecModelPrivate::AudioCodecData* d = d_ptr->m_lAudioCodecs[0]; + d_ptr->m_lAudioCodecs.removeAt(0); delete d; } - m_lAudioCodecs.clear (); - m_lEnabledCodecs.clear(); + d_ptr->m_lAudioCodecs.clear (); + d_ptr->m_lEnabledCodecs.clear(); } ///Increase codec priority bool Audio::CodecModel::moveUp(const QModelIndex& idx) { if(idx.row() > 0 && idx.row() <= rowCount()) { - AudioCodecData* data2 = m_lAudioCodecs[idx.row()]; - m_lAudioCodecs.removeAt(idx.row()); - m_lAudioCodecs.insert(idx.row() - 1, data2); + CodecModelPrivate::AudioCodecData* data2 = d_ptr->m_lAudioCodecs[idx.row()]; + d_ptr->m_lAudioCodecs.removeAt(idx.row()); + d_ptr->m_lAudioCodecs.insert(idx.row() - 1, data2); emit dataChanged(index(idx.row() - 1, 0, QModelIndex()), index(idx.row(), 0, QModelIndex())); return true; } @@ -162,9 +193,9 @@ bool Audio::CodecModel::moveUp(const QModelIndex& idx) bool Audio::CodecModel::moveDown(const QModelIndex& idx) { if(idx.row() >= 0 && idx.row() < rowCount()) { - AudioCodecData* data2 = m_lAudioCodecs[idx.row()]; - m_lAudioCodecs.removeAt(idx.row()); - m_lAudioCodecs.insert(idx.row() + 1, data2); + CodecModelPrivate::AudioCodecData* data2 = d_ptr->m_lAudioCodecs[idx.row()]; + d_ptr->m_lAudioCodecs.removeAt(idx.row()); + d_ptr->m_lAudioCodecs.insert(idx.row() + 1, data2); emit dataChanged(index(idx.row(), 0, QModelIndex()), index(idx.row() + 1, 0, QModelIndex())); return true; } @@ -176,13 +207,13 @@ void Audio::CodecModel::reload() { ConfigurationManagerInterface& configurationManager = DBus::ConfigurationManager::instance(); QVector<int> codecIdList = configurationManager.getAudioCodecList(); - if (!m_pAccount->isNew()) { - QVector<int> activeCodecList = configurationManager.getActiveAudioCodecList(m_pAccount->id()); + if (!d_ptr->m_pAccount->isNew()) { + QVector<int> activeCodecList = configurationManager.getActiveAudioCodecList(d_ptr->m_pAccount->id()); QStringList tmpNameList; foreach (const int aCodec, activeCodecList) { - if (!findCodec(aCodec)) { - QStringList codec = configurationManager.getAudioCodecDetails(aCodec); + if (!d_ptr->findCodec(aCodec)) { + const QStringList codec = configurationManager.getAudioCodecDetails(aCodec); QModelIndex idx = add(); setData(idx,codec[0] ,Audio::CodecModel::Role::NAME ); setData(idx,codec[1] ,Audio::CodecModel::Role::SAMPLERATE ); @@ -196,7 +227,7 @@ void Audio::CodecModel::reload() } foreach (const int aCodec, codecIdList) { - if (!findCodec(aCodec)) { + if (!d_ptr->findCodec(aCodec)) { const QStringList codec = configurationManager.getAudioCodecDetails(aCodec); QModelIndex idx = add(); setData(idx,codec[0],Audio::CodecModel::Role::NAME ); @@ -220,15 +251,17 @@ void Audio::CodecModel::save() } ConfigurationManagerInterface& configurationManager = DBus::ConfigurationManager::instance(); - configurationManager.setActiveAudioCodecList(_codecList, m_pAccount->id()); + configurationManager.setActiveAudioCodecList(_codecList, d_ptr->m_pAccount->id()); } ///Check is a codec is already in the list -bool Audio::CodecModel::findCodec(int id) +bool CodecModelPrivate::findCodec(int id) { - foreach(AudioCodecData* data, m_lAudioCodecs) { + foreach(const AudioCodecData* data, m_lAudioCodecs) { if (data->id == id) return true; } return false; } + +#include <codecmodel.moc> diff --git a/src/audio/codecmodel.h b/src/audio/codecmodel.h index 212c24fd39ffcd91671b9f640e69152314117c3b..30dd42979dab8e2b70e30ef58e86867cd6ae7c9a 100644 --- a/src/audio/codecmodel.h +++ b/src/audio/codecmodel.h @@ -27,6 +27,7 @@ #include "../typedefs.h" class Account; +class CodecModelPrivate; namespace Audio { @@ -66,21 +67,8 @@ public: Q_INVOKABLE void save ( ); private: - ///@struct AudioCodecData store audio codec information - struct AudioCodecData { - int id ; - QString name ; - QString bitrate ; - QString samplerate; - }; - - //Attributes - QList<AudioCodecData*> m_lAudioCodecs ; - QMap<int,bool> m_lEnabledCodecs; - Account* m_pAccount ; - - //Helpers - bool findCodec(int id); + QScopedPointer<CodecModelPrivate> d_ptr; + Q_DECLARE_PRIVATE(CodecModel) }; } diff --git a/src/audio/inputdevicemodel.cpp b/src/audio/inputdevicemodel.cpp index 6715a90bf67c27ba42c94abccd037acee602f862..065b629c14c186ae69450fc65af30c7b446dc0ef 100644 --- a/src/audio/inputdevicemodel.cpp +++ b/src/audio/inputdevicemodel.cpp @@ -21,11 +21,28 @@ #include "dbus/configurationmanager.h" #include "settings.h" +class InputDeviceModelPrivate : public QObject +{ + Q_OBJECT +public: + InputDeviceModelPrivate(Audio::InputDeviceModel* parent); + QStringList m_lDeviceList; + +private: + Audio::InputDeviceModel* q_ptr; +}; + +InputDeviceModelPrivate::InputDeviceModelPrivate(Audio::InputDeviceModel* parent) : q_ptr(parent) +{ + +} + ///Constructor -Audio::InputDeviceModel::InputDeviceModel(const QObject* parent) : QAbstractListModel(const_cast<QObject*>(parent)) +Audio::InputDeviceModel::InputDeviceModel(const QObject* parent) : QAbstractListModel(const_cast<QObject*>(parent)), +d_ptr(new InputDeviceModelPrivate(this)) { ConfigurationManagerInterface& configurationManager = DBus::ConfigurationManager::instance(); - m_lDeviceList = configurationManager.getAudioInputDeviceList (); + d_ptr->m_lDeviceList = configurationManager.getAudioInputDeviceList (); } ///Destructor @@ -41,7 +58,7 @@ QVariant Audio::InputDeviceModel::data( const QModelIndex& index, int role) cons return QVariant(); switch(role) { case Qt::DisplayRole: - return m_lDeviceList[index.row()]; + return d_ptr->m_lDeviceList[index.row()]; }; return QVariant(); } @@ -51,7 +68,7 @@ int Audio::InputDeviceModel::rowCount( const QModelIndex& parent ) const { if (parent.isValid()) return 0; - return m_lDeviceList.size(); + return d_ptr->m_lDeviceList.size(); } ///Re-implement QAbstractListModel flags @@ -76,7 +93,7 @@ QModelIndex Audio::InputDeviceModel::currentDevice() const ConfigurationManagerInterface& configurationManager = DBus::ConfigurationManager::instance(); const QStringList currentDevices = configurationManager.getCurrentAudioDevicesIndex(); const int idx = currentDevices[static_cast<int>(Settings::DeviceIndex::INPUT)].toInt(); - if (idx >= m_lDeviceList.size()) + if (idx >= d_ptr->m_lDeviceList.size()) return QModelIndex(); return index(idx,0); } @@ -100,7 +117,9 @@ void Audio::InputDeviceModel::setCurrentDevice(int idx) void Audio::InputDeviceModel::reload() { ConfigurationManagerInterface& configurationManager = DBus::ConfigurationManager::instance(); - m_lDeviceList = configurationManager.getAudioInputDeviceList (); + d_ptr->m_lDeviceList = configurationManager.getAudioInputDeviceList (); emit layoutChanged(); - emit dataChanged(index(0,0),index(m_lDeviceList.size()-1,0)); -} \ No newline at end of file + emit dataChanged(index(0,0),index(d_ptr->m_lDeviceList.size()-1,0)); +} + +#include <inputdevicemodel.moc> diff --git a/src/audio/inputdevicemodel.h b/src/audio/inputdevicemodel.h index 18c96127d4ea1fc51367c60cb4e8cc7099d9fd2b..44d009feb58c4624d089e9c4327015c703a992b3 100644 --- a/src/audio/inputdevicemodel.h +++ b/src/audio/inputdevicemodel.h @@ -26,6 +26,8 @@ //SFLPhone #include "../typedefs.h" +class InputDeviceModelPrivate; + namespace Audio { class LIB_EXPORT InputDeviceModel : public QAbstractListModel { @@ -51,7 +53,8 @@ public: void reload(); private: - QStringList m_lDeviceList; + QScopedPointer<InputDeviceModelPrivate> d_ptr; + Q_DECLARE_PRIVATE(InputDeviceModel) }; } diff --git a/src/audio/managermodel.cpp b/src/audio/managermodel.cpp index 0f360bf4c1ed3e91c8f44f01e3edaff9b4e40381..07507d9032f9f2beb932039247612bb9edfc3890 100644 --- a/src/audio/managermodel.cpp +++ b/src/audio/managermodel.cpp @@ -21,23 +21,48 @@ #include "dbus/configurationmanager.h" #include "settings.h" +class ManagerModelPrivate : public QObject +{ + Q_OBJECT +public: + ManagerModelPrivate(Audio::ManagerModel* parent); + class ManagerName { + public: + constexpr static const char* PULSEAUDIO = "pulseaudio"; + constexpr static const char* ALSA = "alsa" ; + constexpr static const char* JACK = "jack" ; + }; + + QStringList m_lDeviceList; + QList<Audio::ManagerModel::Manager> m_lSupportedManagers; + +private: + Audio::ManagerModel* q_ptr; +}; + +ManagerModelPrivate::ManagerModelPrivate(Audio::ManagerModel* parent) : q_ptr(parent) +{ + +} + ///Constructor -Audio::ManagerModel::ManagerModel(const QObject* parent) : QAbstractListModel(const_cast<QObject*>(parent)) +Audio::ManagerModel::ManagerModel(const QObject* parent) : QAbstractListModel(const_cast<QObject*>(parent)), +d_ptr(new ManagerModelPrivate(this)) { ConfigurationManagerInterface& configurationManager = DBus::ConfigurationManager::instance(); const QStringList managers = configurationManager.getSupportedAudioManagers(); foreach(const QString& m,managers) { - if (m == ManagerName::PULSEAUDIO) { - m_lSupportedManagers << Manager::PULSE; - m_lDeviceList << "Pulse Audio"; + if (m == ManagerModelPrivate::ManagerName::PULSEAUDIO) { + d_ptr->m_lSupportedManagers << Manager::PULSE; + d_ptr->m_lDeviceList << "Pulse Audio"; } - else if (m == ManagerName::ALSA) { - m_lSupportedManagers << Manager::ALSA; - m_lDeviceList<< "ALSA"; + else if (m == ManagerModelPrivate::ManagerName::ALSA) { + d_ptr->m_lSupportedManagers << Manager::ALSA; + d_ptr->m_lDeviceList<< "ALSA"; } - else if (m == ManagerName::JACK) { - m_lSupportedManagers << Manager::JACK; - m_lDeviceList<< "Jack"; + else if (m == ManagerModelPrivate::ManagerName::JACK) { + d_ptr->m_lSupportedManagers << Manager::JACK; + d_ptr->m_lDeviceList<< "Jack"; } else qDebug() << "Unsupported audio manager" << m; @@ -47,7 +72,7 @@ Audio::ManagerModel::ManagerModel(const QObject* parent) : QAbstractListModel(co ///Destructor Audio::ManagerModel::~ManagerModel() { - m_lDeviceList.clear(); + d_ptr->m_lDeviceList.clear(); } ///Re-implement QAbstractListModel data @@ -57,7 +82,7 @@ QVariant Audio::ManagerModel::data( const QModelIndex& index, int role) const return QVariant(); switch(role) { case Qt::DisplayRole: - return m_lDeviceList[index.row()]; + return d_ptr->m_lDeviceList[index.row()]; }; return QVariant(); } @@ -67,7 +92,7 @@ int Audio::ManagerModel::rowCount( const QModelIndex& parent ) const { if (parent.isValid()) return 0; - return m_lDeviceList.size(); + return d_ptr->m_lDeviceList.size(); } ///Re-implement QAbstractListModel flags @@ -94,18 +119,18 @@ QModelIndex Audio::ManagerModel::currentManagerIndex() const { ConfigurationManagerInterface& configurationManager = DBus::ConfigurationManager::instance(); const QString manager = configurationManager.getAudioManager(); - if (manager == ManagerName::PULSEAUDIO) + if (manager == ManagerModelPrivate::ManagerName::PULSEAUDIO) return index((int)Manager::PULSE,0); - else if (manager == ManagerName::ALSA) + else if (manager == ManagerModelPrivate::ManagerName::ALSA) return index((int)Manager::ALSA,0); - else if (manager == ManagerName::JACK) + else if (manager == ManagerModelPrivate::ManagerName::JACK) return index((int)Manager::JACK,0); return QModelIndex(); } Audio::ManagerModel::Manager Audio::ManagerModel::currentManager() const { - return m_lSupportedManagers[currentManagerIndex().row()]; + return d_ptr->m_lSupportedManagers[currentManagerIndex().row()]; } ///Set current audio manager @@ -116,17 +141,17 @@ bool Audio::ManagerModel::setCurrentManager(const QModelIndex& idx) bool ret = true; ConfigurationManagerInterface& configurationManager = DBus::ConfigurationManager::instance(); - switch (m_lSupportedManagers[idx.row()]) { + switch (d_ptr->m_lSupportedManagers[idx.row()]) { case Manager::PULSE: - ret = configurationManager.setAudioManager(ManagerName::PULSEAUDIO); + ret = configurationManager.setAudioManager(ManagerModelPrivate::ManagerName::PULSEAUDIO); Audio::Settings::instance()->reload(); break; case Manager::ALSA: - ret = configurationManager.setAudioManager(ManagerName::ALSA); + ret = configurationManager.setAudioManager(ManagerModelPrivate::ManagerName::ALSA); Audio::Settings::instance()->reload(); break; case Manager::JACK: - ret = configurationManager.setAudioManager(ManagerName::JACK); + ret = configurationManager.setAudioManager(ManagerModelPrivate::ManagerName::JACK); Audio::Settings::instance()->reload(); break; }; @@ -143,4 +168,6 @@ bool Audio::ManagerModel::setCurrentManager(const QModelIndex& idx) bool Audio::ManagerModel::setCurrentManager(int idx) { return setCurrentManager(index(idx,0)); -} \ No newline at end of file +} + +#include <managermodel.moc> diff --git a/src/audio/managermodel.h b/src/audio/managermodel.h index 444f5f43f8a6063bdd36d1abc0f05621db085c9f..0271a41764a7078f1eaecdc8a3a505481e27e180 100644 --- a/src/audio/managermodel.h +++ b/src/audio/managermodel.h @@ -26,6 +26,8 @@ //SFLPhone #include "../typedefs.h" +class ManagerModelPrivate; + namespace Audio { class LIB_EXPORT ManagerModel : public QAbstractListModel { @@ -62,15 +64,8 @@ Q_SIGNALS: void currentManagerChanged(const QModelIndex&); private: - class ManagerName { - public: - constexpr static const char* PULSEAUDIO = "pulseaudio"; - constexpr static const char* ALSA = "alsa" ; - constexpr static const char* JACK = "jack" ; - }; - - QStringList m_lDeviceList; - QList<Manager> m_lSupportedManagers; + QScopedPointer<ManagerModelPrivate> d_ptr; + Q_DECLARE_PRIVATE(ManagerModel) }; } diff --git a/src/audio/outputdevicemodel.cpp b/src/audio/outputdevicemodel.cpp index 83c1179804f76b0c1d68005c18a54fb0c0adafb1..4d61cdcdb2d11eb3c622df7fd432e5c1c442f055 100644 --- a/src/audio/outputdevicemodel.cpp +++ b/src/audio/outputdevicemodel.cpp @@ -21,11 +21,29 @@ #include "dbus/configurationmanager.h" #include "settings.h" +class OutputDeviceModelPrivate : public QObject +{ + Q_OBJECT +public: + OutputDeviceModelPrivate(Audio::OutputDeviceModel* parent); + QStringList m_lDeviceList; + +private: + Audio::OutputDeviceModel* q_ptr; +}; + + +OutputDeviceModelPrivate::OutputDeviceModelPrivate(Audio::OutputDeviceModel* parent) : q_ptr(parent) +{ + +} + ///Constructor -Audio::OutputDeviceModel::OutputDeviceModel(const QObject* parent) : QAbstractListModel(const_cast<QObject*>(parent)) +Audio::OutputDeviceModel::OutputDeviceModel(const QObject* parent) : QAbstractListModel(const_cast<QObject*>(parent)), +d_ptr(new OutputDeviceModelPrivate(this)) { ConfigurationManagerInterface& configurationManager = DBus::ConfigurationManager::instance(); - m_lDeviceList = configurationManager.getAudioOutputDeviceList(); + d_ptr->m_lDeviceList = configurationManager.getAudioOutputDeviceList(); } ///Destructor @@ -41,7 +59,7 @@ QVariant Audio::OutputDeviceModel::data( const QModelIndex& index, int role) con return QVariant(); switch(role) { case Qt::DisplayRole: - return m_lDeviceList[index.row()]; + return d_ptr->m_lDeviceList[index.row()]; }; return QVariant(); } @@ -51,7 +69,7 @@ int Audio::OutputDeviceModel::rowCount( const QModelIndex& parent ) const { if (parent.isValid()) return 0; - return m_lDeviceList.size(); + return d_ptr->m_lDeviceList.size(); } ///Re-implement QAbstractListModel flags @@ -77,7 +95,7 @@ QModelIndex Audio::OutputDeviceModel::currentDevice() const const QStringList currentDevices = configurationManager.getCurrentAudioDevicesIndex(); const int idx = currentDevices[static_cast<int>(Audio::Settings::DeviceIndex::OUTPUT)].toInt(); - if (idx >= m_lDeviceList.size()) + if (idx >= d_ptr->m_lDeviceList.size()) return QModelIndex(); return index(idx,0); } @@ -101,7 +119,9 @@ void Audio::OutputDeviceModel::setCurrentDevice(int idx) void Audio::OutputDeviceModel::reload() { ConfigurationManagerInterface& configurationManager = DBus::ConfigurationManager::instance(); - m_lDeviceList = configurationManager.getAudioOutputDeviceList(); + d_ptr->m_lDeviceList = configurationManager.getAudioOutputDeviceList(); emit layoutChanged(); - emit dataChanged(index(0,0),index(m_lDeviceList.size()-1,0)); -} \ No newline at end of file + emit dataChanged(index(0,0),index(d_ptr->m_lDeviceList.size()-1,0)); +} + +#include <outputdevicemodel.moc> diff --git a/src/audio/outputdevicemodel.h b/src/audio/outputdevicemodel.h index 0aa5fea82dd442221b7aaf5b518041010f4e7737..211fc3f9fc1dfc53eb1ee951c40249ebe65c112b 100644 --- a/src/audio/outputdevicemodel.h +++ b/src/audio/outputdevicemodel.h @@ -26,6 +26,8 @@ //SFLPhone #include "../typedefs.h" +class OutputDeviceModelPrivate; + namespace Audio { class LIB_EXPORT OutputDeviceModel : public QAbstractListModel { @@ -51,7 +53,8 @@ public: void reload(); private: - QStringList m_lDeviceList; + QScopedPointer<OutputDeviceModelPrivate> d_ptr; + Q_DECLARE_PRIVATE(OutputDeviceModel) }; } diff --git a/src/audio/ringtonedevicemodel.cpp b/src/audio/ringtonedevicemodel.cpp index 462cf260ae847787223ab8bc5c85e5d5bce09500..fa2b57cec0e90457397c9c38576ab35dfb574fe6 100644 --- a/src/audio/ringtonedevicemodel.cpp +++ b/src/audio/ringtonedevicemodel.cpp @@ -21,11 +21,28 @@ #include "dbus/configurationmanager.h" #include "settings.h" +class RingtoneDeviceModelPrivate : public QObject +{ + Q_OBJECT +public: + RingtoneDeviceModelPrivate(Audio::RingtoneDeviceModel* parent); + QStringList m_lDeviceList; + +private: + Audio::RingtoneDeviceModel* q_ptr; +}; + +RingtoneDeviceModelPrivate::RingtoneDeviceModelPrivate(Audio::RingtoneDeviceModel* parent) : q_ptr(parent) +{ + +} + ///Constructor -Audio::RingtoneDeviceModel::RingtoneDeviceModel(const QObject* parent) : QAbstractListModel(const_cast<QObject*>(parent)) +Audio::RingtoneDeviceModel::RingtoneDeviceModel(const QObject* parent) : QAbstractListModel(const_cast<QObject*>(parent)), +d_ptr(new RingtoneDeviceModelPrivate(this)) { ConfigurationManagerInterface& configurationManager = DBus::ConfigurationManager::instance(); - m_lDeviceList = configurationManager.getAudioOutputDeviceList(); + d_ptr->m_lDeviceList = configurationManager.getAudioOutputDeviceList(); } ///Destructor @@ -41,7 +58,7 @@ QVariant Audio::RingtoneDeviceModel::data( const QModelIndex& index, int role) c return QVariant(); switch(role) { case Qt::DisplayRole: - return m_lDeviceList[index.row()]; + return d_ptr->m_lDeviceList[index.row()]; }; return QVariant(); } @@ -51,7 +68,7 @@ int Audio::RingtoneDeviceModel::rowCount( const QModelIndex& parent ) const { if (parent.isValid()) return 0; - return m_lDeviceList.size(); + return d_ptr->m_lDeviceList.size(); } ///Re-implement QAbstractListModel flags @@ -76,7 +93,7 @@ QModelIndex Audio::RingtoneDeviceModel::currentDevice() const ConfigurationManagerInterface& configurationManager = DBus::ConfigurationManager::instance(); const QStringList currentDevices = configurationManager.getCurrentAudioDevicesIndex(); const int idx = currentDevices[static_cast<int>(Audio::Settings::DeviceIndex::RINGTONE)].toInt(); - if (idx >= m_lDeviceList.size()) + if (idx >= d_ptr->m_lDeviceList.size()) return QModelIndex(); return index(idx,0); } @@ -100,7 +117,9 @@ void Audio::RingtoneDeviceModel::setCurrentDevice(int idx) void Audio::RingtoneDeviceModel::reload() { ConfigurationManagerInterface& configurationManager = DBus::ConfigurationManager::instance(); - m_lDeviceList = configurationManager.getAudioOutputDeviceList(); + d_ptr->m_lDeviceList = configurationManager.getAudioOutputDeviceList(); emit layoutChanged(); - emit dataChanged(index(0,0),index(m_lDeviceList.size()-1,0)); + emit dataChanged(index(0,0),index(d_ptr->m_lDeviceList.size()-1,0)); } + +#include <ringtonedevicemodel.moc> diff --git a/src/audio/ringtonedevicemodel.h b/src/audio/ringtonedevicemodel.h index c79d65afed90fb5b9dd4273b00e0b28c701ac3c0..63c0cf2cd200ed55c8d72605f68c86687cf911a1 100644 --- a/src/audio/ringtonedevicemodel.h +++ b/src/audio/ringtonedevicemodel.h @@ -26,6 +26,8 @@ //SFLPhone #include "../typedefs.h" +class RingtoneDeviceModelPrivate; + namespace Audio { class LIB_EXPORT RingtoneDeviceModel: public QAbstractListModel { @@ -51,7 +53,8 @@ public: void reload(); private: - QStringList m_lDeviceList; + QScopedPointer<RingtoneDeviceModelPrivate> d_ptr; + Q_DECLARE_PRIVATE(RingtoneDeviceModel) }; } diff --git a/src/audio/settings.cpp b/src/audio/settings.cpp index 9a55702de3e84d78372baf5efec89ded88109598..f6db76d7c1b438416b3dd42cfa021b480d5c4a93 100644 --- a/src/audio/settings.cpp +++ b/src/audio/settings.cpp @@ -26,27 +26,55 @@ #include "outputdevicemodel.h" #include "inputdevicemodel.h" +namespace Audio { +class SettingsPrivate : public QObject +{ + Q_OBJECT +public: + SettingsPrivate(Audio::Settings* parent); + + //Attributes + mutable Audio::AlsaPluginModel* m_pAlsaPluginModel ; + mutable Audio::InputDeviceModel* m_pInputDeviceModel ; + mutable Audio::OutputDeviceModel* m_pOutputDeviceModel ; + mutable Audio::ManagerModel* m_pAudioManagerModel ; + mutable Audio::RingtoneDeviceModel* m_pRingtoneDeviceModel; + bool m_EnableRoomTone ; + +private Q_SLOTS: + void slotVolumeChanged(const QString& str, double volume); + +private: + Audio::Settings* q_ptr; +}; +} + Audio::Settings* Audio::Settings::m_spInstance = nullptr; -///Constructor -Audio::Settings::Settings() : QObject(),m_EnableRoomTone(false), +Audio::SettingsPrivate::SettingsPrivate(Audio::Settings* parent) : q_ptr(parent),m_EnableRoomTone(false), m_pAlsaPluginModel (nullptr), m_pInputDeviceModel (nullptr), m_pAudioManagerModel(nullptr), m_pRingtoneDeviceModel(nullptr), m_pOutputDeviceModel(nullptr) { - m_pRingtoneDeviceModel = new RingtoneDeviceModel (this); + +} + +///Constructor +Audio::Settings::Settings() : QObject(), d_ptr(new Audio::SettingsPrivate(this)) +{ + d_ptr->m_pRingtoneDeviceModel = new RingtoneDeviceModel (this); ConfigurationManagerInterface& configurationManager = DBus::ConfigurationManager::instance(); - connect(&configurationManager,SIGNAL(volumeChanged(QString,double)),this,SLOT(slotVolumeChanged(QString,double))); + connect(&configurationManager,SIGNAL(volumeChanged(QString,double)),d_ptr.data(),SLOT(slotVolumeChanged(QString,double))); } ///Destructor Audio::Settings::~Settings() { - delete m_pAlsaPluginModel ; - delete m_pInputDeviceModel ; - delete m_pOutputDeviceModel ; - delete m_pAudioManagerModel ; - delete m_pRingtoneDeviceModel; + delete d_ptr->m_pAlsaPluginModel ; + delete d_ptr->m_pInputDeviceModel ; + delete d_ptr->m_pOutputDeviceModel ; + delete d_ptr->m_pAudioManagerModel ; + delete d_ptr->m_pRingtoneDeviceModel; } ///Singleton @@ -61,58 +89,58 @@ Audio::Settings* Audio::Settings::instance() ///Return plugin model (alsa only for the time being) Audio::AlsaPluginModel* Audio::Settings::alsaPluginModel() const { - if (!m_pAlsaPluginModel) - m_pAlsaPluginModel = new Audio::AlsaPluginModel(this); - return m_pAlsaPluginModel; + if (!d_ptr->m_pAlsaPluginModel) + d_ptr->m_pAlsaPluginModel = new Audio::AlsaPluginModel(this); + return d_ptr->m_pAlsaPluginModel; } ///Return the input device model Audio::InputDeviceModel* Audio::Settings::inputDeviceModel() const { - if (!m_pInputDeviceModel) - m_pInputDeviceModel = new Audio::InputDeviceModel(this); - return m_pInputDeviceModel; + if (!d_ptr->m_pInputDeviceModel) + d_ptr->m_pInputDeviceModel = new Audio::InputDeviceModel(this); + return d_ptr->m_pInputDeviceModel; } ///Return the output device model Audio::OutputDeviceModel* Audio::Settings::outputDeviceModel() const { - if (!m_pOutputDeviceModel) - m_pOutputDeviceModel = new Audio::OutputDeviceModel(this); - return m_pOutputDeviceModel; + if (!d_ptr->m_pOutputDeviceModel) + d_ptr->m_pOutputDeviceModel = new Audio::OutputDeviceModel(this); + return d_ptr->m_pOutputDeviceModel; } ///Return audio manager Audio::ManagerModel* Audio::Settings::managerModel() const { - if (!m_pAudioManagerModel) - m_pAudioManagerModel = new Audio::ManagerModel(this); - return m_pAudioManagerModel; + if (!d_ptr->m_pAudioManagerModel) + d_ptr->m_pAudioManagerModel = new Audio::ManagerModel(this); + return d_ptr->m_pAudioManagerModel; } ///Return the ringtone device model Audio::RingtoneDeviceModel* Audio::Settings::ringtoneDeviceModel() const { - if (!m_pRingtoneDeviceModel) - m_pRingtoneDeviceModel = new Audio::RingtoneDeviceModel (this); - return m_pRingtoneDeviceModel; + if (!d_ptr->m_pRingtoneDeviceModel) + d_ptr->m_pRingtoneDeviceModel = new Audio::RingtoneDeviceModel (this); + return d_ptr->m_pRingtoneDeviceModel; } ///Is the room tone (globally) enabled bool Audio::Settings::isRoomToneEnabled() { - return m_EnableRoomTone; + return d_ptr->m_EnableRoomTone; } ///Reload everything void Audio::Settings::reload() { - m_pAlsaPluginModel->reload(); - m_pInputDeviceModel->reload(); - m_pOutputDeviceModel->reload(); + d_ptr->m_pAlsaPluginModel->reload(); + d_ptr->m_pInputDeviceModel->reload(); + d_ptr->m_pOutputDeviceModel->reload(); // m_pAudioManagerModel->reload(); - m_pRingtoneDeviceModel->reload(); + d_ptr->m_pRingtoneDeviceModel->reload(); } ///Play room tone @@ -134,7 +162,7 @@ void Audio::Settings::stopRoomTone() const ///Set if the roomtone is (globally) enabled void Audio::Settings::setEnableRoomTone(bool enable) { - m_EnableRoomTone = enable; + d_ptr->m_EnableRoomTone = enable; } ///Enable noise suppress code, may make things worst @@ -244,13 +272,14 @@ bool Audio::Settings::areDTMFMuted() const } ///Called when the volume change for external reasons -void Audio::Settings::slotVolumeChanged(const QString& str, double volume) +void Audio::SettingsPrivate::slotVolumeChanged(const QString& str, double volume) { if (str == Audio::Settings::DeviceKey::CAPTURE) - emit captureVolumeChanged(static_cast<int>(volume*100)); + emit q_ptr->captureVolumeChanged(static_cast<int>(volume*100)); else if (str == Audio::Settings::DeviceKey::PLAYBACK) - emit playbackVolumeChanged(static_cast<int>(volume*100)); + emit q_ptr->playbackVolumeChanged(static_cast<int>(volume*100)); else qDebug() << "Unknown audio device" << str; } +#include <settings.moc> diff --git a/src/audio/settings.h b/src/audio/settings.h index be36ce4a06a453f024c5c9fe5b8aa92d2303a36d..5e5a0ff1546bdeb337bd937536fd2b785359dd14 100644 --- a/src/audio/settings.h +++ b/src/audio/settings.h @@ -23,6 +23,7 @@ //SFLPhone #include "../typedefs.h" + namespace Audio { class AlsaPluginModel ; @@ -31,6 +32,8 @@ class OutputDeviceModel ; class ManagerModel ; class RingtoneDeviceModel; +class SettingsPrivate; + /** * This class group all ComboBox models used by audio settings dialogs */ @@ -100,20 +103,11 @@ Q_SIGNALS: void captureVolumeChanged(int); void DTMFMutedChanged(bool); -private Q_SLOTS: - void slotVolumeChanged(const QString& str, double volume); - private: //Constructor explicit Settings(); - - //Attributes - mutable AlsaPluginModel* m_pAlsaPluginModel ; - mutable InputDeviceModel* m_pInputDeviceModel ; - mutable OutputDeviceModel* m_pOutputDeviceModel ; - mutable ManagerModel* m_pAudioManagerModel ; - mutable RingtoneDeviceModel* m_pRingtoneDeviceModel; - bool m_EnableRoomTone ; + QScopedPointer<SettingsPrivate> d_ptr; + Q_DECLARE_PRIVATE(Settings) //Singleton static Settings* m_spInstance;