]> git.sesse.net Git - kdenlive/commitdiff
Fix insertion of several clip zones in timeline
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Fri, 5 Oct 2012 13:01:38 +0000 (15:01 +0200)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Fri, 5 Oct 2012 13:01:38 +0000 (15:01 +0200)
src/customtrackview.cpp
src/projectlistview.cpp

index 3d4ac7efccbb4a98a917ac645b2ff3ab18b5144c..2d55c1d842e70310a2c7e6f188404c0b805f81ab 100644 (file)
@@ -1566,7 +1566,8 @@ bool CustomTrackView::insertDropClips(const QMimeData *data, const QPoint &pos)
 
         // Check if clips can be inserted at that position
         for (int i = 0; i < ids.size(); ++i) {
-            DocClipBase *clip = m_document->getBaseClip(ids.at(i));
+           QString clipData = ids.at(i);
+            DocClipBase *clip = m_document->getBaseClip(clipData.section('/', 0, 0));
             if (clip == NULL) {
                 kDebug() << " WARNING))))))))) CLIP NOT FOUND : " << ids.at(i);
                 return false;
@@ -1577,11 +1578,20 @@ bool CustomTrackView::insertDropClips(const QMimeData *data, const QPoint &pos)
             }
             ItemInfo info;
             info.startPos = start;
-            info.cropDuration = clip->duration();
-            info.endPos = info.startPos + info.cropDuration;
+           if (clipData.contains('/')) {
+               // this is a clip zone, set in / out
+               int in = clipData.section('/', 1, 1).toInt();
+               int out = clipData.section('/', 2, 2).toInt();
+               info.cropStart = GenTime(in, m_document->fps());
+               info.cropDuration = GenTime(out - in, m_document->fps());
+           }
+            else {
+               info.cropDuration = clip->duration();
+           }
+           info.endPos = info.startPos + info.cropDuration;
             info.track = track;
             infoList.append(info);
-            start += clip->duration();
+            start += info.cropDuration;
         }
         if (!canBePastedTo(infoList, AVWIDGET)) {
             return true;
@@ -1589,11 +1599,21 @@ bool CustomTrackView::insertDropClips(const QMimeData *data, const QPoint &pos)
         m_selectionGroup = new AbstractGroupItem(m_document->fps());
         start = GenTime();
         for (int i = 0; i < ids.size(); ++i) {
-            DocClipBase *clip = m_document->getBaseClip(ids.at(i));
+            QString clipData = ids.at(i);
+            DocClipBase *clip = m_document->getBaseClip(clipData.section('/', 0, 0));
             ItemInfo info;
             info.startPos = start;
-            info.cropDuration = clip->duration();
-            info.endPos = info.startPos + info.cropDuration;
+           if (clipData.contains('/')) {
+               // this is a clip zone, set in / out
+               int in = clipData.section('/', 1, 1).toInt();
+               int out = clipData.section('/', 2, 2).toInt();
+               info.cropStart = GenTime(in, m_document->fps());
+               info.cropDuration = GenTime(out - in, m_document->fps());
+           }
+            else {
+               info.cropDuration = clip->duration();
+           }
+           info.endPos = info.startPos + info.cropDuration;
             info.track = 0;
             start += info.cropDuration;
             offsetList.append(start);
index e4a2641b2323fc5484f33530f74a21b5a8cefa52..cda2480a6703a2470274a33f2ba3117aec16c5e7 100644 (file)
@@ -347,56 +347,40 @@ void ProjectListView::mouseMoveEvent(QMouseEvent *event)
 
     QTreeWidgetItem *it = itemAt(m_DragStartPosition);
     if (!it) return;
-    if (it->type() == PROJECTSUBCLIPTYPE) {
-        // subitem
-        SubProjectItem *clickItem = static_cast <SubProjectItem *>(it);
-        if (clickItem && (clickItem->flags() & Qt::ItemIsDragEnabled)) {
-            ProjectItem *clip = static_cast <ProjectItem *>(it->parent());
-            QDrag *drag = new QDrag(this);
-            QMimeData *mimeData = new QMimeData;
-
-            QStringList list;
-            list.append(clip->clipId());
-            QPoint p = clickItem->zone();
-            list.append(QString::number(p.x()));
-            list.append(QString::number(p.y()));
-            QByteArray data;
-            data.append(list.join(";").toUtf8());
-            mimeData->setData("kdenlive/clip", data);
-            drag->setMimeData(mimeData);
-            drag->setPixmap(clickItem->data(0, Qt::DecorationRole).value<QPixmap>());
-            drag->setHotSpot(QPoint(0, 50));
-            drag->exec(Qt::CopyAction | Qt::MoveAction, Qt::CopyAction);
-        }
-    } else {
-        if (it && (it->flags() & Qt::ItemIsDragEnabled)) {
-            QDrag *drag = new QDrag(this);
-            QMimeData *mimeData = new QMimeData;
-            const QList <QTreeWidgetItem *> list = selectedItems();
-            QStringList ids;
-            foreach(const QTreeWidgetItem *item, list) {
-                if (item->type() == PROJECTFOLDERTYPE) {
-                    const int children = item->childCount();
-                    for (int i = 0; i < children; i++) {
-                        ids.append(static_cast <ProjectItem *>(item->child(i))->clipId());
-                    }
-                } else {
-                    const ProjectItem *clip = static_cast <const ProjectItem *>(item);
-                    ids.append(clip->clipId());
+    if (it && (it->flags() & Qt::ItemIsDragEnabled)) {
+       QDrag *drag = new QDrag(this);
+        QMimeData *mimeData = new QMimeData;
+        const QList <QTreeWidgetItem *> list = selectedItems();
+        QStringList ids;
+        foreach(const QTreeWidgetItem *item, list) {
+           if (item->type() == PROJECTFOLDERTYPE) {
+               const int children = item->childCount();
+                for (int i = 0; i < children; i++) {
+                   ids.append(static_cast <ProjectItem *>(item->child(i))->clipId());
                 }
+           } else if (item->type() == PROJECTSUBCLIPTYPE) {
+               const ProjectItem *parentclip = static_cast <const ProjectItem *>(item->parent());
+               const SubProjectItem *clickItem = static_cast <const SubProjectItem *>(item);
+               QPoint p = clickItem->zone();
+               QString data = parentclip->clipId();
+               data.append("/" + QString::number(p.x()));
+               data.append("/" + QString::number(p.y()));
+               ids.append(data);
+            } else {
+               const ProjectItem *clip = static_cast <const ProjectItem *>(item);
+                ids.append(clip->clipId());
             }
-            if (ids.isEmpty()) return;
-            QByteArray data;
-            data.append(ids.join(";").toUtf8()); //doc.toString().toUtf8());
-            mimeData->setData("kdenlive/producerslist", data);
-            //mimeData->setText(ids.join(";")); //doc.toString());
-            //mimeData->setImageData(image);
-            drag->setMimeData(mimeData);
-            drag->setPixmap(it->data(0, Qt::DecorationRole).value<QPixmap>());
-            drag->setHotSpot(QPoint(0, 50));
-            drag->exec(Qt::CopyAction | Qt::MoveAction, Qt::CopyAction);
         }
-        //event->accept();
+        if (ids.isEmpty()) return;
+        QByteArray data;
+        data.append(ids.join(";").toUtf8()); //doc.toString().toUtf8());
+        mimeData->setData("kdenlive/producerslist", data);
+        //mimeData->setText(ids.join(";")); //doc.toString());
+        //mimeData->setImageData(image);
+        drag->setMimeData(mimeData);
+        drag->setPixmap(it->data(0, Qt::DecorationRole).value<QPixmap>());
+        drag->setHotSpot(QPoint(0, 40));
+        drag->exec(Qt::CopyAction | Qt::MoveAction, Qt::CopyAction);
     }
 }