]> git.sesse.net Git - kdenlive/commitdiff
transitions movable
authorMarco Gittler <marco@gitma.de>
Mon, 24 Mar 2008 18:28:09 +0000 (18:28 +0000)
committerMarco Gittler <marco@gitma.de>
Mon, 24 Mar 2008 18:28:09 +0000 (18:28 +0000)
svn path=/branches/KDE4/; revision=2117

src/CMakeLists.txt
src/customtrackview.cpp
src/customtrackview.h
src/effectstackedit.cpp
src/movetransitioncommand.cpp [new file with mode: 0644]
src/movetransitioncommand.h [new file with mode: 0644]
src/renderer.cpp

index 9ad78572d1d336909ab11638c301c7072916a593..a2621b2826c085abdf14921678d40ee58e54ca33 100644 (file)
@@ -102,6 +102,7 @@ set(kdenlive_SRCS
   addfoldercommand.cpp
   editfoldercommand.cpp
   clipproperties.cpp
+  movetransitioncommand.cpp
 )
 
 kde4_add_kcfg_files(kdenlive_SRCS GENERATE_MOC kdenlivesettings.kcfgc )
index 6fe741056c848c6bbfaf7c3b64015fd97832583c..e8b5100852fdf6480946890fdcd64ae468fced79 100644 (file)
@@ -590,6 +590,10 @@ void CustomTrackView::updateTransition(int track, GenTime pos, QDomElement oldTr
     m_document->setModified(true);
 }
 
+void CustomTrackView::moveTransition(GenTime oldpos, GenTime newpos) {
+    kDebug() << "move";
+}
+
 void CustomTrackView::addItem(DocClipBase *clip, QPoint pos) {
     int in = 0;
     GenTime out = clip->duration();
@@ -735,6 +739,17 @@ void CustomTrackView::mouseReleaseEvent(QMouseEvent * event) {
         MoveClipCommand *command = new MoveClipCommand(this, m_startPos, QPointF(m_dragItem->startPos().frames(m_document->fps()), m_dragItem->track()), false);
         m_commandStack->push(command);
         if (m_dragItem->type() == AVWIDGET) m_document->renderer()->mltMoveClip((int)(m_tracksList.count() - m_startPos.y()), (int)(m_tracksList.count() - m_dragItem->track()), (int) m_startPos.x(), (int)(m_dragItem->startPos().frames(m_document->fps())));
+        if (m_dragItem->type() == TRANSITIONWIDGET) {
+            Transition* transition = (Transition*)m_dragItem;
+            GenTime oldin = transition->transitionStartTime();
+            GenTime oldout = transition->transitionEndTime();
+            GenTime newin = m_dragItem->startPos();
+            GenTime newout = newin + (oldout - oldin);
+            m_document->renderer()->mltMoveTransition(transition->transitionName(),
+                    (int)(m_tracksList.count() - m_dragItem->track()), 0,
+                    oldin, oldout, newin, newout);
+        }
+
     } else if (m_operationMode == RESIZESTART) {
         // resize start
         ResizeClipCommand *command = new ResizeClipCommand(this, m_startPos, QPointF(m_dragItem->startPos().frames(m_document->fps()), m_dragItem->track()), true, false);
@@ -794,10 +809,10 @@ ClipItem *CustomTrackView::getClipItemAt(int pos, int track) {
     QList<QGraphicsItem *> list = scene()->items(QPointF(pos * m_scale, track * m_tracksHeight + m_tracksHeight / 2));
     ClipItem *clip = NULL;
     for (int i = 0; i < list.size(); ++i) {
-       if (list.at(i)->type() == AVWIDGET) {
-           clip = static_cast <ClipItem *> (list.at(i));
-           break;
-       }
+        if (list.at(i)->type() == AVWIDGET) {
+            clip = static_cast <ClipItem *>(list.at(i));
+            break;
+        }
     }
     return clip;
 }
@@ -806,10 +821,10 @@ ClipItem *CustomTrackView::getClipItemAt(GenTime pos, int track) {
     QList<QGraphicsItem *> list = scene()->items(QPointF(pos.frames(m_document->fps()) * m_scale, track * m_tracksHeight + m_tracksHeight / 2));
     ClipItem *clip = NULL;
     for (int i = 0; i < list.size(); ++i) {
-       if (list.at(i)->type() == AVWIDGET) {
-           clip = static_cast <ClipItem *> (list.at(i));
-           break;
-       }
+        if (list.at(i)->type() == AVWIDGET) {
+            clip = static_cast <ClipItem *>(list.at(i));
+            break;
+        }
     }
     return clip;
 }
@@ -863,7 +878,7 @@ void CustomTrackView::updateSnapPoints(AbstractClipItem *selected) {
     QList<QGraphicsItem *> itemList = items();
     for (int i = 0; i < itemList.count(); i++) {
         if (itemList.at(i)->type() == AVWIDGET && itemList.at(i) != selected) {
-            ClipItem *item = static_cast <ClipItem *> (itemList.at(i));
+            ClipItem *item = static_cast <ClipItem *>(itemList.at(i));
             GenTime start = item->startPos();
             GenTime end = item->endPos();
             m_snapPoints.append(start);
@@ -872,18 +887,17 @@ void CustomTrackView::updateSnapPoints(AbstractClipItem *selected) {
                 if (start > offset) m_snapPoints.append(start - offset);
                 if (end > offset) m_snapPoints.append(end - offset);
             }
-        }
-       else if (itemList.at(i)->type() == TRANSITIONWIDGET) {
-           Transition *transition = static_cast <Transition*> (itemList.at(i));
-           GenTime start = transition->transitionStartTime();
+        } else if (itemList.at(i)->type() == TRANSITIONWIDGET) {
+            Transition *transition = static_cast <Transition*>(itemList.at(i));
+            GenTime start = transition->transitionStartTime();
             GenTime end = transition->transitionEndTime();
             m_snapPoints.append(start);
             m_snapPoints.append(end);
             if (offset != GenTime()) {
                 if (start > offset) m_snapPoints.append(start - offset);
                 if (end > offset) m_snapPoints.append(end - offset);
-            }      
-       }
+            }
+        }
     }
     qSort(m_snapPoints);
     //for (int i = 0; i < m_snapPoints.size(); ++i)
index fe5003f5dbd926c779504e7ce8b094e15ff38b92..1b82e1fdf2af3b96839b15ddd6dc3b060aee1f15 100644 (file)
@@ -59,6 +59,7 @@ public:
     void addTransition(int track, GenTime pos, QDomElement transition);
     void deleteTransition(int track, GenTime pos, QDomElement transition);
     void updateTransition(int track, GenTime pos,  QDomElement oldTransition, QDomElement transition);
+    void moveTransition(GenTime oldpos,GenTime newpos);
     void activateMonitor();
     int duration() const;
     void deleteSelectedClips();
index ef3cfbcccd49651922a88c8b176e6dffea9f1ba0..069434c12eeebacbf802b95cac41f130843ada17 100644 (file)
@@ -98,7 +98,7 @@ void EffectStackEdit::transferParamDesc(const QDomElement& d, int , int) {
             lsval->list->setCurrentIndex(listitems.indexOf(value));
             for (int i = 0;i < lsval->list->count();i++) {
                 QString entry = lsval->list->itemText(i);
-                if (!entry.isEmpty() && (entry.endsWith(".png") || entry.endsWith(".pnm"))) {
+                if (!entry.isEmpty() && (entry.endsWith(".png") || entry.endsWith(".pgm"))) {
                     if (!iconCache.contains(entry)) {
                         QPixmap pix(entry);
                         iconCache[entry] = pix.scaled(30, 30);
diff --git a/src/movetransitioncommand.cpp b/src/movetransitioncommand.cpp
new file mode 100644 (file)
index 0000000..b606845
--- /dev/null
@@ -0,0 +1,40 @@
+/***************************************************************************
+                          movetransitioncommand.h  -  description
+                             -------------------
+    begin                : Mar 15 2008
+    copyright            : (C) 2008 by Marco Gittler
+    email                : g.marco@freenet.de
+ ***************************************************************************/
+
+/***************************************************************************
+ *                                                                         *
+ *   This program is free software; you can redistribute it and/or modify  *
+ *   it under the terms of the GNU General Public License as published by  *
+ *   the Free Software Foundation; either version 2 of the License, or     *
+ *   (at your option) any later version.                                   *
+ *                                                                         *
+ ***************************************************************************/
+#include <KLocale>
+
+#include "movetransitioncommand.h"
+#include "customtrackview.h"
+MoveTransitionCommand::MoveTransitionCommand(CustomTrackView *view, const QPointF startPos, const QPointF endPos, int startTrack, int endTrack, bool doIt)
+        : m_view(view), m_startPos(startPos), m_endPos(endPos), m_doIt(doIt) {
+    setText(i18n("Move transition"));
+}
+
+
+// virtual
+void MoveTransitionCommand::undo() {
+// kDebug()<<"----  undoing action";
+    m_doIt = true;
+    //if (m_doIt) m_view->moveTransition(m_endPos, m_startPos);
+}
+// virtual
+void MoveTransitionCommand::redo() {
+    kDebug() << "----  redoing action";
+    //if (m_doIt) m_view->moveTransition(m_startPos, m_endPos);
+    m_doIt = true;
+}
+
+#include "moveclipcommand.moc"
diff --git a/src/movetransitioncommand.h b/src/movetransitioncommand.h
new file mode 100644 (file)
index 0000000..b21a399
--- /dev/null
@@ -0,0 +1,45 @@
+/***************************************************************************
+                          movetransitioncommand.h  -  description
+                             -------------------
+    begin                : Mar 15 2008
+    copyright            : (C) 2008 by Marco Gittler
+    email                : g.marco@freenet.de
+ ***************************************************************************/
+
+/***************************************************************************
+ *                                                                         *
+ *   This program is free software; you can redistribute it and/or modify  *
+ *   it under the terms of the GNU General Public License as published by  *
+ *   the Free Software Foundation; either version 2 of the License, or     *
+ *   (at your option) any later version.                                   *
+ *                                                                         *
+ ***************************************************************************/
+
+#ifndef MOVETRANSITIONCOMMAND_H
+#define MOVETRANSITIONCOMMAND_H
+
+#include <QUndoCommand>
+#include <QGraphicsView>
+#include <QPointF>
+
+#include <KDebug>
+
+class CustomTrackView;
+
+class MoveTransitionCommand : public QUndoCommand {
+public:
+    MoveTransitionCommand(CustomTrackView *view, const QPointF startPos, const QPointF endPos, bool doIt);
+    virtual void undo();
+    virtual void redo();
+
+private:
+    CustomTrackView *m_view;
+    QPointF m_startPos;
+    QPointF m_endPos;
+    bool m_doIt;
+        int m_startTrack;
+        int m_endTrack;
+};
+
+#endif
+
index 6b8863a0d48a47716a2f569adfe2f753bc6cad54..57c23e07f5fcf693e35e2824b427c20eb435139d 100644 (file)
@@ -1352,39 +1352,44 @@ void Render::mltMoveClip(int startTrack, int endTrack, int moveStart, int moveEn
 void Render::mltMoveTransition(QString type, int startTrack, int trackOffset, GenTime oldIn, GenTime oldOut, GenTime newIn, GenTime newOut) {
     m_isBlocked = true;
     m_mltConsumer->set("refresh", 0);
-    mlt_service serv = m_mltProducer->parent().get_service();
-
-    mlt_service nextservice = mlt_service_get_producer(serv);
-    mlt_properties properties = MLT_SERVICE_PROPERTIES(nextservice);
-    QString mlt_type = mlt_properties_get(properties, "mlt_type");
-    QString resource = mlt_properties_get(properties, "mlt_service");
-    int old_pos = (int)(oldIn.frames(m_fps) + oldOut.frames(m_fps)) / 2;
-
-    int new_in = (int)newIn.frames(m_fps);
-    int new_out = (int)newOut.frames(m_fps) - 1;
-    while (mlt_type == "transition") {
-        mlt_transition tr = (mlt_transition) nextservice;
-        int currentTrack = mlt_transition_get_b_track(tr);
-        int currentIn = (int) mlt_transition_get_in(tr);
-        int currentOut = (int) mlt_transition_get_out(tr);
-        kDebug() << "// FOUND EXISTING TRANS, IN: " << currentIn << ", OUT: " << currentOut << ", TRACK: " << currentTrack;
-        //kDebug()<<"// LOOKING FOR IN: "<<old_in<<", OUT: "<<old_out;
-        kDebug() << "// OLD IN: " << oldIn.frames(m_fps) << " // OLD OUT: " << oldOut.frames(m_fps) << ", TRACK: " << startTrack << ", MID POS: " << old_pos;
-        if (resource == type && startTrack == currentTrack && currentIn <= old_pos && currentOut >= old_pos) {
-            mlt_transition_set_in_and_out(tr, new_in, new_out);
-            if (trackOffset != 0) {
-                mlt_properties properties = MLT_TRANSITION_PROPERTIES(tr);
-                mlt_properties_set_int(properties, "a_track", mlt_transition_get_a_track(tr) + trackOffset);
-                mlt_properties_set_int(properties, "b_track", mlt_transition_get_b_track(tr) + trackOffset);
+
+    Mlt::Tractor *tractor = getTractor();
+    if (tractor) {
+        Mlt::Tractor newTractor;
+        mlt_service service = tractor->get_service();
+        mlt_service nextservice = mlt_service_get_producer(service);
+        mlt_properties properties = MLT_SERVICE_PROPERTIES(nextservice);
+        QString mlt_type = mlt_properties_get(properties, "mlt_type");
+        QString resource = mlt_properties_get(properties, "mlt_service");
+        int old_pos = (int)(oldIn.frames(m_fps) + oldOut.frames(m_fps)) / 2;
+
+        int new_in = (int)newIn.frames(m_fps);
+        int new_out = (int)newOut.frames(m_fps) - 1;
+        while (mlt_type == "transition") {
+            mlt_transition tr = (mlt_transition) nextservice;
+            int currentTrack = mlt_transition_get_b_track(tr);
+            int currentIn = (int) mlt_transition_get_in(tr);
+            int currentOut = (int) mlt_transition_get_out(tr);
+            kDebug() << "// FOUND EXISTING TRANS, IN: " << type << resource << currentIn << ", OUT: " << currentOut << ", TRACK: " << currentTrack;
+            //kDebug()<<"// LOOKING FOR IN: "<<old_in<<", OUT: "<<old_out;
+            kDebug() << "// OLD IN: " << oldIn.frames(m_fps) << " // OLD OUT: " << oldOut.frames(m_fps) << ", TRACK: " << startTrack << ", MID POS: " << old_pos;
+            if (resource == type && startTrack == currentTrack && currentIn <= old_pos && currentOut >= old_pos) {
+                mlt_transition_set_in_and_out(tr, new_in, new_out);
+                if (trackOffset != 0) {
+                    mlt_properties properties = MLT_TRANSITION_PROPERTIES(tr);
+                    mlt_properties_set_int(properties, "a_track", mlt_transition_get_a_track(tr) + trackOffset);
+                    mlt_properties_set_int(properties, "b_track", mlt_transition_get_b_track(tr) + trackOffset);
+                                                 kDebug() << "set new start & end :" << new_in << new_out;
+                }
+                break;
             }
-            break;
+            nextservice = mlt_service_producer(nextservice);
+            properties = MLT_SERVICE_PROPERTIES(nextservice);
+            mlt_type = mlt_properties_get(properties, "mlt_type");
+            resource = mlt_properties_get(properties, "mlt_service");
         }
-        nextservice = mlt_service_producer(nextservice);
-        properties = MLT_SERVICE_PROPERTIES(nextservice);
-        mlt_type = mlt_properties_get(properties, "mlt_type");
-        resource = mlt_properties_get(properties, "mlt_service");
+        m_isBlocked = false;
     }
-    m_isBlocked = false;
 }
 
 void Render::mltUpdateTransition(QString oldTag, QString tag, int a_track, int b_track, GenTime in, GenTime out, QDomElement xml) {