#include <KIO/NetAccess>
#include <KIO/CopyJob>
#include <KApplication>
+#include <KGlobal>
+#include <KBookmarkManager>
+#include <KBookmark>
+#include <KStandardDirs>
#include <QCryptographicHash>
#include <QFile>
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, 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["verticalzoom"] = "1";
m_documentProperties["zonein"] = "0";
m_documentProperties["zoneout"] = "100";
-
+ m_documentProperties["enableproxy"] = QString::number((int) KdenliveSettings::enableproxy());
+ m_documentProperties["proxyparams"] = KdenliveSettings::proxyparams();
+ 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;
success = KIO::NetAccess::download(url.path(), tmpFile, parent);
QDomNodeList infoproducers = m_document.elementsByTagName("kdenlive_producer");
success = checkDocumentClips(infoproducers);
if (success) {
+ if (m_document.documentElement().attribute("modified") == "1") setModified(true);
parent->slotGotProgressInfo(i18n("Loading"), 0);
QDomElement mlt = m_document.firstChildElement("mlt");
QDomElement infoXml = mlt.firstChildElement("kdenlivedoc");
}
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");
for (int i = 0; i < props.count(); i++)
m_documentProperties.insert(props.item(i).nodeName(), props.item(i).nodeValue());
setProfilePath(infoXml.attribute("profile"));
- setModified(validator.isModified());
+ if (validator.isModified()) setModified(true);
kDebug() << "Reading file: " << url.path() << ", found clips: " << producers.count();
}
}
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() << "// SETTING SCENE LIST:\n\n" << m_document.toString();
connect(m_autoSaveTimer, SIGNAL(timeout()), this, SLOT(slotAutoSave()));
audioTrack.isBlind = true;
audioTrack.isLocked = false;
audioTrack.trackName = QString("Audio ") + QString::number(audiotracks - i);
+ audioTrack.duration = 0;
m_tracksList.append(audioTrack);
}
videoTrack.isBlind = false;
videoTrack.isLocked = false;
videoTrack.trackName = QString("Video ") + QString::number(videotracks - i);
+ videoTrack.duration = 0;
m_tracksList.append(videoTrack);
}
return createEmptyDocument(m_tracksList);
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)
+bool KdenliveDoc::saveSceneList(const QString &path, const QString &scene, const QStringList expandedFolders)
{
QDomDocument sceneList;
sceneList.setContent(scene, true);
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);
}
KStandardDirs::makeDir(url.path(KUrl::AddTrailingSlash) + "thumbs/");
if (KMessageBox::questionYesNo(kapp->activeWindow(), i18n("You have changed the project folder. Do you want to copy the cached data from %1 to the new folder %2?").arg(m_projectFolder.path(), url.path())) == KMessageBox::Yes) moveProjectData(url);
m_projectFolder = url;
+
+ updateProjectFolderPlacesEntry();
}
void KdenliveDoc::moveProjectData(KUrl url)
if (path.isEmpty()) path = KdenliveSettings::default_profile();
if (path.isEmpty()) path = "dv_pal";
m_profile = ProfilesDialog::getVideoProfile(path);
- bool current_fps = m_fps;
+ double current_fps = m_fps;
if (m_profile.path.isEmpty()) {
// Profile not found, use embedded profile
QDomElement profileInfo = m_document.elementsByTagName("profileinfo").at(0).toElement();
if (createClipItem) {
emit addProjectClip(clip);
- //qApp->processEvents();
}
return true;
m_tracksList[ix].isBlind = hide; // !m_tracksList.at(ix).isBlind;
}
+int KdenliveDoc::trackDuration(int ix)
+{
+ return m_tracksList.at(ix).duration;
+}
+
+void KdenliveDoc::setTrackDuration(int ix, int duration)
+{
+ m_tracksList[ix].duration = duration;
+}
+
void KdenliveDoc::insertTrack(int ix, TrackInfo type)
{
if (ix == -1) m_tracksList << type;
//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);
return (!importedEffects.isEmpty());
}
+void KdenliveDoc::updateProjectFolderPlacesEntry()
+{
+ /*
+ * For similar and more code have a look at kfileplacesmodel.cpp and the included files:
+ * http://websvn.kde.org/trunk/KDE/kdelibs/kfile/kfileplacesmodel.cpp?view=markup
+ */
+
+ const QString file = KStandardDirs::locateLocal("data", "kfileplaces/bookmarks.xml");
+ KBookmarkManager *bookmarkManager = KBookmarkManager::managerForFile(file, "kfilePlaces");
+ KBookmarkGroup root = bookmarkManager->root();
+ KBookmark bookmark = root.first();
+
+ QString kdenliveName = KGlobal::mainComponent().componentName();
+ KUrl documentLocation = m_projectFolder;
+
+ bool exists = false;
+
+ while (!bookmark.isNull()) {
+ // UDI not empty indicates a device
+ QString udi = bookmark.metaDataItem("UDI");
+ QString appName = bookmark.metaDataItem("OnlyInApp");
+
+ if (udi.isEmpty() && appName == kdenliveName && bookmark.text() == i18n("Project Folder")) {
+ if (bookmark.url() != documentLocation) {
+ bookmark.setUrl(documentLocation);
+ bookmarkManager->emitChanged(root);
+ }
+ exists = true;
+ break;
+ }
+
+ bookmark = root.next(bookmark);
+ }
+
+ // if entry does not exist yet (was not found), well, create it then
+ if (!exists) {
+ bookmark = root.addBookmark(i18n("Project Folder"), documentLocation, "folder-favorites");
+ // Make this user selectable ?
+ bookmark.setMetaDataItem("OnlyInApp", kdenliveName);
+ bookmarkManager->emitChanged(root);
+ }
+}
+
+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"