diff --git a/ChangeLog b/ChangeLog index da28951e..7b425418 100644 --- a/ChangeLog +++ b/ChangeLog @@ -20759,3 +20759,7 @@ 2020-12-29 Fred Gleason * Refactored the Full Log widget in rdairplay to use the model-based API. +2021-01-07 Fred Gleason + * Added a 'RDCutListModel' class. + * Refactored the 'Edit Cart' dialog in rdlibrary(1) to use the + model-based API. diff --git a/lib/Makefile.am b/lib/Makefile.am index b16f501f..a3c4e68f 100644 --- a/lib/Makefile.am +++ b/lib/Makefile.am @@ -2,7 +2,7 @@ ## ## Automake.am for rivendell/lib ## -## (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 @@ -84,6 +84,7 @@ dist_librd_la_SOURCES = dbversion.h\ rdcastsearch.cpp rdcastsearch.h\ rdcatch_conf.cpp rdcatch_conf.h\ rdcatch_connect.cpp rdcatch_connect.h\ + rdcutlistmodel.cpp rdcutlistmodel.h\ rdcddblookup.cpp rdcddblookup.h\ rdcdplayer.cpp rdcdplayer.h\ rdcdripper.cpp rdcdripper.h\ @@ -278,6 +279,7 @@ nodist_librd_la_SOURCES = moc_rdadd_cart.cpp\ moc_rdcueedit.cpp\ moc_rdcueeditdialog.cpp\ moc_rdcut_dialog.cpp\ + moc_rdcutlistmodel.cpp\ moc_rddatapacer.cpp\ moc_rddatedialog.cpp\ moc_rddatepicker.cpp\ diff --git a/lib/lib.pro b/lib/lib.pro index 6a8719cf..42c5ac6e 100644 --- a/lib/lib.pro +++ b/lib/lib.pro @@ -2,7 +2,7 @@ # # The lib/ QMake project file for Rivendell. # -# (C) Copyright 2003-2020 Fred Gleason +# (C) Copyright 2003-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 @@ -58,6 +58,7 @@ SOURCES += rdcartdrag.cpp SOURCES += rdcatch_connect.cpp SOURCES += rdcddblookup.cpp SOURCES += rdcdplayer.cpp +SOURCES += rdcutlistmodel.cpp SOURCES += rddiscrecord.cpp SOURCES += rdcheck_version.cpp SOURCES += rdclock.cpp @@ -202,6 +203,7 @@ HEADERS += rdcartdrag.h HEADERS += rdcatch_connect.h HEADERS += rdcddblookup.h HEADERS += rdcdplayer.h +HEADERS += rdcutlistmodel.h HEADERS += rddatapacer.h HEADERS += rddiscrecord.h HEADERS += rddisclookup.h diff --git a/lib/librd_cs.ts b/lib/librd_cs.ts index d16ecbd3..0bf06a51 100644 --- a/lib/librd_cs.ts +++ b/lib/librd_cs.ts @@ -1572,6 +1572,85 @@ vozík + + RDCutListModel + + Wt + + + + Description + + + + Length + Délka + + + Last Played + + + + # of Plays + + + + Source + + + + Ingest + + + + Outcue + + + + Start Date + + + + Daypart Start + + + + Daypart End + + + + Name + + + + SHA1 + + + + Never + + + + unknown + + + + None + + + + not available + + + + End Date + + + + Ord + + + RDDateDialog diff --git a/lib/librd_de.ts b/lib/librd_de.ts index 80b0ce41..4045b00c 100644 --- a/lib/librd_de.ts +++ b/lib/librd_de.ts @@ -1562,6 +1562,85 @@ Cart + + RDCutListModel + + Wt + + + + Description + + + + Length + Länge + + + Last Played + + + + # of Plays + + + + Source + + + + Ingest + + + + Outcue + + + + Start Date + + + + Daypart Start + + + + Daypart End + + + + Name + + + + SHA1 + + + + Never + + + + unknown + + + + None + + + + not available + + + + End Date + + + + Ord + + + RDDateDialog diff --git a/lib/librd_es.ts b/lib/librd_es.ts index 5657bb33..672a4345 100644 --- a/lib/librd_es.ts +++ b/lib/librd_es.ts @@ -1559,6 +1559,85 @@ Cartucho + + RDCutListModel + + Wt + + + + Description + + + + Length + Longitud + + + Last Played + + + + # of Plays + + + + Source + + + + Ingest + + + + Outcue + + + + Start Date + + + + Daypart Start + + + + Daypart End + + + + Name + + + + SHA1 + + + + Never + + + + unknown + + + + None + + + + not available + + + + End Date + + + + Ord + + + RDDateDialog diff --git a/lib/librd_fr.ts b/lib/librd_fr.ts index 4a39eb4d..c1419690 100644 --- a/lib/librd_fr.ts +++ b/lib/librd_fr.ts @@ -1396,6 +1396,85 @@ Cart + + RDCutListModel + + Wt + + + + Description + + + + Length + + + + Last Played + + + + # of Plays + + + + Source + + + + Ingest + + + + Outcue + + + + Start Date + + + + Daypart Start + + + + Daypart End + + + + Name + + + + SHA1 + + + + Never + + + + unknown + + + + None + + + + not available + + + + End Date + + + + Ord + + + RDDateDialog diff --git a/lib/librd_nb.ts b/lib/librd_nb.ts index 9e950ca5..88f3f2b2 100644 --- a/lib/librd_nb.ts +++ b/lib/librd_nb.ts @@ -1557,6 +1557,85 @@ Cart + + RDCutListModel + + Wt + + + + Description + + + + Length + Lengd + + + Last Played + + + + # of Plays + + + + Source + + + + Ingest + + + + Outcue + + + + Start Date + + + + Daypart Start + + + + Daypart End + + + + Name + + + + SHA1 + + + + Never + + + + unknown + + + + None + + + + not available + + + + End Date + + + + Ord + + + RDDateDialog diff --git a/lib/librd_nn.ts b/lib/librd_nn.ts index 9e950ca5..88f3f2b2 100644 --- a/lib/librd_nn.ts +++ b/lib/librd_nn.ts @@ -1557,6 +1557,85 @@ Cart + + RDCutListModel + + Wt + + + + Description + + + + Length + Lengd + + + Last Played + + + + # of Plays + + + + Source + + + + Ingest + + + + Outcue + + + + Start Date + + + + Daypart Start + + + + Daypart End + + + + Name + + + + SHA1 + + + + Never + + + + unknown + + + + None + + + + not available + + + + End Date + + + + Ord + + + RDDateDialog diff --git a/lib/librd_pt_BR.ts b/lib/librd_pt_BR.ts index 6c9df3ea..b8851a3d 100644 --- a/lib/librd_pt_BR.ts +++ b/lib/librd_pt_BR.ts @@ -1563,6 +1563,85 @@ Cartão + + RDCutListModel + + Wt + + + + Description + + + + Length + Duração + + + Last Played + + + + # of Plays + + + + Source + + + + Ingest + + + + Outcue + + + + Start Date + + + + Daypart Start + + + + Daypart End + + + + Name + + + + SHA1 + + + + Never + + + + unknown + + + + None + + + + not available + + + + End Date + + + + Ord + + + RDDateDialog diff --git a/lib/rdcutlistmodel.cpp b/lib/rdcutlistmodel.cpp new file mode 100644 index 00000000..fb801263 --- /dev/null +++ b/lib/rdcutlistmodel.cpp @@ -0,0 +1,649 @@ +// rdcutlistmodel.cpp +// +// Data model for Rivendell cut metadata +// +// (C) Copyright 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 +// published by the Free Software Foundation. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public +// License along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +// + +#include "rdconf.h" +#include "rdcutlistmodel.h" +#include "rdescape_string.h" + +RDCutListModel::RDCutListModel(bool use_weighting,QObject *parent) + : QAbstractTableModel(parent) +{ + d_cart_number=0; + d_use_weighting=use_weighting; + + // + // Column Attributes + // + unsigned left=Qt::AlignLeft|Qt::AlignVCenter; + unsigned center=Qt::AlignCenter; + unsigned right=Qt::AlignRight|Qt::AlignVCenter; + + if(d_use_weighting) { + d_headers.push_back(tr("Wt")); + d_alignments.push_back(right); + } + else { + d_headers.push_back(tr("Ord")); + d_alignments.push_back(right); + } + + d_headers.push_back(tr("Description")); + d_alignments.push_back(left); + + d_headers.push_back(tr("Length")); + d_alignments.push_back(right); + + d_headers.push_back(tr("Last Played")); + d_alignments.push_back(center); + + d_headers.push_back(tr("# of Plays")); + d_alignments.push_back(right); + + d_headers.push_back(tr("Source")); + d_alignments.push_back(left); + + d_headers.push_back(tr("Ingest")); + d_alignments.push_back(left); + + d_headers.push_back(tr("Outcue")); + d_alignments.push_back(left); + + d_headers.push_back(tr("Start Date")); + d_alignments.push_back(center); + + d_headers.push_back(tr("End Date")); + d_alignments.push_back(center); + + d_headers.push_back(tr("Daypart Start")); + d_alignments.push_back(left); + + d_headers.push_back(tr("Daypart End")); + d_alignments.push_back(left); + + d_headers.push_back(tr("Name")); + d_alignments.push_back(left); + + d_headers.push_back(tr("SHA1")); + d_alignments.push_back(left); +} + + +QPalette RDCutListModel::palette() +{ + return d_palette; +} + + +void RDCutListModel::setPalette(const QPalette &pal) +{ + d_palette=pal; +} + + +void RDCutListModel::setFont(const QFont &font) +{ + d_font=font; +} + + +int RDCutListModel::columnCount(const QModelIndex &parent) const +{ + return d_headers.size(); +} + + +int RDCutListModel::rowCount(const QModelIndex &parent) const +{ + return d_texts.size(); +} + + +QVariant RDCutListModel::headerData(int section,Qt::Orientation orient, + int role) const +{ + if((orient==Qt::Horizontal)&&(role==Qt::DisplayRole)) { + return d_headers.at(section); + } + return QVariant(); +} + + +QVariant RDCutListModel::data(const QModelIndex &index,int role) const +{ + QString str; + int col=index.column(); + int row=index.row(); + + if(row list; + + beginInsertRows(QModelIndex(),d_texts.size(),d_texts.size()); + + for(int i=0;ifirst()) { + updateRow(row,q); + emit dataChanged(createIndex(row,0),createIndex(row,columnCount())); + } + } +} + + +void RDCutListModel::refresh(const QString &cutname) +{ + for(int i=0;i text; + for(int i=0;inext()) { + d_texts.push_back(text); + d_colors.push_back(d_palette.color(QPalette::Background)); + updateRow(d_texts.size()-1,q); + } + d_cart_number=cartnum; + endResetModel(); + } +} + + +void RDCutListModel::processNotification(RDNotification *notify) +{ +} + + +void RDCutListModel::updateRow(int row,RDSqlQuery *q) +{ + QDateTime current_datetime=QDateTime::currentDateTime(); + + // + // Text Values + // + if(d_use_weighting) { + d_texts[row][0]=QString().sprintf("%d",q->value(1).toInt()); + } + else { + d_texts[row][0]=QString().sprintf("%d",q->value(0).toInt()); + } + d_texts[row][1]=q->value(2); + d_texts[row][2]=RDGetTimeLength(q->value(3).toUInt()); + if(q->value(5).toUInt()>0) { + d_texts[row][3]=q->value(4).toDateTime().toString("M/d/yy"); + } + else { + d_texts[row][3]=tr("Never"); + } + d_texts[row][4]=q->value(5).toString(); + QString user=q->value(8).toString()+"@"; + if(q->value(8).toString().isEmpty()) { + user=""; + } + if(q->value(9).toString().isEmpty()) { + d_texts[row][5]="["+tr("unknown")+"]"; + } + else { + d_texts[row][5]=user+q->value(9).toString(); + } + if(!q->value(6).toDateTime().isNull()) { + d_texts[row][6]=q->value(7).toString()+" - "+ + q->value(6).toDateTime().toString("M/d/yy hh:mm:ss"); + } + d_texts[row][7]=q->value(10).toString(); + if(!q->value(14).toDateTime().isNull()) { + d_texts[row][8]=q->value(14).toDateTime().toString("M/d/yyyy hh:mm:ss"); + } + else { + d_texts[row][8]=tr("None"); + } + if(!q->value(15).toDateTime().isNull()) { + d_texts[row][9]=q->value(15).toDateTime().toString("M/d/yyyy hh:mm:ss"); + } + else { + d_texts[row][9]=tr("None"); + } + if(!q->value(17).isNull()) { + d_texts[row][10]=q->value(16).toTime().toString("hh:mm:ss"); + d_texts[row][11]=q->value(17).toTime().toString("hh:mm:ss"); + } + else { + d_texts[row][10]=tr("None"); + d_texts[row][11]=tr("None"); + } + d_texts[row][12]=q->value(11).toString(); + if(q->value(25).toString().isEmpty()) { + d_texts[row][13]="["+tr("not available")+"]"; + } + else { + d_texts[row][13]=q->value(25).toString(); + } + + // + // Background Color + // + if(d_use_weighting&&(q->value(1).toInt()==0)){// zero weight + d_colors[row]=RD_CART_ERROR_COLOR; + //if(pass==0) { + // err=true; + //} + } + else { + /* + RDCart::Validity validity=ValidateCut(q,12,RDCart::NeverValid,current_datetime); + printf("validity[%d]: %d\n",row,validity); + switch(validity) { + */ + switch(ValidateCut(q,12,RDCart::NeverValid,current_datetime)) { + case RDCart::NeverValid: + d_colors[row]=RD_CART_ERROR_COLOR; + //if(pass==0) { + //err=true; + //} + break; + + case RDCart::ConditionallyValid: + if((!q->value(13).isNull())&& + (q->value(13).toDateTime()value(5).toUInt()>0) { + l->setText(3,q->value(4).toDateTime().toString("M/d/yy")); + } + else { + l->setText(3,tr("Never")); + } + l->setText(4,q->value(5).toString()); + QString user=q->value(8).toString()+"@"; + if(q->value(8).toString().isEmpty()) { + user=""; + } + if(q->value(9).toString().isEmpty()) { + l->setText(5,"["+tr("unknown")+"]"); + } + else { + l->setText(5,user+q->value(9).toString()); + } + if(!q->value(6).toDateTime().isNull()) { + l->setText(6,q->value(7).toString()+" - "+ + q->value(6).toDateTime().toString("M/d/yy hh:mm:ss")); + } + l->setText(7,q->value(10).toString()); + if(!q->value(14).toDateTime().isNull()) { + l->setText(8,q->value(14).toDateTime().toString("M/d/yyyy hh:mm:ss")); + } + else { + l->setText(8,tr("None")); + } + if(!q->value(15).toDateTime().isNull()) { + l->setText(9,q->value(15).toDateTime().toString("M/d/yyyy hh:mm:ss")); + } + else { + l->setText(9,tr("None")); + } + if(!q->value(17).isNull()) { + l->setText(10,q->value(16).toTime().toString("hh:mm:ss")); + l->setText(11,q->value(17).toTime().toString("hh:mm:ss")); + } + else { + l->setText(10,tr("None")); + l->setText(11,tr("None")); + } + l->setText(12,q->value(11).toString()); + if(q->value(25).toString().isEmpty()) { + l->setText(13,"["+tr("not available")+"]"); + } + else { + l->setText(13,q->value(25).toString()); + } + total_length+=q->value(3).toUInt(); + pass++; + } + if(q->size()>0) { + rdcart_average_length=total_length/q->size(); + } + else { + rdcart_average_length=0; + } + delete q; + if(((l=(RDListViewItem *)rdcart_cut_list->firstChild())!=NULL)&& + ((!err)||rdcart_select_cut)) { + rdcart_cut_list->setSelected(l,true); + rdcart_select_cut=false; + } + */ + + + + + /* + QList texts; + QList icons; + // Log Name + texts.push_back(q->value(0)); + if((q->value(7).toInt()==q->value(8).toInt())&& + ((q->value(9).toInt()==0)||(q->value(10).toString()=="Y"))&& + ((q->value(11).toInt()==0)||(q->value(12).toString()=="Y"))) { + icons.push_back(d_log_icons->listIcon(RDLogIcons::GreenCheck)); + } + else { + icons.push_back(d_log_icons->listIcon(RDLogIcons::RedX)); + } + + // Description + texts.push_back(q->value(1)); + icons.push_back(QVariant()); + + // Service + texts.push_back(q->value(2)); + icons.push_back(QVariant()); + + // Music State + texts.push_back(QString()); + if(q->value(9).toInt()==0) { + icons.push_back(d_log_icons->listIcon(RDLogIcons::WhiteBall)); + } + else { + if(q->value(10).toString()=="Y") { + icons.push_back(d_log_icons->listIcon(RDLogIcons::GreenBall)); + } + else { + icons.push_back(d_log_icons->listIcon(RDLogIcons::RedBall)); + } + } + + // Traffic State + texts.push_back(QString()); + if(q->value(11).toInt()==0) { + icons.push_back(d_log_icons->listIcon(RDLogIcons::WhiteBall)); + } + else { + if(q->value(12).toString()=="Y") { + icons.push_back(d_log_icons->listIcon(RDLogIcons::GreenBall)); + } + else { + icons.push_back(d_log_icons->listIcon(RDLogIcons::RedBall)); + } + } + + // Tracks + texts.push_back(QString().sprintf("%d / %d", + q->value(7).toInt(), + q->value(8).toInt())); + if(q->value(8).toInt()==0) { + icons.push_back(d_log_icons->listIcon(RDLogIcons::WhiteBall)); + } + else { + if(q->value(8).toInt()==q->value(7).toInt()) { + icons.push_back(d_log_icons->listIcon(RDLogIcons::GreenBall)); + } + else { + icons.push_back(d_log_icons->listIcon(RDLogIcons::RedBall)); + } + } + + // Start Date + if(q->value(3).toDate().isNull()) { + texts.push_back(tr("Always")); + } + else { + texts.push_back(q->value(3).toDate().toString("MM/dd/yyyy")); + } + icons.push_back(QVariant()); + + // End Date + if(q->value(4).toDate().isNull()) { + texts.push_back(tr("Always")); + } + else { + texts.push_back(q->value(4).toDate().toString("MM/dd/yyyy")); + } + icons.push_back(QVariant()); + + // Auto Refresh + texts.push_back(q->value(15)); + icons.push_back(QVariant()); + + // Origin + texts.push_back(q->value(5).toString()+QString(" - ")+ + q->value(6).toDateTime().toString("MM/dd/yyyy - hh:mm:ss")); + icons.push_back(QVariant()); + + // Last Linked + texts.push_back(q->value(13).toDateTime(). + toString("MM/dd/yyyy - hh:mm:ss")); + icons.push_back(QVariant()); + + // Last Modified + texts.push_back(q->value(14).toDateTime(). + toString("MM/dd/yyyy - hh:mm:ss")); + icons.push_back(QVariant()); + + d_texts[row]=texts; + d_icons[row]=icons; + */ +} + + +QString RDCutListModel::sqlFields() const +{ + QString sql; + + sql=QString("select ")+ + "PLAY_ORDER,"+ // 00 + "WEIGHT,"+ // 01 + "DESCRIPTION,"+ // 02 + "LENGTH,"+ // 03 + "LAST_PLAY_DATETIME,"+ // 04 + "PLAY_COUNTER,"+ // 05 + "ORIGIN_DATETIME,"+ // 06 + "ORIGIN_NAME,"+ // 07 + "ORIGIN_LOGIN_NAME,"+ // 08 + "SOURCE_HOSTNAME,"+ // 09 + "OUTCUE,"+ // 10 + "CUT_NAME,"+ // 11 + "LENGTH,"+ // 12 offsets begin here + "EVERGREEN,"+ // 13 + "START_DATETIME,"+ // 14 + "END_DATETIME,"+ // 15 + "START_DAYPART,"+ // 16 + "END_DAYPART,"+ // 17 + "MON,"+ // 18 + "TUE,"+ // 19 + "WED,"+ // 20 + "THU,"+ // 21 + "FRI,"+ // 22 + "SAT,"+ // 23 + "SUN,"+ // 24 + "SHA1_HASH "+ // 25 + "from CUTS "; + + return sql; +} + + +RDCart::Validity RDCutListModel::ValidateCut(RDSqlQuery *q,unsigned offset, + RDCart::Validity prev_validity, + const QDateTime &datetime) +{ + if(prev_validity==RDCart::AlwaysValid) { + return RDCart::AlwaysValid; + } + if(q->value(offset).toInt()==0) { // Length + return prev_validity; + } + if(q->value(offset+1).toString()=="Y") { // Evergreen + return RDCart::EvergreenValid; + } + if(q->value(offset+5+datetime.date().dayOfWeek()).toString()!="Y") { + return prev_validity; + } + if(!q->value(offset+2).isNull()) { // Start DateTime + if(q->value(offset+2).toDateTime()>datetime) { + return RDCart::FutureValid; + } + } + if(!q->value(offset+3).isNull()) { // End DateTime + if(q->value(offset+3).toDateTime()value(offset+4).isNull()) { // Start Daypart + if(q->value(offset+4).toTime()>datetime.time()) { + return prev_validity; + } + } + if(!q->value(offset+5).isNull()) { // End Daypart + if(q->value(offset+5).toTime() +// +// 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 +// published by the Free Software Foundation. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public +// License along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +// + +#ifndef RDCUTLISTMODEL_H +#define RDCUTLISTMODEL_H + +#include +#include +#include +#include +#include + +#include +#include +#include + +class RDCutListModel : public QAbstractTableModel +{ + Q_OBJECT + public: + RDCutListModel(bool use_weighting,QObject *parent=0); + QPalette palette(); + void setPalette(const QPalette &pal); + void setFont(const QFont &font); + int columnCount(const QModelIndex &parent=QModelIndex()) const; + int rowCount(const QModelIndex &parent=QModelIndex()) const; + QVariant headerData(int section,Qt::Orientation orient, + int role=Qt::DisplayRole) const; + QVariant data(const QModelIndex &index,int role=Qt::DisplayRole) const; + QString cutName(int row) const; + int addCut(const QString &name); + void removeCut(int row); + void removeCut(const QString &cutname); + void refresh(int row); + void refresh(const QString &cutname); + unsigned cartNumber() const; + + public slots: + void setCartNumber(unsigned cartnum); + void processNotification(RDNotification *notify); + + protected: + void updateRow(int row,RDSqlQuery *q); + QString sqlFields() const; + + private: + RDCart::Validity ValidateCut(RDSqlQuery *q,unsigned offset, + RDCart::Validity prev_validity, + const QDateTime &datetime); + QPalette d_palette; + QFont d_font; + QList d_headers; + QList d_alignments; + QList > d_texts; + QList d_colors; + unsigned d_cart_number; + bool d_use_weighting; +}; + + +#endif // RDCUTLISTMODEL_H diff --git a/rdlibrary/audio_cart.cpp b/rdlibrary/audio_cart.cpp index cfc76a25..64f8c81a 100644 --- a/rdlibrary/audio_cart.cpp +++ b/rdlibrary/audio_cart.cpp @@ -47,6 +47,10 @@ AudioCart::AudioCart(AudioControls *controls,RDCart *cart,QString *path, rdcart_profile_rip=profile_rip; rdcart_modification_allowed=rda->user()->editAudio()&&cart->owner().isEmpty(); + + rdcart_use_weighting=true; + + QColor system_button_text_color = palette().active().buttonText(); // @@ -97,6 +101,24 @@ AudioCart::AudioCart(AudioControls *controls,RDCart *cart,QString *path, // // Cart Cut List // + rdcart_cut_view=new QTableView(this); + rdcart_cut_view->setGeometry(100,0,430,sizeHint().height()); + rdcart_cut_view->setSelectionBehavior(QAbstractItemView::SelectRows); + rdcart_cut_view->setSelectionMode(QAbstractItemView::SingleSelection); + rdcart_cut_view->setShowGrid(false); + rdcart_cut_view->setSortingEnabled(false); + rdcart_cut_view->setWordWrap(false); + rdcart_cut_model=NULL; + connect(rdcart_cut_view,SIGNAL(doubleClicked(const QModelIndex &)), + this,SLOT(doubleClickedData(const QModelIndex &))); + + /* + connect(list_filter_widget,SIGNAL(filterChanged(const QString &)), + rdcart_cut_model,SLOT(setFilterSql(const QString &))); + connect(rdcart_cut_model,SIGNAL(modelReset()),this,SLOT(modelResetData())); + */ + + /* rdcart_cut_list=new RDListView(this); rdcart_cut_list->setGeometry(100,0,430,sizeHint().height()); rdcart_cut_list->setAllColumnsShowFocus(true); @@ -155,7 +177,7 @@ AudioCart::AudioCart(AudioControls *controls,RDCart *cart,QString *path, rdcart_cut_list->setColumnAlignment(13,Qt::AlignLeft); RefreshList(); - + */ // // Record Cut Button // @@ -253,6 +275,25 @@ QSizePolicy AudioCart::sizePolicy() const void AudioCart::changeCutScheduling(int sched) { + RDCutListModel *old_model=rdcart_cut_model; + + rdcart_cut_model=new RDCutListModel(sched,this); + rdcart_cut_model->setFont(defaultFont()); + rdcart_cut_model->setPalette(palette()); + rdcart_cut_model->setCartNumber(rdcart_cart->number()); + rdcart_cut_view->setModel(rdcart_cut_model); + rdcart_cut_view->resizeColumnsToContents(); + delete old_model; + + if(sched) { + rdcart_cut_view->sortByColumn(12,Qt::AscendingOrder); + } + else { + rdcart_cut_view->sortByColumn(0,Qt::AscendingOrder); + } + + rdcart_use_weighting=sched!=0; + /* QString sql; RDSqlQuery *q; @@ -274,7 +315,7 @@ void AudioCart::changeCutScheduling(int sched) rdcart_cut_list->setColumnText(0,tr("Ord")); rdcart_cut_list->setSortColumn(0); } - rdcart_use_weighting=sched!=0; + */ } @@ -289,36 +330,36 @@ void AudioCart::addCutData() tr("This cart cannot contain any additional cuts!")); return; } - rdcart_cut_list->clearSelection(); - RDListViewItem *item=new RDListViewItem(rdcart_cut_list); - item->setText(12,next_name); - RefreshLine(item); - rdcart_cut_list->setSelected(item,true); - rdcart_cut_list->ensureItemVisible(item); + rdcart_cut_view->clearSelection(); + + int row=rdcart_cut_model->addCut(next_name); + rdcart_cut_view->selectRow(row); + rdcart_cut_view->scrollTo(rdcart_cut_model->index(row,0)); disk_gauge->update(); + emit cartDataChanged(); } void AudioCart::deleteCutData() { - QString filename; - QString str; - std::vector cutnames; - RDListViewItem *item=NULL; - - item=SelectedCuts(&cutnames); - if(cutnames.size()==0) { + QModelIndexList rows=rdcart_cut_view->selectionModel()->selectedRows(); + if(rows.size()==0) { return; } + QStringList cutnames; + for(int i=0;icutName(rows.at(i).row())); + } + // // Prompt for Deletion // if(cutnames.size()==1) { switch(QMessageBox::question(this,"RDLibrary - "+tr("Delete Cut"), tr("Are you sure you want to delete")+" \""+ - item->text(1)+"\"?", + rdcart_cut_model->data(rdcart_cut_model->index(rows.first().row(),1)).toString()+"\"?", QMessageBox::Yes,QMessageBox::No)) { case QMessageBox::No: @@ -332,7 +373,7 @@ void AudioCart::deleteCutData() else { if(QMessageBox::question(this,"RDLibrary - "+tr("Delete Cuts"), tr("Are you sure you want to delete")+ - QString().sprintf(" %lu ",cutnames.size())+ + QString().sprintf(" %d ",cutnames.size())+ tr("cuts")+"?",QMessageBox::Yes, QMessageBox::No)!=QMessageBox::Yes) { return; @@ -342,9 +383,9 @@ void AudioCart::deleteCutData() // // Check for RDCatch Events // - for(unsigned i=0;ifirst()) { if(QMessageBox::warning(this,tr("RDCatch Event Exists"), @@ -360,7 +401,7 @@ void AudioCart::deleteCutData() // Check Clipboard // if(cut_clipboard!=NULL) { - for(unsigned i=0;icutName()) { if(QMessageBox::question(this,tr("Empty Clipboard"), tr("Deleting this cut will also empty the clipboard.\nDo you still want to proceed?"),QMessageBox::Yes,QMessageBox::No)== @@ -378,71 +419,89 @@ void AudioCart::deleteCutData() // // Delete Cuts // - for(unsigned i=0;iremoveCut(rda->station(),rda->user(),cutnames[i], + for(int i=0;iremoveCut(rda->station(),rda->user(),cutnames.at(i), rda->config())) { QMessageBox::warning(this,tr("RDLibrary"), tr("Unable to delete audio for cut")+ - QString().sprintf(" %d!",RDCut::cutNumber(cutnames[i]))); + QString().sprintf(" %d!",RDCut::cutNumber(cutnames.at(i)))); return; } + rdcart_cut_model->removeCut(cutnames.at(i)); } - // UpdateCutCount(); - rdcart_cart->updateLength(rdcart_controls->enforce_length_box->isChecked(), QTime().msecsTo(rdcart_controls-> forced_length_edit->time())); rdcart_cart->resetRotation(); disk_gauge->update(); - // - // Update List - // - item=(RDListViewItem *)rdcart_cut_list->firstChild(); - while(item!=NULL) { - RDListViewItem *del=NULL; - if(item->isSelected()) { - del=item; - } - item=(RDListViewItem *)item->nextSibling(); - if(del!=NULL) { - delete del; - } - } - emit cartDataChanged(); } void AudioCart::copyCutData() { - std::vector cutnames; - RDListViewItem *item=NULL; + int row; - if((item=SelectedCuts(&cutnames))==NULL) { - QMessageBox::information(this,"RDLibrary - "+tr("Copy Cut"), - tr("No data copied - you must select a single cut!")); + if((row=SingleSelectedLine())<0) { return; } if(cut_clipboard!=NULL) { delete cut_clipboard; } - cut_clipboard=new RDCut(item->text(12)); + cut_clipboard=new RDCut(rdcart_cut_model->cutName(row)); paste_cut_button->setEnabled(rdcart_modification_allowed); } +void AudioCart::pasteCutData() +{ + int row; + + if((row=SingleSelectedLine())<0) { + return; + } + if(!cut_clipboard->exists()) { + QMessageBox::information(this,tr("Clipboard Empty"), + tr("Clipboard is currently empty.")); + delete cut_clipboard; + cut_clipboard=NULL; + paste_cut_button->setDisabled(true); + return; + } + if(QFile::exists(RDCut::pathName(rdcart_cut_model->cutName(row)))) { + if(QMessageBox::warning(this,tr("Audio Exists"), + tr("This will overwrite the existing recording.\nDo you want to proceed?"), + QMessageBox::Yes, + QMessageBox::No)==QMessageBox::No) { + return; + } + } + cut_clipboard->connect(this,SLOT(copyProgressData(const QVariant &))); + cut_clipboard->copyTo(rda->station(),rda->user(), + rdcart_cut_model->cutName(row),rda->config()); + cut_clipboard->disconnect(this,SLOT(copyProgressData(const QVariant &))); + rdcart_cart->updateLength(rdcart_controls->enforce_length_box->isChecked(), + QTime().msecsTo(rdcart_controls-> + forced_length_edit->time())); + rdcart_cart->resetRotation(); + rdcart_cut_model->refresh(row); + disk_gauge->update(); + + emit cartDataChanged(); +} + + void AudioCart::extEditorCutData() { - std::vector cutnames; - RDListViewItem *item=NULL; + int row; - if((item=SelectedCuts(&cutnames))==NULL) { + if((row=SingleSelectedLine())<0) { return; } QString cmd=rda->station()->editorPath(); - cmd.replace("%f",RDCut::pathName(rdcart_cut_list->currentItem()->text(12))); + cmd.replace("%f",RDCut::pathName(rdcart_cut_model->cutName(row))); // FIXME: other replace commands to match: lib/rdcart_dialog.cpp editorData() // These substitions should be documented (maybe a text file), // ex: %f = cart_cut filename @@ -454,53 +513,15 @@ void AudioCart::extEditorCutData() } } -void AudioCart::pasteCutData() -{ - std::vector cutnames; - RDListViewItem *item=NULL; - - if((item=SelectedCuts(&cutnames))==NULL) { - QMessageBox::information(this,"RDLibrary - "+tr("Paste Cut"), - tr("You must select a single cut!")); - return; - } - if(!cut_clipboard->exists()) { - QMessageBox::information(this,tr("Clipboard Empty"), - tr("Clipboard is currently empty.")); - delete cut_clipboard; - cut_clipboard=NULL; - paste_cut_button->setDisabled(true); - return; - } - if(QFile::exists(RDCut::pathName(item->text(12)))) { - if(QMessageBox::warning(this,tr("Audio Exists"), - tr("This will overwrite the existing recording.\nDo you want to proceed?"), - QMessageBox::Yes, - QMessageBox::No)==QMessageBox::No) { - return; - } - } - cut_clipboard->connect(this,SLOT(copyProgressData(const QVariant &))); - cut_clipboard->copyTo(rda->station(),rda->user(),item->text(12),rda->config()); - cut_clipboard->disconnect(this,SLOT(copyProgressData(const QVariant &))); - rdcart_cart->updateLength(rdcart_controls->enforce_length_box->isChecked(), - QTime().msecsTo(rdcart_controls-> - forced_length_edit->time())); - rdcart_cart->resetRotation(); - disk_gauge->update(); - emit cartDataChanged(); - RefreshList(); -} - void AudioCart::editCutData() { - RDListViewItem *item=NULL; - std::vector cutnames; - if((item=SelectedCuts(&cutnames))==NULL) { + int row; + + if((row=SingleSelectedLine())<0) { return; } - QString cutname=item->text(12); + QString cutname=rdcart_cut_model->cutName(row); if(!RDAudioExists(cutname)) { QMessageBox::information(this,"RDLibrary", tr("No audio is present in the cut!")); @@ -515,7 +536,7 @@ void AudioCart::editCutData() rdcart_cart->updateLength(rdcart_controls->enforce_length_box->isChecked(), QTime().msecsTo(rdcart_controls-> forced_length_edit->time())); - RefreshLine(item); + rdcart_cut_model->refresh(row); } delete edit; } @@ -523,15 +544,16 @@ void AudioCart::editCutData() void AudioCart::recordCutData() { - RDListViewItem *item=NULL; - std::vector cutnames; - if((item=SelectedCuts(&cutnames))==NULL) { + int row; + + if((row=SingleSelectedLine())<0) { return; } - QString cutname=item->text(12); + QString cutname=rdcart_cut_model->cutName(row); RecordCut *cut=new RecordCut(rdcart_cart,cutname,rdcart_use_weighting,this); cut->exec(); delete cut; + rdcart_cut_model->refresh(row); if(cut_clipboard==NULL) { paste_cut_button->setDisabled(true); } @@ -540,7 +562,12 @@ void AudioCart::recordCutData() rdcart_cart->updateLength(rdcart_controls->enforce_length_box->isChecked(), QTime().msecsTo(rdcart_controls-> forced_length_edit->time())); - RefreshLine(item); +} + + +void AudioCart::doubleClickedData(const QModelIndex &index) +{ + recordCutData(); } @@ -552,13 +579,13 @@ void AudioCart::ripCutData() QString artist; QString album; QString label; + int row; - RDListViewItem *item=NULL; - std::vector cutnames; - if((item=SelectedCuts(&cutnames))==NULL) { + if((row=SingleSelectedLine())<0) { return; } - cutname=item->text(12); + + cutname=rdcart_cut_model->cutName(row); RDDiscRecord *rec=new RDDiscRecord(); CdRipper *ripper=new CdRipper(cutname,rec,rda->libraryConf(),rdcart_profile_rip); if((track=ripper->exec(&title,&artist,&album,&label))>=0) { @@ -586,7 +613,7 @@ void AudioCart::ripCutData() rdcart_cart->updateLength(rdcart_controls->enforce_length_box->isChecked(), QTime().msecsTo(rdcart_controls-> forced_length_edit->time())); - RefreshLine(item); + rdcart_cut_model->refresh(row); } @@ -594,12 +621,14 @@ void AudioCart::importCutData() { QString cutname; RDWaveData wavedata; - RDListViewItem *item=NULL; std::vector cutnames; - if((item=SelectedCuts(&cutnames))==NULL) { + int row; + + if((row=SingleSelectedLine())<0) { return; } - cutname=item->text(12); + + cutname=rdcart_cut_model->cutName(row); RDSettings settings; rda->libraryConf()->getSettings(&settings); RDImportAudio *import=new RDImportAudio(cutname,rdcart_import_path, @@ -661,7 +690,7 @@ void AudioCart::importCutData() rdcart_cart->updateLength(rdcart_controls->enforce_length_box->isChecked(), QTime().msecsTo(rdcart_controls-> forced_length_edit->time())); - RefreshLine(item); + rdcart_cut_model->refresh(row); } @@ -678,8 +707,18 @@ void AudioCart::copyProgressData(const QVariant &step) } +int AudioCart::SingleSelectedLine() const +{ + if(rdcart_cut_view->selectionModel()->selectedRows().size()!=1) { + return -1; + } + return rdcart_cut_view->selectionModel()->selectedRows().first().row(); +} + + RDListViewItem *AudioCart::SelectedCuts(std::vector *cutnames) { + /* RDListViewItem *ret=NULL; RDListViewItem *item=(RDListViewItem *)rdcart_cut_list->firstChild(); while(item!=NULL) { @@ -693,11 +732,14 @@ RDListViewItem *AudioCart::SelectedCuts(std::vector *cutnames) return ret; } return NULL; + */ + return NULL; } void AudioCart::RefreshList() { + /* RDSqlQuery *q; QString sql; RDListViewItem *l; @@ -826,6 +868,7 @@ void AudioCart::RefreshList() rdcart_cut_list->setSelected(l,true); rdcart_select_cut=false; } + */ } diff --git a/rdlibrary/audio_cart.h b/rdlibrary/audio_cart.h index 28a25f48..7a3c1ede 100644 --- a/rdlibrary/audio_cart.h +++ b/rdlibrary/audio_cart.h @@ -2,7 +2,7 @@ // // The audio cart editor for RDLibrary. // -// (C) Copyright 2002-2019 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,10 +21,12 @@ #ifndef AUDIO_CART_H #define AUDIO_CART_H -#include +#include +#include #include -#include +//#include +#include #include #include "audio_controls.h" @@ -51,6 +53,7 @@ class AudioCart : public RDWidget void pasteCutData(); void editCutData(); void recordCutData(); + void doubleClickedData(const QModelIndex &index); void ripCutData(); void importCutData(); @@ -67,12 +70,15 @@ class AudioCart : public RDWidget void audioChanged(); private: + int SingleSelectedLine() const; RDListViewItem *SelectedCuts(std::vector *cutnames); void RefreshList(); void RefreshLine(RDListViewItem *item); unsigned NextCut(); RDCart *rdcart_cart; - RDListView *rdcart_cut_list; + // RDListView *rdcart_cut_list; + QTableView *rdcart_cut_view; + RDCutListModel *rdcart_cut_model; unsigned rdcart_average_length; QString *rdcart_import_path; bool rdcart_select_cut; diff --git a/rdlibrary/rdlibrary_cs.ts b/rdlibrary/rdlibrary_cs.ts index 89629254..d46a1733 100644 --- a/rdlibrary/rdlibrary_cs.ts +++ b/rdlibrary/rdlibrary_cs.ts @@ -109,15 +109,15 @@ značky Are you sure you want to delete - Jste si jistý, že chcete smazat + Jste si jistý, že chcete smazat Delete Cut - Smazat záběr + Smazat záběr RDCatch Event Exists - Událost RDCatch existuje + Událost RDCatch existuje This cut is used in one or more RDCatch events! @@ -127,12 +127,12 @@ Přesto smazat? Empty Clipboard - Vyprázdnit schránku + Vyprázdnit schránku Deleting this cut will also empty the clipboard. Do you still want to proceed? - Smazání tohoto záběru vyprázdní také schránku. + Smazání tohoto záběru vyprázdní také schránku. Přesto smazat? @@ -171,7 +171,7 @@ Přesto pokračovat? RDLibrary - RDLibrary + RDLibrary Unable to delete audio! @@ -182,13 +182,29 @@ Přesto pokračovat? V záběru není přítomen žádný zvuk! - This cart cannot contain any additional cuts! + not available + + unknown + + + + Last Played + Naposledy přehráno + + + # of Plays + # přehrání + RDLibrary - Edit Cart + + This cart cannot contain any additional cuts! + + Delete Cuts @@ -206,90 +222,6 @@ Do you still want to delete? Unable to delete audio for cut - - Copy Cut - - - - No data copied - you must select a single cut! - - - - Paste Cut - - - - You must select a single cut! - - - - SHA1 - - - - not available - - - - unknown - - - - Wt - - - - Description - - - - Length - - - - Last Played - Naposledy přehráno - - - # of Plays - # přehrání - - - Source - - - - Ingest - - - - Outcue - - - - Start Date - - - - End Date - - - - Daypart Start - - - - Daypart End - - - - Name - - - - Ord - - CdRipper diff --git a/rdlibrary/rdlibrary_de.ts b/rdlibrary/rdlibrary_de.ts index 1fa1d3cc..1d49ec27 100644 --- a/rdlibrary/rdlibrary_de.ts +++ b/rdlibrary/rdlibrary_de.ts @@ -109,15 +109,15 @@ editieren Are you sure you want to delete - Sind sie sicher dies löschen zu wollen + Sind sie sicher dies löschen zu wollen Delete Cut - Cut löschen + Cut löschen RDCatch Event Exists - RDCatch Event existiert nicht + RDCatch Event existiert nicht This cut is used in one or more RDCatch events! @@ -127,12 +127,12 @@ verwendet! Trotzdem löschen? Empty Clipboard - Zwischenablage leeren + Zwischenablage leeren Deleting this cut will also empty the clipboard. Do you still want to proceed? - Diesen Cut zu löschen wird auch die Zwischenablage + Diesen Cut zu löschen wird auch die Zwischenablage leeren. Trotzdem fortfahren? @@ -171,7 +171,7 @@ Trotzdem fortfahren? RDLibrary - RDLibrary + RDLibrary Unable to delete audio! @@ -182,13 +182,29 @@ Trotzdem fortfahren? - This cart cannot contain any additional cuts! + not available + + unknown + + + + Last Played + ZUL. GESPIELT + + + # of Plays + # GESPIELT + RDLibrary - Edit Cart + + This cart cannot contain any additional cuts! + + Delete Cuts @@ -206,90 +222,6 @@ Do you still want to delete? Unable to delete audio for cut - - Copy Cut - - - - No data copied - you must select a single cut! - - - - Paste Cut - - - - You must select a single cut! - - - - SHA1 - - - - not available - - - - unknown - - - - Wt - - - - Description - - - - Length - - - - Last Played - ZUL. GESPIELT - - - # of Plays - # GESPIELT - - - Source - - - - Ingest - - - - Outcue - - - - Start Date - - - - End Date - - - - Daypart Start - - - - Daypart End - - - - Name - - - - Ord - - CdRipper diff --git a/rdlibrary/rdlibrary_es.ts b/rdlibrary/rdlibrary_es.ts index a7f013a4..0d6db372 100644 --- a/rdlibrary/rdlibrary_es.ts +++ b/rdlibrary/rdlibrary_es.ts @@ -85,20 +85,20 @@ Are you sure you want to delete - ¿Desea eliminar + ¿Desea eliminar Delete Cut - Eliminar audio + Eliminar audio Empty Clipboard - Vaciar portapapeles + Vaciar portapapeles Deleting this cut will also empty the clipboard. Do you still want to proceed? - Eliminando este audio también dejará el portapapeles vacío. + Eliminando este audio también dejará el portapapeles vacío. ¿Desea continuar la eliminación? @@ -141,7 +141,7 @@ Do you still want to delete it? RDCatch Event Exists - Ya existe un evento RDCatch + Ya existe un evento RDCatch Audio Exists @@ -171,7 +171,7 @@ Audio RDLibrary - RDLibrary + RDLibrary Unable to delete audio! @@ -182,13 +182,29 @@ Audio ¡No hay audios en este cut! - This cart cannot contain any additional cuts! + not available + + unknown + + + + Last Played + Últ. Reprod + + + # of Plays + # de reprod + RDLibrary - Edit Cart + + This cart cannot contain any additional cuts! + + Delete Cuts @@ -206,90 +222,6 @@ Do you still want to delete? Unable to delete audio for cut - - Copy Cut - - - - No data copied - you must select a single cut! - - - - Paste Cut - - - - You must select a single cut! - - - - SHA1 - - - - not available - - - - unknown - - - - Wt - - - - Description - - - - Length - - - - Last Played - Últ. Reprod - - - # of Plays - # de reprod - - - Source - - - - Ingest - - - - Outcue - - - - Start Date - - - - End Date - - - - Daypart Start - - - - Daypart End - - - - Name - - - - Ord - - CdRipper diff --git a/rdlibrary/rdlibrary_fr.ts b/rdlibrary/rdlibrary_fr.ts index 9d149b04..c334a1b5 100644 --- a/rdlibrary/rdlibrary_fr.ts +++ b/rdlibrary/rdlibrary_fr.ts @@ -53,27 +53,6 @@ Markers Rip CD - - Are you sure you want to delete - - - - Delete Cut - - - - RDCatch Event Exists - - - - Empty Clipboard - - - - Deleting this cut will also empty the clipboard. -Do you still want to proceed? - - Clipboard Empty @@ -103,59 +82,10 @@ Do you want to proceed? None - - RDLibrary - - No audio is present in the cut! - - This cart cannot contain any additional cuts! - - - - RDLibrary - Edit Cart - - - - Delete Cuts - - - - cuts - - - - One or more cuts are used in one or more RDCatch events! -Do you still want to delete? - - - - Unable to delete audio for cut - - - - Copy Cut - - - - No data copied - you must select a single cut! - - - - Paste Cut - - - - You must select a single cut! - - - - SHA1 - - not available @@ -165,59 +95,53 @@ Do you still want to delete? - Wt + RDLibrary - Edit Cart - Description + This cart cannot contain any additional cuts! - Length + Delete Cuts - Last Played + Are you sure you want to delete - # of Plays + cuts - Source + Delete Cut - Ingest + RDCatch Event Exists - Outcue + One or more cuts are used in one or more RDCatch events! +Do you still want to delete? - Start Date + Empty Clipboard - End Date + Deleting this cut will also empty the clipboard. +Do you still want to proceed? - Daypart Start + RDLibrary - Daypart End - - - - Name - - - - Ord + Unable to delete audio for cut diff --git a/rdlibrary/rdlibrary_nb.ts b/rdlibrary/rdlibrary_nb.ts index 8b4915bf..7e2d3c53 100644 --- a/rdlibrary/rdlibrary_nb.ts +++ b/rdlibrary/rdlibrary_nb.ts @@ -108,15 +108,15 @@ markørar Are you sure you want to delete - Er du sikker på at du vil sletta + Er du sikker på at du vil sletta Delete Cut - Slett kutt + Slett kutt RDCatch Event Exists - RDCatch-hending eksisterer + RDCatch-hending eksisterer This cut is used in one or more RDCatch events! @@ -126,12 +126,12 @@ Er du sikker på at du vil sletta det? Empty Clipboard - Tøm utklyppstavla + Tøm utklyppstavla Deleting this cut will also empty the clipboard. Do you still want to proceed? - Viss du slettar dette kuttet, vil du òg tømma utklyppstavla. + Viss du slettar dette kuttet, vil du òg tømma utklyppstavla. Vil du halda fram? @@ -168,22 +168,34 @@ Vil du halda fram? 1 Cut 1 kutt - - RDLibrary - - No audio is present in the cut! - This cart cannot contain any additional cuts! + not available + + unknown + + + + Last Played + Sist spelt + + + # of Plays + Spelt gonger + RDLibrary - Edit Cart + + This cart cannot contain any additional cuts! + + Delete Cuts @@ -197,94 +209,14 @@ Vil du halda fram? Do you still want to delete? + + RDLibrary + + Unable to delete audio for cut - - Copy Cut - - - - No data copied - you must select a single cut! - - - - Paste Cut - - - - You must select a single cut! - - - - SHA1 - - - - not available - - - - unknown - - - - Wt - - - - Description - - - - Length - - - - Last Played - Sist spelt - - - # of Plays - Spelt gonger - - - Source - - - - Ingest - - - - Outcue - - - - Start Date - - - - End Date - - - - Daypart Start - - - - Daypart End - - - - Name - - - - Ord - - CdRipper diff --git a/rdlibrary/rdlibrary_nn.ts b/rdlibrary/rdlibrary_nn.ts index 8b4915bf..7e2d3c53 100644 --- a/rdlibrary/rdlibrary_nn.ts +++ b/rdlibrary/rdlibrary_nn.ts @@ -108,15 +108,15 @@ markørar Are you sure you want to delete - Er du sikker på at du vil sletta + Er du sikker på at du vil sletta Delete Cut - Slett kutt + Slett kutt RDCatch Event Exists - RDCatch-hending eksisterer + RDCatch-hending eksisterer This cut is used in one or more RDCatch events! @@ -126,12 +126,12 @@ Er du sikker på at du vil sletta det? Empty Clipboard - Tøm utklyppstavla + Tøm utklyppstavla Deleting this cut will also empty the clipboard. Do you still want to proceed? - Viss du slettar dette kuttet, vil du òg tømma utklyppstavla. + Viss du slettar dette kuttet, vil du òg tømma utklyppstavla. Vil du halda fram? @@ -168,22 +168,34 @@ Vil du halda fram? 1 Cut 1 kutt - - RDLibrary - - No audio is present in the cut! - This cart cannot contain any additional cuts! + not available + + unknown + + + + Last Played + Sist spelt + + + # of Plays + Spelt gonger + RDLibrary - Edit Cart + + This cart cannot contain any additional cuts! + + Delete Cuts @@ -197,94 +209,14 @@ Vil du halda fram? Do you still want to delete? + + RDLibrary + + Unable to delete audio for cut - - Copy Cut - - - - No data copied - you must select a single cut! - - - - Paste Cut - - - - You must select a single cut! - - - - SHA1 - - - - not available - - - - unknown - - - - Wt - - - - Description - - - - Length - - - - Last Played - Sist spelt - - - # of Plays - Spelt gonger - - - Source - - - - Ingest - - - - Outcue - - - - Start Date - - - - End Date - - - - Daypart Start - - - - Daypart End - - - - Name - - - - Ord - - CdRipper diff --git a/rdlibrary/rdlibrary_pt_BR.ts b/rdlibrary/rdlibrary_pt_BR.ts index b9680b24..1205202b 100644 --- a/rdlibrary/rdlibrary_pt_BR.ts +++ b/rdlibrary/rdlibrary_pt_BR.ts @@ -109,15 +109,15 @@ Marcadores Are you sure you want to delete - Tem certeza que quer deletar + Tem certeza que quer deletar Delete Cut - Deletar Conteúdo + Deletar Conteúdo RDCatch Event Exists - Evento de RDCaptura existente + Evento de RDCaptura existente This cut is used in one or more RDCatch events! @@ -127,12 +127,12 @@ Você quer deletá-lo mesmo assim? Empty Clipboard - Esvaziar Clipboard + Esvaziar Clipboard Deleting this cut will also empty the clipboard. Do you still want to proceed? - Delatar este Conteúdo também esvaziará o clipboard. + Delatar este Conteúdo também esvaziará o clipboard. Você ainda quer proceder? @@ -169,22 +169,34 @@ Você quer proceder? 1 Cut 1 Conteúdo - - RDLibrary - - No audio is present in the cut! - This cart cannot contain any additional cuts! + not available + + unknown + + + + Last Played + Última vez Executada + + + # of Plays + # Ao Ar + RDLibrary - Edit Cart + + This cart cannot contain any additional cuts! + + Delete Cuts @@ -198,94 +210,14 @@ Você quer proceder? Do you still want to delete? + + RDLibrary + + Unable to delete audio for cut - - Copy Cut - - - - No data copied - you must select a single cut! - - - - Paste Cut - - - - You must select a single cut! - - - - SHA1 - - - - not available - - - - unknown - - - - Wt - - - - Description - - - - Length - - - - Last Played - Última vez Executada - - - # of Plays - # Ao Ar - - - Source - - - - Ingest - - - - Outcue - - - - Start Date - - - - End Date - - - - Daypart Start - - - - Daypart End - - - - Name - - - - Ord - - CdRipper