]> git.sesse.net Git - kdenlive/blobdiff - src/kdenlivedoc.cpp
render dialog: select and edit bitrates using a combo box (WIP).
[kdenlive] / src / kdenlivedoc.cpp
index d3c400bcb41bc82db65eeae77a9434a4ccb29c6f..e44135b992d9b8c35b7b1f3f1a18c90e6d5b9c78 100644 (file)
@@ -52,9 +52,9 @@
 
 #include <mlt++/Mlt.h>
 
-const double DOCUMENTVERSION = 0.85;
+const double DOCUMENTVERSION = 0.86;
 
-KdenliveDoc::KdenliveDoc(const KUrl &url, const KUrl &projectFolder, QUndoGroup *undoGroup, QString profileName, const QPoint tracks, Render *render, KTextEdit *notes, MainWindow *parent, KProgressDialog *progressDialog) :
+KdenliveDoc::KdenliveDoc(const KUrl &url, const KUrl &projectFolder, QUndoGroup *undoGroup, QString profileName, QMap <QString, QString> properties, const QPoint tracks, Render *render, KTextEdit *notes, MainWindow *parent, KProgressDialog *progressDialog) :
     QObject(parent),
     m_autosave(NULL),
     m_url(url),
@@ -76,8 +76,18 @@ KdenliveDoc::KdenliveDoc(const KUrl &url, const KUrl &projectFolder, QUndoGroup
     m_documentProperties["zoneout"] = "100";
     m_documentProperties["enableproxy"] = QString::number((int) KdenliveSettings::enableproxy());
     m_documentProperties["proxyparams"] = KdenliveSettings::proxyparams();
-    m_documentProperties["generateproxy"] = QString::number((int) KdenliveSettings::enableproxy());
-    m_documentProperties["proxyminsize"] = "1000";
+    m_documentProperties["proxyextension"] = KdenliveSettings::proxyextension();
+    m_documentProperties["generateproxy"] = QString::number((int) KdenliveSettings::generateproxy());
+    m_documentProperties["proxyminsize"] = QString::number(KdenliveSettings::proxyminsize());
+    m_documentProperties["generateimageproxy"] = QString::number((int) KdenliveSettings::generateimageproxy());
+    m_documentProperties["proxyimageminsize"] = QString::number(KdenliveSettings::proxyimageminsize());
+    
+    // Load properties
+    QMapIterator<QString, QString> i(properties);
+    while (i.hasNext()) {
+        i.next();
+        m_documentProperties[i.key()] = i.value();
+    }
     
     if (!url.isEmpty()) {
         QString tmpFile;
@@ -156,12 +166,14 @@ KdenliveDoc::KdenliveDoc(const KUrl &url, const KUrl &projectFolder, QUndoGroup
                                 }
                                 mlt.removeChild(tracksinfo);
                             }
-
+                            QStringList expandedFolders;
                             QDomNodeList folders = m_document.elementsByTagName("folder");
                             for (int i = 0; i < folders.count(); i++) {
                                 e = folders.item(i).cloneNode().toElement();
+                                if (e.hasAttribute("opened")) expandedFolders.append(e.attribute("id"));
                                 m_clipManager->addFolder(e.attribute("id"), e.attribute("name"));
                             }
+                            m_documentProperties["expandedfolders"] = expandedFolders.join(";");
 
                             const int infomax = infoproducers.count();
                             QDomNodeList producers = m_document.elementsByTagName("producer");
@@ -267,6 +279,7 @@ KdenliveDoc::KdenliveDoc(const KUrl &url, const KUrl &projectFolder, QUndoGroup
     KStandardDirs::makeDir(m_projectFolder.path(KUrl::AddTrailingSlash) + "titles/");
     KStandardDirs::makeDir(m_projectFolder.path(KUrl::AddTrailingSlash) + "thumbs/");
     KStandardDirs::makeDir(m_projectFolder.path(KUrl::AddTrailingSlash) + "ladspa/");
+    KStandardDirs::makeDir(m_projectFolder.path(KUrl::AddTrailingSlash) + "proxy/");
 
     updateProjectFolderPlacesEntry();
 
@@ -496,7 +509,7 @@ void KdenliveDoc::slotAutoSave()
             kDebug() << "ERROR; CANNOT CREATE AUTOSAVE FILE";
         }
         kDebug() << "// AUTOSAVE FILE: " << m_autosave->fileName();
-        saveSceneList(m_autosave->fileName(), m_render->sceneList());
+        saveSceneList(m_autosave->fileName(), m_render->sceneList(), QStringList());
     }
 }
 
@@ -522,15 +535,14 @@ QPoint KdenliveDoc::zone() const
     return QPoint(m_documentProperties.value("zonein").toInt(), m_documentProperties.value("zoneout").toInt());
 }
 
-bool KdenliveDoc::saveSceneList(const QString &path, const QString &scene)
+QDomDocument KdenliveDoc::xmlSceneList(const QString &scene, const QStringList expandedFolders)
 {
     QDomDocument sceneList;
     sceneList.setContent(scene, true);
     QDomElement mlt = sceneList.firstChildElement("mlt");
     if (mlt.isNull() || !mlt.hasChildNodes()) {
-        //Make sure we don't save if scenelist is corrupted
-        KMessageBox::error(kapp->activeWindow(), i18n("Cannot write to file %1, scene list is corrupted.", path));
-        return false;
+        //scenelist is corrupted
+        return sceneList;
     }
 
     QDomElement addedXml = sceneList.createElement("kdenlivedoc");
@@ -576,7 +588,7 @@ bool KdenliveDoc::saveSceneList(const QString &path, const QString &scene)
     addedXml.appendChild(docproperties);
 
     QDomElement docnotes = sceneList.createElement("documentnotes");
-    QDomText value = sceneList.createTextNode(m_notesWidget->toPlainText());
+    QDomText value = sceneList.createTextNode(m_notesWidget->toHtml());
     docnotes.appendChild(value);
     addedXml.appendChild(docnotes);
 
@@ -616,6 +628,7 @@ bool KdenliveDoc::saveSceneList(const QString &path, const QString &scene)
         QDomElement folder = sceneList.createElement("folder");
         folder.setAttribute("id", f.key());
         folder.setAttribute("name", f.value());
+        if (expandedFolders.contains(f.key())) folder.setAttribute("opened", "1");
         addedXml.appendChild(folder);
     }
 
@@ -644,6 +657,17 @@ bool KdenliveDoc::saveSceneList(const QString &path, const QString &scene)
     addedXml.appendChild(sceneList.importNode(m_clipManager->groupsXml(), true));
 
     //wes.appendChild(doc.importNode(kdenliveData, true));
+    return sceneList;
+}
+
+bool KdenliveDoc::saveSceneList(const QString &path, const QString &scene, const QStringList expandedFolders)
+{
+    QDomDocument sceneList = xmlSceneList(scene, expandedFolders);
+    if (sceneList.isNull()) {
+        //Make sure we don't save if scenelist is corrupted
+        KMessageBox::error(kapp->activeWindow(), i18n("Cannot write to file %1, scene list is corrupted.", path));
+        return false;
+    }
 
     QFile file(path);
     if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {
@@ -1383,6 +1407,12 @@ void KdenliveDoc::addTrackEffect(int ix, QDomElement effect)
                 //break;
             }
         }
+
+        if (effect.attribute("id") == "crop") {
+            // default use_profile to 1 for clips with proxies to avoid problems when rendering
+            if (e.attribute("name") == "use_profile" && getDocumentProperty("enableproxy") == "1")
+                e.setAttribute("value", "1");
+        }
     }
 
     m_tracksList[ix].effectsList.append(effect);
@@ -1515,5 +1545,13 @@ void KdenliveDoc::updateProjectFolderPlacesEntry()
     }
 }
 
+QStringList KdenliveDoc::getExpandedFolders()
+{
+    QStringList result = m_documentProperties.value("expandedfolders").split(';');
+    // this property is only needed once when opening project, so clear it now
+    m_documentProperties.remove("expandedfolders");
+    return result;
+}
+
 #include "kdenlivedoc.moc"