2022-12-21 Fred Gleason <fredg@paravelsystems.com>

* Fixed a regression in rdlogedit(1) that caused duplicate line IDs
	to be used when pasting from the clipboard.

Signed-off-by: Fred Gleason <fredg@paravelsystems.com>
This commit is contained in:
Fred Gleason 2022-12-21 14:00:16 -05:00
parent 61b9a08f2a
commit a1bdaef361
6 changed files with 21 additions and 20 deletions

View File

@ -23838,3 +23838,6 @@
2022-12-21 Fred Gleason <fredg@paravelsystems.com>
* Added a test for duplicate log line IDs to rddbmgr(8).
* Added a '--check-log-line-ids' switch to rddbmgr(8).
2022-12-21 Fred Gleason <fredg@paravelsystems.com>
* Fixed a regression in rdlogedit(1) that caused duplicate line IDs
to be used when pasting from the clipboard.

View File

@ -2,7 +2,7 @@
##
## Use automake to process this into a Makefile.in
##
## (C) Copyright 2002-2021 Fred Gleason <fredg@paravelsystems.com>
## (C) Copyright 2002-2022 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

View File

@ -31,7 +31,7 @@
#include "globals.h"
EditLog::EditLog(QString *filter,QString *group,QString *schedcode,
QList<RDLogLine> *clipboard,QWidget *parent)
QWidget *parent)
: RDDialog(parent)
{
QColor system_mid_color=palette().mid().color();
@ -40,7 +40,6 @@ EditLog::EditLog(QString *filter,QString *group,QString *schedcode,
edit_filter=filter;
edit_group=group;
edit_schedcode=schedcode;
edit_clipboard=clipboard;
edit_default_trans=RDLogLine::Play;
edit_log=NULL;
edit_log_lock=NULL;
@ -912,11 +911,13 @@ void EditLog::pasteButtonData()
if((line=SingleSelectionLine())<0) {
return;
}
edit_log_model->insert(line,edit_clipboard->size());
for(int i=0;i<edit_clipboard->size();i++) {
*edit_log_model->logLine(line+i)=edit_clipboard->at(i);
edit_log_model->insert(line,edit_clipboard.size());
for(int i=0;i<edit_clipboard.size();i++) {
int line_id=edit_log_model->logLine(line+i)->id(); // Save the line ID
*edit_log_model->logLine(line+i)=edit_clipboard.at(i);
edit_log_model->logLine(line+i)->setId(line_id); // So we can restore it
edit_log_model->logLine(line+i)->setSource(RDLogLine::Manual);
(*edit_clipboard)[i].clearExternalData();
edit_clipboard[i].clearExternalData();
}
SetLogModified(true);
UpdateTracks();
@ -1065,8 +1066,8 @@ void EditLog::okData()
DeleteTracks();
}
edit_player->stop();
for(int i=0;i<edit_clipboard->size();i++) {
(*edit_clipboard)[i].clearExternalData();
for(int i=0;i<edit_clipboard.size();i++) {
edit_clipboard[i].clearExternalData();
}
delete edit_log_lock;
edit_log_lock=NULL;
@ -1098,8 +1099,8 @@ void EditLog::cancelData()
}
}
edit_player->stop();
for(int i=0;i<edit_clipboard->size();i++) {
(*edit_clipboard)[i].clearExternalData();
for(int i=0;i<edit_clipboard.size();i++) {
edit_clipboard[i].clearExternalData();
}
delete edit_log_lock;
edit_log_lock=NULL;
@ -1322,13 +1323,13 @@ void EditLog::LoadClipboard(bool clear_ext)
{
QItemSelectionModel *sel=edit_log_view->selectionModel();
edit_clipboard->clear();
edit_clipboard.clear();
QModelIndexList rows=sel->selectedRows();
for(int i=0;i<rows.size();i++) {
edit_clipboard->
edit_clipboard.
push_back(*edit_log_model->logLine(rows.at(i).row()));
if(clear_ext) {
edit_clipboard->back().clearExternalData();
edit_clipboard.back().clearExternalData();
}
}
}

View File

@ -46,8 +46,7 @@ class EditLog : public RDDialog
{
Q_OBJECT
public:
EditLog(QString *filter,QString *group,QString *schedcode,
QList<RDLogLine> *clipboard,QWidget *parent=0);
EditLog(QString *filter,QString *group,QString *schedcode,QWidget *parent=0);
~EditLog();
QSize sizeHint() const;
@ -104,7 +103,7 @@ class EditLog : public RDDialog
void SetLogModified(bool state);
void SendNotification(RDNotification::Action action,const QString &log_name);
RDLog *edit_log;
QList<RDLogLine> *edit_clipboard;
QList<RDLogLine> edit_clipboard;
std::vector<unsigned> edit_deleted_tracks;
QStringList *edit_newlogs;
QString edit_logname;

View File

@ -110,8 +110,7 @@ MainWidget::MainWidget(RDConfig *c,QWidget *parent)
//
// Dialogs
//
log_edit_dialog=
new EditLog(&log_filter,&log_group,&log_schedcode,&log_clipboard,this);
log_edit_dialog=new EditLog(&log_filter,&log_group,&log_schedcode,this);
log_tracker_dialog=new VoiceTracker(&log_import_path,this);
//

View File

@ -81,7 +81,6 @@ class MainWidget : public RDMainWindow
RDLogFilter *log_filter_widget;
RDTableView *log_log_view;
RDLogListModel *log_log_model;
QList<RDLogLine> log_clipboard;
QPushButton *log_add_button;
QPushButton *log_edit_button;
QPushButton *log_delete_button;