Merge pull request #4151 from paperbagcorner/ripcddialog

Style the CD ripping dialog
This commit is contained in:
David Sansome 2014-01-26 17:53:59 -08:00
commit ce70cc316f
3 changed files with 362 additions and 294 deletions

View File

@ -76,10 +76,32 @@ RipCD::RipCD(QWidget* parent) :
// Init
ui_->setupUi(this);
cancel_button_ = ui_->button_box->button(QDialogButtonBox::Cancel);
connect(ui_->ripButton, SIGNAL(clicked()), this, SLOT(ClickedRipButton()));
// Set column widths in the QTableWidget.
ui_->tableWidget->horizontalHeader()->setResizeMode(
kCheckboxColumn, QHeaderView::ResizeToContents);
ui_->tableWidget->horizontalHeader()->setResizeMode(
kTrackNumberColumn, QHeaderView::ResizeToContents);
ui_->tableWidget->horizontalHeader()->setResizeMode(
kTrackTitleColumn, QHeaderView::Stretch);
// Add a rip button
rip_button_ = ui_->button_box->addButton(
tr("Start ripping"), QDialogButtonBox::ActionRole);
cancel_button_ = ui_->button_box->button(QDialogButtonBox::Cancel);
close_button_ = ui_->button_box->button(QDialogButtonBox::Close);
// Hide elements
cancel_button_->hide();
ui_->progress_group->hide();
connect(ui_->select_all_button, SIGNAL(clicked()), SLOT(SelectAll()));
connect(ui_->select_none_button, SIGNAL(clicked()), SLOT(SelectNone()));
connect(ui_->invert_selection_button, SIGNAL(clicked()),
SLOT(InvertSelection()));
connect(rip_button_, SIGNAL(clicked()), SLOT(ClickedRipButton()));
connect(cancel_button_, SIGNAL(clicked()), SLOT(Cancel()));
connect(close_button_, SIGNAL(clicked()), SLOT(hide()));
connect(transcoder_, SIGNAL(JobComplete(QString, bool)), SLOT(JobComplete(QString, bool)));
connect(transcoder_, SIGNAL(AllJobsComplete()), SLOT(AllJobsComplete()));
@ -92,6 +114,7 @@ RipCD::RipCD(QWidget* parent) :
connect(ui_->select, SIGNAL(clicked()), SLOT(AddDestination()));
setWindowTitle(tr("Rip CD"));
AddDestinationDirectory(QDir::homePath());
cdio_ = cdio_open(NULL, DRIVER_UNKNOWN);
if(!cdio_) {
@ -303,6 +326,7 @@ void RipCD::ThreadedTranscoding() {
}
void RipCD::ClickedRipButton() {
SetWorking(true);
QtConcurrent::run(this, &RipCD::ThreadClickedRipButton);
}
@ -333,6 +357,8 @@ void RipCD::AllJobsComplete() {
// Resets lists
generated_files_.clear();
tracks_to_rip_.clear();
SetWorking(false);
}
void RipCD::AppendOutput(const QString& filename) {
@ -363,26 +389,62 @@ void RipCD::AddDestination() {
if (!dir.isEmpty()) {
// Keep only a finite number of items in the box.
while (ui_->destination->count() >= kMaxDestinationItems) {
ui_->destination->removeItem(1); // The oldest folder item.
ui_->destination->removeItem(0); // The oldest item.
}
AddDestinationDirectory(dir);
}
}
QIcon icon = IconLoader::Load("folder");
QVariant data = QVariant::fromValue(dir);
// Do not insert duplicates.
int duplicate_index = ui_->destination->findData(data);
if (duplicate_index == -1) {
ui_->destination->addItem(icon, dir, data);
ui_->destination->setCurrentIndex(ui_->destination->count() - 1);
} else {
ui_->destination->setCurrentIndex(duplicate_index);
}
// Adds a directory to the 'destination' combo box.
void RipCD::AddDestinationDirectory(QString dir) {
QIcon icon = IconLoader::Load("folder");
QVariant data = QVariant::fromValue(dir);
// Do not insert duplicates.
int duplicate_index = ui_->destination->findData(data);
if (duplicate_index == -1) {
ui_->destination->addItem(icon, dir, data);
ui_->destination->setCurrentIndex(ui_->destination->count() - 1);
} else {
ui_->destination->setCurrentIndex(duplicate_index);
}
}
void RipCD::Cancel() {
transcoder_->Cancel();
SetWorking(false);
}
bool RipCD::CDIOIsValid() const {
return (cdio_);
}
void RipCD::SetWorking(bool working) {
rip_button_->setVisible(!working);
cancel_button_->setVisible(working);
close_button_->setVisible(!working);
ui_->input_group->setEnabled(!working);
ui_->output_group->setEnabled(!working);
ui_->progress_group->setVisible(true);
}
void RipCD::SelectAll() {
foreach (QCheckBox* checkbox, checkboxes_) {
checkbox->setCheckState(Qt::Checked);
}
}
void RipCD::SelectNone() {
foreach (QCheckBox* checkbox, checkboxes_) {
checkbox->setCheckState(Qt::Unchecked);
}
}
void RipCD::InvertSelection() {
foreach (QCheckBox* checkbox, checkboxes_) {
if (checkbox->isChecked()) {
checkbox->setCheckState(Qt::Unchecked);
} else {
checkbox->setCheckState(Qt::Checked);
}
}
}

View File

@ -55,6 +55,8 @@ class RipCD: public QDialog {
QList<QLineEdit*> track_names_;
QString last_add_dir_;
QPushButton* cancel_button_;
QPushButton* close_button_;
QPushButton* rip_button_;
void WriteWAVHeader(QFile *stream, int32_t i_bytecount);
int NumTracksToRip();
@ -63,6 +65,8 @@ class RipCD: public QDialog {
QString GetOutputFileName(const QString& input,
const TranscoderPreset& preset) const;
QString ParseFileFormatString(const QString& file_format, int track_no) const;
void SetWorking(bool working);
void AddDestinationDirectory(QString dir);
signals:
void RippingComplete();
@ -77,6 +81,9 @@ class RipCD: public QDialog {
void Options();
void AddDestination();
void Cancel();
void SelectAll();
void SelectNone();
void InvertSelection();
};
#endif // SRC_UI_RIPCD_H_

View File

@ -9,294 +9,293 @@
<rect>
<x>0</x>
<y>0</y>
<width>601</width>
<height>575</height>
<width>522</width>
<height>563</height>
</rect>
</property>
<property name="windowTitle">
<string>Dialog</string>
</property>
<widget class="QDialogButtonBox" name="button_box">
<property name="geometry">
<rect>
<x>240</x>
<y>530</y>
<width>341</width>
<height>32</height>
</rect>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
</widget>
<widget class="QWidget" name="gridLayoutWidget">
<property name="geometry">
<rect>
<x>10</x>
<y>197</y>
<width>571</width>
<height>101</height>
</rect>
</property>
<layout class="QGridLayout" name="gridLayout_2" rowstretch="0,0,0">
<property name="bottomMargin">
<number>0</number>
</property>
<item row="2" column="3" alignment="Qt::AlignLeft">
<widget class="QLabel" name="year_label">
<property name="text">
<string>Year</string>
</property>
</widget>
</item>
<item row="2" column="5">
<widget class="QLabel" name="disc_label">
<property name="text">
<string>Disc</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="album_label">
<property name="text">
<string>Album</string>
</property>
</widget>
</item>
<item row="0" column="1" colspan="6">
<widget class="QLineEdit" name="albumLineEdit"/>
</item>
<item row="2" column="6">
<widget class="QLineEdit" name="discLineEdit">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item row="2" column="4" alignment="Qt::AlignLeft">
<widget class="QLineEdit" name="yearLineEdit"/>
</item>
<item row="1" column="0">
<widget class="QLabel" name="artist_label">
<property name="text">
<string>Artist</string>
</property>
</widget>
</item>
<item row="2" column="1" colspan="2">
<widget class="QLineEdit" name="genreLineEdit"/>
</item>
<item row="2" column="0" alignment="Qt::AlignLeft">
<widget class="QLabel" name="genre_label">
<property name="text">
<string>Genre</string>
</property>
</widget>
</item>
<item row="1" column="1" colspan="6">
<widget class="QLineEdit" name="artistLineEdit"/>
</item>
</layout>
</widget>
<widget class="QWidget" name="gridLayoutWidget_2">
<property name="geometry">
<rect>
<x>10</x>
<y>10</y>
<width>571</width>
<height>171</height>
</rect>
</property>
<layout class="QGridLayout" name="gridLayout_3">
<item row="0" column="0">
<widget class="QTableWidget" name="tableWidget">
<property name="columnCount">
<number>4</number>
</property>
<attribute name="horizontalHeaderVisible">
<bool>true</bool>
</attribute>
<attribute name="horizontalHeaderMinimumSectionSize">
<number>10</number>
</attribute>
<attribute name="verticalHeaderVisible">
<bool>false</bool>
</attribute>
<attribute name="verticalHeaderShowSortIndicator" stdset="0">
<bool>false</bool>
</attribute>
<column>
<property name="text">
<string/>
</property>
</column>
<column>
<property name="text">
<string>Track</string>
</property>
</column>
<column>
<property name="text">
<string>Title</string>
</property>
</column>
<column>
<property name="text">
<string>Duration</string>
</property>
</column>
</widget>
</item>
</layout>
</widget>
<widget class="QPushButton" name="ripButton">
<property name="geometry">
<rect>
<x>10</x>
<y>480</y>
<width>98</width>
<height>27</height>
</rect>
</property>
<property name="text">
<string>&amp;Rip</string>
</property>
</widget>
<widget class="QProgressBar" name="progress_bar">
<property name="geometry">
<rect>
<x>120</x>
<y>480</y>
<width>455</width>
<height>25</height>
</rect>
</property>
</widget>
<widget class="QGroupBox" name="output_group">
<property name="geometry">
<rect>
<x>10</x>
<y>320</y>
<width>571</width>
<height>131</height>
</rect>
</property>
<property name="title">
<string>Output options</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="1" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>Audio format</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QComboBox" name="format">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QPushButton" name="options">
<property name="text">
<string>Options...</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Destination</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QComboBox" name="destination">
<property name="enabled">
<bool>true</bool>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="windowIcon">
<iconset>
<normaloff>:/icon.png</normaloff>:/icon.png</iconset>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QGroupBox" name="input_group">
<property name="title">
<string>Input options</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<property name="text">
<string>Alongside the originals</string>
</property>
<layout class="QGridLayout" name="gridLayout_3">
<item row="1" column="0">
<widget class="QTableWidget" name="tableWidget">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="columnCount">
<number>4</number>
</property>
<attribute name="horizontalHeaderVisible">
<bool>true</bool>
</attribute>
<attribute name="horizontalHeaderMinimumSectionSize">
<number>10</number>
</attribute>
<attribute name="verticalHeaderVisible">
<bool>false</bool>
</attribute>
<attribute name="verticalHeaderShowSortIndicator" stdset="0">
<bool>false</bool>
</attribute>
<column>
<property name="text">
<string>Rip</string>
</property>
</column>
<column>
<property name="text">
<string>Track</string>
</property>
</column>
<column>
<property name="text">
<string>Title</string>
</property>
</column>
<column>
<property name="text">
<string>Duration</string>
</property>
</column>
</widget>
</item>
<item row="2" column="0">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QPushButton" name="select_all_button">
<property name="text">
<string>Select All</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="select_none_button">
<property name="text">
<string>Select None</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="invert_selection_button">
<property name="text">
<string>Invert Selection</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
</layout>
</item>
</widget>
</item>
<item row="2" column="2">
<widget class="QPushButton" name="select">
<property name="text">
<string>Select...</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
<string>File Format</string>
</property>
</widget>
</item>
<item row="0" column="1" colspan="2">
<widget class="QLineEdit" name="format_filename">
<property name="text">
<string notr="true">%tracknum% - %artist% - %track%</string>
</property>
</widget>
</item>
</layout>
</widget>
<item>
<layout class="QGridLayout" name="gridLayout_2" rowstretch="0,0,0">
<property name="bottomMargin">
<number>0</number>
</property>
<item row="2" column="3" alignment="Qt::AlignLeft">
<widget class="QLabel" name="year_label">
<property name="text">
<string>Year</string>
</property>
</widget>
</item>
<item row="2" column="5">
<widget class="QLabel" name="disc_label">
<property name="text">
<string>Disc</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="album_label">
<property name="text">
<string>Album</string>
</property>
</widget>
</item>
<item row="0" column="1" colspan="6">
<widget class="QLineEdit" name="albumLineEdit"/>
</item>
<item row="2" column="6">
<widget class="QLineEdit" name="discLineEdit">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item row="2" column="4" alignment="Qt::AlignLeft">
<widget class="QLineEdit" name="yearLineEdit"/>
</item>
<item row="1" column="0">
<widget class="QLabel" name="artist_label">
<property name="text">
<string>Artist</string>
</property>
</widget>
</item>
<item row="2" column="1" colspan="2">
<widget class="QLineEdit" name="genreLineEdit"/>
</item>
<item row="2" column="0" alignment="Qt::AlignLeft">
<widget class="QLabel" name="genre_label">
<property name="text">
<string>Genre</string>
</property>
</widget>
</item>
<item row="1" column="1" colspan="6">
<widget class="QLineEdit" name="artistLineEdit"/>
</item>
</layout>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="output_group">
<property name="title">
<string>Output options</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="2" column="2">
<widget class="QPushButton" name="select">
<property name="text">
<string>Select...</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
<string>File Format</string>
</property>
</widget>
</item>
<item row="0" column="1" colspan="2">
<widget class="QLineEdit" name="format_filename">
<property name="text">
<string notr="true">%tracknum% - %artist% - %track%</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Destination</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QComboBox" name="format">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QComboBox" name="destination">
<property name="enabled">
<bool>true</bool>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QPushButton" name="options">
<property name="text">
<string>Options...</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>Audio format</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="progress_group">
<property name="title">
<string>Progress</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
<widget class="QProgressBar" name="progress_bar"/>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QDialogButtonBox" name="button_box">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Close</set>
</property>
</widget>
</item>
</layout>
</widget>
<tabstops>
<tabstop>tableWidget</tabstop>
<tabstop>select_all_button</tabstop>
<tabstop>select_none_button</tabstop>
<tabstop>invert_selection_button</tabstop>
<tabstop>albumLineEdit</tabstop>
<tabstop>artistLineEdit</tabstop>
<tabstop>genreLineEdit</tabstop>
<tabstop>yearLineEdit</tabstop>
<tabstop>discLineEdit</tabstop>
<tabstop>format_filename</tabstop>
<tabstop>format</tabstop>
<tabstop>options</tabstop>
<tabstop>destination</tabstop>
<tabstop>select</tabstop>
<tabstop>button_box</tabstop>
</tabstops>
<resources/>
<connections>
<connection>
<sender>button_box</sender>
<signal>accepted()</signal>
<receiver>RipCD</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
<x>248</x>
<y>254</y>
</hint>
<hint type="destinationlabel">
<x>157</x>
<y>274</y>
</hint>
</hints>
</connection>
<connection>
<sender>button_box</sender>
<signal>rejected()</signal>
<receiver>RipCD</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>316</x>
<y>260</y>
</hint>
<hint type="destinationlabel">
<x>286</x>
<y>274</y>
</hint>
</hints>
</connection>
</connections>
<connections/>
</ui>