X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fkdenlivedoc.cpp;h=861fc28fda179ff2c6125718f09b0590246fb5f5;hb=a0ea9695750c8309cc81fe9a9fd2e2549d20e1a0;hp=f9a90afa35bf21ba589097d3713390d4c7bc4fd3;hpb=5adfce54047467ef346f647495028eb8ceedad0d;p=kdenlive diff --git a/src/kdenlivedoc.cpp b/src/kdenlivedoc.cpp index f9a90afa..861fc28f 100644 --- a/src/kdenlivedoc.cpp +++ b/src/kdenlivedoc.cpp @@ -40,6 +40,10 @@ #include #include #include +#include +#include +#include +#include #include #include @@ -50,7 +54,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 +93,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,9 +108,11 @@ 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) { + 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"); @@ -114,6 +121,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 +153,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 +163,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 +181,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 +198,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) { @@ -207,7 +221,7 @@ KdenliveDoc::KdenliveDoc(const KUrl &url, const KUrl &projectFolder, QUndoGroup 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(); } } @@ -250,6 +264,8 @@ KdenliveDoc::KdenliveDoc(const KUrl &url, const KUrl &projectFolder, QUndoGroup KStandardDirs::makeDir(m_projectFolder.path(KUrl::AddTrailingSlash) + "thumbs/"); KStandardDirs::makeDir(m_projectFolder.path(KUrl::AddTrailingSlash) + "ladspa/"); + updateProjectFolderPlacesEntry(); + //kDebug() << "// SETTING SCENE LIST:\n\n" << m_document.toString(); connect(m_autoSaveTimer, SIGNAL(timeout()), this, SLOT(slotAutoSave())); } @@ -474,15 +490,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()); } } @@ -668,6 +676,8 @@ void KdenliveDoc::setProjectFolder(KUrl url) 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) @@ -804,16 +814,6 @@ void KdenliveDoc::checkProjectClips() m_clipManager->resetProducersList(m_render->producersList()); } -void KdenliveDoc::updatePreviewSettings() -{ - m_clipManager->updatePreviewSettings(); - m_render->updatePreviewSettings(); - QList prods = m_render->producersList(); - m_clipManager->resetProducersList(m_render->producersList()); - qDeleteAll(prods); - prods.clear(); -} - Render *KdenliveDoc::renderer() { return m_render; @@ -1158,7 +1158,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; @@ -1457,5 +1457,48 @@ bool KdenliveDoc::saveCustomEffects(QDomNodeList customeffects) 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); + } +} + #include "kdenlivedoc.moc"