// edit_log.cpp // // Edit a Rivendell Log // // (C) Copyright 2002-2019 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 #include #include #include #include #include #include "add_meta.h" #include "edit_chain.h" #include "edit_log.h" #include "edit_logline.h" #include "edit_marker.h" #include "edit_track.h" #include "globals.h" // // Icons // #include "../icons/play.xpm" #include "../icons/rml5.xpm" #include "../icons/marker.xpm" #include "../icons/chain.xpm" #include "../icons/track_cart.xpm" #include "../icons/notemarker.xpm" #include "../icons/music.xpm" #include "../icons/mic16.xpm" #include "../icons/traffic.xpm" EditLog::EditLog(QString logname,QString *filter,QString *group, QString *schedcode,vector *clipboard, vector *new_logs,QWidget *parent) : RDDialog(parent) { QString sql; RDSqlQuery *q; QStringList services_list; QColor system_mid_color = colorGroup().mid(); QColor system_button_color = palette().active().button(); edit_logname=logname; edit_filter=filter; edit_group=group; edit_schedcode=schedcode; edit_clipboard=clipboard; edit_newlogs=new_logs; edit_default_trans=RDLogLine::Play; bool adding_allowed=rda->user()->addtoLog(); bool deleting_allowed=rda->user()->removefromLog(); bool editing_allowed=rda->user()->arrangeLog(); bool saveas_allowed=rda->user()->createLog(); setWindowTitle("RDLogEdit - "+tr("Edit Log")); // // Config Data // edit_default_trans=rda->logeditConf()->defaultTransType(); edit_output_card=rda->logeditConf()->outputCard(); edit_output_port=rda->logeditConf()->outputPort(); edit_start_macro=rda->logeditConf()->startCart(); edit_end_macro=rda->logeditConf()->endCart(); // // Fix the Window Size // setMinimumWidth(RDLOGEDIT_EDITLOG_DEFAULT_WIDTH); setMinimumHeight(RDLOGEDIT_EDITLOG_DEFAULT_HEIGHT); // // Create Icons // edit_playout_map=new QPixmap(play_xpm); edit_macro_map=new QPixmap(rml5_xpm); edit_marker_map=new QPixmap(marker_xpm); edit_chain_map=new QPixmap(chain_xpm); edit_track_cart_map=new QPixmap(track_cart_xpm); edit_notemarker_map=new QPixmap(notemarker_xpm); edit_music_map=new QPixmap(music_xpm); edit_mic16_map=new QPixmap(mic16_xpm); edit_traffic_map=new QPixmap(traffic_xpm); // // Dialogs // edit_render_dialog= new RenderDialog(rda->station(),rda->system(),rda->config(),this); // // Text Validator // RDTextValidator *validator=new RDTextValidator(this); // // Log Header // edit_log=new RDLog(edit_logname); // // Log Data Structures // edit_log_lock=new RDLogLock(edit_logname,rda->user(),rda->station(),this); edit_log_event=new RDLogEvent(edit_logname); edit_log_event->load(true); // // Notifications // connect(rda->ripc(),SIGNAL(notificationReceived(RDNotification *)), this,SLOT(notificationReceivedData(RDNotification *))); // // Log Name // edit_modified_label=new QLabel(this); edit_modified_label->setBackgroundColor(QColor(system_mid_color)); edit_modified_label->setAlignment(Qt::AlignCenter|Qt::AlignVCenter); edit_modified_label->setFont(progressFont()); edit_logname_label=new QLabel(logname,this); edit_logname_label->setBackgroundColor(QColor(system_mid_color)); edit_logname_label->setAlignment(Qt::AlignLeft|Qt::AlignVCenter); edit_logname_label_label=new QLabel(tr("Log Name:"),this); edit_logname_label_label->setBackgroundColor(QColor(system_mid_color)); edit_logname_label_label->setFont(labelFont()); edit_logname_label_label->setAlignment(Qt::AlignRight|Qt::AlignVCenter); // // Track Counts // edit_track_label=new QLabel(this); edit_track_label->setBackgroundColor(QColor(system_mid_color)); edit_track_label->setAlignment(Qt::AlignLeft|Qt::AlignVCenter); edit_track_label_label=new QLabel(tr("Tracks:"),this); edit_track_label_label->setBackgroundColor(QColor(system_mid_color)); edit_track_label_label->setFont(labelFont()); edit_track_label_label->setAlignment(Qt::AlignRight|Qt::AlignVCenter); // // Log Origin // edit_origin_label= new QLabel(edit_log->originUser()+QString(" - ")+ edit_log->originDatetime().toString("MM/dd/yyyy - hh:mm:ss"), this); edit_origin_label->setBackgroundColor(QColor(system_mid_color)); edit_origin_label->setAlignment(Qt::AlignLeft|Qt::AlignVCenter); edit_origin_label_label=new QLabel(tr("Origin:"),this); edit_origin_label_label->setBackgroundColor(QColor(system_mid_color)); edit_origin_label_label->setFont(labelFont()); edit_origin_label_label->setAlignment(Qt::AlignRight|Qt::AlignVCenter); // // Description // edit_description_edit=new QLineEdit(this); edit_description_edit->setValidator(validator); connect(edit_description_edit,SIGNAL(textChanged(const QString &)), this,SLOT(descriptionChangedData(const QString &))); edit_description_label= new QLabel(edit_description_edit,tr("Description:"),this); edit_description_label->setFont(labelFont()); edit_description_label->setAlignment(Qt::AlignRight|Qt::AlignVCenter); // // Purge Date // edit_purgedate_box=new QCheckBox(this); edit_purgedate_label=new QLabel(edit_purgedate_box,tr("Delete on"),this); edit_purgedate_label->setFont(labelFont()); edit_purgedate_label->setAlignment(Qt::AlignRight|Qt::AlignVCenter); edit_purgedate_edit=new Q3DateEdit(this); edit_purgedate_button=new QPushButton(tr("Select"),this); edit_purgedate_button->setFont(buttonFont()); connect(edit_purgedate_box,SIGNAL(toggled(bool)), this,SLOT(purgeDateToggledData(bool))); connect(edit_purgedate_box,SIGNAL(toggled(bool)), edit_purgedate_edit,SLOT(setEnabled(bool))); connect(edit_purgedate_box,SIGNAL(toggled(bool)), edit_purgedate_button,SLOT(setEnabled(bool))); connect(edit_purgedate_edit,SIGNAL(valueChanged(const QDate &)), this,SLOT(purgeDateChangedData(const QDate &))); connect(edit_purgedate_button,SIGNAL(clicked()), this,SLOT(selectPurgeDateData())); // // Service // edit_service_box=new QComboBox(this); edit_service_edit=new QLineEdit(this); edit_service_edit->setReadOnly(true); edit_service_label=new QLabel(edit_service_box,tr("Service:"),this); edit_service_label->setFont(labelFont()); edit_service_label->setAlignment(Qt::AlignRight|Qt::AlignVCenter); connect(edit_service_box,SIGNAL(activated(const QString &)), this,SLOT(serviceActivatedData(const QString &))); // // Auto Refresh // edit_autorefresh_box=new QComboBox(this); edit_autorefresh_box->insertItem(tr("Yes")); edit_autorefresh_box->insertItem(tr("No")); edit_autorefresh_edit=new QLineEdit(this); edit_autorefresh_edit->setReadOnly(true); edit_autorefresh_label= new QLabel(edit_autorefresh_box,tr("Enable AutoRefresh:"),this); edit_autorefresh_label->setFont(labelFont()); edit_autorefresh_label->setAlignment(Qt::AlignRight|Qt::AlignVCenter); connect(edit_autorefresh_box,SIGNAL(activated(int)), this,SLOT(autorefreshChangedData(int))); // // Start Date // edit_startdate_edit=new Q3DateEdit(this); edit_startdate_label=new QLabel(edit_startdate_edit,tr("Start Date:"),this); edit_startdate_label->setFont(labelFont()); edit_startdate_label->setAlignment(Qt::AlignRight|Qt::AlignVCenter); connect(edit_startdate_edit,SIGNAL(valueChanged(const QDate &)), this,SLOT(dateValueChangedData(const QDate &))); // // End Date // edit_enddate_edit=new Q3DateEdit(this); edit_enddate_label=new QLabel(edit_startdate_edit,tr("End Date:"),this); edit_enddate_label->setFont(labelFont()); edit_enddate_label->setAlignment(Qt::AlignRight|Qt::AlignVCenter); connect(edit_enddate_edit,SIGNAL(valueChanged(const QDate &)), this,SLOT(dateValueChangedData(const QDate &))); // // Start Date Checkbox // edit_startdate_box=new QCheckBox(this); connect(edit_startdate_box,SIGNAL(toggled(bool)), this,SLOT(startDateEnabledData(bool))); edit_startdate_box_label= new QLabel(edit_startdate_box,tr("Start Date Enabled"),this); edit_startdate_box_label->setFont(labelFont()); edit_startdate_box_label->setAlignment(Qt::AlignLeft|Qt::AlignVCenter); // // End Date Checkbox // edit_enddate_box=new QCheckBox(this); connect(edit_enddate_box,SIGNAL(toggled(bool)), this,SLOT(endDateEnabledData(bool))); edit_enddate_box_label= new QLabel(edit_enddate_box,tr("End Date Enabled"),this); edit_enddate_box_label->setFont(labelFont()); edit_enddate_box_label->setAlignment(Qt::AlignLeft|Qt::AlignVCenter); // // Time Counter Section // edit_time_groupbox=new QGroupBox(tr("Run Length"),this); edit_time_groupbox->setFont(labelFont()); // // Stop Time Counter // edit_stoptime_edit=new QLineEdit(this); edit_stoptime_label=new QLabel(edit_stoptime_edit,tr("Next Stop:"),this); edit_stoptime_label->setFont(labelFont()); edit_stoptime_label->setAlignment(Qt::AlignRight|Qt::AlignVCenter); // // End Time Counter // edit_endtime_edit=new QLineEdit(this); edit_endtime_label=new QLabel(edit_endtime_edit,tr("Log End:"),this); edit_endtime_label->setFont(labelFont()); edit_endtime_label->setAlignment(Qt::AlignRight|Qt::AlignVCenter); // // Log Event List // edit_log_list=new DropListView(this); edit_log_list->setAllColumnsShowFocus(true); edit_log_list->setSelectionMode(Q3ListView::Extended); edit_log_list->setItemMargin(5); edit_log_list->addColumn(""); edit_log_list->setColumnAlignment(0,Qt::AlignHCenter); edit_log_list->addColumn(tr("Time")); edit_log_list->setColumnAlignment(1,Qt::AlignRight); edit_log_list->addColumn(tr("Trans")); edit_log_list->setColumnAlignment(2,Qt::AlignHCenter); edit_log_list->addColumn(tr("Cart")); edit_log_list->setColumnAlignment(3,Qt::AlignHCenter); edit_log_list->addColumn(tr("Group")); edit_log_list->setColumnAlignment(4,Qt::AlignHCenter); edit_log_list->addColumn(tr("Length")); edit_log_list->setColumnAlignment(5,Qt::AlignRight); edit_log_list->addColumn(tr("Title")); edit_log_list->setColumnAlignment(6,Qt::AlignLeft); edit_log_list->addColumn(tr("Artist")); edit_log_list->setColumnAlignment(7,Qt::AlignLeft); edit_log_list->addColumn(tr("Client")); edit_log_list->setColumnAlignment(8,Qt::AlignLeft); edit_log_list->addColumn(tr("Agency")); edit_log_list->setColumnAlignment(9,Qt::AlignLeft); edit_log_list->addColumn(tr("Label")); edit_log_list->setColumnAlignment(10,Qt::AlignHCenter); edit_log_list->addColumn(tr("Source")); edit_log_list->setColumnAlignment(11,Qt::AlignHCenter); edit_log_list->addColumn(tr("Ext Data")); edit_log_list->setColumnAlignment(12,Qt::AlignHCenter); edit_log_list->addColumn(tr("Line ID")); edit_log_list->setColumnAlignment(13,Qt::AlignHCenter); edit_log_list->addColumn(tr("Count")); edit_log_list->setColumnAlignment(14,Qt::AlignHCenter); edit_log_list->setHardSortColumn(14); edit_log_list->setColumnSortType(14,RDListView::LineSort); if(editing_allowed) { connect(edit_log_list,SIGNAL(doubleClicked(Q3ListViewItem *)), this,SLOT(doubleClickData(Q3ListViewItem *))); connect(edit_log_list,SIGNAL(cartDropped(int,RDLogLine *)), this,SLOT(cartDroppedData(int,RDLogLine *))); } connect(edit_log_list,SIGNAL(clicked(Q3ListViewItem *)), this,SLOT(clickedData(Q3ListViewItem *))); connect(edit_log_list,SIGNAL(selectionChanged()), this,SLOT(selectionChangedData())); // // Insert Cart Button // edit_cart_button=new QPushButton(this); edit_cart_button->setPalette(QPalette(QColor(system_button_color),QColor(system_mid_color))); edit_cart_button->setFont(buttonFont()); edit_cart_button->setText(tr("Insert\nCart")); connect(edit_cart_button,SIGNAL(clicked()), this,SLOT(insertCartButtonData())); // // Insert Marker Button // edit_marker_button=new QPushButton(this); edit_marker_button->setPalette(QPalette(QColor(system_button_color),QColor(system_mid_color))); edit_marker_button->setFont(buttonFont()); edit_marker_button->setText(tr("Insert\nMeta")); connect(edit_marker_button,SIGNAL(clicked()), this,SLOT(insertMarkerButtonData())); // // Edit Button // edit_edit_button=new QPushButton(this); edit_edit_button->setPalette(QPalette(QColor(system_button_color),QColor(system_mid_color))); edit_edit_button->setFont(buttonFont()); edit_edit_button->setText(tr("Edit")); connect(edit_edit_button,SIGNAL(clicked()),this,SLOT(editButtonData())); // // Delete Button // edit_delete_button=new QPushButton(this); edit_delete_button->setPalette(QPalette(QColor(system_button_color),QColor(system_mid_color))); edit_delete_button->setFont(buttonFont()); edit_delete_button->setText(tr("Delete")); connect(edit_delete_button,SIGNAL(clicked()),this,SLOT(deleteButtonData())); // // Up Button // edit_up_button=new RDTransportButton(RDTransportButton::Up,this); edit_up_button->setPalette(QPalette(QColor(system_button_color),QColor(system_mid_color))); connect(edit_up_button,SIGNAL(clicked()),this,SLOT(upButtonData())); // // Down Button // edit_down_button=new RDTransportButton(RDTransportButton::Down,this); edit_down_button->setPalette(QPalette(QColor(system_button_color),QColor(system_mid_color))); connect(edit_down_button,SIGNAL(clicked()),this,SLOT(downButtonData())); // // Cut Button // edit_cut_button=new QPushButton(this); edit_cut_button->setPalette(QPalette(QColor(system_button_color),QColor(system_mid_color))); edit_cut_button->setFont(buttonFont()); edit_cut_button->setText(tr("Cut")); connect(edit_cut_button,SIGNAL(clicked()),this,SLOT(cutButtonData())); // // Copy Button // edit_copy_button=new QPushButton(this); edit_copy_button->setPalette(QPalette(QColor(system_button_color),QColor(system_mid_color))); edit_copy_button->setFont(buttonFont()); edit_copy_button->setText(tr("Copy")); connect(edit_copy_button,SIGNAL(clicked()),this,SLOT(copyButtonData())); // // Paste Button // edit_paste_button=new QPushButton(this); edit_paste_button->setPalette(QPalette(QColor(system_button_color),QColor(system_mid_color))); edit_paste_button->setFont(buttonFont()); edit_paste_button->setText(tr("Paste")); connect(edit_paste_button,SIGNAL(clicked()),this,SLOT(pasteButtonData())); // // Save Button // edit_save_button=new QPushButton(this); edit_save_button->setFont(buttonFont()); edit_save_button->setText(tr("&Save")); edit_save_button->setDisabled(true); connect(edit_save_button,SIGNAL(clicked()),this,SLOT(saveData())); // // Save As Button // edit_saveas_button=new QPushButton(this); edit_saveas_button->setFont(buttonFont()); edit_saveas_button->setText(tr("Save")+"\n"+tr("As")); connect(edit_saveas_button,SIGNAL(clicked()),this,SLOT(saveasData())); // // Render Button // edit_renderas_button=new QPushButton(this); edit_renderas_button->setFont(buttonFont()); edit_renderas_button->setText(tr("Render")); connect(edit_renderas_button,SIGNAL(clicked()),this,SLOT(renderasData())); // // Reports Button // edit_reports_button=new QPushButton(this); edit_reports_button->setFont(buttonFont()); edit_reports_button->setText(tr("&Reports")); connect(edit_reports_button,SIGNAL(clicked()),this,SLOT(reportsData())); // // Cart Player // edit_player= new RDSimplePlayer(rda->cae(),rda->ripc(),edit_output_card,edit_output_port, edit_start_macro,edit_end_macro,this); edit_player->stopButton()->setOnColor(Qt::red); // // Start Time Style // edit_timestyle_box=new QComboBox(this); edit_timestyle_box->insertItem(edit_timestyle_box->count(),tr("Estimated")); edit_timestyle_box->insertItem(edit_timestyle_box->count(),tr("Scheduled")); edit_timestyle_box->setCurrentIndex(global_start_time_style); connect(edit_timestyle_box,SIGNAL(activated(int)), this,SLOT(timestyleChangedData(int))); edit_timestyle_label= new QLabel(edit_timestyle_box,tr("Show Start Times As"),this); edit_timestyle_label->setFont(labelFont()); edit_timestyle_label->setAlignment(Qt::AlignCenter|Qt::AlignVCenter); // // Ok Button // edit_ok_button=new QPushButton(this); edit_ok_button->setDefault(true); edit_ok_button->setFont(buttonFont()); edit_ok_button->setText(tr("&OK")); connect(edit_ok_button,SIGNAL(clicked()),this,SLOT(okData())); // // Cancel Button // edit_cancel_button=new QPushButton(this); edit_cancel_button->setFont(buttonFont()); edit_cancel_button->setText(tr("&Cancel")); connect(edit_cancel_button,SIGNAL(clicked()),this,SLOT(cancelData())); // // Populate Data // edit_description_edit->setText(edit_log->description()); QDate purge_date=edit_log->purgeDate(); if(purge_date.isNull()) { edit_purgedate_edit->setDate(QDate::currentDate().addMonths(1)); edit_purgedate_edit->setDisabled(true); edit_purgedate_button->setDisabled(true); } else { edit_purgedate_box->setChecked(true); edit_purgedate_edit->setDate(purge_date); } sql=QString("select NAME from SERVICES"); q=new RDSqlQuery(sql); while(q->next()) { services_list.append( q->value(0).toString() ); } delete q; int n=-1; int ncounter=0; QString service=edit_log->service(); for ( QStringList::Iterator it = services_list.begin(); it != services_list.end(); ++it ) { edit_service_box->insertItem(*it); if(*it==service) { n=ncounter; edit_service_edit->setText(*it); } ncounter++; } if(n>=0) { edit_service_box->setCurrentItem(n); } if(edit_log->autoRefresh()) { edit_autorefresh_box->setCurrentItem(0); edit_autorefresh_edit->setText(tr("Yes")); } else { edit_autorefresh_box->setCurrentItem(1); edit_autorefresh_edit->setText(tr("No")); } if(!edit_log->startDate().isNull()) { edit_startdate_box->setChecked(true); edit_startdate_edit->setDate(edit_log->startDate()); } else { edit_startdate_edit->setDisabled(true); edit_startdate_label->setDisabled(true); edit_startdate_box->setChecked(false); } if(!edit_log->endDate().isNull()) { edit_enddate_box->setChecked(true); edit_enddate_edit->setDate(edit_log->endDate()); } else { edit_enddate_edit->setDisabled(true); edit_enddate_label->setDisabled(true); edit_enddate_box->setChecked(false); } RefreshList(); serviceActivatedData(edit_service_box->currentText()); SetLogModified(false); UpdateTracks(); // // Set Control Perms // edit_description_edit->setReadOnly(!editing_allowed); if(saveas_allowed) { edit_service_edit->hide(); edit_autorefresh_edit->hide(); } else { edit_service_box->hide(); edit_autorefresh_box->hide(); } if(!editing_allowed) { if(edit_startdate_box->isChecked()) { edit_startdate_edit->setRange(edit_startdate_edit->date(), edit_startdate_edit->date()); } if(edit_enddate_box->isChecked()) { edit_enddate_edit->setRange(edit_enddate_edit->date(), edit_enddate_edit->date()); } } edit_startdate_box->setEnabled(editing_allowed); edit_enddate_box->setEnabled(editing_allowed); edit_startdate_box->setEnabled(editing_allowed); edit_enddate_box->setEnabled(editing_allowed); edit_cart_button->setEnabled(adding_allowed&&editing_allowed); edit_marker_button->setEnabled(adding_allowed&&editing_allowed); edit_edit_button->setEnabled(editing_allowed&&editing_allowed); edit_delete_button->setEnabled(deleting_allowed&&editing_allowed); edit_up_button->setEnabled(editing_allowed); edit_down_button->setEnabled(editing_allowed); edit_cut_button-> setEnabled(adding_allowed&&deleting_allowed&&editing_allowed); edit_copy_button->setEnabled(adding_allowed&&editing_allowed); edit_paste_button->setEnabled(adding_allowed&&editing_allowed); edit_saveas_button->setEnabled(saveas_allowed); } EditLog::~EditLog() { delete edit_log_event; delete edit_log_lock; } QSize EditLog::sizeHint() const { return global_logedit_window_size; } QSizePolicy EditLog::sizePolicy() const { return QSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed); } int EditLog::exec() { QString username; QString stationname; QHostAddress addr; if(!edit_log_lock->tryLock(&username,&stationname,&addr)) { QString msg=tr("Log already being edited by")+" "+username+"@"+stationname; if(stationname!=addr.toString()) { msg+=" ["+addr.toString()+"]"; } msg+="."; QMessageBox::warning(this,"RDLogEdit - "+tr("Log Locked"),msg); return false; } return QDialog::exec(); } void EditLog::descriptionChangedData(const QString &) { SetLogModified(true); } void EditLog::purgeDateChangedData(const QDate &date) { SetLogModified(true); } void EditLog::purgeDateToggledData(bool state) { SetLogModified(true); } void EditLog::selectPurgeDateData() { QDate date=edit_purgedate_edit->date(); RDDateDialog *d=new RDDateDialog(2008,QDate::currentDate().year()+5,this); if(d->exec(&date)==0) { edit_purgedate_edit->setDate(date); SetLogModified(true); } } void EditLog::serviceActivatedData(const QString &svcname) { SetLogModified(true); edit_group_list.loadSvc(svcname); if(!ValidateSvc()) { QMessageBox::warning(this,tr("Invalid Carts"), tr("This log contains one or more carts\nthat are invalid for the selected service!")); } } void EditLog::startDateEnabledData(bool state) { if(state) { edit_startdate_edit->setDate(QDate::currentDate()); } edit_startdate_edit->setEnabled(state); edit_startdate_label->setEnabled(state); SetLogModified(true); } void EditLog::endDateEnabledData(bool state) { if(state) { edit_enddate_edit->setDate(QDate::currentDate()); } edit_enddate_edit->setEnabled(state); edit_enddate_label->setEnabled(state); SetLogModified(true); } void EditLog::timestyleChangedData(int index) { RDListViewItem *item=(RDListViewItem *)edit_log_list->firstChild(); while(item!=NULL) { SetStartTimeField(item); item=(RDListViewItem *)item->nextSibling(); } global_start_time_style=index; } void EditLog::dateValueChangedData(const QDate &) { SetLogModified(true); } void EditLog::autorefreshChangedData(int index) { SetLogModified(true); } void EditLog::insertCartButtonData() { int line; int id; Q3ListViewItem *item=SingleSelection(); if(item==NULL || (line=item->text(14).toInt())<0) { line=edit_log_event->size(); id=END_MARKER_ID; } else { id=item->text(13).toInt(); } edit_log_event->insert(line,1); edit_log_event->logLine(line)->setTransType(edit_default_trans); edit_log_event->logLine(line)->setFadeupGain(-3000); edit_log_event->logLine(line)->setFadedownGain(-3000); EditLogLine *edit= new EditLogLine(edit_log_event->logLine(line),edit_filter,edit_group, edit_schedcode,edit_service_box->currentText(), &edit_group_list,edit_log_event,line,this); int ret=edit->exec(); if(ret>=0) { edit_log_event->refresh(line); SetLogModified(true); } else { edit_log_event->remove(line,1); delete edit; return; } delete edit; RefreshList(); SelectRecord(id); UpdateSelection(); } void EditLog::insertMarkerButtonData() { int line; int id; int ret; EditMarker *edit_marker; EditTrack *edit_track; EditChain *edit_chain; Q3ListViewItem *item=SingleSelection(); if(item==NULL) { return; } line=item->text(14).toInt(); id=item->text(13).toInt(); AddMeta *meta=new AddMeta(this); switch((RDLogLine::Type)meta->exec()) { case RDLogLine::Marker: edit_log_event->insert(line,1); edit_log_event->logLine(line)->setType(RDLogLine::Marker); edit_marker=new EditMarker(edit_log_event->logLine(line),this); ret=edit_marker->exec(); if(ret>=0) { edit_log_event->refresh(line); SetLogModified(true); } else { edit_log_event->remove(line,1); } delete edit_marker; break; case RDLogLine::Track: edit_log_event->insert(line,1); edit_log_event->logLine(line)->setType(RDLogLine::Track); edit_log_event->logLine(line)->setTransType(RDLogLine::Segue); edit_log_event->logLine(line)->setMarkerComment(tr("Voice Track")); edit_track=new EditTrack(edit_log_event->logLine(line),this); ret=edit_track->exec(); if(ret>=0) { edit_log_event->refresh(line); SetLogModified(true); } else { edit_log_event->remove(line,1); } delete edit_track; break; case RDLogLine::Chain: edit_log_event->insert(line,1); edit_log_event->logLine(line)->setType(RDLogLine::Chain); edit_chain=new EditChain(edit_log_event->logLine(line),this); ret=edit_chain->exec(); if(ret>=0) { edit_log_event->refresh(line); SetLogModified(true); } else { edit_log_event->remove(line,1); } delete edit_chain; break; default: break; } RefreshList(); UpdateTracks(); SelectRecord(id); UpdateSelection(); } void EditLog::clickedData(Q3ListViewItem *item) { RDListViewItem *rditem=SingleSelection(); if(rditem==NULL) { edit_player->setCart(0); return; } else { edit_player->setCart(rditem->text(3).toUInt()); } } void EditLog::selectionChangedData() { UpdateSelection(); } void EditLog::doubleClickData(Q3ListViewItem *item) { if(item->text(13).toInt()==END_MARKER_ID) { insertCartButtonData(); } else { editButtonData(); } } void EditLog::editButtonData() { EditLogLine *edit_cart; EditMarker *edit_marker; EditTrack *edit_track; EditChain *edit_chain; RDListViewItem *item=SingleSelection(); if(item==NULL) { return; } int id=item->text(13).toInt(); int line=item->text(14).toInt(); if(id==END_MARKER_ID) { return; } switch(edit_log_event->logLine(line)->type()) { case RDLogLine::Cart: case RDLogLine::Macro: edit_cart= new EditLogLine(edit_log_event->logLine(line),edit_filter,edit_group, edit_schedcode,edit_service_box->currentText(), &edit_group_list,edit_log_event,line,this); if(edit_cart->exec()>=0) { edit_log_event->refresh(item->text(14).toInt()); SetLogModified(true); } delete edit_cart; break; case RDLogLine::Marker: edit_marker=new EditMarker(edit_log_event->logLine(line),this); if(edit_marker->exec()>=0) { SetLogModified(true); } delete edit_marker; break; case RDLogLine::Track: edit_track=new EditTrack(edit_log_event->logLine(line),this); if(edit_track->exec()>=0) { SetLogModified(true); } delete edit_track; break; case RDLogLine::Chain: edit_chain=new EditChain(edit_log_event->logLine(line),this); if(edit_chain->exec()>=0) { SetLogModified(true); } delete edit_chain; break; default: break; } RefreshList(); SelectRecord(id); UpdateSelection(); } void EditLog::deleteButtonData() { int count=0; Q3ListViewItem *next=edit_log_list->firstChild(); int line=0; while(next!=NULL) { if(edit_log_list->isSelected(next)) { if(next->text(13).toInt()!=END_MARKER_ID) { if(count==0) { line=next->text(14).toInt(); } count++; } } next=next->nextSibling(); } DeleteLines(line,count); } void EditLog::upButtonData() { Q3ListViewItem *item=SingleSelection(); if((item==NULL)||(item->text(14).toInt()==0)|| (item->text(13).toInt()==END_MARKER_ID)) { return; } int id=item->text(13).toInt(); sscanf((const char *)item->text(13),"%u",&id); edit_log_event->move(item->text(14).toInt(), item->text(14).toInt()-1); SetLogModified(true); RefreshList(); SelectRecord(id); UpdateSelection(); } void EditLog::downButtonData() { Q3ListViewItem *item=SingleSelection(); if((item==NULL)||(item->text(14).toInt()==(edit_log_list->childCount()-2))|| (item->text(13).toInt()==END_MARKER_ID)) { return; } int id=item->text(13).toInt(); edit_log_event->move(item->text(14).toInt(), item->text(14).toInt()+1); SetLogModified(true); RefreshList(); SelectRecord(id); UpdateSelection(); } void EditLog::cutButtonData() { LoadClipboard(false); deleteButtonData(); UpdateTracks(); UpdateSelection(); } void EditLog::copyButtonData() { LoadClipboard(true); } void EditLog::pasteButtonData() { Q3ListViewItem *item=SingleSelection(); if((item==NULL)||(edit_clipboard->size()==0)) { return; } int line=item->text(14).toInt(); int id=item->text(13).toInt(); edit_log_event->insert(line,edit_clipboard->size()); for(unsigned i=0;isize();i++) { edit_clipboard->at(i).setId(edit_log_event->logLine(line+i)->id()); *edit_log_event->logLine(line+i)=edit_clipboard->at(i); edit_log_event->logLine(line+i)->setSource(RDLogLine::Manual); edit_clipboard->at(i).clearExternalData(); } SetLogModified(true); RefreshList(); UpdateTracks(); SelectRecord(id); UpdateSelection(); } void EditLog::cartDroppedData(int line,RDLogLine *ll) { RDListViewItem *item=NULL; bool appended=false; if((line<0)||(line==edit_log_event->size())) { line=edit_log_event->size(); appended=true; } if(ll->cartNumber()==0) { // Empty Cart if(!appended) { DeleteLines(line,1); } return; } edit_log_event->insert(line,1); edit_log_event->setLogLine(line,ll); edit_log_event->logLine(line)->setTransType(edit_default_trans); edit_log_event->logLine(line)->setFadeupGain(-3000); edit_log_event->logLine(line)->setFadedownGain(-3000); edit_log_event->refresh(line); SetLogModified(true); if(appended) { item=(RDListViewItem *)edit_log_list->lastItem(); item->setText(14,QString().sprintf("%d",item->text(14).toInt()+1)); } else { item=(RDListViewItem *)edit_log_list-> findItem(QString().sprintf("%d",line),14); item->setText(14,QString().sprintf("%d",item->text(14).toInt()+1)); while((item=(RDListViewItem *)item->nextSibling())!=NULL) { item->setText(14,QString().sprintf("%d",item->text(14).toInt()+1)); } } item=new RDListViewItem(edit_log_list); item->setText(14,QString().sprintf("%d",line)); RefreshLine(item); edit_log_list->sort(); edit_log_list->clearSelection(); item->setSelected(true); } void EditLog::notificationReceivedData(RDNotification *notify) { RDListViewItem *item=NULL; if(notify->type()==RDNotification::CartType) { unsigned cartnum=notify->id().toUInt(); item=(RDListViewItem *)edit_log_list->firstChild(); while(item!=NULL) { if(item->text(3).toUInt()==cartnum) { int line=item->text(14).toInt(); if(line>=0) { edit_log_event->refresh(line); RefreshLine(item); } } item=(RDListViewItem *)item->nextSibling(); } } } void EditLog::saveData() { if(!ValidateSvc()) { if(QMessageBox::warning(this,tr("Invalid Carts"), tr("The log contains carts that are disabled\nfor the selected service!\n\nDo you still want to save?"),QMessageBox::Yes,QMessageBox::No)==QMessageBox::No) { return; } } if(!DeleteTracks()) { QMessageBox::warning(this,tr("RDLogEdit"), tr("Unable to save log, audio deletion error!")); return; } SaveLog(); SetLogModified(false); edit_log->setAutoRefresh(edit_autorefresh_box->currentItem()==0); edit_log-> setModifiedDatetime(QDateTime(QDate::currentDate(),QTime::currentTime())); } void EditLog::saveasData() { if(!ValidateSvc()) { if(QMessageBox::warning(this,tr("Invalid Carts"), tr("The log contains carts that are disabled\nfor the selected service!\n\nDo you still want to save?"),QMessageBox::Yes,QMessageBox::No)==QMessageBox::No) { return; } } QString logname; QString svcname=edit_service_box->currentText(); RDAddLog *log=NULL; QString err_msg; if(rda->user()->createLog()) { log=new RDAddLog(&logname,&svcname,RDLogFilter::UserFilter, tr("Add Log"),this); if(log->exec()<0) { return; } if(!RDLog::create(logname,svcname,QDate(),rda->ripc()->user(),&err_msg, rda->config())) { QMessageBox::warning(this,"RDLogEdit - "+tr("Error"),err_msg); return; } SendNotification(RDNotification::AddAction,logname); delete edit_log; edit_newlogs->push_back(logname); edit_log=new RDLog(logname); edit_log_event->setLogName(logname); for(int i=0;icount();i++) { if(edit_service_box->text(i)==svcname) { edit_service_box->setCurrentItem(i); } } SaveLog(); edit_logname_label->setText(logname); edit_origin_label-> setText(edit_log->originUser()+QString(" - ")+ edit_log->originDatetime().toString("MM/dd/yyyy - hh:mm:ss")); } delete log; RefreshList(); SetLogModified(false); edit_deleted_tracks.clear(); } void EditLog::renderasData() { int first_line=-1; int last_line=-1; Q3ListViewItem *next=edit_log_list->firstChild(); while(next!=NULL) { if(edit_log_list->isSelected(next)) { if(next->text(13).toInt()!=END_MARKER_ID) { if(first_line<0) { first_line=next->text(14).toInt(); } last_line=next->text(14).toInt(); } } next=next->nextSibling(); } if(first_line<0) { edit_render_dialog->exec(rda->user(),edit_log_event,0,0); } else { edit_render_dialog->exec(rda->user(),edit_log_event,first_line,last_line+1); } } void EditLog::reportsData() { QDate start_date; if(edit_startdate_box->isChecked()) { start_date=edit_startdate_edit->date(); } QDate end_date; if(edit_enddate_box->isChecked()) { end_date=edit_enddate_edit->date(); } ListReports *lr= new ListReports(edit_log->name(),edit_description_edit->text(), edit_service_box->currentText(),start_date,end_date, edit_autorefresh_box->currentItem()==0, edit_log_event,this); lr->exec(); delete lr; } void EditLog::okData() { if(edit_changed) { if(!ValidateSvc()) { if(QMessageBox::warning(this,tr("Invalid Carts"), tr("The log contains carts that are disabled\nfor the selected service!\n\nDo you still want to save?"),QMessageBox::Yes,QMessageBox::No)==QMessageBox::No) { return; } } SaveLog(); DeleteTracks(); } edit_player->stop(); for(unsigned i=0;isize();i++) { edit_clipboard->at(i).clearExternalData(); } done(true); } void EditLog::cancelData() { if(edit_changed) { switch(QMessageBox::question(this, tr("RDLogEdit"), tr("The log has been modified.\nDo you want to save your changes?"), QMessageBox::Yes,QMessageBox::No, QMessageBox::Cancel)) { case QMessageBox::Yes: if(!ValidateSvc()) { QMessageBox::warning(this,tr("Invalid Carts"), tr("The log contains carts that are disabled\nfor the selected service!")); return; } SaveLog(); break; case QMessageBox::Cancel: case QMessageBox::NoButton: return; break; } } edit_player->stop(); for(unsigned i=0;isize();i++) { edit_clipboard->at(i).clearExternalData(); } done(false); } void EditLog::closeEvent(QCloseEvent *e) { cancelData(); } void EditLog::resizeEvent(QResizeEvent *e) { edit_logname_label->setGeometry(155,11,size().width()-500,18); edit_logname_label_label->setGeometry(80,11,70,18); edit_modified_label->setGeometry(60,14,20,18); edit_track_label->setGeometry(size().width()-425,11,40,18); edit_track_label_label->setGeometry(size().width()-510,11,80,18); edit_origin_label->setGeometry(size().width()-320,11,310,18); edit_origin_label_label->setGeometry(size().width()-370,11,45,18); edit_description_edit->setGeometry(110,40,size().width()-390,20); edit_description_label->setGeometry(10,40,95,20); edit_purgedate_box->setGeometry(size().width()-255,42,15,15); edit_purgedate_label->setGeometry(size().width()-240,40,60,20); edit_purgedate_edit->setGeometry(size().width()-170,40,100,20); edit_purgedate_button->setGeometry(size().width()-60,37,50,26); edit_service_box->setGeometry(110,68,120,22); edit_service_edit->setGeometry(110,68,120,22); edit_service_label->setGeometry(10,68,95,22); edit_autorefresh_box->setGeometry(180,94,50,22); edit_autorefresh_edit->setGeometry(180,94,50,22); edit_autorefresh_label->setGeometry(10,94,165,22); edit_startdate_edit->setGeometry(315,68,100,22); edit_startdate_label->setGeometry(240,68,70,22); edit_enddate_edit->setGeometry(490,68,100,22); edit_enddate_label->setGeometry(415,68,70,22); edit_startdate_box->setGeometry(250,98,15,15); edit_enddate_box->setGeometry(430,98,15,15); edit_startdate_box_label->setGeometry(270,96,175,20); edit_enddate_box_label->setGeometry(450,96,140,20); edit_time_groupbox->setGeometry(620,65,140,59); edit_stoptime_label->setGeometry(625,82,65,18); edit_stoptime_edit->setGeometry(695,82,60,18); edit_endtime_label->setGeometry(625,102,65,18); edit_endtime_edit->setGeometry(695,102,60,18); edit_log_list->setGeometry(10,127, size().width()-20,size().height()-257); edit_cart_button->setGeometry(20,size().height()-125,80,50); edit_marker_button->setGeometry(110,size().height()-125,80,50); edit_edit_button->setGeometry(200,size().height()-125,80,50); edit_delete_button->setGeometry(290,size().height()-125,80,50); edit_up_button->setGeometry(390,size().height()-125,50,50); edit_down_button->setGeometry(450,size().height()-125,50,50); edit_cut_button-> setGeometry(size().width()-280,size().height()-125,80,50); edit_copy_button-> setGeometry(size().width()-190,size().height()-125,80,50); edit_paste_button-> setGeometry(size().width()-100,size().height()-125,80,50); edit_save_button->setGeometry(10,size().height()-60,80,50); edit_saveas_button->setGeometry(100,size().height()-60,80,50); edit_reports_button->setGeometry(300,size().height()-60,80,50); edit_renderas_button->setGeometry(190,size().height()-60,80,50); edit_player->playButton()->setGeometry(410,size().height()-60,80,50); edit_player->stopButton()->setGeometry(500,size().height()-60,80,50); edit_timestyle_label->setGeometry(600,size().height()-60,150,20); edit_timestyle_box->setGeometry(625,size().height()-40,100,30); edit_ok_button-> setGeometry(size().width()-180,size().height()-60,80,50); edit_cancel_button->setGeometry(size().width()-90,size().height()-60,80,50); global_logedit_window_size=e->size(); } void EditLog::paintEvent(QPaintEvent *e) { QColor system_mid_color = colorGroup().mid(); QPainter *p=new QPainter(this); p->fillRect(60,8,size().width()-120,24,QColor(system_mid_color)); p->fillRect(9,size().height()-130,size().width()-20,60, QColor(system_mid_color)); p->end(); delete p; } void EditLog::DeleteLines(int line,int count) { RDListViewItem *item=NULL; RDListViewItem *next=NULL; if(count>0) { for(int i=line;i<(line+count);i++) { if(edit_log_event->logLine(i)->source()==RDLogLine::Tracker) { edit_deleted_tracks. push_back(edit_log_event->logLine(i)->cartNumber()); } } item=(RDListViewItem *)edit_log_list-> findItem(QString().sprintf("%d",line),14); for(int i=0;inextSibling(); delete item; item=next; } if(next!=NULL) { next->setSelected(true); } edit_log_event->remove(line,count); SetLogModified(true); RenumberList(line); } UpdateTracks(); UpdateSelection(); } void EditLog::SaveLog() { edit_log->setDescription(edit_description_edit->text()); if(edit_purgedate_box->isChecked()) { edit_log->setPurgeDate(edit_purgedate_edit->date()); } else { edit_log->setPurgeDate(QDate()); } edit_log->setService(edit_service_box->currentText()); if(edit_startdate_box->isChecked()) { edit_log->setStartDate(edit_startdate_edit->date()); } else { edit_log->setStartDate(QDate()); } if(edit_enddate_box->isChecked()) { edit_log->setEndDate(edit_enddate_edit->date()); } else { edit_log->setEndDate(QDate()); } edit_log->setAutoRefresh(edit_autorefresh_box->currentItem()==0); edit_log_event->save(rda->config()); edit_log-> setModifiedDatetime(QDateTime(QDate::currentDate(),QTime::currentTime())); SendNotification(RDNotification::ModifyAction,edit_log->name()); } void EditLog::RefreshLine(RDListViewItem *item) { int line=item->text(14).toInt(); if(line<0) { return; } edit_log_event->refresh(line); SetStartTimeField(item); RDLogLine *logline=edit_log_event->logLine(line); switch(logline->transType()) { case RDLogLine::Play: item->setText(2,tr("PLAY")); item->setTextColor(2,item->textColor(1),QFont::Normal); break; case RDLogLine::Stop: item->setText(2,tr("STOP")); item->setTextColor(2,item->textColor(1),QFont::Normal); break; case RDLogLine::Segue: item->setText(2,tr("SEGUE")); if(logline->hasCustomTransition()) { item->setTextColor(2,RD_CUSTOM_TRANSITION_COLOR,QFont::Bold); } else { item->setTextColor(2,item->textColor(1),QFont::Normal); } break; default: break; } switch(logline->type()) { case RDLogLine::Cart: switch(logline->source()) { case RDLogLine::Tracker: item->setPixmap(0,*edit_track_cart_map); break; default: item->setPixmap(0,*edit_playout_map); break; } item->setText(3,QString(). sprintf("%06u",logline->cartNumber())); if(logline->title().isEmpty()) { item->setText(4,""); item->setText(5,tr("[cart not found]")); } else { item->setText(4,logline->groupName()); item->setTextColor(4,logline->groupColor(),QFont::Bold); if((logline->source()!=RDLogLine::Tracker)|| logline->originUser().isEmpty()|| (!logline->originDateTime().isValid())) { item->setText(6,logline->title()); } else { item->setText(6,logline->title()+" -- "+logline->originUser()+ " "+logline->originDateTime().toString("M/d hh:mm")); } } item-> setText(5,RDGetTimeLength(logline->forcedLength(),false,false)); item->setText(7,logline->artist()); item->setText(8,logline->client()); item->setText(9,logline->agency()); item->setText(12,logline->extData()); break; case RDLogLine::Macro: item->setPixmap(0,*edit_macro_map); item->setText(3,QString(). sprintf("%06u",logline->cartNumber())); if(logline->title().isEmpty()) { item->setText(4,""); item->setText(6,tr("[cart not found]")); } else { item->setText(4,logline->groupName()); item->setTextColor(4,logline->groupColor(),QFont::Bold); item->setText(6,logline->title()); } item->setText(5,RDGetTimeLength(logline->forcedLength(),false,false)); item->setText(7,logline->artist()); item->setText(8,logline->client()); item->setText(9,logline->agency()); item->setText(12,logline->extData()); break; case RDLogLine::Marker: item->setPixmap(0,*edit_notemarker_map); item->setText(3,tr("MARKER")); item->setText(4,""); item->setText(6,RDTruncateAfterWord(edit_log_event-> logLine(line)->markerComment(),5,true)); item->setText(10,logline->markerLabel()); item->setText(12,logline->extData()); break; case RDLogLine::Track: item->setPixmap(0,*edit_mic16_map); item->setText(3,tr("TRACK")); item->setText(4,""); item->setText(6,RDTruncateAfterWord(edit_log_event-> logLine(line)->markerComment(),5,true)); item->setText(12,logline->extData()); break; case RDLogLine::Chain: item->setPixmap(0,*edit_chain_map); item->setText(3,tr("LOG CHAIN")); item->setText(4,""); item->setText(6,logline->markerLabel()); item->setText(7,RDTruncateAfterWord(edit_log_event-> logLine(line)->markerComment(),5,true)); item->setText(12,logline->extData()); break; case RDLogLine::MusicLink: item->setPixmap(0,*edit_music_map); item->setText(3,tr("LINK")); item->setText(4,""); item->setText(6,tr("[music import]")); item->setText(12,tr("Link Start")+": "+ logline->linkStartTime().toString("hh:mm:ss")+", "+ tr("Len")+": "+ RDGetTimeLength(logline->linkLength(),false,false)); break; case RDLogLine::TrafficLink: item->setPixmap(0,*edit_traffic_map); item->setText(3,tr("LINK")); item->setText(4,""); item->setText(6,tr("[traffic import]")); item->setText(12,tr("Link Start")+": "+ logline->linkStartTime().toString("hh:mm:ss")+", "+ tr("Len")+": "+ RDGetTimeLength(logline->linkLength(),false,false)); break; default: break; } switch(logline->source()) { case RDLogLine::Manual: item->setText(11,tr("Manual")); break; case RDLogLine::Traffic: item->setText(11,tr("Traffic")); break; case RDLogLine::Music: item->setText(11,tr("Music")); break; case RDLogLine::Template: item->setText(11,tr("RDLogManager")); break; case RDLogLine::Tracker: item->setText(11,tr("Voice Tracker")); break; } item->setText(13,QString().sprintf("%d",logline->id())); UpdateColor(item,logline); } void EditLog::SetStartTimeField(RDListViewItem *item) { int line=item->text(14).toInt(); RDLogLine *logline=edit_log_event->logLine(line); if(edit_timestyle_box->currentIndex()==0) { // Estimated edit_log_list->setColumnText(1,tr("Est. Time")); } else { // Scheduled edit_log_list->setColumnText(1,tr("Sch. Time")); } if(logline!=NULL) { switch(logline->timeType()) { case RDLogLine::Hard: item->setText(1,QString("T")+edit_log_event-> logLine(line)->startTime(RDLogLine::Logged). toString("hh:mm:ss.zzz").left(10)); break; default: if(edit_timestyle_box->currentIndex()==0) { // Estimated if(logline-> startTime(RDLogLine::Predicted).isNull()) { item->setText(1,edit_log_event-> blockStartTime(line). toString("hh:mm:ss.zzz").left(10)); } else { item->setText(1,edit_log_event-> logLine(line)->startTime(RDLogLine::Predicted). toString("hh:mm:ss.zzz").left(10)); } } else { // Scheduled if(logline->startTime(RDLogLine::Logged).isNull()) { item->setText(1,""); } else { item->setText(1,edit_log_event-> logLine(line)->startTime(RDLogLine::Logged). toString("hh:mm:ss.zzz").left(10)); } } break; } } } void EditLog::RefreshList() { RDListViewItem *l; edit_log_list->clear(); l=new RDListViewItem(edit_log_list); l->setText(6,tr("--- end of log ---")); l->setText(13,QString().sprintf("%d",END_MARKER_ID)); l->setText(14,QString().sprintf("%d",edit_log_event->size())); for(int i=edit_log_event->size()-1;i>=0;i--) { l=new RDListViewItem(edit_log_list); l->setText(14,QString().sprintf("%d",i)); RefreshLine(l); } } void EditLog::UpdateSelection() { RDListViewItem *rditem=SingleSelection(); if(rditem==NULL) { // Multiple items selected? edit_endtime_edit->setText(""); edit_stoptime_label->setText(tr("Selected:")); Q3ListViewItem *next=edit_log_list->firstChild(); int start_line=-1; int end_line=-1; while(next!=NULL) { if(edit_log_list->isSelected(next)) { if((start_line<0)&&(next->text(13).toInt()!=END_MARKER_ID)) { start_line=next->text(14).toInt(); } if(next->text(13).toInt()!=END_MARKER_ID) { end_line=next->text(14).toInt(); } } next=next->nextSibling(); } if(start_line>=0) { edit_stoptime_edit->setText(RDGetTimeLength(edit_log_event-> length(start_line,end_line+1),true,false)); } return; } if(rditem->text(13).toInt()>0) { edit_endtime_edit->setText(RDGetTimeLength(edit_log_event-> length(rditem->text(14).toInt(),edit_log_event->size()),true,false)); edit_stoptime_label->setText(tr("Next Stop:")); int stoplen=edit_log_event->lengthToStop(rditem->text(14).toInt()); if(stoplen>=0) { edit_stoptime_edit->setText(RDGetTimeLength(stoplen,true,false)); } else { edit_stoptime_edit->setText(""); } } else { edit_endtime_edit->setText(""); edit_stoptime_edit->setText(""); } } bool EditLog::UpdateColor(RDListViewItem *item,RDLogLine *logline) { bool ret=true; QDateTime now=QDateTime(QDate::currentDate(),QTime::currentTime()); switch(logline->type()) { case RDLogLine::Cart: switch(logline->validity(now)) { case RDCart::AlwaysValid: if(edit_group_list.isGroupValid(item->text(4))|| item->text(4).isEmpty()) { item->setBackgroundColor(palette().color(QPalette::Active, QColorGroup::Base)); } else { item->setBackgroundColor(RD_CART_INVALID_SERVICE_COLOR); ret=false; } break; case RDCart::ConditionallyValid: item->setBackgroundColor(RD_CART_CONDITIONAL_COLOR); break; case RDCart::FutureValid: item->setBackgroundColor(RD_CART_FUTURE_COLOR); break; case RDCart::EvergreenValid: item->setBackgroundColor(RD_CART_EVERGREEN_COLOR); break; case RDCart::NeverValid: item->setBackgroundColor(RD_CART_ERROR_COLOR); item->setText(6,tr("[INVALID CART]")); break; } break; default: if(edit_group_list.isGroupValid(item->text(4))|| item->text(4).isEmpty()) { item->setBackgroundColor(palette().color(QPalette::Active, QColorGroup::Base)); } else { item->setBackgroundColor(RD_CART_INVALID_SERVICE_COLOR); ret=false; } break; } return ret; } void EditLog::RenumberList(int line) { Q3ListViewItem *prev=NULL; Q3ListViewItem *item=edit_log_list->firstChild(); if(item==NULL) { return; } for(int i=0;inextSibling(); } while(item!=NULL) { item->setText(14,QString().sprintf("%d",line++)); prev=item; item=item->nextSibling(); } prev->setText(13,QString().sprintf("%d",END_MARKER_ID)); } void EditLog::SelectRecord(int id) { Q3ListViewItem *item=edit_log_list->firstChild(); while(item!=NULL) { if(item->text(13).toInt()==id) { edit_log_list->setSelected(item,true); edit_log_list->ensureItemVisible(item); return; } item=item->nextSibling(); } } RDListViewItem *EditLog::SingleSelection() { RDListViewItem *item=NULL; RDListViewItem *next=(RDListViewItem *)edit_log_list->firstChild(); while(next!=NULL) { if(edit_log_list->isSelected(next)) { if(item==NULL) { item=next; } else { return NULL; } } next=(RDListViewItem *)next->nextSibling(); } return item; } bool EditLog::ValidateSvc() { RDLogLine *logline=NULL; bool valid=true; RDListViewItem *item=(RDListViewItem *)edit_log_list->firstChild(); while(item!=NULL) { if((logline=edit_log_event->logLine(item->text(14).toInt()))!=NULL) { valid&=UpdateColor(item,logline); } item=(RDListViewItem *)item->nextSibling(); } return valid; } void EditLog::UpdateTracks() { unsigned markers=0; unsigned tracks=0; RDLogLine *logline; for(int i=0;isize();i++) { logline=edit_log_event->logLine(i); if(logline->type()==RDLogLine::Track) { markers++; } if(logline->source()==RDLogLine::Tracker) { tracks++; } } edit_track_label-> setText(QString().sprintf("%u / %u",tracks,markers+tracks)); } bool EditLog::DeleteTracks() { RDCart *cart; for(unsigned i=0;iremove(rda->station(),rda->user(),rda->config())) { delete cart; return false; } delete cart; } return true; } void EditLog::LoadClipboard(bool clear_ext) { Q3ListViewItem *next=edit_log_list->firstChild(); edit_clipboard->clear(); while(next!=NULL) { if((edit_log_list->isSelected(next))&& (next->text(13).toInt()!=END_MARKER_ID)) { edit_clipboard-> push_back(*edit_log_event->logLine(next->text(14).toInt())); if(clear_ext) { edit_clipboard->back().clearExternalData(); } } next=next->nextSibling(); } } void EditLog::SetLogModified(bool state) { if(state!=edit_changed) { if(state) { edit_modified_label->setText("*"); } else { edit_modified_label->setText(""); } edit_save_button->setEnabled(state); edit_changed=state; } } void EditLog::SendNotification(RDNotification::Action action, const QString &log_name) { RDNotification *notify=new RDNotification(RDNotification::LogType, action,QVariant(log_name)); rda->ripc()->sendNotification(*notify); delete notify; }