#include "kdenlivesettings.h"
#include "renderer.h"
#include "clipmanager.h"
-#include "addfoldercommand.h"
-#include "editfoldercommand.h"
#include "titlewidget.h"
#include "mainwindow.h"
QString profilePath = infoXml.attribute("profile");
QString projectFolderPath = infoXml.attribute("projectfolder");
if (!projectFolderPath.isEmpty()) m_projectFolder = KUrl(projectFolderPath);
- if (m_projectFolder.isEmpty()) m_projectFolder = KUrl(KdenliveSettings::defaultprojectfolder());
+
+ if (m_projectFolder.isEmpty() || !KIO::NetAccess::exists(m_projectFolder.path(), KIO::NetAccess::DestinationSide, parent)) {
+ // Make sure the project folder is usable
+ KMessageBox::information(parent, i18n("Document project folder is invalid, setting it to the default one: %1", KdenliveSettings::defaultprojectfolder()));
+ m_projectFolder = KUrl(KdenliveSettings::defaultprojectfolder());
+ }
m_startPos = infoXml.attribute("position").toInt();
m_zoom = infoXml.attribute("zoom", "7").toInt();
- m_zoneStart = infoXml.attribute("zonein", "0").toInt();
+
+
+
+
m_zoneEnd = infoXml.attribute("zoneout", "100").toInt();
setProfilePath(profilePath);
const int max = producers.count();
const int infomax = infoproducers.count();
+ 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"));
+ }
+
if (max > 0) {
m_documentLoadingStep = 100.0 / (max + infomax + m_document.elementsByTagName("entry").count());
parent->slotGotProgressInfo(i18n("Loading project clips"), (int) m_documentLoadingProgress);
}
kDebug() << "// AUTOSAVE FILE: " << m_autosave->fileName();
QDomDocument doc;
- doc.setContent(m_render->sceneList());
+ if (KdenliveSettings::dropbframes()) {
+ KdenliveSettings::setDropbframes(false);
+ m_clipManager->updatePreviewSettings();
+ doc.setContent(m_render->sceneList());
+ KdenliveSettings::setDropbframes(true);
+ m_clipManager->updatePreviewSettings();
+ } else doc.setContent(m_render->sceneList());
saveSceneList(m_autosave->fileName(), doc);
}
}
addedXml.setAttribute("tracks", getTracksInfo());
addedXml.setAttribute("zoom", m_zoom);
+ // save project folders
+ QMap <QString, QString> folderlist = m_clipManager->documentFolderList();
+
+ QMapIterator<QString, QString> f(folderlist);
+ while (f.hasNext()) {
+ f.next();
+ QDomElement folder = sceneList.createElement("folder");
+ folder.setAttribute("id", f.key());
+ folder.setAttribute("name", f.value());
+ addedXml.appendChild(folder);
+ }
+
+ // Save project clips
QDomElement e;
QList <DocClipBase*> list = m_clipManager->documentClipList();
for (int i = 0; i < list.count(); i++) {
KStandardDirs::makeDir(url.path());
KStandardDirs::makeDir(url.path() + "/titles/");
KStandardDirs::makeDir(url.path() + "/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);
+ 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;
}
QDomDocument doc;
doc.setContent(clip->getProperty("xmldata"));
dia_ui->setXml(doc);
- QPixmap pix = dia_ui->renderedPixmap();
+ QImage pix = dia_ui->renderedPixmap();
pix.save(titleresource);
clip->setProperty("resource", titleresource);
delete dia_ui;
}
}
+void KdenliveDoc::updatePreviewSettings() {
+ m_clipManager->updatePreviewSettings();
+ m_render->updatePreviewSettings();
+ m_clipManager->resetProducersList(m_render->producersList());
+
+}
+
Render *KdenliveDoc::renderer() {
return m_render;
}
extension = KUrl(path).fileName();
path = KUrl(path).directory();
}
- if (!path.isEmpty() && !QFile::exists(path)) {
+ if (!QFile::exists(path) && elem.attribute("type").toInt() == TEXT) {
+ kDebug() << "// TITLE: " << elem.attribute("titlename") << " Preview file: " << elem.attribute("resource") << " DOES NOT EXIST";
+ QString titlename = elem.attribute("titlename");
+ QString titleresource;
+ if (titlename.isEmpty()) {
+ QStringList titleInfo = TitleWidget::getFreeTitleInfo(projectFolder());
+ titlename = titleInfo.at(0);
+ titleresource = titleInfo.at(1);
+ elem.setAttribute("titlename", titlename);
+ kDebug() << "// New title set to: " << titlename;
+ } else {
+ titleresource = TitleWidget::getTitleResourceFromName(projectFolder(), titlename);
+ }
+ QString titlepath = projectFolder().path() + "/titles/";
+ TitleWidget *dia_ui = new TitleWidget(KUrl(), titlepath, m_render, kapp->activeWindow());
+ QDomDocument doc;
+ doc.setContent(elem.attribute("xmldata"));
+ dia_ui->setXml(doc);
+ QImage pix = dia_ui->renderedPixmap();
+ pix.save(titleresource);
+ elem.setAttribute("resource", titleresource);
+ delete dia_ui;
+ } else if (!path.isEmpty() && !QFile::exists(path) && elem.attribute("type").toInt() != TEXT) {
+ kDebug() << "// FOUND MISSING CLIP: " << path << ", TYPE: " << elem.attribute("type").toInt();
const QString size = elem.attribute("file_size");
const QString hash = elem.attribute("file_hash");
QString newpath;
}
}
-void KdenliveDoc::addFolder(const QString foldername, const QString &clipId, bool edit) {
- emit addProjectFolder(foldername, clipId, false, edit);
-}
-
-void KdenliveDoc::deleteFolder(const QString foldername, const QString &clipId) {
- emit addProjectFolder(foldername, clipId, true);
-}
-
void KdenliveDoc::deleteProjectClip(QList <QString> ids) {
for (int i = 0; i < ids.size(); ++i) {
emit deleteTimelineClip(ids.at(i));
setModified(true);
}
-void KdenliveDoc::deleteProjectFolder(QMap <QString, QString> map) {
- QMapIterator<QString, QString> i(map);
- while (i.hasNext()) {
- i.next();
- slotDeleteFolder(i.key(), i.value());
- }
- setModified(true);
-}
-
void KdenliveDoc::deleteClip(const QString &clipId) {
emit signalDeleteProjectClip(clipId);
m_clipManager->deleteClip(clipId);
setModified(true);
}
-void KdenliveDoc::slotAddFolder(const QString folderName) {
- AddFolderCommand *command = new AddFolderCommand(this, folderName, QString::number(m_clipManager->getFreeClipId()), true);
- commandStack()->push(command);
- setModified(true);
-}
-
-void KdenliveDoc::slotDeleteFolder(const QString folderName, const QString &id) {
- AddFolderCommand *command = new AddFolderCommand(this, folderName, id, false);
- commandStack()->push(command);
- setModified(true);
-}
-
-void KdenliveDoc::slotEditFolder(const QString newfolderName, const QString oldfolderName, const QString &clipId) {
- EditFolderCommand *command = new EditFolderCommand(this, newfolderName, oldfolderName, clipId, false);
- commandStack()->push(command);
- setModified(true);
-}
-
const QString&KdenliveDoc::getFreeClipId() {
return QString::number(m_clipManager->getFreeClipId());
}
TitleWidget *dia_ui = new TitleWidget(KUrl(), titlesFolder, m_render, kapp->activeWindow());
if (dia_ui->exec() == QDialog::Accepted) {
QStringList titleInfo = TitleWidget::getFreeTitleInfo(projectFolder());
- QPixmap pix = dia_ui->renderedPixmap();
+ QImage pix = dia_ui->renderedPixmap();
pix.save(titleInfo.at(1));
//dia_ui->saveTitle(path + ".kdenlivetitle");
m_clipManager->slotAddTextClipFile(titleInfo.at(0), titleInfo.at(1), dia_ui->xml().toString(), QString(), QString());