]> git.sesse.net Git - kdenlive/commitdiff
Fix undo/redo delete clip
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Sun, 17 Feb 2008 16:38:36 +0000 (16:38 +0000)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Sun, 17 Feb 2008 16:38:36 +0000 (16:38 +0000)
svn path=/branches/KDE4/; revision=1858

12 files changed:
src/addtimelineclipcommand.cpp
src/addtimelineclipcommand.h
src/clipmanager.cpp
src/clipmanager.h
src/customtrackview.cpp
src/customtrackview.h
src/kdenlivedoc.cpp
src/kdenlivedoc.h
src/mainwindow.cpp
src/projectlist.cpp
src/trackview.cpp
src/trackview.h

index 079dcdfb326e3b94cebc4f116e00cfa48fe37550..3d3f66a972229638414b8b2ceff1869b0f75b033 100644 (file)
 
 #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;
 }
 
index 98e0a87370f8d5ae5de9d3b4f6f8191c6b6c5ebb..8e398941029033b472ba411e9eff08477cf7de6b 100644 (file)
@@ -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
index d355f61fbd8b0acfd83f820e3293e4ff37959a90..cf0812f4f2f21c85a19a66c81a02e2de3fc55292 100644 (file)
@@ -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;
+    }
   }
 }
 
index fe708e96c5d3c78eecfbfe7b5dc4a457026301f9..30dfd24c9360f90852056c46a3b3b42f7b4e2706 100644 (file)
@@ -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 */
index 2cdd60cf75b2b3ad82d52ae78050d513d119727a..6c8b2d15c5a06159005ea2f6fd9631d244cbbd8e 100644 (file)
@@ -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<QGraphicsItem *> 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;
index c8df2fb3abbc862c92a61e4421a534c2f47450d4..16e6ae796f9c73b903d807721a96988a66dcc0d8 100644 (file)
@@ -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);
index 47ce43e58c3f344c1a176ce8ccac8c33f6807939..3ca56179ad99d2bf3fa5b8082e26abc713e708dc 100644 (file)
@@ -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);
 }
 
index 36aa33a55c1e5a9e6d56b9220dbef6372c0283c8..4f285f3f4cd0392c798b92074e45b4744b5ba274 100644 (file)
@@ -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
index 7ab87fe40df2c9652064e446889d82b2787b39ef..c74669016b8f99589ed9737c11832bd6859e0a4e 100644 (file)
@@ -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());
index 362d853833aa035a67065855c725c0a3cf988da2..e4a11250d18febe8db6c1599034942cbd8f3b96f 100644 (file)
@@ -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 <b>%1</b> ?").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 <b>%1</b> ?<br>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)
index c2183ebda37d6932e42cd13e3f50bd3877aefd85..21d8316919e80d7462cc32c4daaa6607a2ff93c0 100644 (file)
@@ -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();
index c230f83db035d122ee4d5b4044759a1ae3d641f9..3bbf96472ca2c00ade3f4505f922aaf240878f43 100644 (file)
@@ -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;