]> git.sesse.net Git - kdenlive/blobdiff - src/kdenlivedoc.cpp
Get rid of buggy "drop B frame" speedup feature
[kdenlive] / src / kdenlivedoc.cpp
index f9a90afa35bf21ba589097d3713390d4c7bc4fd3..572389272e1913a0f1fcaea1c6531003cf545f6c 100644 (file)
@@ -50,7 +50,7 @@
 
 const double DOCUMENTVERSION = 0.85;
 
-KdenliveDoc::KdenliveDoc(const KUrl &url, const KUrl &projectFolder, QUndoGroup *undoGroup, QString profileName, const QPoint tracks, Render *render, KTextEdit *notes, MainWindow *parent) :
+KdenliveDoc::KdenliveDoc(const KUrl &url, const KUrl &projectFolder, QUndoGroup *undoGroup, QString profileName, const QPoint tracks, Render *render, KTextEdit *notes, MainWindow *parent, KProgressDialog *progressDialog) :
     QObject(parent),
     m_autosave(NULL),
     m_url(url),
@@ -89,6 +89,7 @@ KdenliveDoc::KdenliveDoc(const KUrl &url, const KUrl &projectFolder, QUndoGroup
                 KMessageBox::error(parent, errorMsg);
             else {
                 parent->slotGotProgressInfo(i18n("Validating"), 0);
+                qApp->processEvents();
                 DocumentValidator validator(m_document);
                 success = validator.isProject();
                 if (!success) {
@@ -103,6 +104,7 @@ KdenliveDoc::KdenliveDoc(const KUrl &url, const KUrl &projectFolder, QUndoGroup
                     success = validator.validate(DOCUMENTVERSION);
                     if (success) { // Let the validator handle error messages
                         parent->slotGotProgressInfo(i18n("Check missing clips"), 0);
+                        qApp->processEvents();
                         QDomNodeList infoproducers = m_document.elementsByTagName("kdenlive_producer");
                         success = checkDocumentClips(infoproducers);
                         if (success) {
@@ -114,6 +116,7 @@ KdenliveDoc::KdenliveDoc(const KUrl &url, const KUrl &projectFolder, QUndoGroup
                             QDomElement customeffects = infoXml.firstChildElement("customeffects");
                             if (!customeffects.isNull() && customeffects.hasChildNodes()) {
                                 parent->slotGotProgressInfo(i18n("Importing project effects"), 0);
+                                qApp->processEvents();
                                 if (saveCustomEffects(customeffects.childNodes())) parent->slotReloadEffects();
                             }
 
@@ -145,7 +148,7 @@ KdenliveDoc::KdenliveDoc(const KUrl &url, const KUrl &projectFolder, QUndoGroup
                                 mlt.removeChild(tracksinfo);
                             }
 
-                            QDomNodeList                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    folders = m_document.elementsByTagName("folder");
+                            QDomNodeList folders = m_document.elementsByTagName("folder");
                             for (int i = 0; i < folders.count(); i++) {
                                 e = folders.item(i).cloneNode().toElement();
                                 m_clipManager->addFolder(e.attribute("id"), e.attribute("name"));
@@ -155,10 +158,15 @@ KdenliveDoc::KdenliveDoc(const KUrl &url, const KUrl &projectFolder, QUndoGroup
                             QDomNodeList producers = m_document.elementsByTagName("producer");
                             const int max = producers.count();
 
-                            KProgressDialog progressDialog(parent, i18n("Loading project"), i18n("Loading project"));
-                            progressDialog.setAllowCancel(false);
-                            progressDialog.progressBar()->setMaximum(infomax - 1);
-                            progressDialog.show();
+                            if (!progressDialog) {
+                                progressDialog = new KProgressDialog(parent, i18n("Loading project"), i18n("Adding clips"));
+                                progressDialog->setAllowCancel(false);
+                            } else {
+                                progressDialog->setLabelText(i18n("Adding clips"));
+                            }
+                            progressDialog->progressBar()->setMaximum(infomax);
+                            progressDialog->show();
+                            qApp->processEvents();
 
                             for (int i = 0; i < infomax; i++) {
                                 e = infoproducers.item(i).cloneNode().toElement();
@@ -168,10 +176,10 @@ KdenliveDoc::KdenliveDoc(const KUrl &url, const KUrl &projectFolder, QUndoGroup
                                     // Get MLT's original producer properties
                                     QDomElement orig;
                                     for (int j = 0; j < max; j++) {
-                                        QDomElement o = producers.item(j).cloneNode().toElement();
-                                        QString origId = o.attribute("id").section('_', 0, 0);
+                                        QDomNode o = producers.item(j);
+                                        QString origId = o.attributes().namedItem("id").nodeValue().section('_', 0, 0);
                                         if (origId == prodId) {
-                                            orig = o;
+                                            orig = o.cloneNode().toElement();
                                             break;
                                         }
                                     }
@@ -185,7 +193,8 @@ KdenliveDoc::KdenliveDoc(const KUrl &url, const KUrl &projectFolder, QUndoGroup
                                         break;
                                     }
                                 }
-                                progressDialog.progressBar()->setValue(i);
+                                if (i % 10 == 0)
+                                    progressDialog->progressBar()->setValue(i);
                             }
 
                             if (success) {
@@ -474,15 +483,7 @@ void KdenliveDoc::slotAutoSave()
             kDebug() << "ERROR; CANNOT CREATE AUTOSAVE FILE";
         }
         kDebug() << "// AUTOSAVE FILE: " << m_autosave->fileName();
-        QString doc;
-        if (KdenliveSettings::dropbframes()) {
-            KdenliveSettings::setDropbframes(false);
-            m_clipManager->updatePreviewSettings();
-            doc = m_render->sceneList();
-            KdenliveSettings::setDropbframes(true);
-            m_clipManager->updatePreviewSettings();
-        } else doc = m_render->sceneList();
-        saveSceneList(m_autosave->fileName(), doc);
+        saveSceneList(m_autosave->fileName(), m_render->sceneList());
     }
 }
 
@@ -804,16 +805,6 @@ void KdenliveDoc::checkProjectClips()
     m_clipManager->resetProducersList(m_render->producersList());
 }
 
-void KdenliveDoc::updatePreviewSettings()
-{
-    m_clipManager->updatePreviewSettings();
-    m_render->updatePreviewSettings();
-    QList <Mlt::Producer *> prods = m_render->producersList();
-    m_clipManager->resetProducersList(m_render->producersList());
-    qDeleteAll(prods);
-    prods.clear();
-}
-
 Render *KdenliveDoc::renderer()
 {
     return m_render;
@@ -1158,7 +1149,7 @@ void KdenliveDoc::slotCreateTextTemplateClip(QString group, const QString &group
 {
     QString titlesFolder = projectFolder().path(KUrl::AddTrailingSlash) + "titles/";
     if (path.isEmpty()) {
-        path = KFileDialog::getOpenUrl(KUrl(titlesFolder), "*.kdenlivetitle", kapp->activeWindow(), i18n("Enter Template Path"));
+        path = KFileDialog::getOpenUrl(KUrl(titlesFolder), "application/x-kdenlivetitle", kapp->activeWindow(), i18n("Enter Template Path"));
     }
 
     if (path.isEmpty()) return;