]> git.sesse.net Git - kdenlive/commitdiff
First big cleanup of transition / clipitem. Transitions are a bit broken for now...
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Thu, 27 Mar 2008 21:35:59 +0000 (21:35 +0000)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Thu, 27 Mar 2008 21:35:59 +0000 (21:35 +0000)
svn path=/branches/KDE4/; revision=2128

21 files changed:
src/abstractclipitem.cpp
src/abstractclipitem.h
src/addtimelineclipcommand.cpp
src/addtimelineclipcommand.h
src/addtransitioncommand.cpp
src/addtransitioncommand.h
src/clipitem.cpp
src/clipitem.h
src/customtrackview.cpp
src/customtrackview.h
src/definitions.h
src/moveclipcommand.cpp
src/moveclipcommand.h
src/movetransitioncommand.cpp
src/movetransitioncommand.h
src/resizeclipcommand.cpp
src/resizeclipcommand.h
src/trackview.cpp
src/transition.cpp
src/transition.h
src/transitionsettings.cpp

index eac2062d96704cedfb80c4ff3fa874166fbcd747..eee21fba09e86fde34c67042d43b597b08a1c6ad 100644 (file)
@@ -4,8 +4,11 @@
 #include <QGraphicsView>
 #include <QScrollBar>
 
-AbstractClipItem::AbstractClipItem(const QRectF& rect): QGraphicsRectItem(rect), m_startFade(0), m_endFade(0) {
+AbstractClipItem::AbstractClipItem(const ItemInfo info, const QRectF& rect): QGraphicsRectItem(rect), m_startFade(0), m_endFade(0) {
     setFlags(QGraphicsItem::ItemClipsToShape | QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
+    setTrack(info.track);
+    m_startPos = info.startPos;
+    m_maxDuration = info.endPos - info.startPos;
 }
 void AbstractClipItem::moveTo(int x, double scale, int offset, int newTrack) {
     double origX = rect().x();
@@ -64,14 +67,14 @@ void AbstractClipItem::resizeStart(int posx, double scale) {
     if (durationDiff == GenTime()) return;
     //kDebug() << "-- RESCALE: CROP=" << m_cropStart << ", DIFF = " << durationDiff;
 
-    if (m_cropStart + durationDiff < GenTime() && type() == AVWIDGET) {
+    if (type() == AVWIDGET && m_cropStart + durationDiff < GenTime()) {
         durationDiff = GenTime() - m_cropStart;
     } else if (durationDiff >= m_cropDuration) {
         durationDiff = m_cropDuration - GenTime(3, m_fps);
     }
 
     m_startPos += durationDiff;
-    m_cropStart += durationDiff;
+    if (type() == AVWIDGET) m_cropStart += durationDiff;
     m_cropDuration = m_cropDuration - durationDiff;
     setRect(m_startPos.frames(m_fps) * scale, rect().y(), m_cropDuration.frames(m_fps) * scale, rect().height());
     QList <QGraphicsItem *> collisionList = collidingItems(Qt::IntersectsItemBoundingRect);
@@ -81,7 +84,7 @@ void AbstractClipItem::resizeStart(int posx, double scale) {
             GenTime diff = ((AbstractClipItem *)item)->endPos() + GenTime(1, m_fps) - m_startPos;
             setRect((m_startPos + diff).frames(m_fps) * scale, rect().y(), (m_cropDuration - diff).frames(m_fps) * scale, rect().height());
             m_startPos += diff;
-            m_cropStart += diff;
+            if (type() == AVWIDGET) m_cropStart += diff;
             m_cropDuration = m_cropDuration - diff;
             break;
         }
index 621cedb0ba4cf658c88889c9444c6c1fc71616ad..677a049140d3db831c729b518dbcd10f0485086a 100644 (file)
@@ -8,7 +8,7 @@
 class AbstractClipItem : public QObject , public QGraphicsRectItem {
     Q_OBJECT
 public:
-    AbstractClipItem(const QRectF& rect);
+    AbstractClipItem(const ItemInfo info, const QRectF& rect);
     virtual  OPERATIONTYPE operationMode(QPointF pos, double scale) = 0;
     virtual GenTime startPos() const ;
     virtual void setTrack(int track);
index 1ef0e60a2e2c5beb55f98a8f2615d591371a9568..15ac2bddc773982927f4e9dd08d49b1416f39c4b 100644 (file)
@@ -22,8 +22,8 @@
 #include "addtimelineclipcommand.h"
 #include "customtrackview.h"
 
-AddTimelineClipCommand::AddTimelineClipCommand(CustomTrackView *view, QDomElement xml, int clipId, int track, GenTime startpos, QRectF rect, GenTime 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) {
+AddTimelineClipCommand::AddTimelineClipCommand(CustomTrackView *view, QDomElement xml, int clipId, ItemInfo info, bool doIt, bool doRemove)
+        : m_view(view), m_xml(xml), m_clipId(clipId), m_clipInfo(info), m_doIt(doIt), m_remove(doRemove) {
     if (!m_remove) setText(i18n("Add timeline clip"));
     else setText(i18n("Delete timeline clip"));
 }
@@ -31,14 +31,14 @@ AddTimelineClipCommand::AddTimelineClipCommand(CustomTrackView *view, QDomElemen
 
 // virtual
 void AddTimelineClipCommand::undo() {
-    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);
+    if (!m_remove) m_view->deleteClip(m_clipInfo);
+    else m_view->addClip(m_xml, m_clipId, m_clipInfo);
 }
 // virtual
 void AddTimelineClipCommand::redo() {
     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);
+        if (!m_remove) m_view->addClip(m_xml, m_clipId, m_clipInfo);
+        else m_view->deleteClip(m_clipInfo);
     }
     m_doIt = true;
 }
index 8c060c1c992efc9ed9cf0f491c3beea2632b751c..487e18ea18f1de1087a7e28cd7900cd23f174016 100644 (file)
 #include <KDebug>
 
 #include "gentime.h"
+#include "definitions.h"
 
 class CustomTrackView;
 
 class AddTimelineClipCommand : public QUndoCommand {
 public:
-    AddTimelineClipCommand(CustomTrackView *view, QDomElement xml, int clipId, int track, GenTime startpos, QRectF rect, GenTime duration, bool doIt, bool doRemove);
+    AddTimelineClipCommand(CustomTrackView *view, QDomElement xml, int clipId, ItemInfo info, bool doIt, bool doRemove);
     virtual void undo();
     virtual void redo();
 
 private:
     CustomTrackView *m_view;
-    GenTime m_clipDuration;
+    ItemInfo m_clipInfo;
     int m_clipId;
     QDomElement m_xml;
-    int m_clipTrack;
-    GenTime m_clipPos;
-    QRectF m_clipRect;
     bool m_doIt;
     bool m_remove;
 };
index 54250d280e31538227e51d921bb822b5d10fb324..81406679e3ac44adb9ed2f89c9a8558e9b3c9140 100644 (file)
@@ -19,7 +19,7 @@
 #include "addtransitioncommand.h"
 #include "customtrackview.h"
 
-AddTransitionCommand::AddTransitionCommand(CustomTrackView *view, int track, QDomElement xml, GenTime pos, bool doIt) : m_view(view), m_track(track), m_xml(xml), m_pos(pos), m_doIt(doIt) {
+AddTransitionCommand::AddTransitionCommand(CustomTrackView *view, ItemInfo info, int transitiontrack, QMap <QString, QString> desc, QDomElement params, bool doIt) : m_view(view), m_info(info), m_track(transitiontrack), m_desc(desc), m_params(params), m_doIt(doIt) {
     if (m_doIt) setText(i18n("Add transition to clip"));
     else setText(i18n("Delete transition from clip"));
 }
@@ -27,13 +27,13 @@ AddTransitionCommand::AddTransitionCommand(CustomTrackView *view, int track, QDo
 
 // virtual
 void AddTransitionCommand::undo() {
-    if (m_doIt) m_view->deleteTransition(m_track, m_pos, m_xml);
-    else m_view->addTransition(m_track , m_pos, m_xml);
+    if (m_doIt) m_view->deleteTransition(m_info, m_track, m_desc, m_params);
+    else m_view->addTransition(m_info, m_track, m_desc, m_params);
 }
 // virtual
 void AddTransitionCommand::redo() {
-    if (m_doIt) m_view->addTransition(m_track , m_pos, m_xml);
-    else m_view->deleteTransition(m_track, m_pos, m_xml);
+    if (m_doIt) m_view->addTransition(m_info, m_track, m_desc, m_params);
+    else m_view->deleteTransition(m_info, m_track, m_desc, m_params);
     m_doIt = true;
 }
 
index dfa07f70595c5184bfdb865325fffb69f9f7cec3..61d1940fa558aca564e7f54fb7bad46ab20de585 100644 (file)
 #include <KDebug>
 
 #include "gentime.h"
-
+#include "definitions.h"
 class CustomTrackView;
 
 
 class AddTransitionCommand : public QUndoCommand {
 public:
-    AddTransitionCommand(CustomTrackView *view, int track, QDomElement xml , GenTime pos, bool doIt);
+    AddTransitionCommand(CustomTrackView *view, ItemInfo info, int transitiontrack, QMap <QString, QString> desc, QDomElement params, bool doIt);
     virtual void undo();
     virtual void redo();
 
 private:
     CustomTrackView *m_view;
-    GenTime m_pos;
-    QDomElement m_xml;
+    ItemInfo m_info;
+    QMap <QString, QString> m_desc;
+    QDomElement m_params;
     int m_track;
     bool m_doIt;
 };
index 3297c473521dff0e3a80dd0262e25844da3a4eba..81ccec54ca9dd5219a55a34064655b59fe47bb06 100644 (file)
 #include "kdenlivesettings.h"
 #include "kthumb.h"
 
-ClipItem::ClipItem(DocClipBase *clip, int track, GenTime startpos, const QRectF & rect, GenTime duration, double fps)
-        : AbstractClipItem(rect), m_clip(clip), m_resizeMode(NONE), m_grabPoint(0), m_maxTrack(0), m_hasThumbs(false), startThumbTimer(NULL), endThumbTimer(NULL), m_effectsCounter(1), audioThumbWasDrawn(false), m_opacity(1.0), m_timeLine(0), m_thumbsRequested(0), m_hover(false) {
-    //setToolTip(name);
-    // kDebug() << "*******  CREATING NEW TML CLIP, DUR: " << duration;
+ClipItem::ClipItem(DocClipBase *clip, ItemInfo info, double scale, double fps)
+        : AbstractClipItem(info, QRectF()), m_clip(clip), m_resizeMode(NONE), m_grabPoint(0), m_maxTrack(0), m_hasThumbs(false), startThumbTimer(NULL), endThumbTimer(NULL), m_effectsCounter(1), audioThumbWasDrawn(false), m_opacity(1.0), m_timeLine(0), m_thumbsRequested(0), m_hover(false) {
+    QRectF rect((double) info.startPos.frames(fps) * scale, (double)(info.track * KdenliveSettings::trackheight() + 1), (double)(info.endPos - info.startPos).frames(fps) * scale, (double)(KdenliveSettings::trackheight() - 1));
+    setRect(rect);
+    kDebug() << "/////  NEW CLIP RECT: " << rect;
     m_fps = fps;
-    m_startPos = startpos;
-    m_track = track;
     m_xml = clip->toXML();
     m_clipName = clip->name();
     m_producer = clip->getId();
     m_clipType = clip->clipType();
     m_cropStart = GenTime();
-    m_maxDuration = duration;
-    if (duration != GenTime()) m_cropDuration = duration;
-    else m_cropDuration = m_maxDuration;
+
+    m_cropDuration = m_maxDuration;
     setAcceptDrops(true);
     audioThumbReady = clip->audioThumbCreated();
     /*
@@ -611,7 +609,7 @@ void ClipItem::dropEvent(QGraphicsSceneDragDropEvent * event) {
     doc.setContent(effects, true);
     QDomElement e = doc.documentElement();
     CustomTrackView *view = (CustomTrackView *) scene()->views()[0];
-    if (view) view->slotAddEffect(e, m_startPos, m_track);
+    if (view) view->slotAddEffect(e, m_startPos, track());
 }
 
 //virtual
@@ -627,7 +625,7 @@ void ClipItem::addTransition(Transition* t) {
     CustomTrackView *view = (CustomTrackView *) scene()->views()[0];
     QDomDocument doc;
     QDomElement e = doc.documentElement();
-    if (view) view->slotAddTransition(this, t->toXML() , t->startPos(), track());
+    //if (view) view->slotAddTransition(this, t->toXML() , t->startPos(), track());
 }
 // virtual
 /*
index efbbd144380ece7f0bf71216011d151d78a9c3cb..f9de3c1a218541cfe2b9be1c0074f2badf29dda4 100644 (file)
@@ -38,7 +38,7 @@ class ClipItem : public AbstractClipItem {
     Q_OBJECT
 
 public:
-    ClipItem(DocClipBase *clip, int track, GenTime startpos, const QRectF & rect, GenTime duration, double fps);
+    ClipItem(DocClipBase *clip, ItemInfo info, double scale, double fps);
     virtual ~ ClipItem();
     virtual void paint(QPainter *painter,
                        const QStyleOptionGraphicsItem *option,
@@ -98,7 +98,6 @@ private:
 
     int m_maxTrack;
 
-
     QPixmap m_startPix;
     QPixmap m_endPix;
     bool m_hasThumbs;
index 63d2af2860d795739509125fcd5ea9513a651689..b4c70421a8044bdd7e9ccd8abdf98a5be9b261df 100644 (file)
@@ -55,7 +55,7 @@
 // const int duration = animate ? 1500 : 1;
 
 CustomTrackView::CustomTrackView(KdenliveDoc *doc, QGraphicsScene * projectscene, QWidget *parent)
-        : QGraphicsView(projectscene, parent), m_cursorPos(0), m_dropItem(NULL), m_cursorLine(NULL), m_operationMode(NONE), m_startPos(QPointF()), m_dragItem(NULL), m_visualTip(NULL), m_moveOpMode(NONE), m_animation(NULL), m_projectDuration(0), m_scale(1.0), m_clickPoint(QPoint()), m_document(doc), m_autoScroll(KdenliveSettings::autoscroll()), m_tracksHeight(KdenliveSettings::trackheight()) {
+        : QGraphicsView(projectscene, parent), m_cursorPos(0), m_dropItem(NULL), m_cursorLine(NULL), m_operationMode(NONE), m_dragItem(NULL), m_visualTip(NULL), m_moveOpMode(NONE), m_animation(NULL), m_projectDuration(0), m_scale(1.0), m_clickPoint(QPoint()), m_document(doc), m_autoScroll(KdenliveSettings::autoscroll()), m_tracksHeight(KdenliveSettings::trackheight()) {
     if (doc) m_commandStack = doc->commandStack();
     else m_commandStack == NULL;
     setMouseTracking(true);
@@ -379,48 +379,50 @@ void CustomTrackView::mousePressEvent(QMouseEvent * event) {
     } else {
         bool collision = false;
         QList<QGraphicsItem *> collisionList = items(event->pos());
-        AbstractClipItem *clipItem = NULL, *transitionItem = NULL;
         for (int i = 0; i < collisionList.size(); ++i) {
             QGraphicsItem *item = collisionList.at(i);
             if (item->type() == AVWIDGET || item->type() == TRANSITIONWIDGET) {
                 // select item
                 if (!item->isSelected()) {
-
+                    QList<QGraphicsItem *> itemList = items();
+                    for (int i = 0; i < itemList.count(); i++)
+                        itemList.at(i)->setSelected(false);
                     item->setSelected(true);
                     update();
                 }
 
                 m_dragItem = (AbstractClipItem *) item;
-                if (item->type() == AVWIDGET) {
-                    clipItem = m_dragItem;
-                } else if (item->type() == TRANSITIONWIDGET) {
-                    transitionItem = m_dragItem;
-                }
+
                 m_clickPoint = QPoint((int)(mapToScene(event->pos()).x() - m_dragItem->startPos().frames(m_document->fps()) * m_scale), (int)(event->pos().y() - m_dragItem->rect().top()));
+                m_dragItemInfo.startPos = m_dragItem->startPos();
+                m_dragItemInfo.endPos = m_dragItem->endPos();
+                m_dragItemInfo.track = m_dragItem->track();
+
                 m_operationMode = m_dragItem->operationMode(item->mapFromScene(mapToScene(event->pos())), m_scale);
                 if (m_operationMode == MOVE) setCursor(Qt::ClosedHandCursor);
-                if (m_operationMode == MOVE || m_operationMode == RESIZESTART)
-                    m_startPos = QPointF(m_dragItem->startPos().frames(m_document->fps()), m_dragItem->track());
-                else if (m_operationMode == RESIZEEND)
-                    m_startPos = QPointF(m_dragItem->endPos().frames(m_document->fps()), m_dragItem->track());
-                else if (m_operationMode == TRANSITIONSTART) {
-                    Transition *tr = new Transition(
-                        QRect((int)(m_dragItem->startPos().frames(m_document->fps()) *m_scale) , (int)(m_dragItem->rect().y() + m_dragItem->rect().height() / 2),
-                              (int)(GenTime(2.5).frames(m_document->fps()) *m_scale) , (int)(m_dragItem->rect().height())
-                             ),
-                        (ClipItem*)m_dragItem, "luma" , m_dragItem->startPos(), m_dragItem->startPos() + GenTime(2.5), m_document->fps());
-                    tr->setTrack(m_dragItem->track());
-                    scene()->addItem(tr);
-                    //m_dragItem->addTransition(tra);
+                if (m_operationMode == TRANSITIONSTART) {
+                    ItemInfo info;
+                    info.startPos = m_dragItem->startPos();
+                    info.endPos = info.startPos + GenTime(2.5);
+                    info.track = m_dragItem->track();
+                    int transitiontrack = getPreviousVideoTrack(info.track);
+                    slotAddTransition((ClipItem *) m_dragItem, info, transitiontrack, QMap<QString, QString>());
+                }
+                if (m_operationMode == TRANSITIONEND) {
+                    ItemInfo info;
+                    info.endPos = m_dragItem->endPos();
+                    info.startPos = info.endPos - GenTime(2.5);
+                    info.track = m_dragItem->track();
+                    int transitiontrack = info.track - 1;
+                    slotAddTransition((ClipItem *) m_dragItem, info, transitiontrack, QMap<QString, QString>());
                 }
                 updateSnapPoints(m_dragItem);
-                kDebug() << "//////// ITEM CLICKED: " << m_startPos;
                 collision = true;
                 break;
             }
         }
-        emit clipItemSelected((ClipItem*) clipItem);
-        emit transitionItemSelected((Transition*) transitionItem);
+        if (m_dragItem->type() == AVWIDGET) emit clipItemSelected((ClipItem*) m_dragItem);
+        else emit transitionItemSelected((Transition*) m_dragItem);
         if (!collision) {
             kDebug() << "//////// NO ITEM FOUND ON CLICK";
             m_dragItem = NULL;
@@ -548,37 +550,33 @@ void CustomTrackView::slotUpdateClipEffect(ClipItem *clip, QDomElement oldeffect
     m_commandStack->push(command);
 }
 
-void CustomTrackView::slotAddTransition(ClipItem* clip , QDomElement transition, GenTime startTime , int startTrack) {
-    AddTransitionCommand* command = new AddTransitionCommand(this, startTrack, transition, startTime, true);
+void CustomTrackView::slotAddTransition(ClipItem* clip, ItemInfo transitionInfo, int endTrack, QMap <QString, QString> desc, QDomElement transition) {
+    AddTransitionCommand* command = new AddTransitionCommand(this, transitionInfo, endTrack, desc, transition, true);
     m_commandStack->push(command);
     m_document->setModified(true);
 }
 
-void CustomTrackView::addTransition(int startTrack, GenTime startPos , QDomElement e) {
-
-    kDebug() << "---- ADDING transition " << e.attribute("tag") << ", on tracks " << m_tracksList.count() - e.attribute("transition_track").toInt() << " / " << getPreviousVideoTrack(e.attribute("transition_track").toInt());
-    m_document->renderer()->mltAddTransition(e.attribute("tag"), getPreviousVideoTrack(e.attribute("transition_track").toInt()), m_tracksList.count() - e.attribute("transition_track").toInt() ,
-            GenTime(e.attribute("start").toInt(), m_document->renderer()->fps()),
-            GenTime(e.attribute("end").toInt(), m_document->renderer()->fps()),
-            e);
+void CustomTrackView::addTransition(ItemInfo transitionInfo, int endTrack, QMap <QString, QString> desc, QDomElement params) {
+    Transition *tr = new Transition(transitionInfo, endTrack, m_scale, m_document->fps(), desc, params);
+    scene()->addItem(tr);
 
+    //kDebug() << "---- ADDING transition " << e.attribute("tag") << ", on tracks " << m_tracksList.count() - e.attribute("transition_track").toInt() << " / " << getPreviousVideoTrack(e.attribute("transition_track").toInt());
+    m_document->renderer()->mltAddTransition(tr->transitionTag(), endTrack, m_tracksList.count() - transitionInfo.track, transitionInfo.startPos, transitionInfo.endPos, params);
     m_document->setModified(true);
 }
 
-void CustomTrackView::deleteTransition(int, GenTime, QDomElement e) {
+void CustomTrackView::deleteTransition(ItemInfo transitionInfo, int endTrack, QMap <QString, QString> desc, QDomElement params) {
+    Transition *item = getTransitionItemAt((int)transitionInfo.startPos.frames(m_document->fps()) + 1, transitionInfo.track);
     QMap < QString, QString> map;
-    QDomNamedNodeMap attribs = e.attributes();
-    m_document->renderer()->mltDeleteTransition(e.attribute("tag"), getPreviousVideoTrack(e.attribute("transition_track").toInt()), m_tracksList.count() - e.attribute("transition_track").toInt() ,
-            GenTime(e.attribute("start").toInt(), m_document->renderer()->fps()),
-            GenTime(e.attribute("end").toInt(), m_document->renderer()->fps()),
-            e);
+    m_document->renderer()->mltDeleteTransition(item->transitionTag(), endTrack, m_tracksList.count() - transitionInfo.track, transitionInfo.startPos, transitionInfo.endPos, params);
+    delete item;
     m_document->setModified(true);
 }
 
 void CustomTrackView::slotTransitionUpdated(QDomElement old, QDomElement newEffect) {
-    EditTransitionCommand *command = new EditTransitionCommand(this, newEffect.attribute("a_track").toInt(), GenTime(newEffect.attribute("start").toInt(), m_document->renderer()->fps()) , old, newEffect , true);
+    /*EditTransitionCommand *command = new EditTransitionCommand(this, newEffect.attribute("a_track").toInt(), GenTime(newEffect.attribute("start").toInt(), m_document->renderer()->fps()) , old, newEffect , true);
     m_commandStack->push(command);
-    m_document->setModified(true);
+    m_document->setModified(true);*/
 }
 
 void CustomTrackView::updateTransition(int track, GenTime pos, QDomElement oldTransition, QDomElement transition) {
@@ -592,18 +590,19 @@ void CustomTrackView::updateTransition(int track, GenTime pos, QDomElement oldTr
 }
 
 void CustomTrackView::addItem(DocClipBase *clip, QPoint pos) {
-    int in = 0;
-    GenTime out = clip->duration();
-    //kdDebug()<<"- - - -CREATING CLIP, duration = "<<out<<", URL: "<<clip->fileURL();
-    int trackTop = (int)(mapToScene(pos).y() / m_tracksHeight) * m_tracksHeight + 1;
-    m_dropItem = new ClipItem(clip, (int)(mapToScene(pos).y() / m_tracksHeight), GenTime(), QRectF(mapToScene(pos).x() * m_scale, trackTop, out.frames(m_document->fps()) * m_scale, m_tracksHeight - 1), out, m_document->fps());
+    ItemInfo info;
+    info.startPos = GenTime((int)(mapToScene(pos).x() / m_scale), m_document->fps());
+    info.endPos = info.startPos + clip->duration();
+    info.track = (int)(pos.y() / m_tracksHeight);
+    //kDebug()<<"------------  ADDING CLIP ITEM----: "<<info.startPos.frames(25)<<", "<<info.endPos.frames(25)<<", "<<info.track;
+    m_dropItem = new ClipItem(clip, info, m_scale, m_document->fps());
     scene()->addItem(m_dropItem);
 }
 
 
 void CustomTrackView::dragMoveEvent(QDragMoveEvent * event) {
     event->setDropAction(Qt::IgnoreAction);
-    //kDebug()<<"+++++++++++++   DRAG MOVE, : "<<mapToScene(event->pos()).x()<<", SCAL: "<<m_scale;
+    kDebug() << "+++++++++++++   DRAG MOVE, : " << mapToScene(event->pos()).x() << ", SCAL: " << m_scale;
     if (m_dropItem) {
         int track = (int)(event->pos().y() / m_tracksHeight);  //) * (m_scale * 50) + m_scale;
         m_dropItem->moveTo((int)(mapToScene(event->pos()).x() / m_scale), m_scale, (int)((track - m_dropItem->track()) * m_tracksHeight), track);
@@ -625,7 +624,11 @@ 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, false);
+        ItemInfo info;
+        info.startPos = m_dropItem->startPos();
+        info.endPos = m_dropItem->endPos();
+        info.track = m_dropItem->track();
+        AddTimelineClipCommand *command = new AddTimelineClipCommand(this, m_dropItem->xml(), m_dropItem->clipProducer(), info, false, false);
         m_commandStack->push(command);
         m_dropItem->baseClip()->addReference();
         m_document->updateClip(m_dropItem->baseClip()->getId());
@@ -694,7 +697,11 @@ void CustomTrackView::deleteClip(int clipId) {
         if (itemList.at(i)->type() == AVWIDGET) {
             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);
+                ItemInfo info;
+                info.startPos = item->startPos();
+                info.endPos = item->endPos();
+                info.track = item->track();
+                AddTimelineClipCommand *command = new AddTimelineClipCommand(this, item->xml(), item->clipProducer(), info, true, true);
                 m_commandStack->push(command);
                 //delete item;
             }
@@ -730,62 +737,53 @@ void CustomTrackView::mouseReleaseEvent(QMouseEvent * event) {
     QGraphicsView::mouseReleaseEvent(event);
     setDragMode(QGraphicsView::NoDrag);
     if (m_dragItem == NULL) return;
+    ItemInfo info;
+    info.startPos = m_dragItem->startPos();
+    info.endPos = m_dragItem->endPos();
+    info.track = m_dragItem->track();
+
     if (m_operationMode == MOVE) setCursor(Qt::OpenHandCursor);
     if (m_operationMode == MOVE) {// && m_startPos.x() != m_dragItem->startPos().frames(m_document->fps())) {
         // move clip
         if (m_dragItem->type() == AVWIDGET) {
-            MoveClipCommand *command = new MoveClipCommand(this, m_startPos, QPointF(m_dragItem->startPos().frames(m_document->fps()), m_dragItem->track()), false);
+            MoveClipCommand *command = new MoveClipCommand(this, m_dragItemInfo, info, false);
             m_commandStack->push(command);
-            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())));
+            m_document->renderer()->mltMoveClip((int)(m_tracksList.count() - m_dragItemInfo.track), (int)(m_tracksList.count() - m_dragItem->track()), (int) m_dragItemInfo.startPos.frames(m_document->fps()), (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);
-            transition->moveTransition(newin - oldin);
-            MoveTransitionCommand *command = new MoveTransitionCommand(this, QPointF(oldin.frames(m_document->fps()), oldout.frames(m_document->fps())), QPointF(newin.frames(m_document->fps()), newout.frames(m_document->fps())), (int) m_startPos.y(), (int)(m_dragItem->track()), false);
+            MoveTransitionCommand *command = new MoveTransitionCommand(this, m_dragItemInfo, info, false);
             m_commandStack->push(command);
             //kDebug()<<"/// MOVING TRS FROM: "<<(int)(m_tracksList.count() - m_startPos.y())<<", OFFSET: "<<(int) (m_dragItem->track() - m_startPos.y());
-            m_document->renderer()->mltMoveTransition(transition->transitionName(), (int)(m_tracksList.count() - m_startPos.y()), (int)(m_startPos.y() - m_dragItem->track()), oldin, oldout, newin, newout);
+            Transition *transition = (Transition *) m_dragItem;
+            m_document->renderer()->mltMoveTransition(transition->transitionName(), (int)(m_tracksList.count() - m_dragItemInfo.track), (int)(m_dragItemInfo.track - m_dragItem->track()), m_dragItemInfo.startPos, m_dragItemInfo.endPos, info.startPos, info.endPos);
         }
 
     } else if (m_operationMode == RESIZESTART) {
         // resize start
         if (m_dragItem->type() == AVWIDGET) {
-            m_document->renderer()->mltResizeClipStart(m_tracksList.count() - m_dragItem->track(), m_dragItem->endPos(), m_dragItem->startPos(), GenTime((int)m_startPos.x(), m_document->fps()), m_dragItem->cropStart(), m_dragItem->cropStart() + m_dragItem->endPos() - m_dragItem->startPos());
-            ResizeClipCommand *command = new ResizeClipCommand(this, m_startPos, QPointF(m_dragItem->startPos().frames(m_document->fps()), m_dragItem->track()), true, false);
+            m_document->renderer()->mltResizeClipStart(m_tracksList.count() - m_dragItem->track(), m_dragItem->endPos(), m_dragItem->startPos(), m_dragItemInfo.startPos, m_dragItem->cropStart(), m_dragItem->cropStart() + m_dragItem->endPos() - m_dragItem->startPos());
+            ResizeClipCommand *command = new ResizeClipCommand(this, m_dragItemInfo, info, false);
             m_commandStack->push(command);
         } else 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 = m_dragItem->endPos();
-            transition->resizeTransitionStart(newin);
-            MoveTransitionCommand *command = new MoveTransitionCommand(this, QPointF(oldin.frames(m_document->fps()), oldout.frames(m_document->fps())), QPointF(newin.frames(m_document->fps()), newout.frames(m_document->fps())), (int) m_startPos.y(), (int)(m_dragItem->track()), false);
+            MoveTransitionCommand *command = new MoveTransitionCommand(this, m_dragItemInfo, info, false);
             m_commandStack->push(command);
-            m_document->renderer()->mltMoveTransition(transition->transitionName(), (int)(m_tracksList.count() - m_startPos.y()), 0, oldin, oldout, newin, newout);
+            Transition *transition = (Transition *) m_dragItem;
+            m_document->renderer()->mltMoveTransition(transition->transitionName(), (int)(m_tracksList.count() - m_dragItemInfo.track), 0, m_dragItemInfo.startPos, m_dragItemInfo.endPos, info.startPos, info.endPos);
         }
 
         m_document->renderer()->doRefresh();
     } else if (m_operationMode == RESIZEEND) {
         // resize end
         if (m_dragItem->type() == AVWIDGET) {
-            ResizeClipCommand *command = new ResizeClipCommand(this, m_startPos, QPointF(m_dragItem->endPos().frames(m_document->fps()), m_dragItem->track()), false, false);
+            ResizeClipCommand *command = new ResizeClipCommand(this, m_dragItemInfo, info, false);
             m_document->renderer()->mltResizeClipEnd(m_tracksList.count() - m_dragItem->track(), m_dragItem->startPos(), m_dragItem->cropStart(), m_dragItem->cropStart() + m_dragItem->endPos() - m_dragItem->startPos());
             m_commandStack->push(command);
         } else 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 = m_dragItem->endPos();
-            transition->resizeTransitionEnd(newout);
-            MoveTransitionCommand *command = new MoveTransitionCommand(this, QPointF(oldin.frames(m_document->fps()), oldout.frames(m_document->fps())), QPointF(newin.frames(m_document->fps()), newout.frames(m_document->fps())), (int) m_startPos.y(), (int)(m_dragItem->track()), false);
+
+            MoveTransitionCommand *command = new MoveTransitionCommand(this, m_dragItemInfo, info, false);
             m_commandStack->push(command);
-            m_document->renderer()->mltMoveTransition(transition->transitionName(), (int)(m_tracksList.count() - m_startPos.y()), 0, oldin, oldout, newin, newout);
+            Transition *transition = (Transition *) m_dragItem;
+            m_document->renderer()->mltMoveTransition(transition->transitionName(), (int)(m_tracksList.count() - m_dragItemInfo.track), 0, m_dragItemInfo.startPos, m_dragItemInfo.endPos, info.startPos, info.endPos);
         }
         m_document->renderer()->doRefresh();
     }
@@ -794,16 +792,16 @@ void CustomTrackView::mouseReleaseEvent(QMouseEvent * event) {
     m_dragItem = NULL;
 }
 
-void CustomTrackView::deleteClip(int track, GenTime startpos, const QRectF &rect) {
-    ClipItem *item = getClipItemAt(startpos, track);
+void CustomTrackView::deleteClip(ItemInfo info) {
+    ClipItem *item = getClipItemAt((int) info.startPos.frames(m_document->fps()), info.track);
     if (!item) {
-        kDebug() << "----------------  ERROR, CANNOT find clip to move at: " << rect.x();
+        kDebug() << "----------------  ERROR, CANNOT find clip to move at...";// << rect.x();
         return;
     }
     item->baseClip()->removeReference();
     m_document->updateClip(item->baseClip()->getId());
     delete item;
-    m_document->renderer()->mltRemoveClip(m_tracksList.count() - track, startpos);
+    m_document->renderer()->mltRemoveClip(m_tracksList.count() - info.track, info.startPos);
     m_document->renderer()->doRefresh();
 }
 
@@ -812,20 +810,23 @@ void CustomTrackView::deleteSelectedClips() {
     for (int i = 0; i < itemList.count(); i++) {
         if (itemList.at(i)->type() == AVWIDGET && itemList.at(i)->isSelected()) {
             ClipItem *item = (ClipItem *) itemList.at(i);
-            AddTimelineClipCommand *command = new AddTimelineClipCommand(this, item->xml(), item->clipProducer(), item->track(), item->startPos(), item->rect(), item->duration(), true, true);
+            ItemInfo info;
+            info.startPos = item->startPos();
+            info.endPos = item->endPos();
+            info.track = item->track();
+            AddTimelineClipCommand *command = new AddTimelineClipCommand(this, item->xml(), item->clipProducer(), info, true, true);
             m_commandStack->push(command);
         }
     }
 }
 
-void CustomTrackView::addClip(QDomElement xml, int clipId, int track, GenTime startpos, const QRectF &rect, GenTime duration) {
-    QRect r((int)(startpos.frames(m_document->fps()) * m_scale), m_tracksHeight * track, (int)(duration.frames(m_document->fps()) * m_scale), m_tracksHeight - 1);
+void CustomTrackView::addClip(QDomElement xml, int clipId, ItemInfo info) {
     DocClipBase *baseclip = m_document->clipManager()->getClipById(clipId);
-    ClipItem *item = new ClipItem(baseclip, track, startpos, r, duration, m_document->fps());
+    ClipItem *item = new ClipItem(baseclip, info, m_scale, m_document->fps());
     scene()->addItem(item);
     baseclip->addReference();
     m_document->updateClip(baseclip->getId());
-    m_document->renderer()->mltInsertClip(m_tracksList.count() - track, startpos, xml);
+    m_document->renderer()->mltInsertClip(m_tracksList.count() - info.track, info.startPos, xml);
     m_document->renderer()->doRefresh();
 }
 
@@ -863,59 +864,57 @@ Transition *CustomTrackView::getTransitionItemAt(GenTime pos, int track) {
     return getTransitionItemAt(framepos, track);
 }
 
-void CustomTrackView::moveClip(const QPointF &startPos, const QPointF &endPos) {
-    ClipItem *item = getClipItemAt((int)startPos.x() + 1, (int)startPos.y());
+void CustomTrackView::moveClip(const ItemInfo start, const ItemInfo end) {
+    ClipItem *item = getClipItemAt((int) start.startPos.frames(m_document->fps()) + 1, start.track);
     if (!item) {
-        kDebug() << "----------------  ERROR, CANNOT find clip to move at: " << startPos.x() * m_scale * FRAME_SIZE + 1 << ", " << startPos.y() * m_tracksHeight + m_tracksHeight / 2;
+        kDebug() << "----------------  ERROR, CANNOT find clip to move at.. ";// << startPos.x() * m_scale * FRAME_SIZE + 1 << ", " << startPos.y() * m_tracksHeight + m_tracksHeight / 2;
         return;
     }
-    kDebug() << "----------------  Move CLIP FROM: " << startPos.x() << ", END:" << endPos.x() << ",TRACKS: " << startPos.y() << " TO " << endPos.y();
-    item->moveTo((int)endPos.x(), m_scale, (int)((endPos.y() - startPos.y()) * m_tracksHeight), (int)endPos.y());
-    m_document->renderer()->mltMoveClip((int)(m_tracksList.count() - startPos.y()), (int)(m_tracksList.count() - endPos.y()), (int) startPos.x(), (int)endPos.x());
+    //kDebug() << "----------------  Move CLIP FROM: " << startPos.x() << ", END:" << endPos.x() << ",TRACKS: " << startPos.y() << " TO " << endPos.y();
+    item->moveTo((int) end.startPos.frames(m_document->fps()), m_scale, (int)((end.track - start.track) * m_tracksHeight), end.track);
+    m_document->renderer()->mltMoveClip((int)(m_tracksList.count() - start.track), (int)(m_tracksList.count() - end.track), (int) start.startPos.frames(m_document->fps()), (int)end.startPos.frames(m_document->fps()));
 }
 
-void CustomTrackView::moveTransition(const QPointF &startPos, const QPointF &endPos, int oldtrack, int newtrack) {
-    Transition *item = getTransitionItemAt((int)startPos.x() + 1, oldtrack);
+void CustomTrackView::moveTransition(const ItemInfo start, const ItemInfo end) {
+    Transition *item = getTransitionItemAt((int)start.startPos.frames(m_document->fps()) + 1, start.track);
     if (!item) {
-        kDebug() << "----------------  ERROR, CANNOT find transition to move at: " << startPos.x() * m_scale * FRAME_SIZE + 1 << ", " << startPos.y() * m_tracksHeight + m_tracksHeight / 2;
+        kDebug() << "----------------  ERROR, CANNOT find transition to move... ";// << startPos.x() * m_scale * FRAME_SIZE + 1 << ", " << startPos.y() * m_tracksHeight + m_tracksHeight / 2;
         return;
     }
     //kDebug() << "----------------  Move TRANSITION FROM: " << startPos.x() << ", END:" << endPos.x() << ",TRACKS: " << oldtrack << " TO " << newtrack;
 
     //kDebug()<<"///  RESIZE TRANS START: ("<< startPos.x()<<"x"<< startPos.y()<<") / ("<<endPos.x()<<"x"<< endPos.y()<<")";
-    if (endPos.y() - endPos.x() == startPos.y() - startPos.x()) {
+    if (end.endPos - end.startPos == start.endPos - start.startPos) {
         // Transition was moved
-        item->moveTo((int)endPos.x(), m_scale, (newtrack - oldtrack) * m_tracksHeight, newtrack);
-        item->moveTransition(GenTime((int)(endPos.x() - startPos.x()), m_document->fps()));
-    } else if (endPos.y() == startPos.y()) {
+        item->moveTo((int) end.startPos.frames(m_document->fps()), m_scale, (end.track - start.track) * m_tracksHeight, end.track);
+    } else if (end.endPos == start.endPos) {
         // Transition start resize
-        item->resizeStart((int)endPos.x(), m_scale);
-        item->resizeTransitionStart(GenTime((int) endPos.x(), m_document->fps()));
+        item->resizeStart((int) end.startPos.frames(m_document->fps()), m_scale);
     } else {
         // Transition end resize;
-        item->resizeEnd((int)endPos.y(), m_scale);
-        item->resizeTransitionEnd(GenTime((int) endPos.y(), m_document->fps()));
+        item->resizeEnd((int) end.endPos.frames(m_document->fps()), m_scale);
     }
     //item->moveTransition(GenTime((int) (endPos.x() - startPos.x()), m_document->fps()));
-    m_document->renderer()->mltMoveTransition(item->transitionName(), m_tracksList.count() - oldtrack, oldtrack - newtrack, GenTime((int) startPos.x(), m_document->fps()), GenTime((int) startPos.y(), m_document->fps()), GenTime((int) endPos.x(), m_document->fps()), GenTime((int) endPos.y(), m_document->fps()));
+    m_document->renderer()->mltMoveTransition(item->transitionName(), m_tracksList.count() - start.track, start.track - end.track, start.startPos, start.endPos, end.startPos, end.endPos);
 }
 
-void CustomTrackView::resizeClip(const QPointF &startPos, const QPointF &endPos, bool resizeClipStart) {
+void CustomTrackView::resizeClip(const ItemInfo start, const ItemInfo end) {
     int offset;
+    bool resizeClipStart = true;
+    if (start.startPos == end.startPos) resizeClipStart = false;
     if (resizeClipStart) offset = 1;
     else offset = -1;
-    ClipItem *item = getClipItemAt((int)(startPos.x() + offset), (int) startPos.y());
+    ClipItem *item = getClipItemAt((int)(start.startPos.frames(m_document->fps()) + offset), start.track);
     if (!item) {
-        kDebug() << "----------------  ERROR, CANNOT find clip to resize at: " << startPos;
+        kDebug() << "----------------  ERROR, CANNOT find clip to resize at... "; // << startPos;
         return;
     }
-    qreal diff = endPos.x() - startPos.x();
     if (resizeClipStart) {
-        m_document->renderer()->mltResizeClipStart(m_tracksList.count() - item->track(), item->endPos(), GenTime((int)endPos.x(), m_document->fps()), item->startPos(), item->cropStart() + GenTime((int)diff, m_document->fps()), item->cropStart() + GenTime((int)diff, m_document->fps()) + item->endPos() - GenTime((int)endPos.x(), m_document->fps()));
-        item->resizeStart((int)endPos.x(), m_scale);
+        m_document->renderer()->mltResizeClipStart(m_tracksList.count() - item->track(), item->endPos(), end.startPos, item->startPos(), item->cropStart() + end.startPos - start.startPos, item->cropStart() + end.startPos - start.startPos + item->endPos() - end.startPos);
+        item->resizeStart((int) end.startPos.frames(m_document->fps()), m_scale);
     } else {
-        m_document->renderer()->mltResizeClipEnd(m_tracksList.count() - item->track(), item->startPos(), item->cropStart(), item->cropStart() + GenTime((int)endPos.x(), m_document->fps()) - item->startPos());
-        item->resizeEnd((int)endPos.x(), m_scale);
+        m_document->renderer()->mltResizeClipEnd(m_tracksList.count() - item->track(), item->startPos(), item->cropStart(), item->cropStart() + end.startPos - item->startPos());
+        item->resizeEnd((int) end.startPos.frames(m_document->fps()), m_scale);
     }
     m_document->renderer()->doRefresh();
 }
@@ -949,8 +948,8 @@ void CustomTrackView::updateSnapPoints(AbstractClipItem *selected) {
             }
         } else if (itemList.at(i)->type() == TRANSITIONWIDGET) {
             Transition *transition = static_cast <Transition*>(itemList.at(i));
-            GenTime start = transition->transitionStartTime();
-            GenTime end = transition->transitionEndTime();
+            GenTime start = transition->startPos();
+            GenTime end = transition->endPos();
             m_snapPoints.append(start);
             m_snapPoints.append(end);
             if (offset != GenTime()) {
index 60f4ff25fbce79cb6e3158621ccafa88874480bc..bf7db3241d3a2826fed146e67280224b577362a7 100644 (file)
@@ -46,20 +46,20 @@ public:
     void removeTrack();
     int cursorPos();
     void checkAutoScroll();
-    void moveClip(const QPointF &startPos, const QPointF &endPos);
+    void moveClip(const ItemInfo start, const ItemInfo end);
     /** move transition, startPos = (old start, old end), endPos = (new start, new end) */
-    void moveTransition(const QPointF &startPos, const QPointF &endPos, int oldtrack, int newtrack);
-    void resizeClip(const QPointF &startPos, const QPointF &endPos, bool resizeClipStart);
-    void addClip(QDomElement xml, int clipId, int track, GenTime startpos, const QRectF &rect, GenTime duration);
-    void deleteClip(int track, GenTime startpos, const QRectF &rect);
+    void moveTransition(const ItemInfo start, const ItemInfo end);
+    void resizeClip(const ItemInfo start, const ItemInfo end);
+    void addClip(QDomElement xml, int clipId, ItemInfo info);
+    void deleteClip(ItemInfo info);
     void setScale(double scaleFactor);
     void deleteClip(int clipId);
     void slotAddEffect(QDomElement effect, GenTime pos, int track);
     void addEffect(int track, GenTime pos, QDomElement effect);
     void deleteEffect(int track, GenTime pos, QDomElement effect);
     void updateEffect(int track, GenTime pos, QDomElement effect);
-    void addTransition(int track, GenTime pos, QDomElement transition);
-    void deleteTransition(int track, GenTime pos, QDomElement transition);
+    void addTransition(ItemInfo transitionInfo, int endTrack, QMap <QString, QString> desc, QDomElement params);
+    void deleteTransition(ItemInfo transitionInfo, int endTrack, QMap <QString, QString> desc, QDomElement params);
     void updateTransition(int track, GenTime pos,  QDomElement oldTransition, QDomElement transition);
     void moveTransition(GenTime oldpos, GenTime newpos);
     void activateMonitor();
@@ -77,7 +77,8 @@ public slots:
     void slotUpdateClipEffect(ClipItem *clip, QDomElement oldeffect, QDomElement effect);
     void slotRefreshEffects(ClipItem *clip);
     void setDuration(int duration);
-    void slotAddTransition(ClipItem* clip , QDomElement transition, GenTime startTime , int startTrack);
+    void slotAddTransition(ClipItem* clip, ItemInfo transitionInfo, int endTrack,
+                           QMap <QString, QString> desc, QDomElement transition = QDomElement());
     void slotTransitionUpdated(QDomElement, QDomElement);
     void slotSwitchTrackAudio(int ix);
     void slotSwitchTrackVideo(int ix);
@@ -102,7 +103,7 @@ private:
     KdenliveDoc *m_document;
     void addItem(DocClipBase *clip, QPoint pos);
     QGraphicsLineItem *m_cursorLine;
-    QPointF m_startPos;
+    ItemInfo m_dragItemInfo;
     OPERATIONTYPE m_operationMode;
     OPERATIONTYPE m_moveOpMode;
     AbstractClipItem *m_dragItem;
index 85ccbb4de5967778326c02ec8a002c3cd2b29acf..10ca5b79548e338405d45c6cf89bd8dfac5bc3ec 100644 (file)
@@ -21,6 +21,8 @@
 #ifndef DEFINITIONS_H
 #define DEFINITIONS_H
 
+#include "gentime.h"
+
 #define FRAME_SIZE 90
 #define MAXCLIPDURATION 15000
 
@@ -45,6 +47,12 @@ struct TrackInfo {
     bool isBlind;
 };
 
+struct ItemInfo {
+    GenTime startPos;
+    GenTime endPos;
+    int track;
+};
+
 struct MltVideoProfile {
     QString path;
     QString description;
index 60856127206ac1d0ad1245aadece8195c4e49ec9..955b1147cf9d788e7a9e318762092f8f359cddd7 100644 (file)
@@ -21,8 +21,8 @@
 
 #include "moveclipcommand.h"
 #include "customtrackview.h"
-MoveClipCommand::MoveClipCommand(CustomTrackView *view, const QPointF startPos, const QPointF endPos, bool doIt)
-        : m_view(view), m_startPos(startPos), m_endPos(endPos), m_doIt(doIt) {
+MoveClipCommand::MoveClipCommand(CustomTrackView *view, const ItemInfo start, const ItemInfo end, bool doIt)
+        : m_view(view), m_startPos(start), m_endPos(end), m_doIt(doIt) {
     setText(i18n("Move clip"));
 }
 
index 06980281038f866be6fec38261bbb52e689a4bd2..54a4a721c460a3eab28de3a21e383e9b2cc78c40 100644 (file)
 #include <QPointF>
 
 #include <KDebug>
+#include "definitions.h"
 
 class CustomTrackView;
 
 class MoveClipCommand : public QUndoCommand {
 public:
-    MoveClipCommand(CustomTrackView *view, const QPointF startPos, const QPointF endPos, bool doIt);
+    MoveClipCommand(CustomTrackView *view, const ItemInfo start, const ItemInfo end, bool doIt);
     virtual void undo();
     virtual void redo();
 
 private:
     CustomTrackView *m_view;
-    QPointF m_startPos;
-    QPointF m_endPos;
+    ItemInfo m_startPos;
+    ItemInfo m_endPos;
     bool m_doIt;
 };
 
index d996839007b6ccdffd180c3d4afef428ec8d3daa..b2b354c8d3375ed7bdfa692265594eea05ffce9a 100644 (file)
@@ -18,8 +18,7 @@
 
 #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_startTrack(startTrack), m_endTrack(endTrack), m_doIt(doIt) {
+MoveTransitionCommand::MoveTransitionCommand(CustomTrackView *view, const ItemInfo start, const ItemInfo end, bool doIt) : m_view(view), m_startPos(start), m_endPos(end), m_doIt(doIt) {
     setText(i18n("Move transition"));
 }
 
@@ -28,12 +27,12 @@ MoveTransitionCommand::MoveTransitionCommand(CustomTrackView *view, const QPoint
 void MoveTransitionCommand::undo() {
 // kDebug()<<"----  undoing action";
     m_doIt = true;
-    m_view->moveTransition(m_endPos, m_startPos, m_endTrack, m_startTrack);
+    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_startTrack, m_endTrack);
+    if (m_doIt) m_view->moveTransition(m_startPos, m_endPos);
     m_doIt = true;
 }
 
index a3fad9500c17e54ecdeff0f4960ba52fe3762e0a..ae0adf311e374d0c5b8895878473fd1f521c8a35 100644 (file)
 
 #include <KDebug>
 
+#include "definitions.h"
+
 class CustomTrackView;
 
 class MoveTransitionCommand : public QUndoCommand {
 public:
-    MoveTransitionCommand(CustomTrackView *view, const QPointF startPos, const QPointF endPos, int startTrack, int endTrack, bool doIt);
+    MoveTransitionCommand(CustomTrackView *view, const ItemInfo start, const ItemInfo end, bool doIt);
     virtual void undo();
     virtual void redo();
 
 private:
     CustomTrackView *m_view;
-    QPointF m_startPos;
-    QPointF m_endPos;
+    ItemInfo m_startPos;
+    ItemInfo m_endPos;
     bool m_doIt;
-    int m_startTrack;
-    int m_endTrack;
 };
 
 #endif
index 334630548451343a3cd40ffa447343f74b68039e..721544dc5d6eb458dd60f87efd27bf7f9e74bfee 100644 (file)
@@ -21,8 +21,9 @@
 
 #include "resizeclipcommand.h"
 #include "customtrackview.h"
-ResizeClipCommand::ResizeClipCommand(CustomTrackView *view, const QPointF startPos, const QPointF endPos, bool resizeClipStart, bool doIt)
-        : m_view(view), m_startPos(startPos), m_endPos(endPos), m_resizeClipStart(resizeClipStart), m_doIt(doIt) {
+
+ResizeClipCommand::ResizeClipCommand(CustomTrackView *view, const ItemInfo start, const ItemInfo end, bool doIt)
+        : m_view(view), m_startPos(start), m_endPos(end), m_doIt(doIt) {
     setText(i18n("Resize clip"));
 }
 
@@ -31,12 +32,12 @@ ResizeClipCommand::ResizeClipCommand(CustomTrackView *view, const QPointF startP
 void ResizeClipCommand::undo() {
 // kDebug()<<"----  undoing action";
     m_doIt = true;
-    if (m_doIt) m_view->resizeClip(m_endPos, m_startPos, m_resizeClipStart);
+    if (m_doIt) m_view->resizeClip(m_endPos, m_startPos);
 }
 // virtual
 void ResizeClipCommand::redo() {
     kDebug() << "----  redoing action";
-    if (m_doIt) m_view->resizeClip(m_startPos, m_endPos, m_resizeClipStart);
+    if (m_doIt) m_view->resizeClip(m_startPos, m_endPos);
     m_doIt = true;
 }
 
index 551711356e00204443de643ec9838e1f787d47a0..1b527b46ca3539916a9b14d47906aa4923c50022 100644 (file)
 
 #include <KDebug>
 
+#include "definitions.h"
+
 class CustomTrackView;
 
 class ResizeClipCommand : public QUndoCommand {
 public:
-    ResizeClipCommand(CustomTrackView *view, const QPointF startPos, const QPointF endPos, bool resizeClipStart, bool doIt);
+    ResizeClipCommand(CustomTrackView *view, const ItemInfo start, const ItemInfo end, bool doIt);
     virtual void undo();
     virtual void redo();
 
 private:
     CustomTrackView *m_view;
-    QPointF m_startPos;
-    QPointF m_endPos;
-    bool m_resizeClipStart;
+    ItemInfo m_startPos;
+    ItemInfo m_endPos;
     bool m_doIt;
 };
 
index 4d016311d8456dcd2eacfc5ecfc69eb6b022315f..940353e664014a6b9a7ec390023b8623ef57ba51 100644 (file)
@@ -235,9 +235,14 @@ int TrackView::slotAddVideoTrack(int ix, QDomElement xml) {
             int in = elem.attribute("in", 0).toInt();
             int id = elem.attribute("producer", 0).toInt();
             DocClipBase *clip = m_doc->clipManager()->getClipById(id);
-            int out = elem.attribute("out", 0).toInt() - in;
-            //kDebug()<<"++++++++++++++\n\n / / /ADDING CLIP: "<<clip.cropTime<<", out: "<<clip.duration<<", Producer: "<<clip.producer<<"\n\n++++++++++++++++++++";
-            ClipItem *item = new ClipItem(clip, ix, GenTime(position, m_doc->fps()), QRectF(position * m_scale, trackTop + 1, out * m_scale, KdenliveSettings::trackheight() - 1), GenTime(out, m_doc->fps()), m_doc->fps());
+            int out = elem.attribute("out", 0).toInt();
+
+            ItemInfo info;
+            info.startPos = GenTime(position, m_doc->fps());
+            info.endPos = GenTime(out, m_doc->fps());
+            info.track = ix;
+
+            ClipItem *item = new ClipItem(clip, info, m_scale, m_doc->fps());
             m_scene->addItem(item);
             position += out;
 
index f7712fe24dcbcc905147737db6354c83231c8c10..0df189036a1c96c7dce0a14df1e9f4edf8a63a8b 100644 (file)
 #include "kdenlivesettings.h"
 
 
-Transition::Transition(const QRectF& rect , ClipItem * clipa, const QString & type, const GenTime &startTime, const GenTime &endTime, double fps, bool inverted) : AbstractClipItem(rect) {
-    m_invertTransition = inverted;
+Transition::Transition(const ItemInfo info, int transitiontrack, double scale, double fps, QMap <QString, QString> desc, QDomElement params) : AbstractClipItem(info, QRectF(info.startPos.frames(fps) *scale , info.track * KdenliveSettings::trackheight() + KdenliveSettings::trackheight() / 2, (info.endPos - info.startPos).frames(fps) * scale , KdenliveSettings::trackheight() - 1)) {
     m_singleClip = true;
-    m_transitionTrack = clipa->track();
+    m_transitionTrack = transitiontrack;
     m_secondClip = NULL;
-    m_transitionName = type;
+    m_cropStart = GenTime();
     m_fps = fps;
-    m_cropDuration = endTime - startTime;
-    m_startPos = startTime;
-    m_maxDuration = GenTime(1000000);
-    // Default duration = 2.5 seconds
-    GenTime defaultTransitionDuration = GenTime(2.5);
-
-    m_referenceClip = clipa;
-
-    if (startTime < m_referenceClip->startPos()) m_transitionStart = GenTime(0.0);
-    else if (startTime > m_referenceClip->endPos()) m_transitionStart = m_referenceClip->duration() - defaultTransitionDuration;
-    else m_transitionStart = startTime - m_referenceClip->startPos();
+    m_cropDuration = m_maxDuration;
+    //m_referenceClip = clipa;
+    if (desc.isEmpty()) {
+        m_description.insert("tag", "luma");
+        m_description.insert("name", "Luma");
+        m_description.insert("description", "Luma Transitions");
+        QDomDocument doc;
+        m_parameters = doc.createElement("ktransition");
+    } else {
+        m_description = desc;
+        m_parameters = params;
+    }
 
-    if (m_transitionStart + m_cropDuration > m_referenceClip->duration())
-        m_transitionDuration = m_referenceClip->duration() - m_transitionStart;
-    else m_transitionDuration = m_cropDuration;
     m_secondClip = 0;
     setFlags(QGraphicsItem::ItemClipsToShape | QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
     setZValue(2);
 
-    QDomDocument doc;
-    doc.setContent(QString("<ktransition tag=\"luma\">\n\
-                           <name>Luma</name>\n\
-                           <description>Luma Transitions</description>\n\
-                           <properties id=\"luma\" tag=\"luma\" />\n\
-                           <parameter type=\"bool\" name=\"reverse\" max=\"1\" min=\"0\" default=\"1\" factor=\"1\">\n\
-                           <name>Reverse</name>\n\
-                           </parameter>\n\
-                           </ktransition>"));
-    m_transitionParameters = doc.documentElement();
-
-    m_referenceClip->addTransition(this);
-}
-
-// create a transition from XML
-Transition::Transition(const QRectF& rect , ClipItem * clip, QDomElement transitionElement, double fps, GenTime offset) : AbstractClipItem(rect) {
-    if (offset == GenTime()) offset = clip->startPos();
-    m_referenceClip = clip;
-    m_singleClip = true;
-    m_secondClip = NULL;
-    m_transitionStart = GenTime(transitionElement.attribute("start", QString::null).toInt(), m_referenceClip->fps());
-    m_transitionDuration = GenTime(transitionElement.attribute("end", QString::null).toInt(), m_referenceClip->fps()) - m_transitionStart;
-    m_transitionTrack = transitionElement.attribute("transition_track", "0").toInt();
-    m_transitionStart = m_transitionStart - offset;
-
-    m_invertTransition = transitionElement.attribute("inverted", "0").toInt();
-    m_transitionName = transitionElement.attribute("type" , "luma");
-
-    // load transition parameters
-    typedef QMap<QString, QString> ParamMap;
-    ParamMap params;
-    for (QDomNode n = transitionElement.firstChild(); !n.isNull(); n = n.nextSibling()) {
-        QDomElement paramElement = n.toElement();
-        params[paramElement.tagName()] = paramElement.attribute("value", QString::null);
-    }
-    if (m_invertTransition) params["reverse"] = "1";
-    //if (!params.isEmpty()) setTransitionParameters(params);
-
-    // Check if transition is valid (not outside of clip)
-    if (m_transitionStart > clip->duration())
-        m_transitionDuration = GenTime();
-
+    //m_referenceClip->addTransition(this);
 }
 
 Transition::~Transition() {
 }
 
 QString Transition::transitionName() const {
-    return m_transitionName;
+    return m_description.value("name");
 }
 
-void Transition::setTransitionParameters(const QDomElement & elem) {
-    m_transitionParameters = elem;
-    m_transitionName = elem.attribute("tag");
+QString Transition::transitionTag() const {
+    return m_description.value("tag");
 }
 
-bool Transition::invertTransition() const {
-    if (!m_singleClip) {
-        if (m_referenceClip->startPos() < m_secondClip->startPos()) return true;
-        else return false;
-    }
-    return m_invertTransition;
+void Transition::setTransitionParameters(const QDomElement params) {
+    m_parameters = params;
+}
+
+
+bool Transition::invertedTransition() const {
+    return false; //m_parameters.attribute("reverse").toInt();
 }
 
 QPixmap Transition::transitionPixmap() const {
     KIcon icon;
-    if (m_transitionName == "luma") {
-        if (invertTransition()) icon = KIcon("kdenlive_trans_up");
+    if (transitionTag() == "luma") {
+        if (invertedTransition()) icon = KIcon("kdenlive_trans_up");
         else icon = KIcon("kdenlive_trans_down");
-    } else if (m_transitionName == "composite") {
+    } else if (transitionTag() == "composite") {
         icon = KIcon("kdenlive_trans_wiper");
-    } else if (m_transitionName == "lumafile") {
+    } else if (transitionTag() == "lumafile") {
         icon = KIcon("kdenlive_trans_luma");
     } else icon = KIcon("kdenlive_trans_pip");
     return icon.pixmap(QSize(15, 15));
 }
 
-int Transition::transitionTrack() const {
-    return m_transitionTrack;
-}
-
-void Transition::setTransitionTrack(int track) {
-    m_transitionTrack = track;
-}
 
 void Transition::setTransitionDirection(bool inv) {
-    m_invertTransition = inv;
-}
-
-int Transition::transitionStartTrack() const {
-    return m_referenceClip->track();
+    //m_parameters.setAttribute("reverse", inv);
 }
 
 int Transition::transitionEndTrack() const {
-    if (!m_singleClip) return m_secondClip->track();
-    return m_referenceClip->track() + 1;
-    //TODO: calculate next video track
-}
-
-GenTime Transition::transitionDuration() const {
-    return transitionEndTime() - transitionStartTime();
-}
-
-GenTime Transition::transitionStartTime() const {
-    if (!m_singleClip) {
-        GenTime startb = m_secondClip->startPos();
-        GenTime starta = m_referenceClip->startPos();
-        if (startb > m_referenceClip->endPos()) return m_referenceClip->endPos() - GenTime(0.12);
-        if (startb > starta)
-            return startb;
-        return starta;
-    } else return m_referenceClip->startPos() + m_transitionStart;
+    return m_transitionTrack;
 }
 
-
-GenTime Transition::transitionEndTime() const {
-    if (!m_singleClip) {
-        GenTime endb = m_secondClip->endPos();
-        GenTime enda = m_referenceClip->endPos();
-        if (m_secondClip->startPos() > enda) return enda;
-        if (endb < m_referenceClip->startPos()) return m_referenceClip->startPos() + GenTime(0.12);
-        else if (endb > enda) return enda;
-        else return endb;
-    } else {
-        if (m_transitionStart + m_transitionDuration > m_referenceClip->duration())
-            return m_referenceClip->endPos();
-        return m_referenceClip->startPos() + m_transitionStart + m_transitionDuration;
-    }
-}
 void Transition::paint(QPainter *painter,
                        const QStyleOptionGraphicsItem *option,
                        QWidget *widget) {
@@ -227,36 +140,12 @@ void Transition::paint(QPainter *painter,
 int Transition::type() const {
     return TRANSITIONWIDGET;
 }
+
 OPERATIONTYPE Transition::operationMode(QPointF pos, double scale) {
     if (abs((int)(pos.x() - rect().x())) < 6) return RESIZESTART;
     else if (abs((int)(pos.x() - (rect().x() + rect().width()))) < 6) return RESIZEEND;
     return MOVE;
 }
-void Transition::resizeTransitionStart(GenTime time) {
-    if (!m_singleClip) return; //cannot resize automatic transitions
-    if (time < m_referenceClip->startPos()) time = m_referenceClip->startPos();
-    // Transitions shouldn't be shorter than 3 frames, about 0.12 seconds
-    if (transitionEndTime().ms() - time.ms() < 120.0) time = transitionEndTime() - GenTime(0.12);
-    m_transitionDuration = m_transitionDuration - (time - m_referenceClip->startPos() - m_transitionStart);
-    m_transitionStart = time - m_referenceClip->startPos();
-}
-
-void Transition::resizeTransitionEnd(GenTime time) {
-    if (!m_singleClip) return; //cannot resize automatic transitions
-    if (time > m_referenceClip->endPos()) time = m_referenceClip->endPos();
-    // Transitions shouldn't be shorter than 3 frames, about 0.12 seconds
-    if (time.ms() - transitionStartTime().ms() < 120.0) time = transitionStartTime() + GenTime(0.12);
-    m_transitionDuration = time - (m_referenceClip->startPos() + m_transitionStart);
-}
-
-void Transition::moveTransition(GenTime time) {
-    if (!m_singleClip) return; //cannot move automatic transitions
-    if (m_transitionStart + time < GenTime(0.0)) m_transitionStart = GenTime(0.0);
-    else if (m_transitionStart + time > m_referenceClip->duration() - m_transitionDuration)
-        m_transitionStart = m_referenceClip->duration() - m_transitionDuration;
-    else m_transitionStart = m_transitionStart + time;
-    if (m_transitionStart < GenTime(0.0)) m_transitionStart = GenTime(0.0);
-}
 
 bool Transition::hasClip(const ClipItem * clip) const {
     if (clip == m_secondClip) return true;
@@ -268,30 +157,27 @@ bool Transition::belongsToClip(const ClipItem * clip) const {
     return false;
 }
 
+/*
 Transition *Transition::clone() {
     return new Transition::Transition(rect(), m_referenceClip, this->toXML() , m_fps);
-    /*if (m_singleClip || m_secondClip == 0)
-        return new Transition::Transition(m_referenceClip);
-    else
-        //return new Transition::Transition(m_referenceClip, m_secondClip);
-    return new Transition::Transition(m_referenceClip, this->toXML());
-    */
-}
+}*/
 
+/*
 Transition *Transition::reparent(ClipItem * clip) {
     return new Transition::Transition(rect(), clip, this->toXML(), m_fps, m_referenceClip->startPos());
-}
+}*/
 
 bool Transition::isValid() const {
-    return (m_transitionDuration != GenTime());
+    return true; //(m_transitionDuration != GenTime());
 }
 
 const ClipItem *Transition::referencedClip() const {
     return m_referenceClip;
 }
 
+/*
 QDomElement Transition::toXML() {
-    m_transitionParameters.setAttribute("type", m_transitionName);
+    m_transitionParameters.setAttribute("type", transitionTag);
     //m_transitionParameters.setAttribute("inverted", invertTransition());
     m_transitionParameters.setAttribute("transition_track", m_transitionTrack);
     m_transitionParameters.setAttribute("start", transitionStartTime().frames(m_referenceClip->fps()));
@@ -303,5 +189,5 @@ QDomElement Transition::toXML() {
     }
 
     return m_transitionParameters;
-}
+}*/
 
index 8cb37193a7b12ad8b9ac6fda8bf22668ce011004..b52817d0a30305f4bf5133c4af1a5ad9bbaf13b7 100644 (file)
@@ -21,7 +21,7 @@
 #include <QString>
 #include <QGraphicsRectItem>
 #include <QPixmap>
-#include <qdom.h>
+#include <QDomElement>
 #include <QMap>
 
 #include "gentime.h"
@@ -38,59 +38,40 @@ class Transition : public AbstractClipItem {
     Q_OBJECT
 public:
 
-    Transition(const QRectF&, ClipItem * clipa, const QString& type, const GenTime &startTime, const GenTime &endTime, double fps, bool inverted = false);
-    Transition(const QRectF&, ClipItem * clip, QDomElement transitionElement, double fps, GenTime offset = GenTime());
+    Transition(const ItemInfo info, int transitiontrack, double scale, double fps, QMap <QString, QString> desc, QDomElement params = QDomElement());
     virtual ~Transition();
     virtual void paint(QPainter *painter,
                        const QStyleOptionGraphicsItem *option,
                        QWidget *widget);
     virtual int type() const;
     /** Returns an XML representation of this transition. */
-    QDomElement toXML();
+    //QDomElement toXML();
 
-    GenTime transitionStartTime() const;
-    GenTime transitionEndTime() const;
     /** Return the track number of transition in the playlist*/
-    int transitionStartTrack() const;
     int transitionEndTrack() const;
     Transition *clone();
     bool hasClip(const ClipItem * clip) const;
     bool belongsToClip(const ClipItem * clip) const;
-    void resizeTransitionEnd(GenTime time);
-    void resizeTransitionStart(GenTime time);
-    void moveTransition(GenTime time);
-    bool invertTransition() const;
+    bool invertedTransition() const;
     QString transitionName() const;
+    QString transitionTag() const;
     OPERATIONTYPE operationMode(QPointF pos, double scale);
-    void setTransitionType(QString newType);
     //const QMap < QString, QString > transitionParameters() const;
-    void setTransitionParameters(const QDomElement&);
+    void setTransitionParameters(const QDomElement params);
     void setTransitionDirection(bool inv);
-    int transitionTrack() const;
     void setTransitionTrack(int track);
     QPixmap transitionPixmap() const;
-    Transition *reparent(ClipItem * clip);
+    //Transition *reparent(ClipItem * clip);
     bool isValid() const;
-    GenTime transitionDuration() const;
+
     const ClipItem *referencedClip() const;
 
 private:
-
-    GenTime m_transitionStart;
-    GenTime m_transitionDuration;
-    QDomElement m_transitionParameters;
-
-    /** The name of the transition to be displayed to user */
-    QString m_transitionName;
-
-    /** Should the transition be reversed */
-    bool m_invertTransition;
-
     bool m_singleClip;
-
-    /** The track to which the transition is attached*/
-    int m_track;
-
+    /** contains the transition description (name, tag, description) */
+    QMap <QString, QString> m_description;
+    /** contains the transition parameters */
+    QDomElement m_parameters;
     /** The clip to which the transition is attached */
     ClipItem *m_referenceClip;
 
index 5d6af62ff7178e44ffab30dcd9cbdaab6680869d..b6d66898fad55bf0944e1286e17d790570436fc2 100644 (file)
  *                                                                         *
  ***************************************************************************/
 
+
+#include <KDebug>
+
 #include "transitionsettings.h"
 #include "transition.h"
-#include <KDebug>
 #include "effectslist.h"
 #include "effectstackedit.h"
 
@@ -35,17 +37,18 @@ TransitionSettings::TransitionSettings(EffectsList *transitions, QWidget* parent
 
 
 void TransitionSettings::slotTransitionChanged() {
-    QDomElement e = m_usedTransition->toXML();
-
-    //set old values from e in <ktransition> to desc (like reverse and so )
-    QDomElement desc = m_transitions->getEffectByName(ui.listWidget->currentItem()->text());
-    if (m_usedTransition) {
-        m_usedTransition->setTransitionParameters(desc);
-        m_usedTransition->update();
-    }
-    emit transitionUpdated(e, m_usedTransition->toXML());
-    emit transferParamDesc(desc, 0, 0);
-
+    /*
+        QDomElement e = m_usedTransition->toXML();
+
+        //set old values from e in <ktransition> to desc (like reverse and so )
+        QDomElement desc = m_transitions->getEffectByName(ui.listWidget->currentItem()->text());
+        if (m_usedTransition) {
+            m_usedTransition->setTransitionParameters(desc);
+            m_usedTransition->update();
+        }
+        emit transitionUpdated(e, m_usedTransition->toXML());
+        emit transferParamDesc(desc, 0, 0);
+    */
 }
 
 void TransitionSettings::slotTransitionItemSelected(Transition* t) {