]> git.sesse.net Git - kdenlive/blobdiff - src/customtrackview.cpp
Update effect stak stuff
[kdenlive] / src / customtrackview.cpp
index 78365aebc2b33e4523170eeadb8498cc16d8ddc7..a8f98a36355f168df56818d415b0c5d1444a3b3e 100644 (file)
@@ -285,6 +285,7 @@ void CustomTrackView::mousePressEvent ( QMouseEvent * event )
          update();
        }
        m_dragItem = (ClipItem *) item;
+       emit clipItemSelected(m_dragItem);
        m_clickPoint = mapToScene(event->pos()).x() - m_dragItem->startPos() * m_scale;
        m_operationMode = m_dragItem->operationMode(item->mapFromScene(mapToScene(event->pos())), m_scale);
        if (m_operationMode == MOVE || m_operationMode == RESIZESTART) 
@@ -300,6 +301,10 @@ void CustomTrackView::mousePressEvent ( QMouseEvent * event )
       kDebug()<<"//////// NO ITEMĀ FOUND ON CLICK";
       m_dragItem = NULL;
       setCursor(Qt::ArrowCursor);
+      QList<QGraphicsItem *> itemList = items();
+      for (int i = 0; i < itemList.count(); i++)
+       itemList.at(i)->setSelected(false);
+      emit clipItemSelected(NULL);
       setCursorPos((int) mapToScene(event->x(), 0).x());
       emit cursorMoved(cursorPos());
     }
@@ -324,33 +329,66 @@ void CustomTrackView::dragEnterEvent ( QDragEnterEvent * event )
   }
 }
 
-void CustomTrackView::addEffect(int track, GenTime pos, QString tag, QMap <QString, QString> args)
+void CustomTrackView::slotRefreshEffects(ClipItem *clip)
+{
+  int track = m_tracksCount - clip->track();
+  GenTime pos = GenTime(clip->startPos(), m_document->fps());
+  m_document->renderer()->mltRemoveEffect(track, pos, "-1");
+  for (int i = 0; i < clip->effectsCount(); i++) {
+    m_document->renderer()->mltAddEffect(track, pos, clip->getEffectArgs(clip->effectAt(i)));
+  }
+}
+
+void CustomTrackView::addEffect(int track, GenTime pos, QDomElement effect)
 {
-  m_document->renderer()->mltAddEffect(track, pos, tag, args);
   ClipItem *clip = getClipItemAt(pos.frames(m_document->fps()) + 1, m_tracksCount - track);
-  if (clip) clip->addEffect(args);
+  if (clip){ 
+    QMap <QString, QString> effectParams = clip->addEffect(effect);
+    m_document->renderer()->mltAddEffect(track, pos, effectParams);
+    emit clipItemSelected(clip);
+  }
 }
 
-void CustomTrackView::deleteEffect(int track, GenTime pos, QString tag)
+void CustomTrackView::deleteEffect(int track, GenTime pos, QDomElement effect)
 {
-  m_document->renderer()->mltRemoveEffect(track, pos, tag, -1);  
+  QString index = effect.attribute("kdenlive_ix");
+  m_document->renderer()->mltRemoveEffect(track, pos, index);  
   ClipItem *clip = getClipItemAt(pos.frames(m_document->fps()) + 1, m_tracksCount - track);
-  if (clip) clip->deleteEffect(tag);
+       if (clip){
+               clip->deleteEffect(index);
+               emit clipItemSelected(clip);
+       }
 }
 
-void CustomTrackView::slotAddEffect(QMap <QString, QString> filter)
+void CustomTrackView::slotAddEffect(QDomElement effect)
 {
   QList<QGraphicsItem *> itemList = items();
   for (int i = 0; i < itemList.count(); i++) {
     if (itemList.at(i)->type() == 70000 && itemList.at(i)->isSelected()) {
       ClipItem *item = (ClipItem *)itemList.at(i);
-      QString tag = filter.value("mlt_service");
-      AddEffectCommand *command = new AddEffectCommand(this, m_tracksCount - item->track(),GenTime(item->startPos(), m_document->fps()), tag, filter, true);
+      // the kdenlive_ix int is used to identify an effect in mlt's playlist, should
+      // not be changed
+      effect.setAttribute("kdenlive_ix", QString::number(item->effectsCounter()));
+      AddEffectCommand *command = new AddEffectCommand(this, m_tracksCount - item->track(),GenTime(item->startPos(), m_document->fps()), effect, true);
       m_commandStack->push(command);    
     }
   }
 }
 
+void CustomTrackView::slotDeleteEffect(ClipItem *clip, QDomElement effect)
+{
+  AddEffectCommand *command = new AddEffectCommand(this, m_tracksCount - clip->track(), GenTime(clip->startPos(), m_document->fps()), effect, false);
+  m_commandStack->push(command);
+}
+
+
+void CustomTrackView::slotUpdateClipEffect(ClipItem *clip, QDomElement effect)
+{
+    QMap <QString, QString> effectParams = clip->getEffectArgs(effect);
+    m_document->renderer()->mltEditEffect(m_tracksCount - clip->track(), GenTime(clip->startPos(), m_document->fps()), effectParams);
+}
+
+
 void CustomTrackView::addItem(DocClipBase *clip, QPoint pos)
 {
   int in =0;