]> git.sesse.net Git - kdenlive/blobdiff - src/docclipbase.cpp
Correctly focus clips / folders when they are created:
[kdenlive] / src / docclipbase.cpp
index 4c6ccad4eaa3370b2a8aae52294e5d43be37af38..0df8adb20c70ae6b6f155d7352e94f9b062f9847 100644 (file)
@@ -29,6 +29,7 @@
 #include "kthumb.h"
 #include "clipmanager.h"
 
+#include <KIO/NetAccess>
 #include <KDebug>
 
 #include <QCryptographicHash>
@@ -229,8 +230,9 @@ const GenTime &DocClipBase::duration() const
 const GenTime DocClipBase::maxDuration() const
 {
     if (m_clipType == COLOR || m_clipType == IMAGE || m_clipType == TEXT || (m_clipType == SLIDESHOW &&  m_properties.value("loop") == "1")) {
-        const GenTime dur(15000, KdenliveSettings::project_fps());
-        return dur;
+        /*const GenTime dur(15000, KdenliveSettings::project_fps());
+        return dur;*/
+        return GenTime();
     }
     return m_duration;
 }
@@ -414,9 +416,13 @@ void DocClipBase::deleteProducers()
     m_videoOnlyProducer = NULL;
 }
 
-void DocClipBase::setProducer(Mlt::Producer *producer)
+void DocClipBase::setProducer(Mlt::Producer *producer, bool reset)
 {
     if (producer == NULL) return;
+    if (reset) {
+        // Clear all previous producers
+        deleteProducers();
+    }
     QString id = producer->get("id");
     if (id.contains('_')) {
         // this is a subtrack producer, insert it at correct place
@@ -448,7 +454,7 @@ void DocClipBase::setProducer(Mlt::Producer *producer)
     }
     //m_clipProducer = producer;
     //m_clipProducer->set("transparency", m_properties.value("transparency").toInt());
-    if (m_thumbProd && !m_thumbProd->hasProducer()) m_thumbProd->setProducer(producer);
+    if (m_thumbProd && (reset || !m_thumbProd->hasProducer())) m_thumbProd->setProducer(producer);
 }
 
 Mlt::Producer *DocClipBase::audioProducer(int track)
@@ -515,10 +521,13 @@ Mlt::Producer *DocClipBase::producer(int track)
             if (m_baseTrackProducers.at(i) != NULL) break;
 
         if (i >= m_baseTrackProducers.count()) return NULL;
-        m_baseTrackProducers[track] = new Mlt::Producer(*m_baseTrackProducers.at(i)->profile(), m_baseTrackProducers.at(i)->get("resource"));
 
-        // special case for placeholder clips
-        if (m_baseTrackProducers[track] == NULL) return NULL;
+        if (KIO::NetAccess::exists(KUrl(m_baseTrackProducers.at(i)->get("resource")), KIO::NetAccess::SourceSide, 0))
+            m_baseTrackProducers[track] = new Mlt::Producer(*m_baseTrackProducers.at(i)->profile(), m_baseTrackProducers.at(i)->get("resource"));
+        else { // special case for placeholder clips
+            m_baseTrackProducers[track] = NULL;
+            return NULL;
+        }
 
         if (m_properties.contains("force_aspect_ratio")) m_baseTrackProducers[track]->set("force_aspect_ratio", m_properties.value("force_aspect_ratio").toDouble());
         if (m_properties.contains("threads")) m_baseTrackProducers[track]->set("threads", m_properties.value("threads").toInt());
@@ -543,6 +552,14 @@ void DocClipBase::setProducerProperty(const char *name, int data)
     }
 }
 
+void DocClipBase::setProducerProperty(const char *name, double data)
+{
+    for (int i = 0; i < m_baseTrackProducers.count(); i++) {
+        if (m_baseTrackProducers.at(i) != NULL)
+            m_baseTrackProducers[i]->set(name, data);
+    }
+}
+
 void DocClipBase::setProducerProperty(const char *name, const char *data)
 {
     for (int i = 0; i < m_baseTrackProducers.count(); i++) {