From 37f9559c370e80c789d32cbc3f5d36ac25ffe28a Mon Sep 17 00:00:00 2001 From: Fred Gleason Date: Mon, 28 Feb 2022 13:25:41 -0500 Subject: [PATCH] 2022-02-28 Fred Gleason * Updated 'RDCartDialog' to eliminate superfluous SQL filter updates. * Updated 'RDCutDialog' to eliminate superfluous SQL filter updates. * Updated rdlibrary(1) to eliminate superfluous SQL filter updates. * Updated rdlogedit(1) to eliminate superfluous SQL filter updates. Signed-off-by: Fred Gleason --- ChangeLog | 5 + lib/rdcart_dialog.cpp | 4 +- lib/rdcartfilter.cpp | 28 ++++-- lib/rdcartfilter.h | 5 + lib/rdcut_dialog.cpp | 5 +- lib/rdlibrarymodel.cpp | 37 +++++++- lib/rdlibrarymodel.h | 1 + rdlibrary/libraryview.cpp | 2 + rdlibrary/rdlibrary.cpp | 4 - rdlogedit/edit_chain.cpp | 22 +++-- rdlogedit/edit_chain.h | 19 ++-- rdlogedit/edit_event.cpp | 22 +++-- rdlogedit/edit_event.h | 18 ++-- rdlogedit/edit_log.cpp | 189 ++++++++++++++++--------------------- rdlogedit/edit_log.h | 18 ++-- rdlogedit/edit_logline.cpp | 82 +++++++++------- rdlogedit/edit_logline.h | 11 ++- rdlogedit/edit_marker.cpp | 22 +++-- rdlogedit/edit_marker.h | 11 ++- rdlogedit/edit_track.cpp | 20 ++-- rdlogedit/edit_track.h | 9 +- rdlogedit/logmodel.cpp | 7 ++ rdlogedit/logmodel.h | 1 + rdlogedit/rdlogedit.cpp | 15 +-- rdlogedit/rdlogedit.h | 2 + 25 files changed, 315 insertions(+), 244 deletions(-) diff --git a/ChangeLog b/ChangeLog index def198f6..4d206518 100644 --- a/ChangeLog +++ b/ChangeLog @@ -22895,3 +22895,8 @@ cart libraries. 2022-02-27 Fred Gleason * Added an 'RDTimeProbe' class. +2022-02-28 Fred Gleason + * Updated 'RDCartDialog' to eliminate superfluous SQL filter updates. + * Updated 'RDCutDialog' to eliminate superfluous SQL filter updates. + * Updated rdlibrary(1) to eliminate superfluous SQL filter updates. + * Updated rdlogedit(1) to eliminate superfluous SQL filter updates. diff --git a/lib/rdcart_dialog.cpp b/lib/rdcart_dialog.cpp index 629ab73a..1db13c6e 100644 --- a/lib/rdcart_dialog.cpp +++ b/lib/rdcart_dialog.cpp @@ -86,13 +86,13 @@ RDCartDialog::RDCartDialog(QString *filter,QString *group,QString *schedcode, // Cart List // cart_cart_view=new RDTableView(this); + cart_cart_view->setSortingEnabled(true); + cart_cart_view->sortByColumn(0,Qt::AscendingOrder); cart_cart_model=new RDLibraryModel(this); cart_cart_model->setFont(font()); cart_cart_model->setPalette(palette()); cart_cart_view->setModel(cart_cart_model); cart_cart_filter->setModel(cart_cart_model); - cart_cart_view->setSortingEnabled(true); - cart_cart_view->sortByColumn(0,Qt::AscendingOrder); connect(cart_cart_model,SIGNAL(modelReset()),this,SLOT(modelResetData())); connect(cart_cart_view,SIGNAL(doubleClicked(const QModelIndex &)), this,SLOT(cartDoubleClickedData(const QModelIndex &))); diff --git a/lib/rdcartfilter.cpp b/lib/rdcartfilter.cpp index 643434a2..8414a52a 100644 --- a/lib/rdcartfilter.cpp +++ b/lib/rdcartfilter.cpp @@ -2,7 +2,7 @@ // // Filter widget for picking Rivendell carts. // -// (C) Copyright 2021 Fred Gleason +// (C) Copyright 2021-2022 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 @@ -337,8 +337,6 @@ void RDCartFilter::setShowCartType(RDCart::Type type) d_showmacro_label->hide(); } d_show_cart_type=type; - - emit filterChanged(filterSql(),cartLimit()); } } @@ -353,7 +351,6 @@ void RDCartFilter::setShowTrackCarts(bool state) { if(state!=d_show_track_carts) { d_show_track_carts=state; - emit filterChanged(filterSql(),cartLimit()); } } @@ -384,7 +381,6 @@ void RDCartFilter::setService(const QString &svc) if(!d_service.isEmpty()) { LoadServiceGroups(); } - emit filterChanged(filterSql(),cartLimit()); } } @@ -456,7 +452,7 @@ void RDCartFilter::changeUser() delete q; d_search_button->setDisabled(true); - emit filterChanged(filterSql(),cartLimit()); + UpdateModel(); } @@ -486,7 +482,7 @@ void RDCartFilter::searchClickedData() else { d_clear_button->setEnabled(true); } - emit filterChanged(filterSql(),cartLimit()); + UpdateModel(); } @@ -683,6 +679,13 @@ QString RDCartFilter::typeFilter(bool incl_audio,bool incl_macro, } +void RDCartFilter::showEvent(QShowEvent *e) +{ + UpdateModel(); + QWidget::showEvent(e); +} + + void RDCartFilter::LoadUserGroups() { QString sql; @@ -726,3 +729,14 @@ void RDCartFilter::LoadServiceGroups() } delete q; } + + +void RDCartFilter::UpdateModel() +{ + if(isVisible()&& + ((filterSql()!=d_model_filter_sql)||(cartLimit()!=d_model_cart_limit))) { + d_model_filter_sql=filterSql(); + d_model_cart_limit=cartLimit(); + emit filterChanged(d_model_filter_sql,d_model_cart_limit); + } +} diff --git a/lib/rdcartfilter.h b/lib/rdcartfilter.h index 7d5ec78c..1355f8d5 100644 --- a/lib/rdcartfilter.h +++ b/lib/rdcartfilter.h @@ -88,10 +88,12 @@ class RDCartFilter : public RDWidget protected: void resizeEvent(QResizeEvent *e); + void showEvent(QShowEvent *e); private: void LoadUserGroups(); void LoadServiceGroups(); + void UpdateModel(); RDLibraryModel *d_cart_model; RDGroupListModel *d_group_model; QLineEdit *d_filter_edit; @@ -124,6 +126,9 @@ class RDCartFilter : public RDWidget QString d_default_group; bool d_user_is_admin; QString d_service; + + QString d_model_filter_sql; + int d_model_cart_limit; }; diff --git a/lib/rdcut_dialog.cpp b/lib/rdcut_dialog.cpp index 70bc89f7..eba077d5 100644 --- a/lib/rdcut_dialog.cpp +++ b/lib/rdcut_dialog.cpp @@ -2,7 +2,7 @@ // // A widget to select a Rivendell Cut. // -// (C) Copyright 2002-2021 Fred Gleason +// (C) Copyright 2002-2022 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 @@ -147,9 +147,6 @@ RDCutDialog::RDCutDialog(QString *filter,QString *group,QString *schedcode, cart_cancel_button->setFont(buttonFont()); connect(cart_cancel_button,SIGNAL(clicked()),this,SLOT(cancelData())); - cart_cart_model-> - setFilterSql(cart_cart_filter->filterSql(),cart_cart_filter->cartLimit()); - // // Fix the Window Size // diff --git a/lib/rdlibrarymodel.cpp b/lib/rdlibrarymodel.cpp index 73087b0c..14d107fb 100644 --- a/lib/rdlibrarymodel.cpp +++ b/lib/rdlibrarymodel.cpp @@ -22,6 +22,7 @@ #include "rdconf.h" #include "rdescape_string.h" #include "rdlibrarymodel.h" +#include "rdtimeprobe.h" RDLibraryModel::RDLibraryModel(QObject *parent) : QAbstractItemModel(parent) @@ -35,6 +36,7 @@ RDLibraryModel::RDLibraryModel(QObject *parent) d_sort_order=Qt::AscendingOrder; d_sort_clauses[Qt::AscendingOrder]="asc"; d_sort_clauses[Qt::DescendingOrder]="desc"; + d_filter_set=false; // // Column Attributes @@ -317,7 +319,9 @@ void RDLibraryModel::sort(int col,Qt::SortOrder order) { d_sort_column=col; d_sort_order=order; - setFilterSql(d_filter_sql,d_cart_limit); + if(d_filter_set) { + setFilterSql(d_filter_sql,d_cart_limit); + } /* printf("RDLibraryModel::sort():\n"); printf(" d_filter_sql: %s\n",d_filter_sql.toUtf8().constData()); @@ -546,6 +550,8 @@ void RDLibraryModel::setFilterSql(const QString &sql,int cart_limit) d_sort_clauses.value(d_sort_order); } fsql+=", `CUTS`.`PLAY_ORDER` asc "; + d_filter_set=true; + printf("***** FILTER SQL SET *****\n"); updateModel(fsql); } @@ -553,6 +559,14 @@ void RDLibraryModel::setFilterSql(const QString &sql,int cart_limit) void RDLibraryModel::updateModel(const QString &filter_sql) { + if(!d_filter_set) { + return; + } + printf("%p - filter_sql: %s\n",this,filter_sql.toUtf8().constData()); + + RDTimeProbe *probe=new RDTimeProbe(); + probe->printWaypoint("updateModel - 1"); + QString sql; RDSqlQuery *q=NULL; @@ -568,6 +582,8 @@ void RDLibraryModel::updateModel(const QString &filter_sql) QList > list_list; list_list.push_back(list); + probe->printWaypoint("updateModel - 2"); + // // Reload the color table // @@ -582,6 +598,8 @@ void RDLibraryModel::updateModel(const QString &filter_sql) } delete q; + probe->printWaypoint("updateModel - 3"); + sql=sqlFields()+ filter_sql; beginResetModel(); @@ -595,6 +613,10 @@ void RDLibraryModel::updateModel(const QString &filter_sql) d_icons.clear(); unsigned prev_cartnum=0; int carts_loaded=0; + + probe->printWaypoint("updateModel - 4"); + + // printf("RDLibraryModel::updateModel() SQL: %s\n",sql.toUtf8().constData()); q=new RDSqlQuery(sql); while(q->next()&&(carts_loadedvalue(0).toUInt()!=prev_cartnum) { @@ -610,10 +632,21 @@ void RDLibraryModel::updateModel(const QString &filter_sql) prev_cartnum=q->value(0).toUInt(); carts_loaded++; } + // printf("carts_loaded: %d\n",carts_loaded); } - delete q; + delete q; + + probe->printWaypoint("updateModel - 5"); + endResetModel(); + + probe->printWaypoint("updateModel - 6"); + emit rowCountChanged(d_texts.size()); + + probe->printWaypoint("updateModel - 7"); + + delete probe; } diff --git a/lib/rdlibrarymodel.h b/lib/rdlibrarymodel.h index 88012cf6..0a12cffd 100644 --- a/lib/rdlibrarymodel.h +++ b/lib/rdlibrarymodel.h @@ -106,6 +106,7 @@ class RDLibraryModel : public QAbstractItemModel QList d_cart_numbers; QList d_cart_types; QMap d_group_colors; + bool d_filter_set; }; diff --git a/rdlibrary/libraryview.cpp b/rdlibrary/libraryview.cpp index c994224a..91537363 100644 --- a/rdlibrary/libraryview.cpp +++ b/rdlibrary/libraryview.cpp @@ -30,6 +30,8 @@ LibraryView::LibraryView(QWidget *parent) : RDTreeView(parent) { + setSortingEnabled(true); + sortByColumn(0,Qt::AscendingOrder); } diff --git a/rdlibrary/rdlibrary.cpp b/rdlibrary/rdlibrary.cpp index bfb7a7a5..3a429840 100644 --- a/rdlibrary/rdlibrary.cpp +++ b/rdlibrary/rdlibrary.cpp @@ -159,8 +159,6 @@ MainWidget::MainWidget(RDConfig *c,QWidget *parent) lib_cart_model->setPalette(palette()); lib_cart_filter->setModel(lib_cart_model); lib_cart_view->setModel(lib_cart_model); - lib_cart_view->setSortingEnabled(true); - lib_cart_view->sortByColumn(0,Qt::AscendingOrder); connect(lib_cart_view,SIGNAL(doubleClicked(const QModelIndex &)), this,SLOT(cartDoubleClickedData(const QModelIndex &))); connect(lib_cart_filter,SIGNAL(dragEnabledChanged(bool)), @@ -275,8 +273,6 @@ MainWidget::MainWidget(RDConfig *c,QWidget *parent) lib_macro_events=new RDMacroEvent(rda->station()->address(),rda->ripc(),this); dragsChangedData(lib_cart_filter->dragEnabled()); - lib_cart_model-> - setFilterSql(lib_cart_filter->filterSql(),lib_cart_model->cartLimit()); LoadGeometry(); } diff --git a/rdlogedit/edit_chain.cpp b/rdlogedit/edit_chain.cpp index 7cbe44a1..f5183325 100644 --- a/rdlogedit/edit_chain.cpp +++ b/rdlogedit/edit_chain.cpp @@ -2,7 +2,7 @@ // // Edit a Rivendell Log Chain Entry // -// (C) Copyright 2002-2021 Fred Gleason +// (C) Copyright 2002-2022 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 @@ -27,8 +27,8 @@ #include "globals.h" -EditChain::EditChain(RDLogLine *line,QWidget *parent) - : EditEvent(line,parent) +EditChain::EditChain(QWidget *parent) + : EditEvent(parent) { setWindowTitle("RDLogEdit - "+tr("Edit Log Chain")); @@ -63,12 +63,6 @@ EditChain::EditChain(RDLogLine *line,QWidget *parent) edit_comment_edit->setReadOnly(true); edit_comment_label=new QLabel(tr("Log Description"),this); edit_comment_label->setFont(labelFont()); - - // - // Populate Data - // - edit_label_edit->setText(logLine()->markerLabel()); - labelChangedData(edit_label_edit->text()); } @@ -84,6 +78,16 @@ QSizePolicy EditChain::sizePolicy() const } +int EditChain::exec(RDLogLine *ll) +{ + setLogLine(ll); + edit_label_edit->setText(logLine()->markerLabel()); + labelChangedData(edit_label_edit->text()); + + return EditEvent::exec(); +} + + void EditChain::selectLogData() { QString logname; diff --git a/rdlogedit/edit_chain.h b/rdlogedit/edit_chain.h index 6aa37d57..9abb4830 100644 --- a/rdlogedit/edit_chain.h +++ b/rdlogedit/edit_chain.h @@ -2,7 +2,7 @@ // // Edit a Rivendell Chain-To event // -// (C) Copyright 2002-2019 Fred Gleason +// (C) Copyright 2002-2022 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,14 +21,6 @@ #ifndef EDIT_CHAIN_H #define EDIT_CHAIN_H -#include -#include -#include -#include -#include -#include -#include - #include #include #include @@ -39,12 +31,15 @@ class EditChain : public EditEvent { Q_OBJECT public: - EditChain(RDLogLine *,QWidget *parent=0); + EditChain(QWidget *parent=0); QSize sizeHint() const; QSizePolicy sizePolicy() const; - + + public slots: + int exec(RDLogLine *ll); + private slots: - void selectLogData(); + void selectLogData(); void labelChangedData(const QString &); protected: diff --git a/rdlogedit/edit_event.cpp b/rdlogedit/edit_event.cpp index 0ed0eb59..0c480b3e 100644 --- a/rdlogedit/edit_event.cpp +++ b/rdlogedit/edit_event.cpp @@ -2,7 +2,7 @@ // // Base class for rdlogedit(1) event editor dialogs // -// (C) Copyright 2002-2021 Fred Gleason +// (C) Copyright 2002-2022 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 @@ -24,13 +24,12 @@ #include #include "edit_event.h" - #include "globals.h" -EditEvent::EditEvent(RDLogLine *line,QWidget *parent) +EditEvent::EditEvent(QWidget *parent) : RDDialog(parent) { - edit_logline=line; + // edit_logline=line; // // Time Type @@ -101,10 +100,11 @@ EditEvent::EditEvent(RDLogLine *line,QWidget *parent) edit_cancel_button->setFont(buttonFont()); edit_cancel_button->setText(tr("Cancel")); connect(edit_cancel_button,SIGNAL(clicked()),this,SLOT(cancelData())); +} - // - // Populate Data - // + +int EditEvent::exec() +{ edit_time_edit->setTime(edit_logline->startTime(RDLogLine::Logged)); if(edit_logline->timeType()==RDLogLine::Hard) { edit_timetype_box->setChecked(true); @@ -132,6 +132,8 @@ EditEvent::EditEvent(RDLogLine *line,QWidget *parent) break; } edit_transtype_box->setCurrentIndex(edit_logline->transType()); + + return QDialog::exec(); } @@ -241,6 +243,12 @@ RDLogLine *EditEvent::logLine() } +void EditEvent::setLogLine(RDLogLine *ll) +{ + edit_logline=ll; +} + + void EditEvent::resizeEvent(QResizeEvent *e) { edit_timetype_box->setGeometry(10,22,15,15); diff --git a/rdlogedit/edit_event.h b/rdlogedit/edit_event.h index f4a0f710..6b6f7509 100644 --- a/rdlogedit/edit_event.h +++ b/rdlogedit/edit_event.h @@ -2,7 +2,7 @@ // // Base class for rdlogedit(1) event editor dialogs // -// (C) Copyright 2002-2019 Fred Gleason +// (C) Copyright 2002-2022 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,13 +21,11 @@ #ifndef EDIT_EVENT_H #define EDIT_EVENT_H -#include -#include -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include #include #include @@ -37,7 +35,7 @@ class EditEvent : public RDDialog { Q_OBJECT protected: - EditEvent(RDLogLine *,QWidget *parent=0); + EditEvent(QWidget *parent=0); private slots: void timeChangedData(const QTime &); @@ -48,7 +46,9 @@ class EditEvent : public RDDialog void cancelData(); protected: + int exec(); RDLogLine *logLine(); + void setLogLine(RDLogLine *ll); virtual bool saveData()=0; void resizeEvent(QResizeEvent *e); void closeEvent(QCloseEvent *e); diff --git a/rdlogedit/edit_log.cpp b/rdlogedit/edit_log.cpp index 637e490a..c727447d 100644 --- a/rdlogedit/edit_log.cpp +++ b/rdlogedit/edit_log.cpp @@ -2,7 +2,7 @@ // // Edit a Rivendell Log // -// (C) Copyright 2002-2021 Fred Gleason +// (C) Copyright 2002-2022 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 @@ -27,35 +27,23 @@ #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" -EditLog::EditLog(QString logname,QString *filter,QString *group, - QString *schedcode,QList *clipboard, - QStringList *new_logs,QWidget *parent) +EditLog::EditLog(QString *filter,QString *group,QString *schedcode, + QList *clipboard,QWidget *parent) : RDDialog(parent) { - QString sql; - RDSqlQuery *q; - QStringList services_list; QColor system_mid_color=palette().mid().color(); QColor system_button_color=palette().button().color(); - 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(); + edit_log=NULL; + edit_log_lock=NULL; setWindowTitle("RDLogEdit - "+tr("Edit Log")); @@ -78,29 +66,24 @@ EditLog::EditLog(QString logname,QString *filter,QString *group, // Dialogs // edit_render_dialog=new RenderDialog(this); + edit_logline_dialog= + new EditLogLine(edit_filter,edit_group,edit_schedcode,this); + edit_marker_dialog=new EditMarker(this); + edit_track_dialog=new EditTrack(this); + edit_chain_dialog=new EditChain(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); - // // Log Name // edit_modified_label=new QLabel(this); edit_modified_label->setAlignment(Qt::AlignCenter|Qt::AlignVCenter); edit_modified_label->setFont(progressFont()); - edit_logname_label=new QLabel(logname,this); + edit_logname_label=new QLabel(this); edit_logname_label->setAlignment(Qt::AlignLeft|Qt::AlignVCenter); edit_logname_label_label=new QLabel(tr("Log Name:"),this); edit_logname_label_label->setFont(labelFont()); @@ -118,10 +101,7 @@ EditLog::EditLog(QString logname,QString *filter,QString *group, // // 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=new QLabel(this); edit_origin_label->setAlignment(Qt::AlignLeft|Qt::AlignVCenter); edit_origin_label_label=new QLabel(tr("Origin:"),this); edit_origin_label_label->setFont(labelFont()); @@ -257,12 +237,10 @@ EditLog::EditLog(QString logname,QString *filter,QString *group, edit_log_view->setShowGrid(false); edit_log_view->setSortingEnabled(false); edit_log_view->setWordWrap(false); - edit_log_model=new LogModel(edit_logname,this); + edit_log_model=new LogModel(this); edit_log_model->setFont(defaultFont()); edit_log_model->setPalette(palette()); - edit_log_model->load(true); edit_log_view->setModel(edit_log_model); - edit_log_view->resizeColumnsToContents(); connect(edit_log_model, SIGNAL(dataChanged(const QModelIndex &,const QModelIndex &)), this,SLOT(dataChangedData(const QModelIndex &,const QModelIndex &))); @@ -437,10 +415,59 @@ EditLog::EditLog(QString logname,QString *filter,QString *group, edit_cancel_button->setFont(buttonFont()); edit_cancel_button->setText(tr("Cancel")); connect(edit_cancel_button,SIGNAL(clicked()),this,SLOT(cancelData())); +} - // - // Populate Data - // + +EditLog::~EditLog() +{ + delete edit_log_model; + delete edit_log_lock; +} + + +QSize EditLog::sizeHint() const +{ + return global_logedit_window_size; +} + + +//int EditLog::exec() +int EditLog::exec(const QString &logname,QStringList *new_logs) +{ + QString sql; + RDSqlQuery *q; + QString username; + QString stationname; + QHostAddress addr; + bool adding_allowed=rda->user()->addtoLog(); + bool deleting_allowed=rda->user()->removefromLog(); + bool editing_allowed=rda->user()->arrangeLog(); + bool saveas_allowed=rda->user()->createLog(); + QStringList services_list; + + edit_logname=logname; + edit_newlogs=new_logs; + if(edit_log!=NULL) { + delete edit_log; + } + edit_log=new RDLog(edit_logname); + edit_logname_label->setText(edit_logname); + edit_log_model->setLogName(edit_logname); + edit_log_model->load(true); + edit_log_view->resizeColumnsToContents(); + edit_origin_label-> + setText(edit_log->originUser()+QString(" - ")+ + edit_log->originDatetime().toString("MM/dd/yyyy - hh:mm:ss")); + edit_log_lock=new RDLogLock(edit_logname,rda->user(),rda->station(),this); + 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; + } edit_description_edit->setText(edit_log->description()); QDate purge_date=edit_log->purgeDate(); @@ -542,37 +569,6 @@ EditLog::EditLog(QString logname,QString *filter,QString *group, 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_model; - delete edit_log_lock; -} - - -QSize EditLog::sizeHint() const -{ - return global_logedit_window_size; -} - - -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(); } @@ -681,21 +677,18 @@ void EditLog::insertCartButtonData() edit_log_model->logLine(line)->setTransType(edit_default_trans); edit_log_model->logLine(line)->setFadeupGain(-3000); edit_log_model->logLine(line)->setFadedownGain(-3000); - EditLogLine *edit= - new EditLogLine(edit_log_model->logLine(line),edit_filter,edit_group, - edit_schedcode,edit_service_box->currentText(), - edit_log_model,line,this); - int ret=edit->exec(); + printf("CARTNUM: %06u\n",edit_log_model->logLine(line)->cartNumber()); + int ret=edit_logline_dialog-> + exec(edit_service_box->currentText(),edit_log_model, + edit_log_model->logLine(line),line); if(ret>=0) { edit_log_model->update(line); SetLogModified(true); } else { edit_log_model->remove(line,1); - delete edit; return; } - delete edit; UpdateCounters(); } @@ -709,17 +702,12 @@ void EditLog::insertMarkerButtonData() } int ret; - EditMarker *edit_marker; - EditTrack *edit_track; - EditChain *edit_chain; - AddMeta *meta=new AddMeta(this); switch((RDLogLine::Type)meta->exec()) { case RDLogLine::Marker: edit_log_model->insert(line,1); edit_log_model->logLine(line)->setType(RDLogLine::Marker); - edit_marker=new EditMarker(edit_log_model->logLine(line),this); - ret=edit_marker->exec(); + ret=edit_marker_dialog->exec(edit_log_model->logLine(line)); if(ret>=0) { edit_log_model->update(line); SetLogModified(true); @@ -727,7 +715,6 @@ void EditLog::insertMarkerButtonData() else { edit_log_model->remove(line,1); } - delete edit_marker; break; case RDLogLine::Track: @@ -735,8 +722,7 @@ void EditLog::insertMarkerButtonData() edit_log_model->logLine(line)->setType(RDLogLine::Track); edit_log_model->logLine(line)->setTransType(RDLogLine::Segue); edit_log_model->logLine(line)->setMarkerComment(tr("Voice Track")); - edit_track=new EditTrack(edit_log_model->logLine(line),this); - ret=edit_track->exec(); + ret=edit_track_dialog->exec(edit_log_model->logLine(line)); if(ret>=0) { edit_log_model->update(line); SetLogModified(true); @@ -744,14 +730,12 @@ void EditLog::insertMarkerButtonData() else { edit_log_model->remove(line,1); } - delete edit_track; break; case RDLogLine::Chain: edit_log_model->insert(line,1); edit_log_model->logLine(line)->setType(RDLogLine::Chain); - edit_chain=new EditChain(edit_log_model->logLine(line),this); - ret=edit_chain->exec(); + ret=edit_chain_dialog->exec(edit_log_model->logLine(line)); if(ret>=0) { edit_log_model->update(line); SetLogModified(true); @@ -759,7 +743,6 @@ void EditLog::insertMarkerButtonData() else { edit_log_model->remove(line,1); } - delete edit_chain; break; default: @@ -813,10 +796,6 @@ void EditLog::doubleClickedData(const QModelIndex &index) void EditLog::editButtonData() { - EditLogLine *edit_cart; - EditMarker *edit_marker; - EditTrack *edit_track; - EditChain *edit_chain; int line; if((line=SingleSelectionLine())<0) { @@ -826,39 +805,29 @@ void EditLog::editButtonData() switch(edit_log_model->logLine(line)->type()) { case RDLogLine::Cart: case RDLogLine::Macro: - edit_cart= - new EditLogLine(edit_log_model->logLine(line),edit_filter,edit_group, - edit_schedcode,edit_service_box->currentText(), - edit_log_model,line,this); - if(edit_cart->exec()>=0) { + if(edit_logline_dialog->exec(edit_service_box->currentText(),edit_log_model, + edit_log_model->logLine(line),line)>=0) { edit_log_model->update(line); SetLogModified(true); } - delete edit_cart; break; case RDLogLine::Marker: - edit_marker=new EditMarker(edit_log_model->logLine(line),this); - if(edit_marker->exec()>=0) { + if(edit_marker_dialog->exec(edit_log_model->logLine(line))>=0) { SetLogModified(true); } - delete edit_marker; break; case RDLogLine::Track: - edit_track=new EditTrack(edit_log_model->logLine(line),this); - if(edit_track->exec()>=0) { + if(edit_track_dialog->exec(edit_log_model->logLine(line))>=0) { SetLogModified(true); } - delete edit_track; break; case RDLogLine::Chain: - edit_chain=new EditChain(edit_log_model->logLine(line),this); - if(edit_chain->exec()>=0) { + if(edit_chain_dialog->exec(edit_log_model->logLine(line))>=0) { SetLogModified(true); } - delete edit_chain; break; default: @@ -1097,6 +1066,8 @@ void EditLog::okData() for(int i=0;isize();i++) { (*edit_clipboard)[i].clearExternalData(); } + delete edit_log_lock; + edit_log_lock=NULL; done(true); } @@ -1128,6 +1099,8 @@ void EditLog::cancelData() for(int i=0;isize();i++) { (*edit_clipboard)[i].clearExternalData(); } + delete edit_log_lock; + edit_log_lock=NULL; done(false); } diff --git a/rdlogedit/edit_log.h b/rdlogedit/edit_log.h index daa5d61e..f6014bc7 100644 --- a/rdlogedit/edit_log.h +++ b/rdlogedit/edit_log.h @@ -2,7 +2,7 @@ // // Edit a Rivendell Log // -// (C) Copyright 2002-2021 Fred Gleason +// (C) Copyright 2002-2022 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 @@ -25,12 +25,15 @@ #include #include - #include #include #include #include +#include "edit_chain.h" +#include "edit_logline.h" +#include "edit_marker.h" +#include "edit_track.h" #include "list_reports.h" #include "logmodel.h" #include "logtableview.h" @@ -43,14 +46,13 @@ class EditLog : public RDDialog { Q_OBJECT public: - EditLog(QString logname,QString *filter,QString *group,QString *schedcode, - QList *clipboard,QStringList *new_logs, - QWidget *parent=0); + EditLog(QString *filter,QString *group,QString *schedcode, + QList *clipboard,QWidget *parent=0); ~EditLog(); QSize sizeHint() const; public slots: - int exec(); + int exec(const QString &logname,QStringList *new_logs); private slots: void dataChangedData(const QModelIndex &top_left, @@ -169,6 +171,10 @@ class EditLog : public RDDialog RDLogLock *edit_log_lock; QPushButton *edit_renderas_button; RenderDialog *edit_render_dialog; + EditLogLine *edit_logline_dialog; + EditMarker *edit_marker_dialog; + EditTrack *edit_track_dialog; + EditChain *edit_chain_dialog; LogTableView *edit_log_view; LogModel *edit_log_model; }; diff --git a/rdlogedit/edit_logline.cpp b/rdlogedit/edit_logline.cpp index 1eeebbe7..17d12ad8 100644 --- a/rdlogedit/edit_logline.cpp +++ b/rdlogedit/edit_logline.cpp @@ -2,7 +2,7 @@ // // Edit a Rivendell Log Entry // -// (C) Copyright 2002-2021 Fred Gleason +// (C) Copyright 2002-2022 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 @@ -22,10 +22,9 @@ #include "edit_logline.h" -EditLogLine::EditLogLine(RDLogLine *line,QString *filter,QString *group, - QString *schedcode,QString svcname, - LogModel *model,int lineno,QWidget *parent) - : EditEvent(line,parent) +EditLogLine::EditLogLine(QString *filter,QString *group,QString *schedcode, + QWidget *parent) + : EditEvent(parent) { // // Fix the Window Size @@ -38,9 +37,6 @@ EditLogLine::EditLogLine(RDLogLine *line,QString *filter,QString *group, edit_filter=filter; edit_group=group; edit_schedcode=schedcode; - edit_service=svcname; - edit_log_model=model; - edit_line=lineno; // // Cart Picker @@ -95,28 +91,6 @@ EditLogLine::EditLogLine(RDLogLine *line,QString *filter,QString *group, button->setFont(buttonFont()); button->setText(tr("Select\nCart")); connect(button,SIGNAL(clicked()),this,SLOT(selectCartData())); - - // - // Populate Data - // - if(logLine()->segueStartPoint(RDLogLine::LogPointer)<0 - && logLine()->segueEndPoint(RDLogLine::LogPointer)<0 - && logLine()->endPoint(RDLogLine::LogPointer)<0 - && logLine()->fadedownPoint(RDLogLine::LogPointer)<0) { - edit_overlap_box->setEnabled(true); - edit_overlap_label->setEnabled(true); - if(logLine()->segueGain()==0) { - edit_overlap_box->setChecked(true); - } - else { - edit_overlap_box->setChecked(false); - } - } - else { - edit_overlap_box->setEnabled(false); - edit_overlap_label->setEnabled(false); - } - FillCart(logLine()->cartNumber()); } @@ -138,6 +112,37 @@ QSizePolicy EditLogLine::sizePolicy() const } +int EditLogLine::exec(const QString &svcname,LogModel *model, + RDLogLine *ll,int lineno) +{ + edit_service=svcname; + edit_log_model=model; + edit_line=lineno; + setLogLine(ll); + + if(logLine()->segueStartPoint(RDLogLine::LogPointer)<0 + && logLine()->segueEndPoint(RDLogLine::LogPointer)<0 + && logLine()->endPoint(RDLogLine::LogPointer)<0 + && logLine()->fadedownPoint(RDLogLine::LogPointer)<0) { + edit_overlap_box->setEnabled(true); + edit_overlap_label->setEnabled(true); + if(logLine()->segueGain()==0) { + edit_overlap_box->setChecked(true); + } + else { + edit_overlap_box->setChecked(false); + } + } + else { + edit_overlap_box->setEnabled(false); + edit_overlap_label->setEnabled(false); + } + FillCart(logLine()->cartNumber()); + + return EditEvent::exec(); +} + + void EditLogLine::selectCartData() { bool ok; @@ -186,11 +191,16 @@ bool EditLogLine::saveData() void EditLogLine::FillCart(int cartnum) { - RDCart *cart=new RDCart(cartnum); - if(cartnum!=0) { - edit_cart_edit->setText(QString::asprintf("%05u",cartnum)); + if(cartnum==0) { + edit_cart_edit->setText(""); + edit_title_edit->setText(""); + edit_artist_edit->setText(""); + } + else { + RDCart *cart=new RDCart(cartnum); + edit_cart_edit->setText(QString::asprintf("%05u",cartnum)); + edit_title_edit->setText(cart->title()); + edit_artist_edit->setText(cart->artist()); + delete cart; } - edit_title_edit->setText(cart->title()); - edit_artist_edit->setText(cart->artist()); - delete cart; } diff --git a/rdlogedit/edit_logline.h b/rdlogedit/edit_logline.h index 8703bdb4..09ce1fe6 100644 --- a/rdlogedit/edit_logline.h +++ b/rdlogedit/edit_logline.h @@ -2,7 +2,7 @@ // // Edit a Rivendell cart event // -// (C) Copyright 2002-2020 Fred Gleason +// (C) Copyright 2002-2022 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 @@ -30,12 +30,15 @@ class EditLogLine : public EditEvent { Q_OBJECT public: - EditLogLine(RDLogLine *,QString *filter,QString *group,QString *schedcode, - QString svcname,LogModel *model,int lineno,QWidget *parent=0); + EditLogLine(QString *filter,QString *group,QString *schedcode, + QWidget *parent=0); ~EditLogLine(); QSize sizeHint() const; QSizePolicy sizePolicy() const; - + + public slots: + int exec(const QString &svcname,LogModel *model,RDLogLine *ll,int lineno); + private slots: void selectCartData(); diff --git a/rdlogedit/edit_marker.cpp b/rdlogedit/edit_marker.cpp index d18cba18..06d0a609 100644 --- a/rdlogedit/edit_marker.cpp +++ b/rdlogedit/edit_marker.cpp @@ -2,7 +2,7 @@ // // Edit a Rivendell marker event // -// (C) Copyright 2002-2019 Fred Gleason +// (C) Copyright 2002-2022 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 @@ -20,8 +20,8 @@ #include "edit_marker.h" -EditMarker::EditMarker(RDLogLine *line,QWidget *parent) - : EditEvent(line,parent) +EditMarker::EditMarker(QWidget *parent) + : EditEvent(parent) { // // Fix the Window Size @@ -52,12 +52,6 @@ EditMarker::EditMarker(RDLogLine *line,QWidget *parent) label=new QLabel(tr("Label"),this); label->setFont(labelFont()); label->setGeometry(12,140,60,14); - - // - // Populate Data - // - edit_comment_edit->setText(logLine()->markerComment()); - edit_label_edit->setText(logLine()->markerLabel()); } @@ -73,6 +67,16 @@ QSizePolicy EditMarker::sizePolicy() const } +int EditMarker::exec(RDLogLine *ll) +{ + setLogLine(ll); + edit_comment_edit->setText(logLine()->markerComment()); + edit_label_edit->setText(logLine()->markerLabel()); + + return EditEvent::exec(); +} + + bool EditMarker::saveData() { logLine()->setMarkerComment(edit_comment_edit->text()); diff --git a/rdlogedit/edit_marker.h b/rdlogedit/edit_marker.h index 32b37725..cd7af9d5 100644 --- a/rdlogedit/edit_marker.h +++ b/rdlogedit/edit_marker.h @@ -2,7 +2,7 @@ // // Edit a Rivendell marker event // -// (C) Copyright 2002-2019 Fred Gleason +// (C) Copyright 2002-2022 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,7 +21,7 @@ #ifndef EDIT_MARKER_H #define EDIT_MARKER_H -#include +#include #include "edit_event.h" @@ -29,10 +29,13 @@ class EditMarker : public EditEvent { Q_OBJECT public: - EditMarker(RDLogLine *,QWidget *parent=0); + EditMarker(QWidget *parent=0); QSize sizeHint() const; QSizePolicy sizePolicy() const; - + + public slots: + int exec(RDLogLine *ll); + protected: bool saveData(); diff --git a/rdlogedit/edit_track.cpp b/rdlogedit/edit_track.cpp index aea404c8..d5fb9bc8 100644 --- a/rdlogedit/edit_track.cpp +++ b/rdlogedit/edit_track.cpp @@ -2,7 +2,7 @@ // // Edit a Rivendell Voice Track Log Entry // -// (C) Copyright 2002-2019 Fred Gleason +// (C) Copyright 2002-2022 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 @@ -20,8 +20,8 @@ #include "edit_track.h" -EditTrack::EditTrack(RDLogLine *line,QWidget *parent) - : EditEvent(line,parent) +EditTrack::EditTrack(QWidget *parent) + : EditEvent(parent) { setWindowTitle("RDLogEdit - "+tr("Edit Voice Track Marker")); @@ -40,11 +40,6 @@ EditTrack::EditTrack(RDLogLine *line,QWidget *parent) QLabel *label=new QLabel(tr("Comment"),this); label->setFont(labelFont()); label->setGeometry(12,100,70,14); - - // - // Populate Data - // - edit_comment_edit->setText(logLine()->markerComment()); } @@ -60,6 +55,15 @@ QSizePolicy EditTrack::sizePolicy() const } +int EditTrack::exec(RDLogLine *ll) +{ + setLogLine(ll); + edit_comment_edit->setText(logLine()->markerComment()); + + return EditEvent::exec(); +} + + bool EditTrack::saveData() { logLine()->setMarkerComment(edit_comment_edit->text()); diff --git a/rdlogedit/edit_track.h b/rdlogedit/edit_track.h index 98160ec8..77826640 100644 --- a/rdlogedit/edit_track.h +++ b/rdlogedit/edit_track.h @@ -2,7 +2,7 @@ // // Edit a Rivendell Voice Track Log Entry // -// (C) Copyright 2002-2019 Fred Gleason +// (C) Copyright 2002-2022 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,7 +21,7 @@ #ifndef EDIT_TRACK_H #define EDIT_TRACK_H -#include +#include #include "edit_event.h" @@ -29,10 +29,13 @@ class EditTrack : public EditEvent { Q_OBJECT public: - EditTrack(RDLogLine *,QWidget *parent=0); + EditTrack(QWidget *parent=0); QSize sizeHint() const; QSizePolicy sizePolicy() const; + public slots: + int exec(RDLogLine *ll); + protected: bool saveData(); diff --git a/rdlogedit/logmodel.cpp b/rdlogedit/logmodel.cpp index 1771744f..e8507ae4 100644 --- a/rdlogedit/logmodel.cpp +++ b/rdlogedit/logmodel.cpp @@ -27,6 +27,13 @@ LogModel::LogModel(const QString &logname,QObject *parent) } +LogModel::LogModel(QObject *parent) + : RDLogModel(parent) +{ + d_group_list=new RDGroupList(); +} + + LogModel::~LogModel() { delete d_group_list; diff --git a/rdlogedit/logmodel.h b/rdlogedit/logmodel.h index 2e33dc42..e20f7152 100644 --- a/rdlogedit/logmodel.h +++ b/rdlogedit/logmodel.h @@ -29,6 +29,7 @@ class LogModel : public RDLogModel Q_OBJECT public: LogModel(const QString &logname,QObject *parent=0); + LogModel(QObject *parent=0); ~LogModel(); QString serviceName() const; bool groupIsValid(const QString &grpname) const; diff --git a/rdlogedit/rdlogedit.cpp b/rdlogedit/rdlogedit.cpp index bfb9e968..95be5177 100644 --- a/rdlogedit/rdlogedit.cpp +++ b/rdlogedit/rdlogedit.cpp @@ -111,6 +111,9 @@ MainWidget::MainWidget(RDConfig *c,QWidget *parent) // // Dialogs // + log_edit_dialog= + new EditLog(&log_filter,&log_group,&log_schedcode,&log_clipboard,this); + log_tracker_dialog=new VoiceTracker(&log_import_path,this); // @@ -268,11 +271,7 @@ void MainWidget::addData() } LockList(); SendNotification(RDNotification::AddAction,logname); - EditLog *editlog=new EditLog(logname,&log_filter,&log_group,&log_schedcode, - &log_clipboard,&newlogs,this); - editlog->exec(); - delete editlog; - + log_edit_dialog->exec(logname,&newlogs); row=log_log_model->addLog(logname); log_log_view->selectRow(row.row()); UnlockList(); @@ -290,14 +289,10 @@ void MainWidget::editData() QString logname=log_log_model->logName(row); QStringList newlogs; LockList(); - EditLog *log= - new EditLog(logname,&log_filter,&log_group,&log_schedcode, - &log_clipboard,&newlogs,this); - if(log->exec()) { + if(log_edit_dialog->exec(logname,&newlogs)) { log_log_model->refresh(row); } UnlockList(); - delete log; } diff --git a/rdlogedit/rdlogedit.h b/rdlogedit/rdlogedit.h index fa6b0c0a..c0543267 100644 --- a/rdlogedit/rdlogedit.h +++ b/rdlogedit/rdlogedit.h @@ -31,6 +31,7 @@ #include #include +#include "edit_log.h" #include "voice_tracker.h" #define RDLOGEDIT_DEFAULT_WIDTH 640 @@ -91,6 +92,7 @@ class MainWidget : public RDMainWindow bool log_resize; bool log_list_locked; QStringList log_deleted_logs; + EditLog *log_edit_dialog; VoiceTracker *log_tracker_dialog; };