21
21
#include <QtCore/QDebug>
22
#include <QtCore/QCoreApplication>
26
#include "dbus/configurationmanager.h"
24
AudioCodecModel::AudioCodecModel(QObject* parent) : QAbstractListModel(parent) {
29
AudioCodecModel::AudioCodecModel(Account* account) :
30
QAbstractListModel(account?(QObject*)account:(QObject*)QCoreApplication::instance()),m_pAccount(account)
32
setObjectName("AudioCodecModel: "+account->id());
33
QHash<int, QByteArray> roles = roleNames();
34
roles.insert(AudioCodecModel::Role::ID ,QByteArray("id"));
35
roles.insert(AudioCodecModel::Role::NAME ,QByteArray("name"));
36
roles.insert(AudioCodecModel::Role::BITRATE ,QByteArray("bitrate"));
37
roles.insert(AudioCodecModel::Role::SAMPLERATE,QByteArray("samplerate"));
29
QVariant AudioCodecModel::data(const QModelIndex& index, int role) const {
30
if(index.column() == 0 && role == Qt::DisplayRole ) {
31
return QVariant(m_lAudioCodecs[index.row()]->name);
33
else if(index.column() == 0 && role == Qt::CheckStateRole ) {
34
return QVariant(m_lEnabledCodecs[m_lAudioCodecs[index.row()]->id] ? Qt::Checked : Qt::Unchecked);
36
else if (index.column() == 0 && role == AudioCodecModel::NAME_ROLE ) {
37
return m_lAudioCodecs[index.row()]->name;
39
else if (index.column() == 0 && role == AudioCodecModel::BITRATE_ROLE ) {
40
return m_lAudioCodecs[index.row()]->bitrate;
42
else if (index.column() == 0 && role == AudioCodecModel::SAMPLERATE_ROLE ) {
43
return m_lAudioCodecs[index.row()]->samplerate;
45
else if (index.column() == 0 && role == AudioCodecModel::ID_ROLE ) {
46
return m_lAudioCodecs[index.row()]->id;
42
QVariant AudioCodecModel::data(const QModelIndex& idx, int role) const {
43
if(idx.column() == 0 && role == Qt::DisplayRole ) {
44
return QVariant(m_lAudioCodecs[idx.row()]->name);
46
else if(idx.column() == 0 && role == Qt::CheckStateRole ) {
47
return QVariant(m_lEnabledCodecs[m_lAudioCodecs[idx.row()]->id] ? Qt::Checked : Qt::Unchecked);
49
else if (idx.column() == 0 && role == AudioCodecModel::Role::NAME ) {
50
return m_lAudioCodecs[idx.row()]->name;
52
else if (idx.column() == 0 && role == AudioCodecModel::Role::BITRATE ) {
53
return m_lAudioCodecs[idx.row()]->bitrate;
55
else if (idx.column() == 0 && role == AudioCodecModel::Role::SAMPLERATE ) {
56
return m_lAudioCodecs[idx.row()]->samplerate;
58
else if (idx.column() == 0 && role == AudioCodecModel::Role::ID ) {
59
return m_lAudioCodecs[idx.row()]->id;
51
64
///Number of audio codecs
52
int AudioCodecModel::rowCount(const QModelIndex& parent) const {
65
int AudioCodecModel::rowCount(const QModelIndex& par) const {
54
67
return m_lAudioCodecs.size();
58
Qt::ItemFlags AudioCodecModel::flags(const QModelIndex& index) const {
59
if (index.column() == 0)
60
return QAbstractItemModel::flags(index) | Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsSelectable;
61
return QAbstractItemModel::flags(index);
71
Qt::ItemFlags AudioCodecModel::flags(const QModelIndex& idx) const {
72
if (idx.column() == 0)
73
return QAbstractItemModel::flags(idx) | Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsSelectable;
74
return QAbstractItemModel::flags(idx);
64
77
///Set audio codec data
65
bool AudioCodecModel::setData( const QModelIndex& index, const QVariant &value, int role) {
66
if (index.column() == 0 && role == AudioCodecModel::NAME_ROLE) {
67
m_lAudioCodecs[index.row()]->name = value.toString();
68
emit dataChanged(index, index);
71
else if (index.column() == 0 && role == AudioCodecModel::BITRATE_ROLE) {
72
m_lAudioCodecs[index.row()]->bitrate = value.toString();
73
emit dataChanged(index, index);
76
else if(index.column() == 0 && role == Qt::CheckStateRole) {
77
m_lEnabledCodecs[m_lAudioCodecs[index.row()]->id] = value.toBool();
78
emit dataChanged(index, index);
81
else if (index.column() == 0 && role == AudioCodecModel::SAMPLERATE_ROLE) {
82
m_lAudioCodecs[index.row()]->samplerate = value.toString();
83
emit dataChanged(index, index);
86
else if (index.column() == 0 && role == AudioCodecModel::ID_ROLE) {
87
m_lAudioCodecs[index.row()]->id = value.toInt();
88
emit dataChanged(index, index);
78
bool AudioCodecModel::setData( const QModelIndex& idx, const QVariant &value, int role) {
79
if (idx.column() == 0 && role == AudioCodecModel::NAME) {
80
m_lAudioCodecs[idx.row()]->name = value.toString();
81
emit dataChanged(idx, idx);
84
else if (idx.column() == 0 && role == AudioCodecModel::BITRATE) {
85
m_lAudioCodecs[idx.row()]->bitrate = value.toString();
86
emit dataChanged(idx, idx);
89
else if(idx.column() == 0 && role == Qt::CheckStateRole) {
90
m_lEnabledCodecs[m_lAudioCodecs[idx.row()]->id] = value.toBool();
91
emit dataChanged(idx, idx);
94
else if (idx.column() == 0 && role == AudioCodecModel::SAMPLERATE) {
95
m_lAudioCodecs[idx.row()]->samplerate = value.toString();
96
emit dataChanged(idx, idx);
99
else if (idx.column() == 0 && role == AudioCodecModel::ID) {
100
m_lAudioCodecs[idx.row()]->id = value.toInt();
101
emit dataChanged(idx, idx);
138
153
bool AudioCodecModel::moveDown(QModelIndex idx)
140
155
if(idx.row() >= 0 && idx.row() < rowCount()) {
141
AudioCodecData* data = m_lAudioCodecs[idx.row()];
156
AudioCodecData* data2 = m_lAudioCodecs[idx.row()];
142
157
m_lAudioCodecs.removeAt(idx.row());
143
m_lAudioCodecs.insert(idx.row() + 1, data);
158
m_lAudioCodecs.insert(idx.row() + 1, data2);
144
159
emit dataChanged(index(idx.row(), 0, QModelIndex()), index(idx.row() + 1, 0, QModelIndex()));
165
///Reload the codeclist
166
void AudioCodecModel::reload()
168
ConfigurationManagerInterface& configurationManager = DBus::ConfigurationManager::instance();
169
QVector<int> codecIdList = configurationManager.getAudioCodecList();
170
if (!m_pAccount->isNew()) {
171
QVector<int> activeCodecList = configurationManager.getActiveAudioCodecList(m_pAccount->id());
172
QStringList tmpNameList;
174
foreach (const int aCodec, activeCodecList) {
175
if (!findCodec(aCodec)) {
176
QStringList codec = configurationManager.getAudioCodecDetails(aCodec);
177
QModelIndex idx = addAudioCodec();
178
setData(idx,codec[0] ,AudioCodecModel::Role::NAME );
179
setData(idx,codec[1] ,AudioCodecModel::Role::SAMPLERATE );
180
setData(idx,codec[2] ,AudioCodecModel::Role::BITRATE );
181
setData(idx,aCodec ,AudioCodecModel::Role::ID );
182
setData(idx, Qt::Checked ,Qt::CheckStateRole );
183
if (codecIdList.indexOf(aCodec)!=-1)
184
codecIdList.remove(codecIdList.indexOf(aCodec));
189
foreach (const int aCodec, codecIdList) {
190
if (!findCodec(aCodec)) {
191
const QStringList codec = configurationManager.getAudioCodecDetails(aCodec);
192
QModelIndex idx = addAudioCodec();
193
setData(idx,codec[0],AudioCodecModel::Role::NAME );
194
setData(idx,codec[1],AudioCodecModel::Role::SAMPLERATE );
195
setData(idx,codec[2],AudioCodecModel::Role::BITRATE );
196
setData(idx,aCodec ,AudioCodecModel::Role::ID );
197
setData(idx, Qt::Unchecked ,Qt::CheckStateRole);
203
void AudioCodecModel::save()
205
QStringList _codecList;
206
for (int i=0; i < rowCount();i++) {
207
QModelIndex idx = index(i,0);
208
if (data(idx,Qt::CheckStateRole) == Qt::Checked) {
209
_codecList << data(idx,AudioCodecModel::Role::ID).toString();
213
ConfigurationManagerInterface & configurationManager = DBus::ConfigurationManager::instance();
214
configurationManager.setActiveAudioCodecList(_codecList, m_pAccount->id());
217
///Check is a codec is already in the list
218
bool AudioCodecModel::findCodec(int id)
220
foreach(AudioCodecData* data, m_lAudioCodecs) {