From 4251fd43315c176223764ed568e0a77cffae7571 Mon Sep 17 00:00:00 2001 From: asiviero Date: Mon, 3 Feb 2014 22:40:56 -0200 Subject: [PATCH] Checks for CD before opening window (addresses #4165) --- src/ui/mainwindow.cpp | 3 ++- src/ui/ripcd.cpp | 45 +++++++++++++++++++++---------------------- src/ui/ripcd.h | 3 ++- 3 files changed, 26 insertions(+), 25 deletions(-) diff --git a/src/ui/mainwindow.cpp b/src/ui/mainwindow.cpp index 327471255..142fb1e3d 100644 --- a/src/ui/mainwindow.cpp +++ b/src/ui/mainwindow.cpp @@ -1684,7 +1684,8 @@ void MainWindow::OpenRipCD() { if (!rip_cd_) { rip_cd_.reset(new RipCD); } - if(rip_cd_->CDIOIsValid()) { + if(rip_cd_->CheckCDIOIsValid()) { + rip_cd_->BuildTrackListTable(); rip_cd_->show(); } else { QMessageBox cdio_fail(QMessageBox::Critical, tr("Error"), tr("Failed reading CD drive")); diff --git a/src/ui/ripcd.cpp b/src/ui/ripcd.cpp index 60f0f665e..ff9813758 100644 --- a/src/ui/ripcd.cpp +++ b/src/ui/ripcd.cpp @@ -117,28 +117,6 @@ RipCD::RipCD(QWidget* parent) : setWindowTitle(tr("Rip CD")); AddDestinationDirectory(QDir::homePath()); - cdio_ = cdio_open(NULL, DRIVER_UNKNOWN); - if(!cdio_) { - qLog(Error) << "Failed to read CD drive"; - return; - } else { - i_tracks_ = cdio_get_num_tracks(cdio_); - ui_->tableWidget->setRowCount(i_tracks_); - for (int i = 1; i <= i_tracks_; i++) { - QCheckBox *checkbox_i = new QCheckBox(ui_->tableWidget); - checkbox_i->setCheckState(Qt::Checked); - checkboxes_.append(checkbox_i); - ui_->tableWidget->setCellWidget(i - 1, kCheckboxColumn, checkbox_i); - ui_->tableWidget->setCellWidget(i - 1, kTrackNumberColumn, - new QLabel(QString::number(i))); - QString track_title = QString("Track %1").arg(i); - QLineEdit *line_edit_track_title_i = new QLineEdit(track_title, - ui_->tableWidget); - track_names_.append(line_edit_track_title_i); - ui_->tableWidget->setCellWidget(i - 1, kTrackTitleColumn, - line_edit_track_title_i); - } - } // Get presets QList presets = Transcoder::GetAllPresets(); qSort(presets.begin(), presets.end(), ComparePresetsByName); @@ -418,7 +396,8 @@ void RipCD::Cancel() { SetWorking(false); } -bool RipCD::CDIOIsValid() const { +bool RipCD::CheckCDIOIsValid() { + cdio_ = cdio_open(NULL, DRIVER_UNKNOWN); return (cdio_); } @@ -458,3 +437,23 @@ void RipCD::RemoveTemporaryDirectory() { Utilities::RemoveRecursive(temporary_directory_); temporary_directory_.clear(); } + +void RipCD::BuildTrackListTable() { + ui_->tableWidget->clear(); + i_tracks_ = cdio_get_num_tracks(cdio_); + ui_->tableWidget->setRowCount(i_tracks_); + for (int i = 1; i <= i_tracks_; i++) { + QCheckBox *checkbox_i = new QCheckBox(ui_->tableWidget); + checkbox_i->setCheckState(Qt::Checked); + checkboxes_.append(checkbox_i); + ui_->tableWidget->setCellWidget(i - 1, kCheckboxColumn, checkbox_i); + ui_->tableWidget->setCellWidget(i - 1, kTrackNumberColumn, + new QLabel(QString::number(i))); + QString track_title = QString("Track %1").arg(i); + QLineEdit *line_edit_track_title_i = new QLineEdit(track_title, + ui_->tableWidget); + track_names_.append(line_edit_track_title_i); + ui_->tableWidget->setCellWidget(i - 1, kTrackTitleColumn, + line_edit_track_title_i); + } +} diff --git a/src/ui/ripcd.h b/src/ui/ripcd.h index 6f134639f..e46e1aaa8 100644 --- a/src/ui/ripcd.h +++ b/src/ui/ripcd.h @@ -36,7 +36,8 @@ class RipCD: public QDialog { public: explicit RipCD(QWidget* parent = 0); ~RipCD(); - bool CDIOIsValid() const; + bool CheckCDIOIsValid(); + void BuildTrackListTable(); private: static const char* kSettingsGroup;