From e53138535e187cf740de716ed94067ea433af48b Mon Sep 17 00:00:00 2001 From: Edric Milaret <edric.ladent-milaret@savoirfairelinux.com> Date: Mon, 9 Nov 2015 13:06:00 -0500 Subject: [PATCH] settings: fix wrong handling of codec list - Use the proxy model instead of rewriting it Change-Id: I49bd5436314e27544b40e684422c7df2ea95834c Tuleap: #113 --- accountdetails.cpp | 195 ++++++++------------------------------------- accountdetails.h | 11 +-- accountdetails.ui | 24 +++--- 3 files changed, 49 insertions(+), 181 deletions(-) diff --git a/accountdetails.cpp b/accountdetails.cpp index ad501c4..8004373 100644 --- a/accountdetails.cpp +++ b/accountdetails.cpp @@ -39,19 +39,12 @@ AccountDetails::AccountDetails(QWidget *parent) : setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding); - ui->audioCodecView->setColumnCount(4); - QStringList audioHeader {tr("Enabled"), tr("Name"), tr("Bitrate"), tr("Samplerate")}; - ui->audioCodecView->setHorizontalHeaderLabels(audioHeader); - ui->audioCodecView->verticalHeader()->hide(); - ui->audioCodecView->setSelectionBehavior(QAbstractItemView::SelectRows); ui->audioCodecView->setShowGrid(false); - - ui->videoCodecView->setColumnCount(3); - QStringList videoHeader {tr("Enabled"), tr("Name"), tr("Bitrate")}; - ui->videoCodecView->setHorizontalHeaderLabels(videoHeader); - ui->videoCodecView->verticalHeader()->hide(); - ui->videoCodecView->setSelectionBehavior(QAbstractItemView::SelectRows); + ui->audioCodecView->verticalHeader()->hide(); + ui->audioCodecView->horizontalHeader()->hide(); ui->videoCodecView->setShowGrid(false); + ui->videoCodecView->verticalHeader()->hide(); + ui->audioCodecView->horizontalHeader()->hide(); ui->lrcfg_username->setAlignment(Qt::AlignCenter); @@ -65,89 +58,6 @@ AccountDetails::~AccountDetails() delete ui; } -void -AccountDetails::reloadCodec(CodecType type) -{ - ui->audioCodecView->disconnect(); - ui->videoCodecView->disconnect(); - - auto selectedIdx = codecModel_->selectionModel()->currentIndex(); - - if (type != CodecType::VIDEO) { - ui->audioCodecView->clearContents(); - ui->audioCodecView->setRowCount(codecModel_->audioCodecs()->rowCount()); - - for (int i = 0; i < codecModel_->audioCodecs()->rowCount(); i++) { - - auto idx = codecModel_->audioCodecs()->index(i, 0); - - auto checkBoxItem = new QTableWidgetItem(); - checkBoxItem->setCheckState( - codecModel_->audioCodecs()->data(idx , - Qt::CheckStateRole).toBool() - ? Qt::Checked : Qt::Unchecked); - ui->audioCodecView->setItem(i, 0, checkBoxItem); - - auto item = new QTableWidgetItem( - codecModel_->audioCodecs()->data(idx).toString()); - item->setFlags(item->flags() ^ Qt::ItemIsEditable); - ui->audioCodecView->setItem(i, 1, item); - - item = new QTableWidgetItem( - codecModel_->audioCodecs()-> - data(idx,CodecModel::Role::BITRATE).toString()); - item->setFlags(item->flags() ^ Qt::ItemIsEditable); - ui->audioCodecView->setItem(i, 2, item); - - item = new QTableWidgetItem( - codecModel_->audioCodecs()-> - data(idx, CodecModel::Role::SAMPLERATE).toString()); - item->setFlags(item->flags() ^ Qt::ItemIsEditable); - ui->audioCodecView->setItem(i, 3, item); - - if (codecModel_->audioCodecs()->mapToSource(idx) == selectedIdx) { - ui->audioCodecView->setCurrentCell(i, 0); - } - } - } - if (type != CodecType::AUDIO) { - ui->videoCodecView->clearContents(); - ui->videoCodecView->setRowCount(codecModel_->videoCodecs()->rowCount()); - for (int i = 0; i < codecModel_->videoCodecs()->rowCount(); i++) { - - auto idx = codecModel_->videoCodecs()->index(i, 0); - - auto checkBoxItem = new QTableWidgetItem(); - checkBoxItem->setCheckState(codecModel_->videoCodecs()-> - data(idx , Qt::CheckStateRole).toBool() - ? Qt::Checked : Qt::Unchecked); - ui->videoCodecView->setItem(i, 0, checkBoxItem); - - auto item = new QTableWidgetItem( - codecModel_->videoCodecs()->data(idx).toString()); - item->setFlags(item->flags() ^ Qt::ItemIsEditable); - ui->videoCodecView->setItem(i, 1, item); - - item = new QTableWidgetItem(codecModel_->videoCodecs()-> - data(idx,CodecModel::Role::BITRATE).toString()); - item->setFlags(item->flags() ^ Qt::ItemIsEditable); - ui->videoCodecView->setItem(i, 2, item); - - if (codecModel_->videoCodecs()->mapToSource(idx) == selectedIdx) { - ui->videoCodecView->setCurrentCell(i, 0); - } - } - } - connect(ui->audioCodecView, SIGNAL(cellChanged(int,int)), - this, SLOT(audio_codec_checked(int, int))); - connect(ui->videoCodecView, SIGNAL(cellChanged(int,int)), - this, SLOT(video_codec_checked(int,int))); - connect(ui->audioCodecView, SIGNAL(itemSelectionChanged()), - this, SLOT(on_audioCodecView_itemSelectionChanged())); - connect(ui->videoCodecView, SIGNAL(itemSelectionChanged()), - this, SLOT(on_videoCodecView_itemSelectionChanged())); -} - void AccountDetails::setAccount(Account* currentAccount) { @@ -160,6 +70,12 @@ AccountDetails::setAccount(Account* currentAccount) { ui->lrcfg_username->setReadOnly(currentAccount_->protocol() == Account::Protocol::RING); codecModel_ = currentAccount->codecModel(); + ui->audioCodecView->setModel(codecModel_->audioCodecs()); + ui->videoCodecView->setModel(codecModel_->videoCodecs()); + connect(ui->audioCodecView->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)), + this, SLOT(audioCodecSelectionChanged(QItemSelection,QItemSelection))); + connect(ui->videoCodecView->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)), + this, SLOT(videoCodecSelectionChanged(QItemSelection,QItemSelection))); ui->typeValueLabel->setText(currentAccount_->protocolModel()-> selectionModel()->currentIndex().data().value<QString>()); @@ -232,76 +148,26 @@ AccountDetails::setAccount(Account* currentAccount) { }); ui->cipherListView->setModel(currentAccount_->cipherModel()); - - reloadCodec(); } void -AccountDetails::audio_codec_checked(int row, int column) { - if (column != 0) - return; - auto item = ui->audioCodecView->item(row, 0); - auto idx = codecModel_->audioCodecs()->index(row, 0); - codecModel_->audioCodecs()->setData(idx, item->checkState(), - Qt::CheckStateRole); -} - -void -AccountDetails::video_codec_checked(int row, int column) { - if (column != 0) - return; - auto item = ui->videoCodecView->item(row, 0); - auto idx = codecModel_->videoCodecs()->index(row, 0); - codecModel_->videoCodecs()->setData(idx, item->checkState(), - Qt::CheckStateRole); -} - -void -AccountDetails::on_upAudioButton_clicked() -{ +AccountDetails::on_upAudioButton_clicked() { codecModel_->moveUp(); - reloadCodec(CodecType::AUDIO); } void -AccountDetails::on_downAudioButton_clicked() -{ +AccountDetails::on_downAudioButton_clicked() { codecModel_->moveDown(); - reloadCodec(CodecType::AUDIO); } void -AccountDetails::on_upVideoButton_clicked() -{ +AccountDetails::on_upVideoButton_clicked() { codecModel_->moveUp(); - reloadCodec(CodecType::VIDEO); } void -AccountDetails::on_downVideoButton_clicked() -{ +AccountDetails::on_downVideoButton_clicked() { codecModel_->moveDown(); - reloadCodec(CodecType::VIDEO); -} - -void -AccountDetails::on_audioCodecView_itemSelectionChanged() -{ - int row = ui->audioCodecView->currentRow(); - auto idx = codecModel_->audioCodecs()->index(row, 0); - auto srcIdx = codecModel_->audioCodecs()->mapToSource(idx); - codecModel_->selectionModel()->setCurrentIndex(srcIdx, - QItemSelectionModel::Select); -} - -void -AccountDetails::on_videoCodecView_itemSelectionChanged() -{ - int row = ui->videoCodecView->currentRow(); - auto idx = codecModel_->videoCodecs()->index(row, 0); - auto srcIdx = codecModel_->videoCodecs()->mapToSource(idx); - codecModel_->selectionModel()->setCurrentIndex(srcIdx, - QItemSelectionModel::Select); } void @@ -310,18 +176,7 @@ AccountDetails::save() { } void -AccountDetails::on_tabWidget_currentChanged(int index) -{ - if (index == 1) { - ui->audioCodecView->setCurrentItem(ui->audioCodecView->item(0, 0)); - } else if (index == 2) { - ui->videoCodecView->setCurrentItem(ui->videoCodecView->item(0, 0)); - } -} - -void -AccountDetails::onCertButtonClicked() -{ +AccountDetails::onCertButtonClicked() { QString fileName = QFileDialog::getOpenFileName(this, tr("Choose File"), "", tr("Files (*)")); @@ -332,3 +187,23 @@ AccountDetails::onCertButtonClicked() static_cast<QPushButton*>(sender)->setText(fileName); } + +void +AccountDetails::audioCodecSelectionChanged(const QItemSelection& selected, + const QItemSelection& deselected) { + Q_UNUSED(deselected) + if (not codecModel_ || selected.empty()) + return; + auto idx = codecModel_->audioCodecs()->mapToSource(selected.indexes().at(0)); + codecModel_->selectionModel()->setCurrentIndex(idx, QItemSelectionModel::ClearAndSelect); +} + +void +AccountDetails::videoCodecSelectionChanged(const QItemSelection& selected, + const QItemSelection& deselected) { + Q_UNUSED(deselected) + if (not codecModel_ || selected.empty()) + return; + auto idx = codecModel_->videoCodecs()->mapToSource(selected.indexes().at(0)); + codecModel_->selectionModel()->setCurrentIndex(idx, QItemSelectionModel::ClearAndSelect); +} diff --git a/accountdetails.h b/accountdetails.h index 06f1b97..a1009e8 100644 --- a/accountdetails.h +++ b/accountdetails.h @@ -35,15 +35,11 @@ class AccountDetails : public QWidget { Q_OBJECT -private: - enum CodecType { AUDIO, VIDEO, ALL }; - public: explicit AccountDetails(QWidget *parent = 0); ~AccountDetails(); void setAccount(Account *currentAccount); - void reloadCodec(CodecType type = CodecType::ALL); void save(); //UI SLOTS @@ -52,13 +48,10 @@ private slots: void on_downAudioButton_clicked(); void on_upVideoButton_clicked(); void on_downVideoButton_clicked(); - void on_audioCodecView_itemSelectionChanged(); - void on_videoCodecView_itemSelectionChanged(); - void on_tabWidget_currentChanged(int index); + void audioCodecSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected); + void videoCodecSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected); private slots: - void audio_codec_checked(int row, int column); - void video_codec_checked(int row, int column); void onCertButtonClicked(); private: diff --git a/accountdetails.ui b/accountdetails.ui index 131a045..3b2f8a0 100644 --- a/accountdetails.ui +++ b/accountdetails.ui @@ -29,7 +29,7 @@ </sizepolicy> </property> <property name="currentIndex"> - <number>0</number> + <number>1</number> </property> <widget class="QWidget" name="gen_tab"> <property name="sizePolicy"> @@ -506,7 +506,7 @@ </layout> </item> <item row="0" column="0"> - <widget class="QTableWidget" name="audioCodecView"> + <widget class="QTableView" name="audioCodecView"> <property name="sizePolicy"> <sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding"> <horstretch>0</horstretch> @@ -534,16 +534,6 @@ <string>Video</string> </attribute> <layout class="QGridLayout" name="gridLayout"> - <item row="0" column="0"> - <widget class="QTableWidget" name="videoCodecView"> - <property name="sizePolicy"> - <sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - </widget> - </item> <item row="2" column="0"> <widget class="QCheckBox" name="lrcfg_isVideoEnabled"> <property name="text"> @@ -608,6 +598,16 @@ </item> </layout> </item> + <item row="0" column="0"> + <widget class="QTableView" name="videoCodecView"> + <property name="sizePolicy"> + <sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + </widget> + </item> </layout> </widget> <widget class="QWidget" name="advancedTab"> -- GitLab