Checks for CD before opening window (addresses #4165)

This commit is contained in:
asiviero 2014-02-03 22:40:56 -02:00
parent fc728f9bfc
commit 4251fd4331
3 changed files with 26 additions and 25 deletions

View File

@ -1684,7 +1684,8 @@ void MainWindow::OpenRipCD() {
if (!rip_cd_) { if (!rip_cd_) {
rip_cd_.reset(new RipCD); rip_cd_.reset(new RipCD);
} }
if(rip_cd_->CDIOIsValid()) { if(rip_cd_->CheckCDIOIsValid()) {
rip_cd_->BuildTrackListTable();
rip_cd_->show(); rip_cd_->show();
} else { } else {
QMessageBox cdio_fail(QMessageBox::Critical, tr("Error"), tr("Failed reading CD drive")); QMessageBox cdio_fail(QMessageBox::Critical, tr("Error"), tr("Failed reading CD drive"));

View File

@ -117,28 +117,6 @@ RipCD::RipCD(QWidget* parent) :
setWindowTitle(tr("Rip CD")); setWindowTitle(tr("Rip CD"));
AddDestinationDirectory(QDir::homePath()); 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 // Get presets
QList <TranscoderPreset> presets = Transcoder::GetAllPresets(); QList <TranscoderPreset> presets = Transcoder::GetAllPresets();
qSort(presets.begin(), presets.end(), ComparePresetsByName); qSort(presets.begin(), presets.end(), ComparePresetsByName);
@ -418,7 +396,8 @@ void RipCD::Cancel() {
SetWorking(false); SetWorking(false);
} }
bool RipCD::CDIOIsValid() const { bool RipCD::CheckCDIOIsValid() {
cdio_ = cdio_open(NULL, DRIVER_UNKNOWN);
return (cdio_); return (cdio_);
} }
@ -458,3 +437,23 @@ void RipCD::RemoveTemporaryDirectory() {
Utilities::RemoveRecursive(temporary_directory_); Utilities::RemoveRecursive(temporary_directory_);
temporary_directory_.clear(); 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);
}
}

View File

@ -36,7 +36,8 @@ class RipCD: public QDialog {
public: public:
explicit RipCD(QWidget* parent = 0); explicit RipCD(QWidget* parent = 0);
~RipCD(); ~RipCD();
bool CDIOIsValid() const; bool CheckCDIOIsValid();
void BuildTrackListTable();
private: private:
static const char* kSettingsGroup; static const char* kSettingsGroup;