diff --git a/src/codecmodel.cpp b/src/codecmodel.cpp index 0961b0c9d6166a3ffdd9590380408f050546b75e..aac053d0250f52c0fd2952b4330986ba35439477 100644 --- a/src/codecmodel.cpp +++ b/src/codecmodel.cpp @@ -41,13 +41,19 @@ class CodecModelPrivate final : public QObject Q_OBJECT public: CodecModelPrivate(CodecModel* parent); - ///@struct CodecData store audio codec information + ///@struct CodecData store audio/video codec information struct CodecData { - int id ; - QString name ; - QString bitrate ; - QString samplerate; - QString type ; + int id ; + QString name ; + QString bitrate ; + QString min_bitrate; + QString max_bitrate; + QString samplerate ; + QString type ; + QString quality ; + QString min_quality; + QString max_quality; + QString auto_quality_enabled; }; //Attributes @@ -128,11 +134,17 @@ QHash<int,QByteArray> CodecModel::roleNames() const static bool initRoles = false; if (!initRoles) { initRoles = true; - roles.insert(CodecModel::Role::ID ,QByteArray("id")); - roles.insert(CodecModel::Role::NAME ,QByteArray("name")); - roles.insert(CodecModel::Role::BITRATE ,QByteArray("bitrate")); - roles.insert(CodecModel::Role::SAMPLERATE,QByteArray("samplerate")); - roles.insert(CodecModel::Role::TYPE ,QByteArray("type")); + roles.insert(CodecModel::Role::ID ,QByteArray("id")); + roles.insert(CodecModel::Role::NAME ,QByteArray("name")); + roles.insert(CodecModel::Role::BITRATE ,QByteArray("bitrate")); + roles.insert(CodecModel::Role::MIN_BITRATE,QByteArray("min_bitrate")); + roles.insert(CodecModel::Role::MAX_BITRATE,QByteArray("max_bitrate")); + roles.insert(CodecModel::Role::SAMPLERATE ,QByteArray("samplerate")); + roles.insert(CodecModel::Role::TYPE ,QByteArray("type")); + roles.insert(CodecModel::Role::QUALITY ,QByteArray("quality")); + roles.insert(CodecModel::Role::MIN_QUALITY,QByteArray("min_quality")); + roles.insert(CodecModel::Role::MAX_QUALITY,QByteArray("max_quality")); + roles.insert(CodecModel::Role::AUTO_QUALITY_ENABLED,QByteArray("autoQualityEnabled")); } return roles; } @@ -147,28 +159,40 @@ QItemSelectionModel* CodecModel::selectionModel() const ///Model data QVariant CodecModel::data(const QModelIndex& idx, int role) const { - if(idx.column() == 0 && role == Qt::DisplayRole ) { - return QVariant(d_ptr->m_lCodecs[idx.row()]->name); - } - else if(idx.column() == 0 && role == Qt::CheckStateRole ) { - return QVariant(d_ptr->m_lEnabledCodecs[d_ptr->m_lCodecs[idx.row()]->id] ? Qt::Checked : Qt::Unchecked); - } - else if (idx.column() == 0 && role == CodecModel::Role::NAME ) { - return d_ptr->m_lCodecs[idx.row()]->name; - } - else if (idx.column() == 0 && role == CodecModel::Role::BITRATE ) { - return d_ptr->m_lCodecs[idx.row()]->bitrate; - } - else if (idx.column() == 0 && role == CodecModel::Role::SAMPLERATE ) { - return d_ptr->m_lCodecs[idx.row()]->samplerate; - } - else if (idx.column() == 0 && role == CodecModel::Role::ID ) { - return d_ptr->m_lCodecs[idx.row()]->id; - } - else if (idx.column() == 0 && role == CodecModel::Role::TYPE ) { - return d_ptr->m_lCodecs[idx.row()]->type; - } - return QVariant(); + if (idx.column() != 0) + return QVariant(); + + switch (role) { + case Qt::DisplayRole: + return QVariant(d_ptr->m_lCodecs[idx.row()]->name); + case Qt::CheckStateRole: + return QVariant(d_ptr->m_lEnabledCodecs[d_ptr->m_lCodecs[idx.row()]->id] ? Qt::Checked : Qt::Unchecked); + case CodecModel::Role::NAME: + return d_ptr->m_lCodecs[idx.row()]->name; + case CodecModel::Role::BITRATE: + return d_ptr->m_lCodecs[idx.row()]->bitrate; + case CodecModel::Role::MIN_BITRATE: + return d_ptr->m_lCodecs[idx.row()]->min_bitrate; + case CodecModel::Role::MAX_BITRATE: + return d_ptr->m_lCodecs[idx.row()]->max_bitrate; + case CodecModel::Role::SAMPLERATE: + return d_ptr->m_lCodecs[idx.row()]->samplerate; + case CodecModel::Role::ID: + return d_ptr->m_lCodecs[idx.row()]->id; + case CodecModel::Role::TYPE: + return d_ptr->m_lCodecs[idx.row()]->type; + case CodecModel::Role::QUALITY: + return d_ptr->m_lCodecs[idx.row()]->quality; + case CodecModel::Role::MIN_QUALITY: + return d_ptr->m_lCodecs[idx.row()]->min_quality; + case CodecModel::Role::MAX_QUALITY: + return d_ptr->m_lCodecs[idx.row()]->max_quality; + case CodecModel::Role::AUTO_QUALITY_ENABLED: + return d_ptr->m_lCodecs[idx.row()]->auto_quality_enabled; + default: + return QVariant(); + } + return QVariant(); } ///Number of audio codecs @@ -192,43 +216,54 @@ Qt::ItemFlags CodecModel::flags(const QModelIndex& idx) const ///Set audio codec data bool CodecModel::setData( const QModelIndex& idx, const QVariant &value, int role) { - if (idx.column() == 0 && role == CodecModel::NAME) { - d_ptr->m_lCodecs[idx.row()]->name = value.toString(); - emit dataChanged(idx, idx); - this << EditAction::MODIFY; - return true; - } - else if (idx.column() == 0 && role == CodecModel::BITRATE) { - d_ptr->m_lCodecs[idx.row()]->bitrate = value.toString(); - emit dataChanged(idx, idx); - this << EditAction::MODIFY; - return true; - } - else if(idx.column() == 0 && role == Qt::CheckStateRole) { - d_ptr->m_lEnabledCodecs[d_ptr->m_lCodecs[idx.row()]->id] = value.toBool(); - emit dataChanged(idx, idx); - this << EditAction::MODIFY; - return true; - } - else if (idx.column() == 0 && role == CodecModel::SAMPLERATE) { - d_ptr->m_lCodecs[idx.row()]->samplerate = value.toString(); - emit dataChanged(idx, idx); - this << EditAction::MODIFY; - return true; - } - else if (idx.column() == 0 && role == CodecModel::ID) { - d_ptr->m_lCodecs[idx.row()]->id = value.toInt(); - emit dataChanged(idx, idx); - this << EditAction::MODIFY; - return true; - } - else if (idx.column() == 0 && role == CodecModel::TYPE) { - d_ptr->m_lCodecs[idx.row()]->type = value.toString(); - emit dataChanged(idx, idx); - this << EditAction::MODIFY; - return true; - } - return false; + if (idx.column() != 0) + return false; + + switch (role) { + case CodecModel::NAME : + d_ptr->m_lCodecs[idx.row()]->name = value.toString(); + break; + case CodecModel::BITRATE : + d_ptr->m_lCodecs[idx.row()]->bitrate = value.toString(); + break; + case CodecModel::MIN_BITRATE : + d_ptr->m_lCodecs[idx.row()]->min_bitrate = value.toString(); + break; + case CodecModel::MAX_BITRATE : + d_ptr->m_lCodecs[idx.row()]->max_bitrate = value.toString(); + break; + case Qt::CheckStateRole : + d_ptr->m_lEnabledCodecs[d_ptr->m_lCodecs[idx.row()]->id] = value.toBool(); + break; + case CodecModel::SAMPLERATE : + d_ptr->m_lCodecs[idx.row()]->samplerate = value.toString(); + break; + case CodecModel::ID : + d_ptr->m_lCodecs[idx.row()]->id = value.toInt(); + break; + case CodecModel::TYPE : + d_ptr->m_lCodecs[idx.row()]->type = value.toString(); + break; + case CodecModel::QUALITY : + d_ptr->m_lCodecs[idx.row()]->quality = value.toString(); + break; + case CodecModel::MIN_QUALITY : + d_ptr->m_lCodecs[idx.row()]->min_quality = value.toString(); + break; + case CodecModel::MAX_QUALITY : + d_ptr->m_lCodecs[idx.row()]->max_quality = value.toString(); + break; + case CodecModel::AUTO_QUALITY_ENABLED : + d_ptr->m_lCodecs[idx.row()]->auto_quality_enabled = value.toString(); + break; + default: + return false; + } + + //if we did not return yet, then we modified the codec + emit dataChanged(idx, idx); + this << EditAction::MODIFY; + return true; } ///Add a new audio codec @@ -306,7 +341,13 @@ void CodecModelPrivate::reload() q_ptr->setData(idx,codec[ DRing::Account::ConfProperties::CodecInfo::NAME ] ,CodecModel::Role::NAME ); q_ptr->setData(idx,codec[ DRing::Account::ConfProperties::CodecInfo::SAMPLE_RATE ] ,CodecModel::Role::SAMPLERATE ); q_ptr->setData(idx,codec[ DRing::Account::ConfProperties::CodecInfo::BITRATE ] ,CodecModel::Role::BITRATE ); + q_ptr->setData(idx,codec[ DRing::Account::ConfProperties::CodecInfo::MIN_BITRATE ] ,CodecModel::Role::MIN_BITRATE); + q_ptr->setData(idx,codec[ DRing::Account::ConfProperties::CodecInfo::MAX_BITRATE ] ,CodecModel::Role::MAX_BITRATE); q_ptr->setData(idx,codec[ DRing::Account::ConfProperties::CodecInfo::TYPE ] ,CodecModel::Role::TYPE ); + q_ptr->setData(idx,codec[ DRing::Account::ConfProperties::CodecInfo::QUALITY ] ,CodecModel::Role::QUALITY ); + q_ptr->setData(idx,codec[ DRing::Account::ConfProperties::CodecInfo::MIN_QUALITY ] ,CodecModel::Role::MIN_QUALITY); + q_ptr->setData(idx,codec[ DRing::Account::ConfProperties::CodecInfo::MAX_QUALITY ] ,CodecModel::Role::MAX_QUALITY); + q_ptr->setData(idx,codec[ DRing::Account::ConfProperties::CodecInfo::AUTO_QUALITY_ENABLED] ,CodecModel::Role::AUTO_QUALITY_ENABLED); q_ptr->setData(idx, Qt::Checked ,Qt::CheckStateRole); // remove from list of all codecs, since we have already updated it @@ -331,7 +372,13 @@ void CodecModelPrivate::reload() q_ptr->setData(idx,codec[ DRing::Account::ConfProperties::CodecInfo::NAME ] ,CodecModel::Role::NAME ); q_ptr->setData(idx,codec[ DRing::Account::ConfProperties::CodecInfo::SAMPLE_RATE ] ,CodecModel::Role::SAMPLERATE ); q_ptr->setData(idx,codec[ DRing::Account::ConfProperties::CodecInfo::BITRATE ] ,CodecModel::Role::BITRATE ); + q_ptr->setData(idx,codec[ DRing::Account::ConfProperties::CodecInfo::MIN_BITRATE ] ,CodecModel::Role::MIN_BITRATE); + q_ptr->setData(idx,codec[ DRing::Account::ConfProperties::CodecInfo::MAX_BITRATE ] ,CodecModel::Role::MAX_BITRATE); q_ptr->setData(idx,codec[ DRing::Account::ConfProperties::CodecInfo::TYPE ] ,CodecModel::Role::TYPE ); + q_ptr->setData(idx,codec[ DRing::Account::ConfProperties::CodecInfo::QUALITY ] ,CodecModel::Role::QUALITY ); + q_ptr->setData(idx,codec[ DRing::Account::ConfProperties::CodecInfo::MIN_QUALITY ] ,CodecModel::Role::MIN_QUALITY); + q_ptr->setData(idx,codec[ DRing::Account::ConfProperties::CodecInfo::MAX_QUALITY ] ,CodecModel::Role::MAX_QUALITY); + q_ptr->setData(idx,codec[ DRing::Account::ConfProperties::CodecInfo::AUTO_QUALITY_ENABLED] ,CodecModel::Role::AUTO_QUALITY_ENABLED); q_ptr->setData(idx, Qt::Unchecked ,Qt::CheckStateRole); } @@ -362,7 +409,13 @@ void CodecModelPrivate::save() codecDetails[ DRing::Account::ConfProperties::CodecInfo::NAME ] = q_ptr->data(idx,CodecModel::Role::NAME).toString(); codecDetails[ DRing::Account::ConfProperties::CodecInfo::SAMPLE_RATE ] = q_ptr->data(idx,CodecModel::Role::SAMPLERATE).toString(); codecDetails[ DRing::Account::ConfProperties::CodecInfo::BITRATE ] = q_ptr->data(idx,CodecModel::Role::BITRATE).toString(); + codecDetails[ DRing::Account::ConfProperties::CodecInfo::MIN_BITRATE ] = q_ptr->data(idx,CodecModel::Role::MIN_BITRATE).toString(); + codecDetails[ DRing::Account::ConfProperties::CodecInfo::MAX_BITRATE ] = q_ptr->data(idx,CodecModel::Role::MAX_BITRATE).toString(); codecDetails[ DRing::Account::ConfProperties::CodecInfo::TYPE ] = q_ptr->data(idx,CodecModel::Role::TYPE).toString(); + codecDetails[ DRing::Account::ConfProperties::CodecInfo::QUALITY ] = q_ptr->data(idx,CodecModel::Role::QUALITY).toString(); + codecDetails[ DRing::Account::ConfProperties::CodecInfo::MIN_QUALITY ] = q_ptr->data(idx,CodecModel::Role::MIN_QUALITY).toString(); + codecDetails[ DRing::Account::ConfProperties::CodecInfo::MAX_QUALITY ] = q_ptr->data(idx,CodecModel::Role::MAX_QUALITY).toString(); + codecDetails[ DRing::Account::ConfProperties::CodecInfo::AUTO_QUALITY_ENABLED] = q_ptr->data(idx,CodecModel::Role::AUTO_QUALITY_ENABLED).toString(); qDebug() << "setting codec details for " << q_ptr->data(idx,CodecModel::Role::NAME).toString(); diff --git a/src/codecmodel.h b/src/codecmodel.h index 5a0c10ee2177c7b0f12aa66757114ef4e9eace5d..ff7e688d5e9f6e7f6366d5693e10fe07f3e2a60b 100644 --- a/src/codecmodel.h +++ b/src/codecmodel.h @@ -44,11 +44,17 @@ public: //Roles enum Role { - ID = 103, - NAME = 100, - BITRATE = 101, - SAMPLERATE = 102, - TYPE = 104, + ID = 103, + NAME = 100, + BITRATE = 101, + MIN_BITRATE = 105, + MAX_BITRATE = 106, + SAMPLERATE = 102, + TYPE = 104, + QUALITY = 107, + MIN_QUALITY = 108, + MAX_QUALITY = 109, + AUTO_QUALITY_ENABLED = 110, }; /// @enum CodecModel::Action Manage a CodecModel lifecycle @@ -119,4 +125,3 @@ private: Q_DECLARE_METATYPE(CodecModel*) CodecModel* LIB_EXPORT operator<<(CodecModel* a, CodecModel::EditAction action); -