]> git.sesse.net Git - kdenlive/blobdiff - src/customtrackview.cpp
Fix typos (patch from yurchor)
[kdenlive] / src / customtrackview.cpp
index 2fcad0ac7e1a142ea8108379a8371906ff331e9f..ab42612b0d538effb23e0d53d73bfdadd732f319 100644 (file)
@@ -335,7 +335,6 @@ void CustomTrackView::slotCheckPositionScrolling()
 
 
 // virtual
-
 void CustomTrackView::mouseMoveEvent(QMouseEvent * event)
 {
     int pos = event->x();
@@ -416,6 +415,7 @@ void CustomTrackView::mouseMoveEvent(QMouseEvent * event)
             }
             bool collision = false;
             for (int i = 0; i < collidingItems.count(); i++) {
+                if (!collidingItems.at(i)->isEnabled()) continue;
                 if (collidingItems.at(i)->type() == AVWIDGET) {
                     collision = true;
                     break;
@@ -471,7 +471,7 @@ void CustomTrackView::mouseMoveEvent(QMouseEvent * event)
             // razor tool over a clip, display current frame in monitor
             if (false && !m_blockRefresh && item->type() == AVWIDGET) {
                 //TODO: solve crash when showing frame when moving razor over clip
-                emit showClipFrame(((ClipItem *) item)->baseClip(), mappedXPos - (clip->startPos() - clip->cropStart()).frames(m_document->fps()));
+                emit showClipFrame(((ClipItem *) item)->baseClip(), QPoint(), mappedXPos - (clip->startPos() - clip->cropStart()).frames(m_document->fps()));
             }
             event->accept();
             return;
@@ -816,6 +816,12 @@ void CustomTrackView::mousePressEvent(QMouseEvent * event)
             if (event->modifiers() == Qt::ControlModifier) {
                 // Ctrl + click, select all items on track after click position
                 int track = (int)(mapToScene(m_clickEvent).y() / m_tracksHeight);
+                if (m_document->trackInfoAt(m_document->tracksCount() - track - 1).isLocked) {
+                    // Cannot use spacer on locked track
+                    emit displayMessage(i18n("Cannot use spacer in a locked track"), ErrorMessage);
+                    return;
+                }
+
                 QRectF rect(mapToScene(m_clickEvent).x(), track * m_tracksHeight + m_tracksHeight / 2, sceneRect().width() - mapToScene(m_clickEvent).x(), m_tracksHeight / 2 - 2);
 
                 bool isOk;
@@ -840,11 +846,13 @@ void CustomTrackView::mousePressEvent(QMouseEvent * event)
             for (int i = 0; i < selection.count(); i++) {
                 if (selection.at(i)->parentItem() == 0 && (selection.at(i)->type() == AVWIDGET || selection.at(i)->type() == TRANSITIONWIDGET)) {
                     AbstractClipItem *item = static_cast<AbstractClipItem *>(selection.at(i));
+                    if (item->isItemLocked()) continue;
                     offsetList.append(item->startPos());
                     offsetList.append(item->endPos());
                     m_selectionGroup->addToGroup(selection.at(i));
                     selection.at(i)->setFlag(QGraphicsItem::ItemIsMovable, false);
                 } else if (selection.at(i)->parentItem() == 0 && selection.at(i)->type() == GROUPWIDGET) {
+                    if (static_cast<AbstractGroupItem *>(selection.at(i))->isItemLocked()) continue;
                     QList<QGraphicsItem *> children = selection.at(i)->childItems();
                     for (int j = 0; j < children.count(); j++) {
                         AbstractClipItem *item = static_cast<AbstractClipItem *>(children.at(j));
@@ -854,6 +862,7 @@ void CustomTrackView::mousePressEvent(QMouseEvent * event)
                     m_selectionGroup->addToGroup(selection.at(i));
                     selection.at(i)->setFlag(QGraphicsItem::ItemIsMovable, false);
                 } else if (selection.at(i)->parentItem()) {
+                    if (static_cast<AbstractGroupItem *>(selection.at(i)->parentItem())->isItemLocked()) continue;
                     m_selectionGroup->addToGroup(selection.at(i)->parentItem());
                     selection.at(i)->parentItem()->setFlag(QGraphicsItem::ItemIsMovable, false);
                 }
@@ -1300,7 +1309,7 @@ bool CustomTrackView::insertDropClips(const QMimeData *data, const QPoint pos)
             kDebug() << " WARNING))))))))) CLIP NOT FOUND : " << list.at(0);
             return false;
         }
-        const QPointF framePos = mapToScene(pos);
+        QPointF framePos = mapToScene(pos);
         ItemInfo info;
         info.startPos = GenTime();
         info.cropStart = GenTime(list.at(1).toInt(), m_document->fps());
@@ -1313,6 +1322,8 @@ bool CustomTrackView::insertDropClips(const QMimeData *data, const QPoint pos)
         pasteInfo.startPos = GenTime((int)(framePos.x() + 0.5), m_document->fps());
         pasteInfo.endPos = pasteInfo.startPos + info.endPos;
         pasteInfo.track = (int)(framePos.y() / m_tracksHeight);
+        framePos.setX((int)(framePos.x() + 0.5));
+        framePos.setY(pasteInfo.track * m_tracksHeight);
         if (!canBePastedTo(pasteInfo, AVWIDGET)) {
             return true;
         }
@@ -1336,9 +1347,11 @@ bool CustomTrackView::insertDropClips(const QMimeData *data, const QPoint pos)
 
         QList <GenTime> offsetList;
         QList <ItemInfo> infoList;
-        const QPointF framePos = mapToScene(pos);
+        QPointF framePos = mapToScene(pos);
         GenTime start = GenTime((int)(framePos.x() + 0.5), m_document->fps());
         int track = (int)(framePos.y() / m_tracksHeight);
+        framePos.setX((int)(framePos.x() + 0.5));
+        framePos.setY(track * m_tracksHeight);
 
         // Check if clips can be inserted at that position
         for (int i = 0; i < ids.size(); ++i) {
@@ -1753,7 +1766,7 @@ ClipItem *CustomTrackView::cutClip(ItemInfo info, GenTime cutTime, bool cut, boo
         item->baseClip()->addReference();
         m_document->updateClip(item->baseClip()->getId());
         setDocumentModified();
-       KdenliveSettings::setSnaptopoints(snap);
+        KdenliveSettings::setSnaptopoints(snap);
         return dup;
         //kDebug() << "/////////  CUTTING CLIP RESULT: (" << item->startPos().frames(25) << "-" << item->endPos().frames(25) << "), DUP: (" << dup->startPos().frames(25) << "-" << dup->endPos().frames(25) << ")" << ", CUT: " << cutTime.frames(25);
     } else {
@@ -1779,7 +1792,7 @@ ClipItem *CustomTrackView::cutClip(ItemInfo info, GenTime cutTime, bool cut, boo
 
         bool snap = KdenliveSettings::snaptopoints();
         KdenliveSettings::setSnaptopoints(false);
-       
+
         if (dup->isSelected()) emit clipItemSelected(NULL);
         dup->baseClip()->removeReference();
         m_document->updateClip(dup->baseClip()->getId());
@@ -1794,7 +1807,7 @@ ClipItem *CustomTrackView::cutClip(ItemInfo info, GenTime cutTime, bool cut, boo
             setDocumentModified();
         } else
             emit displayMessage(i18n("Error when resizing clip"), ErrorMessage);
-       KdenliveSettings::setSnaptopoints(snap);
+        KdenliveSettings::setSnaptopoints(snap);
         return item;
 
     }
@@ -2049,24 +2062,24 @@ void CustomTrackView::dropEvent(QDropEvent * event)
         m_commandStack->push(addCommand);
         setDocumentModified();
 
-       /*
-       // debug info
-       QRectF rect(0, 1 * m_tracksHeight + m_tracksHeight / 2, sceneRect().width(), 2);
-       QList<QGraphicsItem *> selection = m_scene->items(rect);
-       QStringList timelineList;
+        /*
+        // debug info
+        QRectF rect(0, 1 * m_tracksHeight + m_tracksHeight / 2, sceneRect().width(), 2);
+        QList<QGraphicsItem *> selection = m_scene->items(rect);
+        QStringList timelineList;
+
+        kDebug()<<"// ITEMS on TRACK: "<<selection.count();
+        for (int i = 0; i < selection.count(); i++) {
+               if (selection.at(i)->type() == AVWIDGET) {
+                   ClipItem *clip = static_cast <ClipItem *>(selection.at(i));
+                   int start = clip->startPos().frames(m_document->fps());
+                   int end = clip->endPos().frames(m_document->fps());
+                   timelineList.append(QString::number(start) + "-" + QString::number(end));
+            }
+        }
+        kDebug() << "// COMPARE:\n" << timelineList << "\n-------------------";
+        */
 
-       kDebug()<<"// ITEMS on TRACK: "<<selection.count();
-       for (int i = 0; i < selection.count(); i++) {
-        if (selection.at(i)->type() == AVWIDGET) {
-            ClipItem *clip = static_cast <ClipItem *>(selection.at(i));
-            int start = clip->startPos().frames(m_document->fps());
-            int end = clip->endPos().frames(m_document->fps());
-            timelineList.append(QString::number(start) + "-" + QString::number(end));
-           }
-       }
-       kDebug() << "// COMPARE:\n" << timelineList << "\n-------------------";
-       */
-       
         m_pasteEffectsAction->setEnabled(m_copiedItems.count() == 1);
         if (items.count() > 1) groupSelectedItems(true);
         event->setDropAction(Qt::MoveAction);
@@ -2077,18 +2090,18 @@ void CustomTrackView::dropEvent(QDropEvent * event)
 
 void CustomTrackView::adjustTimelineClips(EDITMODE mode, ClipItem *item, ItemInfo posinfo, QUndoCommand *command)
 {
+    bool snap = KdenliveSettings::snaptopoints();
+    KdenliveSettings::setSnaptopoints(false);
     if (mode == OVERWRITEEDIT) {
-        // if we are in overwrite or push mode, move clips accordingly
-        bool snap = KdenliveSettings::snaptopoints();
-        KdenliveSettings::setSnaptopoints(false);
+        // if we are in overwrite mode, move clips accordingly
         ItemInfo info;
-       if (item == NULL) info = posinfo;
-       else info = item->info();
+        if (item == NULL) info = posinfo;
+        else info = item->info();
         QRectF rect(info.startPos.frames(m_document->fps()), info.track * m_tracksHeight + m_tracksHeight / 2, (info.endPos - info.startPos).frames(m_document->fps()) - 1, 5);
         QList<QGraphicsItem *> selection = m_scene->items(rect);
         if (item) selection.removeAll(item);
         for (int i = 0; i < selection.count(); i++) {
-           if (!selection.at(i)->isEnabled()) continue;
+            if (!selection.at(i)->isEnabled()) continue;
             if (selection.at(i)->type() == AVWIDGET) {
                 ClipItem *clip = static_cast<ClipItem *>(selection.at(i));
                 if (clip->startPos() < info.startPos) {
@@ -2107,7 +2120,7 @@ void CustomTrackView::adjustTimelineClips(EDITMODE mode, ClipItem *item, ItemInf
                         new RazorClipCommand(this, clipInfo, info.startPos, false, command);
                         new ResizeClipCommand(this, dupInfo, newdupInfo, false, false, command);
                         ClipItem *dup = cutClip(clipInfo, info.startPos, true, false);
-                        if (dup) dup->resizeStart(info.endPos.frames(m_document->fps()));                      
+                        if (dup) dup->resizeStart(info.endPos.frames(m_document->fps()));
                     } else {
                         ItemInfo newclipInfo = clip->info();
                         newclipInfo.endPos = info.startPos;
@@ -2127,8 +2140,35 @@ void CustomTrackView::adjustTimelineClips(EDITMODE mode, ClipItem *item, ItemInf
                 }
             }
         }
-        KdenliveSettings::setSnaptopoints(snap);
+    } else if (mode == INSERTEDIT) {
+        // if we are in push mode, move clips accordingly
+        ItemInfo info;
+        if (item == NULL) info = posinfo;
+        else info = item->info();
+        QRectF rect(info.startPos.frames(m_document->fps()), info.track * m_tracksHeight + m_tracksHeight / 2, (info.endPos - info.startPos).frames(m_document->fps()) - 1, 5);
+        QList<QGraphicsItem *> selection = m_scene->items(rect);
+        if (item) selection.removeAll(item);
+        for (int i = 0; i < selection.count(); i++) {
+            if (selection.at(i)->type() == AVWIDGET) {
+                ClipItem *clip = static_cast<ClipItem *>(selection.at(i));
+                if (clip->startPos() < info.startPos) {
+                    if (clip->endPos() > info.startPos) {
+                        ItemInfo clipInfo = clip->info();
+                        ItemInfo dupInfo = clipInfo;
+                        GenTime diff = info.startPos - clipInfo.startPos;
+                        dupInfo.startPos = info.startPos;
+                        dupInfo.cropStart += diff;
+                        dupInfo.cropDuration = clipInfo.endPos - info.startPos;
+                        new RazorClipCommand(this, clipInfo, info.startPos, false, command);
+                        ClipItem *dup = cutClip(clipInfo, info.startPos, true, false);
+                    }
+                }
+                // TODO: add insertspacecommand
+            }
+        }
     }
+
+    KdenliveSettings::setSnaptopoints(snap);
 }
 
 
@@ -2143,7 +2183,7 @@ void CustomTrackView::adjustTimelineTransitions(EDITMODE mode, Transition *item,
         QList<QGraphicsItem *> selection = m_scene->items(rect);
         selection.removeAll(item);
         for (int i = 0; i < selection.count(); i++) {
-           if (!selection.at(i)->isEnabled()) continue;
+            if (!selection.at(i)->isEnabled()) continue;
             if (selection.at(i)->type() == TRANSITIONWIDGET) {
                 Transition *tr = static_cast<Transition *>(selection.at(i));
                 if (tr->startPos() < info.startPos) {
@@ -2449,7 +2489,7 @@ void CustomTrackView::slotRemoveSpace()
     int length = m_document->renderer()->mltGetSpaceLength(pos, m_document->tracksCount() - track, true);
     //kDebug() << "// GOT LENGT; " << length;
     if (length <= 0) {
-        emit displayMessage(i18n("You must be in an empty space to remove space (time: %1, track:%2)", m_document->timecode().getTimecodeFromFrames(mapToScene(m_menuPosition).x()), track), ErrorMessage);
+        emit displayMessage(i18n("You must be in an empty space to remove space (time: %1, track: %2)", m_document->timecode().getTimecodeFromFrames(mapToScene(m_menuPosition).x()), track), ErrorMessage);
         return;
     }
 
@@ -3340,10 +3380,10 @@ void CustomTrackView::deleteClip(ItemInfo info, bool refresh)
     item->closeAnimation();
     /*if (refresh) item->closeAnimation();
     else {
-       // no refresh, means we have several operations chained, we need to delete clip immediatly 
-       // so that it does not get in the way of the other
-       delete item;
-       item = NULL;
+        // no refresh, means we have several operations chained, we need to delete clip immediatly
+        // so that it does not get in the way of the other
+        delete item;
+        item = NULL;
     }*/
 #else
     delete item;
@@ -3417,7 +3457,7 @@ void CustomTrackView::deleteSelectedClips()
     else if (transitionCount > 0 && groupCount == 0 && clipCount == 0)
         deleteSelected->setText(i18np("Delete selected transition", "Delete selected transitions", transitionCount));
     else deleteSelected->setText(i18n("Delete selected items"));
-    m_commandStack->push(deleteSelected);    
+    m_commandStack->push(deleteSelected);
 }
 
 void CustomTrackView::changeClipSpeed()
@@ -3625,7 +3665,7 @@ ClipItem *CustomTrackView::getClipItemAtEnd(GenTime pos, int track)
     QList<QGraphicsItem *> list = scene()->items(QPointF(framepos - 1, track * m_tracksHeight + m_tracksHeight / 2));
     ClipItem *clip = NULL;
     for (int i = 0; i < list.size(); i++) {
-       if (!list.at(i)->isEnabled()) continue;
+        if (!list.at(i)->isEnabled()) continue;
         if (list.at(i)->type() == AVWIDGET) {
             ClipItem *test = static_cast <ClipItem *>(list.at(i));
             if (test->endPos() == pos) clip = test;
@@ -3640,7 +3680,7 @@ ClipItem *CustomTrackView::getClipItemAtStart(GenTime pos, int track)
     QList<QGraphicsItem *> list = scene()->items(QPointF(pos.frames(m_document->fps()), track * m_tracksHeight + m_tracksHeight / 2));
     ClipItem *clip = NULL;
     for (int i = 0; i < list.size(); i++) {
-       if (!list.at(i)->isEnabled()) continue;
+        if (!list.at(i)->isEnabled()) continue;
         if (list.at(i)->type() == AVWIDGET) {
             ClipItem *test = static_cast <ClipItem *>(list.at(i));
             if (test->startPos() == pos) clip = test;
@@ -3656,7 +3696,7 @@ ClipItem *CustomTrackView::getClipItemAt(int pos, int track)
     QList<QGraphicsItem *> list = scene()->items(p);
     ClipItem *clip = NULL;
     for (int i = 0; i < list.size(); i++) {
-       if (!list.at(i)->isEnabled()) continue;
+        if (!list.at(i)->isEnabled()) continue;
         if (list.at(i)->type() == AVWIDGET) {
             clip = static_cast <ClipItem *>(list.at(i));
             break;
@@ -3676,7 +3716,7 @@ Transition *CustomTrackView::getTransitionItemAt(int pos, int track)
     QList<QGraphicsItem *> list = scene()->items(p);
     Transition *clip = NULL;
     for (int i = 0; i < list.size(); i++) {
-       if (!list.at(i)->isEnabled()) continue;
+        if (!list.at(i)->isEnabled()) continue;
         if (list.at(i)->type() == TRANSITIONWIDGET) {
             clip = static_cast <Transition *>(list.at(i));
             break;
@@ -3697,7 +3737,7 @@ Transition *CustomTrackView::getTransitionItemAtEnd(GenTime pos, int track)
     QList<QGraphicsItem *> list = scene()->items(p);
     Transition *clip = NULL;
     for (int i = 0; i < list.size(); i++) {
-       if (!list.at(i)->isEnabled()) continue;
+        if (!list.at(i)->isEnabled()) continue;
         if (list.at(i)->type() == TRANSITIONWIDGET) {
             Transition *test = static_cast <Transition *>(list.at(i));
             if (test->endPos() == pos) clip = test;
@@ -3713,7 +3753,7 @@ Transition *CustomTrackView::getTransitionItemAtStart(GenTime pos, int track)
     QList<QGraphicsItem *> list = scene()->items(p);
     Transition *clip = NULL;
     for (int i = 0; i < list.size(); ++i) {
-       if (!list.at(i)->isEnabled()) continue;
+        if (!list.at(i)->isEnabled()) continue;
         if (list.at(i)->type() == TRANSITIONWIDGET) {
             Transition *test = static_cast <Transition *>(list.at(i));
             if (test->startPos() == pos) clip = test;
@@ -4698,7 +4738,7 @@ AbstractClipItem *CustomTrackView::getMainActiveClip() const
     } else {
         AbstractClipItem *item = NULL;
         for (int i = 0; i < clips.count(); ++i) {
-            if (clips.count() == 1 || clips.at(i)->type() == AVWIDGET) {
+            if (clips.at(i)->type() == AVWIDGET) {
                 item = static_cast < AbstractClipItem *>(clips.at(i));
                 if (clips.count() > 1 && item->startPos().frames(m_document->fps()) <= m_cursorPos && item->endPos().frames(m_document->fps()) >= m_cursorPos) break;
             }