#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),
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;
}
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");
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();
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());
}
}
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");
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);
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);
}
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)) {
//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);
}
}
+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"