From 3510284b258edff6a82442691cb2380fb4994922 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Mardelle Date: Sun, 17 Feb 2008 16:38:36 +0000 Subject: [PATCH] Fix undo/redo delete clip svn path=/branches/KDE4/; revision=1858 --- src/addtimelineclipcommand.cpp | 18 ++++++++++-------- src/addtimelineclipcommand.h | 3 ++- src/clipmanager.cpp | 16 +++++++++++++++- src/clipmanager.h | 1 + src/customtrackview.cpp | 17 ++++++++++++++++- src/customtrackview.h | 1 + src/kdenlivedoc.cpp | 8 +++++++- src/kdenlivedoc.h | 4 +++- src/mainwindow.cpp | 4 ++-- src/projectlist.cpp | 10 +++++----- src/trackview.cpp | 5 +++++ src/trackview.h | 3 ++- 12 files changed, 69 insertions(+), 21 deletions(-) diff --git a/src/addtimelineclipcommand.cpp b/src/addtimelineclipcommand.cpp index 079dcdfb..3d3f66a9 100644 --- a/src/addtimelineclipcommand.cpp +++ b/src/addtimelineclipcommand.cpp @@ -21,24 +21,26 @@ #include "addtimelineclipcommand.h" -AddTimelineClipCommand::AddTimelineClipCommand(CustomTrackView *view, QDomElement xml, int clipId, int track, int startpos, QRectF rect, int duration, bool doIt) - : m_view(view), m_xml(xml), m_clipId(clipId), m_clipTrack(track), m_clipPos(startpos), m_clipRect(rect), m_clipDuration(duration), m_doIt(doIt) { - setText(i18n("Add timeline clip")); +AddTimelineClipCommand::AddTimelineClipCommand(CustomTrackView *view, QDomElement xml, int clipId, int track, int startpos, QRectF rect, int duration, bool doIt, bool doRemove) + : m_view(view), m_xml(xml), m_clipId(clipId), m_clipTrack(track), m_clipPos(startpos), m_clipRect(rect), m_clipDuration(duration), m_doIt(doIt), m_remove(doRemove) { + if (!m_remove) setText(i18n("Add timeline clip")); + else setText(i18n("Delete timeline clip")); } // virtual void AddTimelineClipCommand::undo() { -// kDebug()<<"---- undoing action"; - m_doIt = true; - if (m_doIt) m_view->deleteClip(m_clipTrack, m_clipPos, m_clipRect); + if (!m_remove) m_view->deleteClip(m_clipTrack, m_clipPos, m_clipRect); + else m_view->addClip(m_xml, m_clipId, m_clipTrack, m_clipPos, m_clipRect, m_clipDuration); } // virtual void AddTimelineClipCommand::redo() { - //kDebug()<<"---- redoing action"; - if (m_doIt) m_view->addClip(m_xml, m_clipId, m_clipTrack, m_clipPos, m_clipRect, m_clipDuration); + if (m_doIt) { + if (!m_remove) m_view->addClip(m_xml, m_clipId, m_clipTrack, m_clipPos, m_clipRect, m_clipDuration); + else m_view->deleteClip(m_clipTrack, m_clipPos, m_clipRect); + } m_doIt = true; } diff --git a/src/addtimelineclipcommand.h b/src/addtimelineclipcommand.h index 98e0a873..8e398941 100644 --- a/src/addtimelineclipcommand.h +++ b/src/addtimelineclipcommand.h @@ -33,7 +33,7 @@ class AddTimelineClipCommand : public QUndoCommand { public: - AddTimelineClipCommand(CustomTrackView *view, QDomElement xml, int clipId, int track, int startpos, QRectF rect, int duration, bool doIt); + AddTimelineClipCommand(CustomTrackView *view, QDomElement xml, int clipId, int track, int startpos, QRectF rect, int duration, bool doIt, bool doRemove); virtual void undo(); virtual void redo(); @@ -46,6 +46,7 @@ class AddTimelineClipCommand : public QUndoCommand int m_clipPos; QRectF m_clipRect; bool m_doIt; + bool m_remove; }; #endif diff --git a/src/clipmanager.cpp b/src/clipmanager.cpp index d355f61f..cf0812f4 100644 --- a/src/clipmanager.cpp +++ b/src/clipmanager.cpp @@ -38,11 +38,25 @@ void ClipManager::addClip(DocClipBase *clip) m_clipList.append(clip); } +void ClipManager::slotDeleteClip(uint clipId) +{ + for (int i = 0; i < m_clipList.count(); i++) { + if (m_clipList.at(i)->getId() == clipId) { + //m_clipList.removeAt(i); + AddClipCommand *command = new AddClipCommand(m_doc, m_clipList.at(i)->toXML(), clipId, false); + m_doc->commandStack()->push(command); + break; + } + } +} + void ClipManager::deleteClip(uint clipId) { for (int i = 0; i < m_clipList.count(); i++) { - if (m_clipList.at(i)->getId() == clipId) + if (m_clipList.at(i)->getId() == clipId) { m_clipList.removeAt(i); + break; + } } } diff --git a/src/clipmanager.h b/src/clipmanager.h index fe708e96..30dfd24c 100644 --- a/src/clipmanager.h +++ b/src/clipmanager.h @@ -51,6 +51,7 @@ class ClipManager:public QObject { void slotAddClipFile(const KUrl url, const QString group); void slotAddColorClipFile(const QString name, const QString color, QString duration, const QString group); DocClipBase *getClipById(int clipId); + void slotDeleteClip(uint clipId); private: // Private attributes /** the list of clips in the document */ diff --git a/src/customtrackview.cpp b/src/customtrackview.cpp index 2cdd60cf..6c8b2d15 100644 --- a/src/customtrackview.cpp +++ b/src/customtrackview.cpp @@ -350,7 +350,7 @@ void CustomTrackView::dragLeaveEvent ( QDragLeaveEvent * event ) { void CustomTrackView::dropEvent ( QDropEvent * event ) { if (m_dropItem) { - AddTimelineClipCommand *command = new AddTimelineClipCommand(this, m_dropItem->xml(), m_dropItem->clipProducer(), m_dropItem->track(), m_dropItem->startPos(), m_dropItem->rect(), m_dropItem->duration(), false); + AddTimelineClipCommand *command = new AddTimelineClipCommand(this, m_dropItem->xml(), m_dropItem->clipProducer(), m_dropItem->track(), m_dropItem->startPos(), m_dropItem->rect(), m_dropItem->duration(), false, false); m_commandStack->push(command); m_dropItem->baseClip()->addReference(); m_document->updateClip(m_dropItem->baseClip()->getId()); @@ -398,6 +398,21 @@ void CustomTrackView::removeTrack () m_cursorLine->setLine(m_cursorLine->line().x1(), 0, m_cursorLine->line().x1(), 50 * m_tracksCount); } +void CustomTrackView::deleteClip(int clipId) +{ + QList itemList = items(); + for (int i = 0; i < itemList.count(); i++) { + if (itemList.at(i)->type() == 70000) { + ClipItem *item = (ClipItem *)itemList.at(i); + if (item->clipProducer() == clipId) { + AddTimelineClipCommand *command = new AddTimelineClipCommand(this, item->xml(), item->clipProducer(), item->track(), item->startPos(), item->rect(), item->duration(), true, true); + m_commandStack->push(command); + //delete item; + } + } + } +} + void CustomTrackView::setCursorPos(int pos, bool seek) { m_cursorPos = pos; diff --git a/src/customtrackview.h b/src/customtrackview.h index c8df2fb3..16e6ae79 100644 --- a/src/customtrackview.h +++ b/src/customtrackview.h @@ -49,6 +49,7 @@ class CustomTrackView : public QGraphicsView void deleteClip ( int track, int startpos, const QRectF &rect ); void setDuration(int duration); void setScale(double scaleFactor); + void deleteClip(int clipId); public slots: void setCursorPos(int pos, bool seek = true); diff --git a/src/kdenlivedoc.cpp b/src/kdenlivedoc.cpp index 47ce43e5..3ca56179 100644 --- a/src/kdenlivedoc.cpp +++ b/src/kdenlivedoc.cpp @@ -262,9 +262,15 @@ void KdenliveDoc::addClip(const QDomElement &elem, const int clipId) emit addProjectClip(clip); } +void KdenliveDoc::deleteProjectClip(const uint clipId) +{ + emit deletTimelineClip(clipId); + m_clipManager->slotDeleteClip(clipId); +} + void KdenliveDoc::deleteClip(const uint clipId) { - emit deleteProjectClip(clipId); + emit signalDeleteProjectClip(clipId); m_clipManager->deleteClip(clipId); } diff --git a/src/kdenlivedoc.h b/src/kdenlivedoc.h index 36aa33a5..4f285f3f 100644 --- a/src/kdenlivedoc.h +++ b/src/kdenlivedoc.h @@ -63,6 +63,7 @@ class KdenliveDoc:public QObject { int getFramePos(QString duration); DocClipBase *getBaseClip(int clipId); void updateClip(int id); + void deleteProjectClip(const uint clipId); private: KUrl m_url; @@ -81,8 +82,9 @@ class KdenliveDoc:public QObject { signals: void addProjectClip(DocClipBase *); - void deleteProjectClip(int); + void signalDeleteProjectClip(int); void updateClipDisplay(int); + void deletTimelineClip(int); }; #endif diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 7ab87fe4..c7466901 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -333,9 +333,9 @@ void MainWindow::connectDocument(TrackView *trackView, KdenliveDoc *doc) //chang connect(trackView, SIGNAL(mousePosition(int)), this, SLOT(slotUpdateMousePosition(int))); connect(m_projectMonitor, SIGNAL(renderPosition(int)), trackView, SLOT(moveCursorPos(int))); connect(doc, SIGNAL(addProjectClip(DocClipBase *)), m_projectList, SLOT(slotAddClip(DocClipBase *))); - connect(doc, SIGNAL(deleteProjectClip(int)), m_projectList, SLOT(slotDeleteClip(int))); + connect(doc, SIGNAL(signalDeleteProjectClip(int)), m_projectList, SLOT(slotDeleteClip(int))); connect(doc, SIGNAL(updateClipDisplay(int)), m_projectList, SLOT(slotUpdateClip(int))); - + connect(doc, SIGNAL(deletTimelineClip(int)), trackView, SLOT(slotDeleteClip(int))); m_projectList->setDocument(doc); m_monitorManager->setTimecode(doc->timecode()); diff --git a/src/projectlist.cpp b/src/projectlist.cpp index 362d8538..e4a11250 100644 --- a/src/projectlist.cpp +++ b/src/projectlist.cpp @@ -180,14 +180,14 @@ void ProjectList::slotContextMenu( const QPoint &pos, QTreeWidgetItem *item ) void ProjectList::slotRemoveClip() { -/* + if (!m_commandStack) kDebug()<<"!!!!!!!!!!!!!!!!  NO CMD STK"; if (!listView->currentItem()) return; ProjectItem *item = ((ProjectItem *)listView->currentItem()); - if (!item) kDebug()<<"/////////////// ERROR NOT FOUND"; - if (KMessageBox::questionYesNo(this, i18n("Delete clip %1 ?").arg(item->names().at(1)), i18n("Delete Clip")) != KMessageBox::Yes) return; - AddClipCommand *command = new AddClipCommand(this, item->names(), item->toXml(), item->clipId(), item->clipUrl(), item->groupName(), false); - m_commandStack->push(command);*/ + if (item->numReferences() > 0) { + if (KMessageBox::questionYesNo(this, i18n("Delete clip %1 ?
This will also remove its %2 clips in timeline").arg(item->names().at(1)).arg(item->numReferences()), i18n("Delete Clip")) != KMessageBox::Yes) return; + } + m_doc->deleteProjectClip(item->clipId()); } void ProjectList::selectItemById(const int clipId) diff --git a/src/trackview.cpp b/src/trackview.cpp index c2183ebd..21d83169 100644 --- a/src/trackview.cpp +++ b/src/trackview.cpp @@ -121,6 +121,11 @@ void TrackView::parseDocument(QDomDocument doc) //m_scrollBox->setGeometry(0, 0, 300 * zoomFactor(), m_scrollArea->height()); } +void TrackView::slotDeleteClip(int clipId) +{ + m_trackview->deleteClip(clipId); +} + void TrackView::setCursorPos(int pos) { emit cursorMoved(); diff --git a/src/trackview.h b/src/trackview.h index c230f83d..3bbf9647 100644 --- a/src/trackview.h +++ b/src/trackview.h @@ -57,9 +57,10 @@ class TrackView : public QWidget CustomTrackView *projectView(); int duration(); int tracksNumber(); + KdenliveDoc *document(); public slots: - KdenliveDoc *document(); + void slotDeleteClip(int clipId); private: Ui::TimeLine_UI *view; -- 2.39.2