]> git.sesse.net Git - kdenlive/blobdiff - src/customtrackview.cpp
xml for frei0r saturat0r & lens correction
[kdenlive] / src / customtrackview.cpp
index 6d877f125b9a71ce39e378678a53105d4ff1326d..8f7f54c0bc7175d63ab0842769959b388b14170c 100644 (file)
@@ -601,6 +601,18 @@ void CustomTrackView::mousePressEvent(QMouseEvent * event)
         return;
     }
 
+    if (event->modifiers() & Qt::ShiftModifier) {
+        setDragMode(QGraphicsView::RubberBandDrag);
+        if (!(event->modifiers() & Qt::ControlModifier)) {
+            resetSelectionGroup();
+            scene()->clearSelection();
+        }
+        QGraphicsView::mousePressEvent(event);
+        m_blockRefresh = false;
+        m_operationMode = RUBBERSELECTION;
+        return;
+    }
+
     m_blockRefresh = true;
     m_dragItem = NULL;
     m_dragGuide = NULL;
@@ -624,18 +636,6 @@ void CustomTrackView::mousePressEvent(QMouseEvent * event)
         return;
     }
 
-    if (event->modifiers() & Qt::ShiftModifier && collisionList.count() == 0) {
-        setDragMode(QGraphicsView::RubberBandDrag);
-        if (!(event->modifiers() & Qt::ControlModifier)) {
-            resetSelectionGroup();
-            scene()->clearSelection();
-        }
-        QGraphicsView::mousePressEvent(event);
-        m_blockRefresh = false;
-        m_operationMode = RUBBERSELECTION;
-        return;
-    }
-
     // if a guide and a clip were pressed, just select the guide
     for (int i = 0; i < collisionList.count(); ++i) {
         if (collisionList.at(i)->type() == GUIDEITEM) {
@@ -1062,7 +1062,7 @@ void CustomTrackView::mouseDoubleClickEvent(QMouseEvent *event)
                 QUndoCommand *moveCommand = new QUndoCommand();
                 moveCommand->setText(i18n("Edit clip"));
                 ItemInfo clipInfo = m_dragItem->info();
-                if (d.duration() < m_dragItem->duration() || d.cropStart() != clipInfo.cropStart) {
+                if (d.duration() < m_dragItem->cropDuration() || d.cropStart() != clipInfo.cropStart) {
                     // duration was reduced, so process it first
                     ItemInfo startInfo = clipInfo;
                     clipInfo.endPos = clipInfo.startPos + d.duration();
@@ -1075,7 +1075,7 @@ void CustomTrackView::mouseDoubleClickEvent(QMouseEvent *event)
                     clipInfo.endPos = m_dragItem->endPos() + (clipInfo.startPos - startInfo.startPos);
                     new MoveClipCommand(this, startInfo, clipInfo, true, moveCommand);
                 }
-                if (d.duration() > m_dragItem->duration()) {
+                if (d.duration() > m_dragItem->cropDuration()) {
                     // duration was increased, so process it after move
                     ItemInfo startInfo = clipInfo;
                     clipInfo.endPos = clipInfo.startPos + d.duration();
@@ -1206,7 +1206,7 @@ bool CustomTrackView::insertPossible(AbstractGroupItem *group, const QPoint &pos
             ClipItem *clip = static_cast <ClipItem *>(children.at(i));
             ItemInfo info = clip->info();
             kDebug() << " / / INSERT : " << pos.x();
-            QRectF shape = QRectF(clip->startPos().frames(m_document->fps()), clip->track() * m_tracksHeight + 1, clip->duration().frames(m_document->fps()) - 0.02, m_tracksHeight - 1);
+            QRectF shape = QRectF(clip->startPos().frames(m_document->fps()), clip->track() * m_tracksHeight + 1, clip->cropDuration().frames(m_document->fps()) - 0.02, m_tracksHeight - 1);
             kDebug() << " / / INSERT RECT: " << shape;
             path = path.united(QPolygonF(shape));
         }
@@ -1558,7 +1558,7 @@ void CustomTrackView::slotAddTransitionToSelectedClips(QDomElement transition)
             ClipItem *transitionClip = NULL;
             const int transitiontrack = getPreviousVideoTrack(info.track);
             GenTime pos = GenTime((int)(mapToScene(m_menuPosition).x()), m_document->fps());
-            if (pos < item->startPos() + item->duration() / 2) {
+            if (pos < item->startPos() + item->cropDuration() / 2) {
                 // add transition to clip start
                 info.startPos = item->startPos();
                 if (transitiontrack != 0) transitionClip = getClipItemAt((int) info.startPos.frames(m_document->fps()), m_document->tracksCount() - transitiontrack);
@@ -1827,9 +1827,10 @@ void CustomTrackView::addTrack(TrackInfo type, int ix)
         m_selectionGroup = new AbstractGroupItem(m_document->fps());
         scene()->addItem(m_selectionGroup);
         for (int i = 0; i < selection.count(); i++) {
-            if (selection.at(i)->type() == AVWIDGET || selection.at(i)->type() == TRANSITIONWIDGET)
+            if ((!selection.at(i)->parentItem()) && (selection.at(i)->type() == AVWIDGET || selection.at(i)->type() == TRANSITIONWIDGET || selection.at(i)->type() == GROUPWIDGET)) {
                 m_selectionGroup->addToGroup(selection.at(i));
-            selection.at(i)->setFlags(QGraphicsItem::ItemIsSelectable);
+                selection.at(i)->setFlags(QGraphicsItem::ItemIsSelectable);
+            }
         }
         // Move graphic items
         m_selectionGroup->translate(0, m_tracksHeight);
@@ -1837,6 +1838,11 @@ void CustomTrackView::addTrack(TrackInfo type, int ix)
         // adjust track number
         QList<QGraphicsItem *> children = m_selectionGroup->childItems();
         for (int i = 0; i < children.count(); i++) {
+            if (children.at(i)->type() == GROUPWIDGET) {
+                AbstractGroupItem *grp = static_cast<AbstractGroupItem*>(children.at(i));
+                children << grp->childItems();
+                continue;
+            }
             AbstractClipItem *item = static_cast <AbstractClipItem *>(children.at(i));
             item->updateItem();
             ItemInfo clipinfo = item->info();
@@ -1860,8 +1866,8 @@ void CustomTrackView::addTrack(TrackInfo type, int ix)
             }
         }
         resetSelectionGroup(false);
-
     }
+
     int maxHeight = m_tracksHeight * m_document->tracksCount();
     for (int i = 0; i < m_guides.count(); i++) {
         QLineF l = m_guides.at(i)->line();
@@ -1890,7 +1896,7 @@ void CustomTrackView::removeTrack(int ix)
     m_selectionGroup = new AbstractGroupItem(m_document->fps());
     scene()->addItem(m_selectionGroup);
     for (int i = 0; i < selection.count(); i++) {
-        if (selection.at(i)->type() == AVWIDGET || selection.at(i)->type() == TRANSITIONWIDGET) {
+        if ((!selection.at(i)->parentItem()) && (selection.at(i)->type() == AVWIDGET || selection.at(i)->type() == TRANSITIONWIDGET || selection.at(i)->type() == GROUPWIDGET)) {
             m_selectionGroup->addToGroup(selection.at(i));
             selection.at(i)->setFlags(QGraphicsItem::ItemIsSelectable);
         }
@@ -1903,6 +1909,11 @@ void CustomTrackView::removeTrack(int ix)
     QList<QGraphicsItem *> children = m_selectionGroup->childItems();
     //kDebug() << "// FOUND CLIPS TO MOVE: " << children.count();
     for (int i = 0; i < children.count(); i++) {
+        if (children.at(i)->type() == GROUPWIDGET) {
+            AbstractGroupItem *grp = static_cast<AbstractGroupItem*>(children.at(i));
+            children << grp->childItems();
+            continue;
+        }
         if (children.at(i)->type() == AVWIDGET) {
             ClipItem *clip = static_cast <ClipItem *>(children.at(i));
             clip->updateItem();
@@ -2676,7 +2687,7 @@ void CustomTrackView::mouseReleaseEvent(QMouseEvent * event)
         int ix = item->hasEffect("volume", "fadeout");
         if (ix != -1) {
             QDomElement oldeffect = item->effectAt(ix);
-            int end = (item->duration() + item->cropStart()).frames(m_document->fps());
+            int end = (item->cropDuration() + item->cropStart()).frames(m_document->fps());
             int start = item->fadeOut();
             if (start == 0) {
                 slotDeleteEffect(item, oldeffect);
@@ -2698,7 +2709,7 @@ void CustomTrackView::mouseReleaseEvent(QMouseEvent * event)
         ix = item->hasEffect("brightness", "fade_to_black");
         if (ix != -1) {
             QDomElement oldeffect = item->effectAt(ix);
-            int end = (item->duration() + item->cropStart()).frames(m_document->fps());
+            int end = (item->cropDuration() + item->cropStart()).frames(m_document->fps());
             int start = item->fadeOut();
             if (start == 0) {
                 slotDeleteEffect(item, oldeffect);
@@ -2808,10 +2819,12 @@ void CustomTrackView::deleteSelectedClips()
         if (itemList.at(i)->type() == AVWIDGET) {
             ClipItem *item = static_cast <ClipItem *>(itemList.at(i));
             if (item->parentItem()) resetGroup = true;
+            //kDebug()<<"// DELETE CLP AT: "<<item->info().startPos.frames(25);
             new AddTimelineClipCommand(this, item->xml(), item->clipProducer(), item->info(), item->effectList(), true, true, deleteSelected);
             emit clipItemSelected(NULL);
         } else if (itemList.at(i)->type() == TRANSITIONWIDGET) {
             Transition *item = static_cast <Transition *>(itemList.at(i));
+            //kDebug()<<"// DELETE TRANS AT: "<<item->info().startPos.frames(25);
             if (item->parentItem()) resetGroup = true;
             new AddTransitionCommand(this, item->info(), item->transitionEndTrack(), item->toXML(), true, true, deleteSelected);
             emit transitionItemSelected(NULL);
@@ -3436,7 +3449,7 @@ double CustomTrackView::getSnapPointForPos(double pos)
 void CustomTrackView::updateSnapPoints(AbstractClipItem *selected, QList <GenTime> offsetList, bool skipSelectedItems)
 {
     QList <GenTime> snaps;
-    if (selected && offsetList.isEmpty()) offsetList.append(selected->duration());
+    if (selected && offsetList.isEmpty()) offsetList.append(selected->cropDuration());
     QList<QGraphicsItem *> itemList = items();
     for (int i = 0; i < itemList.count(); i++) {
         if (itemList.at(i) == selected) continue;
@@ -4433,7 +4446,7 @@ void CustomTrackView::doSplitAudio(const GenTime &pos, int track, bool split)
             kDebug() << "// CHK DOC TRK:" << freetrack << ", DUR:" << m_document->renderer()->mltTrackDuration(freetrack);
             if (m_document->trackInfoAt(freetrack - 1).type == AUDIOTRACK) {
                 kDebug() << "// CHK DOC TRK:" << freetrack << ", DUR:" << m_document->renderer()->mltTrackDuration(freetrack);
-                if (m_document->renderer()->mltTrackDuration(freetrack) < start || m_document->renderer()->mltGetSpaceLength(pos, freetrack, false) >= clip->duration().frames(m_document->fps())) {
+                if (m_document->renderer()->mltTrackDuration(freetrack) < start || m_document->renderer()->mltGetSpaceLength(pos, freetrack, false) >= clip->cropDuration().frames(m_document->fps())) {
                     kDebug() << "FOUND SPACE ON TRK: " << freetrack;
                     break;
                 }