2021-10-27 Fred Gleason <fredg@paravelsystems.com>

* Fixed a regression in rdlogmanager(1) in the 'Log Events' dialog
	that caused a 'phantom' additional entry in the event list to
	be created when overwriting an existing event during a 'Save As'
	operation.

Signed-off-by: Fred Gleason <fredg@paravelsystems.com>
This commit is contained in:
Fred Gleason 2021-10-27 13:01:41 -04:00
parent e5e81ed361
commit 4a98b80c28
7 changed files with 45 additions and 26 deletions

View File

@ -22550,3 +22550,8 @@
has a <n> transition.' dropdown in the 'Editing Event' dialog to
always display 'PLAY', even when opening events with 'SEGUE' set
for that parameter.
2021-10-27 Fred Gleason <fredg@paravelsystems.com>
* Fixed a regression in rdlogmanager(1) in the 'Log Events' dialog
that caused a 'phantom' additional entry in the event list to
be created when overwriting an existing event during a 'Save As'
operation.

View File

@ -23,10 +23,10 @@
#include "add_event.h"
#include "edit_event.h"
AddEvent::AddEvent(QString *logname,QWidget *parent)
AddEvent::AddEvent(QString *evt_name,QWidget *parent)
: RDDialog(parent)
{
event_name=logname;
event_name=evt_name;
setWindowTitle("RDLogManager - "+tr("Add Log Event"));
@ -142,13 +142,13 @@ void AddEvent::nameChangedData(const QString &str)
void AddEvent::okData()
{
*event_name=event_name_edit->text();
done(0);
done(true);
}
void AddEvent::cancelData()
{
done(-1);
done(false);
}

View File

@ -2,7 +2,7 @@
//
// Add a Rivendell Log Manager Event
//
// (C) Copyright 2002-2019 Fred Gleason <fredg@paravelsystems.com>
// (C) Copyright 2002-2021 Fred Gleason <fredg@paravelsystems.com>
//
// 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
@ -31,7 +31,7 @@ class AddEvent : public RDDialog
{
Q_OBJECT
public:
AddEvent(QString *logname,QWidget *parent=0);
AddEvent(QString *evt_name,QWidget *parent=0);
~AddEvent();
QSize sizeHint() const;
QSizePolicy sizePolicy() const;

View File

@ -513,13 +513,15 @@ void EditClock::colorData()
void EditClock::editEventData(int line)
{
std::vector<QString> new_events;
QStringList new_events;
QStringList modified_events;
RDEventLine *event=edit_clocks_model->eventLine(line);
if(event==NULL) {
return;
}
EditEvent *dialog=new EditEvent(event->name(),false,&new_events,this);
EditEvent *dialog=
new EditEvent(event->name(),false,&new_events,&modified_events,this);
if(dialog->exec()<-1) {
delete dialog;
return;

View File

@ -31,14 +31,15 @@
#include "edit_event.h"
#include "edit_perms.h"
EditEvent::EditEvent(QString eventname,bool new_event,
std::vector<QString> *new_events,QWidget *parent)
EditEvent::EditEvent(QString eventname,bool new_event,QStringList *new_events,
QStringList *modified_events,QWidget *parent)
: RDDialog(parent)
{
event_saved=false;
event_name=eventname;
event_new_event=new_event;
event_new_events=new_events;
event_modified_events=modified_events;
event_event=new RDEvent(eventname);
setWindowTitle("RDLogManager - "+tr("Editing Event")+" - "+
@ -1144,7 +1145,7 @@ void EditEvent::saveAsData()
old_name=event_name;
AddEvent *add_dialog=new AddEvent(&event_name,this);
if(add_dialog->exec()<0) {
if(!add_dialog->exec()) {
delete add_dialog;
return;
}
@ -1165,8 +1166,9 @@ void EditEvent::saveAsData()
event_event->name());
}
else {
if(QMessageBox::question(this,tr("RDLogManager"),
tr("Event already exists!\nDo you want to overwrite it?"),
if(QMessageBox::question(this,"RDLogManager - "+tr("Event Exists"),
tr("An event with that name already exists!")+
"\n"+tr("Do you want to overwrite it?"),
QMessageBox::Yes,QMessageBox::No)!=
QMessageBox::Yes) {
return;
@ -1174,7 +1176,7 @@ void EditEvent::saveAsData()
delete event_event;
event_event=new RDEvent(event_name,true);
Save();
event_new_events->push_back(event_name);
event_modified_events->push_back(event_name);
sql=QString("delete from `EVENT_PERMS` where ")+
"`EVENT_NAME`='"+RDEscapeString(event_name)+"'";
q=new RDSqlQuery(sql);

View File

@ -21,7 +21,6 @@
#ifndef EDIT_EVENT_H
#define EDIT_EVENT_H
#include <QButtonGroup>
#include <QCheckBox>
#include <QDateTimeEdit>
@ -29,6 +28,7 @@
#include <QLineEdit>
#include <QRadioButton>
#include <QSpinBox>
#include <QStringList>
#include <QTextEdit>
#include <rdcombobox.h>
@ -52,8 +52,8 @@ class EditEvent : public RDDialog
{
Q_OBJECT
public:
EditEvent(QString eventname,bool new_event,std::vector<QString> *new_events,
QWidget *parent=0);
EditEvent(QString eventname,bool new_event,QStringList *new_events,
QStringList *modified_events,QWidget *parent=0);
~EditEvent();
QSize sizeHint() const;
QSizePolicy sizePolicy() const;
@ -169,7 +169,8 @@ class EditEvent : public RDDialog
QColor event_color;
bool event_saved;
bool event_new_event;
std::vector<QString> *event_new_events;
QStringList *event_new_events;
QStringList *event_modified_events;
RDSimplePlayer *event_player;
QTextEdit *event_remarks_edit;
RDEmptyCart *event_empty_cart;

View File

@ -179,10 +179,11 @@ void ListEvents::addData()
RDEvent *event;
RDSqlQuery *q;
RDSqlQuery *q1;
std::vector<QString> new_events;
QStringList new_events;
QStringList modified_events;
AddEvent *add_dialog=new AddEvent(&logname,this);
if(add_dialog->exec()<0) {
if(!add_dialog->exec()) {
delete add_dialog;
return;
}
@ -202,7 +203,8 @@ void ListEvents::addData()
delete q;
event=new RDEvent(logname,true);
delete event;
EditEvent *event_dialog=new EditEvent(logname,true,&new_events,this);
EditEvent *event_dialog=
new EditEvent(logname,true,&new_events,&modified_events,this);
if(event_dialog->exec()<-1) {
sql=QString("delete from `EVENTS` where ")+
"`NAME`='"+RDEscapeString(logname)+"'";
@ -241,7 +243,10 @@ void ListEvents::addData()
}
}
delete event_dialog;
for(unsigned i=0;i<new_events.size();i++) {
for(int i=0;i<modified_events.size();i++) {
edit_events_model->refresh(modified_events.at(i));
}
for(int i=0;i<new_events.size();i++) {
QModelIndex row=edit_events_model->addEvent(new_events.at(i));
if(row.isValid()) {
edit_events_view->selectRow(row.row());
@ -252,19 +257,23 @@ void ListEvents::addData()
void ListEvents::editData()
{
std::vector<QString> new_events;
QStringList new_events;
QStringList modified_events;
QModelIndexList rows=edit_events_view->selectionModel()->selectedRows();
if(rows.size()!=1) {
return;
}
EditEvent *event_dialog=
new EditEvent(edit_events_model->eventName(rows.first()),false,&new_events,
this);
new EditEvent(edit_events_model->eventName(rows.first()),false,
&new_events,&modified_events,this);
if(event_dialog->exec()>=-1) {
edit_events_model->refresh(rows.first());
}
for(unsigned i=0;i<new_events.size();i++) {
for(int i=0;i<modified_events.size();i++) {
edit_events_model->refresh(modified_events.at(i));
}
for(int i=0;i<new_events.size();i++) {
edit_events_model->addEvent(new_events.at(i));
}
delete event_dialog;