diff --git a/ChangeLog b/ChangeLog index a1fa4d66..7feaa023 100644 --- a/ChangeLog +++ b/ChangeLog @@ -21006,3 +21006,6 @@ * Added 'RDDiscModel' * Refactored the full disc ripper in rdlibrary(1) to use the model-based API. +2021-02-04 Fred Gleason + * Refactored the CD track ripper in rdlibrary(1) to use the + model-based API. diff --git a/rdlibrary/cdripper.cpp b/rdlibrary/cdripper.cpp index 077c3923..5018cab9 100644 --- a/rdlibrary/cdripper.cpp +++ b/rdlibrary/cdripper.cpp @@ -2,7 +2,7 @@ // // CD Track Ripper Dialog for Rivendell. // -// (C) Copyright 2002-2020 Fred Gleason +// (C) Copyright 2002-2021 Fred Gleason // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License version 2 as @@ -18,18 +18,16 @@ // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // -#include +#include #include #include -#include #include #include #include #include "cdripper.h" #include "globals.h" -#include "rdconfig.h" // // Global Variables @@ -128,7 +126,7 @@ CdRipper::CdRipper(QString cutname,RDDiscRecord *rec,RDLibraryConf *conf, rip_other_label=new QLabel(tr("Other:"),this); rip_other_label->setFont(labelFont()); rip_other_label->setAlignment(Qt::AlignRight); - rip_other_edit=new Q3TextEdit(this); + rip_other_edit=new QTextEdit(this); rip_other_edit->setReadOnly(true); // @@ -173,25 +171,24 @@ CdRipper::CdRipper(QString cutname,RDDiscRecord *rec,RDLibraryConf *conf, // // Track List // - rip_track_list=new RDListView(this); - rip_track_list->setAllColumnsShowFocus(true); - rip_track_list->setSelectionMode(Q3ListView::Extended); - rip_track_list->setItemMargin(5); - rip_track_list->setSorting(-1); - connect(rip_track_list,SIGNAL(selectionChanged()), - this,SLOT(trackSelectionChangedData())); - rip_track_label=new QLabel(rip_track_list,tr("Tracks"),this); - rip_track_label->setFont(labelFont()); - rip_track_list->addColumn(tr("TRACK")); - rip_track_list->setColumnAlignment(0,Qt::AlignHCenter); - rip_track_list->addColumn(tr("LENGTH")); - rip_track_list->setColumnAlignment(1,Qt::AlignRight); - rip_track_list->addColumn(tr("TITLE")); - rip_track_list->setColumnAlignment(2,Qt::AlignLeft); - rip_track_list->addColumn(tr("OTHER")); - rip_track_list->setColumnAlignment(3,Qt::AlignLeft); - rip_track_list->addColumn(tr("TYPE")); - rip_track_list->setColumnAlignment(4,Qt::AlignLeft); + rip_track_view=new RDTableView(this); + rip_track_view->setSelectionMode(QAbstractItemView::ContiguousSelection); + rip_track_model=new RDDiscModel(this); + rip_track_model->setFont(defaultFont()); + rip_track_model->setPalette(palette()); + rip_track_view->setModel(rip_track_model); + rip_track_view->hideColumn(5); + rip_track_label=new QLabel(rip_track_view,tr("Tracks"),this); + rip_track_label->setFont(sectionLabelFont()); + connect(rip_track_view->selectionModel(), + SIGNAL(selectionChanged(const QItemSelection &, + const QItemSelection &)), + this, + SLOT(trackSelectionChangedData(const QItemSelection &, + const QItemSelection &))); + connect(rip_track_model,SIGNAL(modelReset()), + rip_track_view,SLOT(resizeColumnsToContents())); + rip_track_view->resizeColumnsToContents(); // // Progress Bar @@ -303,7 +300,8 @@ CdRipper::~CdRipper() { rip_cdrom->close(); delete rip_cdrom; - delete rip_track_list; + delete rip_track_view; + delete rip_track_model; delete rip_rip_button; delete rip_close_button; delete rip_eject_button; @@ -335,21 +333,20 @@ int CdRipper::exec(QString *title,QString *artist,QString *album,QString *label) } -void CdRipper::trackSelectionChangedData() +void CdRipper::trackSelectionChangedData(const QItemSelection &before, + const QItemSelection &after) { - Q3ListViewItem *item=rip_track_list->firstChild(); + QModelIndexList rows=rip_track_view->selectionModel()->selectedRows(); QStringList titles; - - while(item!=NULL) { - if(item->isSelected()) { - if(item->text(4)==tr("Data Track")) { - rip_rip_button->setDisabled(true); - return; - } - titles.push_back(item->text(2)); + for(int i=0;itrackContainsData(rows.at(i))) { + break; } - item=item->nextSibling(); + titles.push_back(rip_track_model->trackTitle(rows.at(i))); } + + rip_rip_button->setDisabled((rows.size()==0)|| + rip_track_model->trackContainsData(rows.first())); rip_title_box->clear(); switch(titles.size()) { case 0: @@ -379,11 +376,14 @@ void CdRipper::ejectButtonData() void CdRipper::playButtonData() { - if(rip_track_list->currentItem()!=NULL) { - rip_cdrom->play(rip_track_list->currentItem()->text(0).toInt()); - rip_play_button->on(); - rip_stop_button->off(); + QModelIndexList rows=rip_track_view->selectionModel()->selectedRows(); + + if(rows.size()!=1) { + return; } + rip_cdrom->play(rows.first().row()+1); + rip_play_button->on(); + rip_stop_button->off(); } @@ -398,6 +398,7 @@ void CdRipper::stopButtonData() void CdRipper::ripTrackButtonData() { RDCdRipper *ripper=NULL; + QModelIndexList rows=rip_track_view->selectionModel()->selectedRows(); rip_done=false; rip_rip_aborted=false; @@ -469,19 +470,15 @@ void CdRipper::ripTrackButtonData() ripper->setDevice(rip_conf->ripperDevice()); ripper->setDestinationFile(tmpfile); - rip_track[0]=-1; rip_track[1]=-1; - Q3ListViewItem *item=rip_track_list->firstChild(); - while(item!=NULL) { - if(item->isSelected()) { - if(rip_track[0]<0) { - rip_track[0]=item->text(0).toInt()-1; - } - rip_track[1]=item->text(0).toInt()-1; + for(int i=0;inextSibling(); + rip_track[1]=rows.at(i).row(); } + switch((ripper_err=ripper->rip(rip_track[0],rip_track[1]))) { case RDCdRipper::ErrorOk: conv=new RDAudioImport(this); @@ -549,7 +546,7 @@ void CdRipper::ripTrackButtonData() void CdRipper::ejectedData() { - rip_track_list->clear(); + rip_track_model->clear(); rip_artist_edit->clear(); rip_album_edit->clear(); rip_other_edit->clear(); @@ -561,25 +558,13 @@ void CdRipper::ejectedData() void CdRipper::mediaChangedData() { - Q3ListViewItem *l; - - rip_track_list->clear(); + rip_track_model->clear(); rip_track[0]=-1; rip_track[1]=-1; - for(int i=rip_cdrom->tracks();i>0;i--) { - l=new Q3ListViewItem(rip_track_list); - l->setText(0,QString().sprintf("%d",i)); - if(rip_cdrom->isAudio(i)) { - l->setText(4,tr("Audio Track")); - } - else { - l->setText(4,tr("Data Track")); - } - l->setText(1,RDGetTimeLength(rip_cdrom->trackLength(i))); - } rip_disc_record->clear(); rip_cdrom->setCddbRecord(rip_disc_record); rip_disc_lookup->setCddbRecord(rip_disc_record); + rip_track_model->setDisc(rip_cdrom); Profile("starting metadata lookup"); rip_disc_lookup->lookup(); Profile("metadata lookup finished"); @@ -611,18 +596,13 @@ void CdRipper::lookupDoneData(RDDiscLookup::Result result,const QString &err_msg rip_album_edit->setText(rip_disc_record->discAlbum()); rip_label_edit->setText(rip_disc_record->discLabel()); rip_other_edit->setText(rip_disc_record->discExtended()); - for(int i=0;itracks();i++) { - rip_track_list->findItem(QString().sprintf("%d",i+1),0)-> - setText(2,rip_disc_record->trackTitle(i)); - rip_track_list->findItem(QString().sprintf("%d",i+1),0)-> - setText(3,rip_disc_record->trackExtended(i)); - } + rip_track_model->refresh(rip_disc_record); rip_apply_box->setChecked(true); rip_apply_box->setEnabled(true); rip_apply_label->setEnabled(true); rip_browser_button->setDisabled(rip_disc_lookup->sourceUrl().isNull()); rip_browser_label->setDisabled(rip_disc_lookup->sourceUrl().isNull()); - trackSelectionChangedData(); + trackSelectionChangedData(QItemSelection(),QItemSelection()); break; case RDDiscLookup::NoMatch: @@ -689,7 +669,7 @@ void CdRipper::resizeEvent(QResizeEvent *e) rip_apply_label->setGeometry(85,162,250,20); rip_browser_button->setGeometry(size().width()-260,161,200,35); rip_browser_label->setGeometry(size().width()-260,161,200,35); - rip_track_list->setGeometry(10,200,size().width()-110,size().height()-305); + rip_track_view->setGeometry(10,200,size().width()-110,size().height()-305); rip_track_label->setGeometry(10,184,100,14); rip_bar->setGeometry(10,size().height()-100,size().width()-110,20); rip_eject_button->setGeometry(size().width()-90,200,80,50); diff --git a/rdlibrary/cdripper.h b/rdlibrary/cdripper.h index d4343387..df356f55 100644 --- a/rdlibrary/cdripper.h +++ b/rdlibrary/cdripper.h @@ -2,7 +2,7 @@ // // CD Ripper Dialog for Rivendell // -// (C) Copyright 2002-2020 Fred Gleason +// (C) Copyright 2002-2021 Fred Gleason // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License version 2 as @@ -21,18 +21,17 @@ #ifndef CDRIPPER_H #define CDRIPPER_H -#include - -#include -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include #include #include #include +#include +#include #include class CdRipper : public RDDialog @@ -49,7 +48,8 @@ class CdRipper : public RDDialog int exec(QString *title,QString *artist,QString *album,QString *label); private slots: - void trackSelectionChangedData(); + void trackSelectionChangedData(const QItemSelection &before, + const QItemSelection &after); void ejectButtonData(); void playButtonData(); void stopButtonData(); @@ -76,7 +76,8 @@ class CdRipper : public RDDialog RDDiscLookup *rip_disc_lookup; RDCut *rip_cut; QLabel *rip_track_label; - RDListView *rip_track_list; + RDTableView *rip_track_view; + RDDiscModel *rip_track_model; QPushButton *rip_rip_button; bool rip_rip_aborted; QPushButton *rip_close_button; @@ -93,7 +94,7 @@ class CdRipper : public RDDialog QLabel *rip_artist_label; QLineEdit *rip_artist_edit; QLabel *rip_other_label; - Q3TextEdit *rip_other_edit; + QTextEdit *rip_other_edit; QCheckBox *rip_apply_box; QLabel *rip_apply_label; QPushButton *rip_browser_button; diff --git a/rdlibrary/rdlibrary_cs.ts b/rdlibrary/rdlibrary_cs.ts index 3af2775c..dd893ac0 100644 --- a/rdlibrary/rdlibrary_cs.ts +++ b/rdlibrary/rdlibrary_cs.ts @@ -239,23 +239,23 @@ Do you still want to delete? TRACK - STOPA + STOPA LENGTH - DÉLKA + DÉLKA TITLE - NÁZEV + NÁZEV OTHER - JINÉ + JINÉ TYPE - TYP + TYP &Rip @@ -285,22 +285,22 @@ stopu Audio Exists - Zvuk existuje + Zvuk existuje This will overwrite the existing recording. Do you want to proceed? - Toto přepíše (smaže) stávající nahrávku. + Toto přepíše (smaže) stávající nahrávku. Přesto pokračovat? Empty Clipboard - Vyprázdnit schránku + Vyprázdnit schránku Ripping this cut will also empty the clipboard. Do you still want to proceed? - Vytažení tohoto záběru vyprázdní také schránku. + Vytažení tohoto záběru vyprázdní také schránku. Přesto smazat? @@ -317,19 +317,19 @@ Přesto smazat? Audio Track - Zvuková stopa + Zvuková stopa Data Track - Datová stopa + Datová stopa Rip Complete - Vytažení dokončeno + Vytažení dokončeno Rip complete! - Vytažení dokončeno! + Vytažení dokončeno! Rip Aborted @@ -351,16 +351,16 @@ Bitte überprüfen sie ihre Ripperkonfiguration und versuchen sie es erneut. RDLibrary - Importer Error - RDLibrary - Chyba při zavedení + RDLibrary - Chyba při zavedení RDLibrary - Ripper Error - RDLibrary - Chyba ve vytahovači + RDLibrary - Chyba ve vytahovači Abort Rip - Zrušit + Zrušit vytahování @@ -379,11 +379,6 @@ vytahování Rip CD Vytáhnout z CD - - Rip -Track - - Apply @@ -392,12 +387,17 @@ Track Values to Cart + + Label: + + Lookup Error - Label: + Rip +Track diff --git a/rdlibrary/rdlibrary_de.ts b/rdlibrary/rdlibrary_de.ts index 1cb5add6..ac86ce08 100644 --- a/rdlibrary/rdlibrary_de.ts +++ b/rdlibrary/rdlibrary_de.ts @@ -239,23 +239,23 @@ Do you still want to delete? TRACK - TRACK + TRACK LENGTH - LÄNGE + LÄNGE TITLE - TITEL + TITEL OTHER - ANDERE + ANDERE TYPE - TYP + TYP &Rip @@ -285,22 +285,22 @@ Track Audio Exists - Audio existiert + Audio existiert This will overwrite the existing recording. Do you want to proceed? - Dies wird die derzeitige Aufnahme löschen. + Dies wird die derzeitige Aufnahme löschen. Trotzdem fortfahren? Empty Clipboard - Zwischenablage leeren + Zwischenablage leeren Ripping this cut will also empty the clipboard. Do you still want to proceed? - Diesen Cut zu rippen wird auch die Zwischenablage + Diesen Cut zu rippen wird auch die Zwischenablage leeren. Trotzdem fortfahren? @@ -317,19 +317,19 @@ leeren. Trotzdem fortfahren? Audio Track - Audio Track + Audio Track Data Track - Datentrack + Datentrack Rip Complete - Rip vollständig + Rip vollständig Rip complete! - Rip vollständig! + Rip vollständig! Rip Aborted @@ -351,16 +351,16 @@ Bitte überprüfen sie ihre Ripperkonfiguration und versuchen sie es erneut. RDLibrary - Importer Error - RDLibrary - Importfehler + RDLibrary - Importfehler RDLibrary - Ripper Error - RDLibrary - Ripperfehler + RDLibrary - Ripperfehler Abort Rip - Rippen + Rippen abbrechen @@ -379,11 +379,6 @@ abbrechen Rip CD CD rippen - - Rip -Track - - Apply @@ -392,12 +387,17 @@ Track Values to Cart + + Label: + + Lookup Error - Label: + Rip +Track diff --git a/rdlibrary/rdlibrary_es.ts b/rdlibrary/rdlibrary_es.ts index 76bbfafe..0f575253 100644 --- a/rdlibrary/rdlibrary_es.ts +++ b/rdlibrary/rdlibrary_es.ts @@ -239,23 +239,23 @@ Do you still want to delete? TRACK - PISTA + PISTA LENGTH - DURACIÓN + DURACIÓN TITLE - TÍTULO + TÍTULO OTHER - OTROS + OTROS TYPE - TIPO + TIPO &Rip @@ -285,12 +285,12 @@ Pista Empty Clipboard - Vaciar portapapeles + Vaciar portapapeles Ripping this cut will also empty the clipboard. Do you still want to proceed? - Leyendo este audio también vaciará el portapapeles. + Leyendo este audio también vaciará el portapapeles. ¿Desea continuar? @@ -307,19 +307,19 @@ Do you still want to proceed? Audio Track - Pista de audio + Pista de audio Data Track - Pista de datos + Pista de datos Rip Complete - Lectura completada + Lectura completada Rip complete! - ¡Lectura completada! + ¡Lectura completada! Rip Aborted @@ -342,25 +342,25 @@ Por favor, chequee la configuración e intente de nuevo. This will overwrite the existing recording. Do you want to proceed? - Esta acción sobreescribirá la grabación existente. + Esta acción sobreescribirá la grabación existente. ¿Desea continuar? Audio Exists - El audio ya existe + El audio ya existe RDLibrary - Importer Error - RDLibrary - Error al importar + RDLibrary - Error al importar RDLibrary - Ripper Error - RDLibrary - Error al leer + RDLibrary - Error al leer Abort Rip - Abortar + Abortar Lectura @@ -379,11 +379,6 @@ Lectura Rip CD Leer CD - - Rip -Track - - Apply @@ -392,12 +387,17 @@ Track Values to Cart + + Label: + + Lookup Error - Label: + Rip +Track diff --git a/rdlibrary/rdlibrary_fr.ts b/rdlibrary/rdlibrary_fr.ts index 98f9a481..7223246d 100644 --- a/rdlibrary/rdlibrary_fr.ts +++ b/rdlibrary/rdlibrary_fr.ts @@ -147,26 +147,6 @@ Do you still want to proceed? Tracks - - TRACK - - - - LENGTH - - - - TITLE - - - - OTHER - - - - TYPE - - &Rip Track @@ -192,6 +172,34 @@ Track Channels: + + Title: + + + + [none] + + + + Rip CD + + + + Apply + + + + Values to Cart + + + + Label: + + + + Lookup Error + + Audio Exists @@ -211,19 +219,8 @@ Do you still want to proceed? - Audio Track - - - - Data Track - - - - RDLibrary - Importer Error - - - - RDLibrary - Ripper Error + Abort +Rip @@ -235,20 +232,11 @@ Do you still want to proceed? - Abort -Rip + RDLibrary - Importer Error - Title: - - - - [none] - - - - Rip CD + RDLibrary - Ripper Error @@ -256,22 +244,6 @@ Rip Track - - Apply - - - - Values to Cart - - - - Lookup Error - - - - Label: - - DiskGauge diff --git a/rdlibrary/rdlibrary_nb.ts b/rdlibrary/rdlibrary_nb.ts index a1d1c05e..f571a15c 100644 --- a/rdlibrary/rdlibrary_nb.ts +++ b/rdlibrary/rdlibrary_nb.ts @@ -234,23 +234,23 @@ Do you still want to delete? TRACK - SPOR + SPOR LENGTH - LENGD + LENGD TITLE - TITTEL + TITTEL OTHER - ANNA + ANNA TYPE - TYPE + TYPE &Rip @@ -280,22 +280,22 @@ sporet Audio Exists - Lyd eksisterer + Lyd eksisterer This will overwrite the existing recording. Do you want to proceed? - Dette byter ut opptaket du alt har. + Dette byter ut opptaket du alt har. Vil du halda fram? Empty Clipboard - Tøm utklyppstavla + Tøm utklyppstavla Ripping this cut will also empty the clipboard. Do you still want to proceed? - Viss du rippar dette sporet, tømer du utklyppstavla. + Viss du rippar dette sporet, tømer du utklyppstavla. Vil du halda fram? @@ -312,11 +312,11 @@ Vil du halda fram? Audio Track - Lydspor + Lydspor Data Track - Dataspor + Dataspor Rip Complete @@ -344,19 +344,6 @@ Please check your ripper configuration and try again. Rippinga vart mislukka. Sjå over innstillingane for ripping, og prøv ein gong til. - - RDLibrary - Importer Error - - - - RDLibrary - Ripper Error - - - - Abort -Rip - - Title: @@ -369,11 +356,6 @@ Rip Rip CD Ripp CD - - Rip -Track - - Apply @@ -382,12 +364,30 @@ Track Values to Cart + + Label: + + Lookup Error - Label: + Abort +Rip + + + + RDLibrary - Importer Error + + + + RDLibrary - Ripper Error + + + + Rip +Track diff --git a/rdlibrary/rdlibrary_nn.ts b/rdlibrary/rdlibrary_nn.ts index a1d1c05e..f571a15c 100644 --- a/rdlibrary/rdlibrary_nn.ts +++ b/rdlibrary/rdlibrary_nn.ts @@ -234,23 +234,23 @@ Do you still want to delete? TRACK - SPOR + SPOR LENGTH - LENGD + LENGD TITLE - TITTEL + TITTEL OTHER - ANNA + ANNA TYPE - TYPE + TYPE &Rip @@ -280,22 +280,22 @@ sporet Audio Exists - Lyd eksisterer + Lyd eksisterer This will overwrite the existing recording. Do you want to proceed? - Dette byter ut opptaket du alt har. + Dette byter ut opptaket du alt har. Vil du halda fram? Empty Clipboard - Tøm utklyppstavla + Tøm utklyppstavla Ripping this cut will also empty the clipboard. Do you still want to proceed? - Viss du rippar dette sporet, tømer du utklyppstavla. + Viss du rippar dette sporet, tømer du utklyppstavla. Vil du halda fram? @@ -312,11 +312,11 @@ Vil du halda fram? Audio Track - Lydspor + Lydspor Data Track - Dataspor + Dataspor Rip Complete @@ -344,19 +344,6 @@ Please check your ripper configuration and try again. Rippinga vart mislukka. Sjå over innstillingane for ripping, og prøv ein gong til. - - RDLibrary - Importer Error - - - - RDLibrary - Ripper Error - - - - Abort -Rip - - Title: @@ -369,11 +356,6 @@ Rip Rip CD Ripp CD - - Rip -Track - - Apply @@ -382,12 +364,30 @@ Track Values to Cart + + Label: + + Lookup Error - Label: + Abort +Rip + + + + RDLibrary - Importer Error + + + + RDLibrary - Ripper Error + + + + Rip +Track diff --git a/rdlibrary/rdlibrary_pt_BR.ts b/rdlibrary/rdlibrary_pt_BR.ts index e0bbf0cf..ca0b685e 100644 --- a/rdlibrary/rdlibrary_pt_BR.ts +++ b/rdlibrary/rdlibrary_pt_BR.ts @@ -235,23 +235,23 @@ Do you still want to delete? TRACK - FAIXAS + FAIXAS LENGTH - DURAÇÃO + DURAÇÃO TITLE - TÍTULO + TÍTULO OTHER - OUTRO + OUTRO TYPE - TIPO + TIPO &Rip @@ -281,22 +281,22 @@ Faixa Audio Exists - Áudio Existe + Áudio Existe This will overwrite the existing recording. Do you want to proceed? - Esta ação sobrescreverá a gravação existente. + Esta ação sobrescreverá a gravação existente. Você quer proceder? Empty Clipboard - Esvaziar Clipboard + Esvaziar Clipboard Ripping this cut will also empty the clipboard. Do you still want to proceed? - Extrair este Conteúdo também esvaziará o clipboard. + Extrair este Conteúdo também esvaziará o clipboard. Você ainda quer proceder? @@ -313,19 +313,19 @@ Você ainda quer proceder? Audio Track - Faixa de Áudio + Faixa de Áudio Data Track - Faixa de Dados + Faixa de Dados Rip Complete - Extração Completa + Extração Completa Rip complete! - Extração Completa! + Extração Completa! Rip Aborted @@ -345,6 +345,34 @@ Please check your ripper configuration and try again. O dispositivo de extração encontrou um Erro. Por Favor, cheque suas configurações e tente novamente. + + Title: + + + + [none] + + + + Rip CD + Extrair CD + + + Apply + + + + Values to Cart + + + + Label: + + + + Lookup Error + + Abort Rip @@ -358,39 +386,11 @@ Rip RDLibrary - Ripper Error - - Title: - - - - [none] - - - - Rip CD - Extrair CD - Rip Track - - Apply - - - - Values to Cart - - - - Lookup Error - - - - Label: - - DiskGauge