]> git.sesse.net Git - kdenlive/blobdiff - src/projectlist.cpp
Rewrote the handling of timeline in QGraphicsView. Now we use the built in zoom featu...
[kdenlive] / src / projectlist.cpp
index 899b41f3dcae9acf1e15b103b5b1c26493f77784..982318a36c3c587953e0a9fb4817bf56fe330c77 100644 (file)
@@ -143,11 +143,6 @@ void ProjectList::setRenderer(Render *projectRender) {
 void ProjectList::slotClipSelected() {
     ProjectItem *item = static_cast <ProjectItem*>(listView->currentItem());
     if (item && !item->isGroup()) {
-        if (item == m_selectedItem) {
-            // if user clicked on the active clip item, just focus monitor, don't update it.
-            emit clipSelected(NULL);
-            return;
-        }
         m_selectedItem = item;
         emit clipSelected(item->referencedClip());
     }
@@ -310,11 +305,11 @@ void ProjectList::slotUpdateClip(int id) {
 void ProjectList::slotAddClip(QUrl givenUrl, QString group) {
     if (!m_commandStack) kDebug() << "!!!!!!!!!!!!!!!!  NO CMD STK";
     KUrl::List list;
-    if (givenUrl.isEmpty())
-        list = KFileDialog::getOpenUrls(KUrl(), "application/vnd.kde.kdenlive application/vnd.westley.scenelist application/flv application/vnd.rn-realmedia video/x-dv video/x-msvideo video/mpeg video/x-ms-wmv audio/mpeg audio/x-mp3 audio/x-wav application/ogg *.m2t *.mts *.dv video/mp4 video/quicktime image/gif image/jpeg image/png image/x-bmp image/svg+xml image/tiff image/x-xcf-gimp image/x-vnd.adobe.photoshop image/x-pcx image/x-exr");
-    else list.append(givenUrl);
+    if (givenUrl.isEmpty()) {
+        list = KFileDialog::getOpenUrls(KUrl("kfiledialog:///clipfolder"), "application/vnd.kde.kdenlive application/vnd.westley.scenelist application/flv application/vnd.rn-realmedia video/x-dv video/dv video/x-msvideo video/mpeg video/x-ms-wmv audio/mpeg audio/x-mp3 audio/x-wav application/ogg video/mp4 video/quicktime image/gif image/jpeg image/png image/x-bmp image/svg+xml image/tiff image/x-xcf-gimp image/x-vnd.adobe.photoshop image/x-pcx image/x-exr", this);
+    else list.append(givenUrl);
     if (list.isEmpty()) return;
-    KUrl::List::Iterator it;
+
     int groupId = -1;
     if (group.isEmpty()) {
         ProjectItem *item = static_cast <ProjectItem*>(listView->currentItem());
@@ -329,11 +324,24 @@ void ProjectList::slotAddClip(QUrl givenUrl, QString group) {
             groupId = item->clipId();
         }
     }
-    for (it = list.begin(); it != list.end(); it++) {
-        m_doc->slotAddClipFile(*it, group, groupId);
+    foreach(const KUrl file, list) {
+        if (KIO::NetAccess::exists(file, KIO::NetAccess::SourceSide, NULL))
+            m_doc->slotAddClipFile(file, group, groupId);
     }
 }
 
+void ProjectList::slotRemoveInvalidClip(int id) {
+    ProjectItem *item = getItemById(id);
+    if (item) {
+        QString path = item->referencedClip()->fileURL().path();
+        if (!path.isEmpty()) KMessageBox::sorry(this, i18n("<qt>Clip <b>%1</b><br>is invalid, will be removed from project.", path));
+
+    }
+    QList <int> ids;
+    ids << id;
+    m_doc->deleteProjectClip(ids);
+}
+
 void ProjectList::slotAddColorClip() {
     if (!m_commandStack) kDebug() << "!!!!!!!!!!!!!!!!  NO CMD STK";
     QDialog *dia = new QDialog(this);
@@ -386,10 +394,11 @@ void ProjectList::slotAddSlideshowClip() {
             groupId = item->clipId();
         }
 
-        m_doc->slotAddSlideshowClipFile(dia->clipName(), dia->selectedPath(), dia->imageCount(), dia->clipDuration(), dia->loop(), group, groupId);
+        m_doc->slotAddSlideshowClipFile(dia->clipName(), dia->selectedPath(), dia->imageCount(), dia->clipDuration(), dia->loop(), dia->fade(), dia->lumaDuration(), dia->lumaFile(), dia->softness(), group, groupId);
     }
     delete dia;
 }
+
 void ProjectList::slotAddTitleClip() {
     QString group = QString();
     int groupId = -1;
@@ -447,18 +456,19 @@ void ProjectList::slotRefreshClipThumbnail(ProjectItem *item) {
     if (item) {
         int height = 50;
         int width = (int)(height  * m_render->dar());
-        QPixmap pix = KThumb::getImage(item->toXml(), item->referencedClip()->getClipThumbFrame(), width, height);
+        QPixmap pix = item->referencedClip()->thumbProducer()->extractImage(item->referencedClip()->getClipThumbFrame(), width, height);
         item->setIcon(0, pix);
     }
 }
 
-void ProjectList::slotReplyGetFileProperties(int clipId, const QMap < QString, QString > &properties, const QMap < QString, QString > &metadata) {
+void ProjectList::slotReplyGetFileProperties(int clipId, Mlt::Producer *producer, const QMap < QString, QString > &properties, const QMap < QString, QString > &metadata) {
     ProjectItem *item = getItemById(clipId);
     if (item) {
         item->setProperties(properties, metadata);
+        item->referencedClip()->setProducer(producer);
         listView->setCurrentItem(item);
         emit receivedClipDuration(clipId, item->clipMaxDuration());
-    }
+    } else kDebug() << "////////  COULD NOT FIND CLIP TO UPDATE PRPS...";
 }
 
 void ProjectList::slotReplyGetImage(int clipId, int pos, const QPixmap &pix, int w, int h) {