#include "kdenlivesettings.h"
#include "renderer.h"
#include "clipmanager.h"
-#include "addfoldercommand.h"
-#include "editfoldercommand.h"
#include "titlewidget.h"
#include "mainwindow.h"
-
-KdenliveDoc::KdenliveDoc(const KUrl &url, const KUrl &projectFolder, QUndoGroup *undoGroup, const QString &profileName, const QPoint tracks, MainWindow *parent): QObject(parent), m_render(NULL), m_url(url), m_projectFolder(projectFolder), m_commandStack(new QUndoStack(undoGroup)), m_modified(false), m_documentLoadingProgress(0), m_documentLoadingStep(0.0), m_startPos(0), m_zoom(7), m_autosave(NULL) {
+KdenliveDoc::KdenliveDoc(const KUrl &url, const KUrl &projectFolder, QUndoGroup *undoGroup, const QString &profileName, const QPoint tracks, Render *render, MainWindow *parent): QObject(parent), m_render(render), m_url(url), m_projectFolder(projectFolder), m_commandStack(new QUndoStack(undoGroup)), m_modified(false), m_documentLoadingProgress(0), m_documentLoadingStep(0.0), m_startPos(0), m_zoom(7), m_autosave(NULL), m_zoneStart(0), m_zoneEnd(100) {
m_clipManager = new ClipManager(this);
m_autoSaveTimer = new QTimer(this);
m_autoSaveTimer->setSingleShot(true);
QDomNode westley = m_document.elementsByTagName("westley").at(0);
if (!infoXmlNode.isNull()) {
QDomElement infoXml = infoXmlNode.toElement();
- 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());
- m_startPos = infoXml.attribute("position").toInt();
- m_zoom = infoXml.attribute("zoom", "7").toInt();
- setProfilePath(profilePath);
double version = infoXml.attribute("version").toDouble();
// Upgrade old Kdenlive documents to current version
- convertDocument(version);
-
- // Build tracks
- QString tracks = infoXml.attribute("tracks");
- TrackInfo videoTrack;
- videoTrack.type = VIDEOTRACK;
- videoTrack.isMute = false;
- videoTrack.isBlind = false;
-
- TrackInfo audioTrack;
- audioTrack.type = AUDIOTRACK;
- audioTrack.isMute = false;
- audioTrack.isBlind = true;
- for (int i = 0; i < tracks.size(); i++) {
- if (tracks.data()[i] == 'v') m_tracksList.append(videoTrack);
- else m_tracksList.append(audioTrack);
- }
+ if (!convertDocument(version)) {
+ KMessageBox::sorry(parent, i18n("This project type is unsupported and can't be loaded."), i18n("Unable to open project"));
+ m_document = createEmptyDocument(tracks.x(), tracks.y());
+ setProfilePath(profileName);
+ } else {
+ /*
+ * read again <kdenlivedoc> and <westley> to get all the new
+ * stuff (convertDocument() can now do anything without breaking
+ * document loading)
+ */
+ infoXmlNode = m_document.elementsByTagName("kdenlivedoc").at(0);
+ infoXml = infoXmlNode.toElement();
+ version = infoXml.attribute("version").toDouble();
+ westley = m_document.elementsByTagName("westley").at(0);
+
+ QString profilePath = infoXml.attribute("profile");
+ QString projectFolderPath = infoXml.attribute("projectfolder");
+ if (!projectFolderPath.isEmpty()) m_projectFolder = KUrl(projectFolderPath);
+
+ 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();
- QDomElement e;
- QDomNodeList producers = m_document.elementsByTagName("producer");
- QDomNodeList infoproducers = m_document.elementsByTagName("kdenlive_producer");
- const int max = producers.count();
- const int infomax = infoproducers.count();
- if (max > 0) {
- m_documentLoadingStep = 100.0 / (max + infomax + m_document.elementsByTagName("entry").count());
- parent->slotGotProgressInfo(i18n("Loading project clips"), (int) m_documentLoadingProgress);
- }
- for (int i = 0; i < max; i++) {
- e = producers.item(i).cloneNode().toElement();
- if (m_documentLoadingStep > 0) {
- m_documentLoadingProgress += m_documentLoadingStep;
- parent->slotGotProgressInfo(QString(), (int) m_documentLoadingProgress);
- //qApp->processEvents();
+ m_zoneEnd = infoXml.attribute("zoneout", "100").toInt();
+ setProfilePath(profilePath);
+
+ // Build tracks
+ QString tracks = infoXml.attribute("tracks");
+ TrackInfo videoTrack;
+ videoTrack.type = VIDEOTRACK;
+ videoTrack.isMute = false;
+ videoTrack.isBlind = false;
+
+ TrackInfo audioTrack;
+ audioTrack.type = AUDIOTRACK;
+ audioTrack.isMute = false;
+ audioTrack.isBlind = true;
+ for (int i = 0; i < tracks.size(); i++) {
+ if (tracks.data()[i] == 'v') m_tracksList.append(videoTrack);
+ else m_tracksList.append(audioTrack);
}
- QString prodId = e.attribute("id");
- if (!e.isNull() && prodId != "black" && !prodId.startsWith("slowmotion")/*&& prodId.toInt() > 0*/) {
- // addClip(e, prodId, false);
- kDebug() << "// PROD: " << prodId;
+
+
+ QDomElement e;
+ QDomElement orig;
+ QDomNodeList producers = m_document.elementsByTagName("producer");
+ QDomNodeList infoproducers = m_document.elementsByTagName("kdenlive_producer");
+ 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"));
}
- }
- for (int i = 0; i < infomax; i++) {
- e = infoproducers.item(i).cloneNode().toElement();
- if (m_documentLoadingStep > 0) {
- m_documentLoadingProgress += m_documentLoadingStep;
- parent->slotGotProgressInfo(QString(), (int) m_documentLoadingProgress);
- //qApp->processEvents();
+ if (max > 0) {
+ m_documentLoadingStep = 100.0 / (max + infomax + m_document.elementsByTagName("entry").count());
+ parent->slotGotProgressInfo(i18n("Loading project clips"), (int) m_documentLoadingProgress);
}
- QString prodId = e.attribute("id");
- if (!e.isNull() && prodId != "black" && !prodId.startsWith("slowmotion")) {
- e.setTagName("producer");
- addClipInfo(e, prodId);
- kDebug() << "// NLIVE PROD: " << prodId;
+
+
+ for (int i = 0; i < infomax; i++) {
+ e = infoproducers.item(i).cloneNode().toElement();
+ if (m_documentLoadingStep > 0) {
+ m_documentLoadingProgress += m_documentLoadingStep;
+ parent->slotGotProgressInfo(QString(), (int) m_documentLoadingProgress);
+ //qApp->processEvents();
+ }
+ QString prodId = e.attribute("id");
+ if (!e.isNull() && prodId != "black" && !prodId.startsWith("slowmotion")) {
+ e.setTagName("producer");
+ // Get MLT's original producer properties
+
+ for (int j = 0; j < max; j++) {
+ QDomElement o = producers.item(j).cloneNode().toElement();
+ QString origId = o.attribute("id").section('_', 0, 0);
+ if (origId == prodId) {
+ orig = o;
+ break;
+ }
+ }
+ addClipInfo(e, orig, prodId);
+ kDebug() << "// NLIVE PROD: " << prodId;
+ }
}
- }
- QDomNode markers = m_document.elementsByTagName("markers").at(0);
- if (!markers.isNull()) {
- QDomNodeList markerslist = markers.childNodes();
- int maxchild = markerslist.count();
- for (int k = 0; k < maxchild; k++) {
- e = markerslist.at(k).toElement();
- if (e.tagName() == "marker") {
- m_clipManager->getClipById(e.attribute("id"))->addSnapMarker(GenTime(e.attribute("time").toDouble()), e.attribute("comment"));
+ QDomNode markers = m_document.elementsByTagName("markers").at(0);
+ if (!markers.isNull()) {
+ QDomNodeList markerslist = markers.childNodes();
+ int maxchild = markerslist.count();
+ for (int k = 0; k < maxchild; k++) {
+ e = markerslist.at(k).toElement();
+ if (e.tagName() == "marker") {
+ m_clipManager->getClipById(e.attribute("id"))->addSnapMarker(GenTime(e.attribute("time").toDouble()), e.attribute("comment"));
+ }
}
+ westley.removeChild(markers);
}
- westley.removeChild(markers);
- }
- m_document.removeChild(infoXmlNode);
+ m_document.removeChild(infoXmlNode);
- kDebug() << "Reading file: " << url.path() << ", found clips: " << producers.count();
+ kDebug() << "Reading file: " << url.path() << ", found clips: " << producers.count();
+ }
} else {
parent->slotGotProgressInfo(i18n("File %1 is not a Kdenlive project file."), 100);
kWarning() << " NO KDENLIVE INFO FOUND IN FILE: " << url.path();
// make sure that the necessary folders exist
KStandardDirs::makeDir(m_projectFolder.path() + "/titles/");
KStandardDirs::makeDir(m_projectFolder.path() + "/thumbs/");
+ KStandardDirs::makeDir(m_projectFolder.path() + "/ladspa/");
m_scenelist = m_document.toString();
kDebug() << "KDEnnlive document, init timecode: " << m_fps;
if (m_fps == 30000.0 / 1001.0) m_timecode.setFormat(30, true);
else m_timecode.setFormat((int) m_fps);
+ //kDebug() << "// SETTING SCENE LIST:\n\n" << m_document.toString();
connect(m_autoSaveTimer, SIGNAL(timeout()), this, SLOT(slotAutoSave()));
+
}
KdenliveDoc::~KdenliveDoc() {
}
}
+void KdenliveDoc::setSceneList() {
+ m_render->setSceneList(m_document.toString(), m_startPos);
+ checkProjectClips();
+}
+
QDomDocument KdenliveDoc::createEmptyDocument(const int videotracks, const int audiotracks) {
// Creating new document
QDomDocument doc;
}
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);
}
}
return m_zoom;
}
-void KdenliveDoc::convertDocument(double version) {
+bool KdenliveDoc::convertDocument(double version) {
kDebug() << "Opening a document with version " << version;
+
+ if (version == 0.81) return true;
+
+ // Opening a old Kdenlive document
+ if (version == 0.5 || version == 0.7 || version > 0.81) {
+ kDebug() << "Unable to open document with version " << version;
+ // TODO: convert 0.7 (0.5?) files to the new document format.
+ return FALSE;
+ }
+
if (version == 0.8) {
// Add the tracks information
QString tracksOrder;
int max = tracks.count();
for (int i = 0; i < max; i++) {
QDomElement t = tracks.at(i).toElement();
- if (t.attribute("hide") == "video") tracksOrder.append('a');
- else tracksOrder.append('v');
+ if (t.attribute("hide") == "video")
+ tracksOrder.append('a');
+ else if (t.attribute("producer") != "black_track")
+ tracksOrder.append('v');
}
QDomNode kdenlivedoc = m_document.elementsByTagName("kdenlivedoc").at(0);
QDomElement infoXml = kdenlivedoc.toElement();
QString currentTrackOrder = infoXml.attribute("tracks");
if (currentTrackOrder.isEmpty()) infoXml.setAttribute("tracks", tracksOrder);
- return;
+ return TRUE;
}
- // Opening a old Kdenlive document
- if (version == 0.7) {
- kDebug() << "Unable to open document with version " << version;
- // TODO: convert 0.7 files to the new document format.
- return;
- }
-
- QString tracksOrder;
QDomNode westley = m_document.elementsByTagName("westley").at(1);
QDomNode tractor = m_document.elementsByTagName("tractor").at(0);
QDomNode kdenlivedoc = m_document.elementsByTagName("kdenlivedoc").at(0);
QDomNode multitrack = m_document.elementsByTagName("multitrack").at(0);
QDomNodeList playlists = m_document.elementsByTagName("playlist");
- //m_startPos = kdenlivedoc.toElement().attribute("timeline_position").toInt();
-
QDomNode props = m_document.elementsByTagName("properties").at(0).toElement();
QString profile = props.toElement().attribute("videoprofile");
m_startPos = props.toElement().attribute("timeline_position").toInt();
if (profile == "dv_wide") profile = "dv_pal_wide";
- setProfilePath(profile);
// move playlists outside of tractor and add the tracks instead
int max = playlists.count();
QDomElement pl = n.toElement();
QDomElement track = m_document.createElement("track");
QString trackType = pl.attribute("hide");
- if (!trackType.isEmpty()) {
+ if (!trackType.isEmpty())
track.setAttribute("hide", trackType);
- if (trackType == "video") tracksOrder.append('a');
- else tracksOrder.append('v');
- } else tracksOrder.append('v');
QString playlist_id = pl.attribute("id");
if (playlist_id.isEmpty()) {
playlist_id = "black_track";
}
tractor.removeChild(multitrack);
+ // write tracks order now that they've been sorted
+ QString tracksOrder;
+ QDomNodeList tracks = m_document.elementsByTagName("track");
+ for (int i = 0; i < tracks.count(); ++i) {
+ QDomElement track = tracks.at(i).toElement();
+ if (track.attribute("hide") == "video")
+ tracksOrder.append('a');
+ else if (track.attribute("producer") != "black_track")
+ tracksOrder.append('v');
+ }
+
// audio track mixing transitions should not be added to track view, so add required attribute
QDomNodeList transitions = m_document.elementsByTagName("transition");
max = transitions.count();
}
*/
//kDebug() << "///////////////// END CONVERTED DOC:";
+
+ return TRUE;
}
QString KdenliveDoc::colorToString(const QColor& c) {
return ret;
}
+void KdenliveDoc::setZone(int start, int end) {
+ m_zoneStart = start;
+ m_zoneEnd = end;
+}
+
+QPoint KdenliveDoc::zone() const {
+ return QPoint(m_zoneStart, m_zoneEnd);
+}
+
bool KdenliveDoc::saveSceneList(const QString &path, QDomDocument sceneList) {
QDomNode wes = sceneList.elementsByTagName("westley").at(0);
QDomElement addedXml = sceneList.createElement("kdenlivedoc");
QDomElement markers = sceneList.createElement("markers");
- addedXml.setAttribute("version", "0.8");
+ addedXml.setAttribute("version", "0.81");
addedXml.setAttribute("profile", profilePath());
addedXml.setAttribute("position", m_render->seekPosition().frames(m_fps));
+ addedXml.setAttribute("zonein", m_zoneStart);
+ addedXml.setAttribute("zoneout", m_zoneEnd);
addedXml.setAttribute("projectfolder", m_projectFolder.path());
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;
}
void KdenliveDoc::moveProjectData(KUrl url) {
QList <DocClipBase*> list = m_clipManager->documentClipList();
+ //TODO: Also move ladspa effects files
for (int i = 0; i < list.count(); i++) {
DocClipBase *clip = list.at(i);
if (clip->clipType() == TEXT) {
return m_commandStack;
}
+/*
void KdenliveDoc::setRenderer(Render *render) {
if (m_render) return;
m_render = render;
checkProjectClips();
}
emit progressInfo(QString(), -1);
-}
+}*/
void KdenliveDoc::checkProjectClips() {
if (m_render == NULL) return;
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;
}
QDomElement prod = doc.createElement("producer");
}
-QDomDocument KdenliveDoc::toXml() const {
+QDomDocument KdenliveDoc::toXml() {
return m_document;
}
int subtrack = clipId.section('_', 1, 1).toInt();
DocClipBase *clip = m_clipManager->getClipById(producerId);
if (clip == NULL) {
+ /*kDebug()<<"// CLIP "<<clipId<<" NOT OFUND in LIST, CREATING";
+ QDomDocument doc;
+ doc.appendChild(doc.importNode(elem, true));
+ kDebug() << "IMPORTED CLIP: \n" << doc.toString()<<"\n";*/
elem.setAttribute("id", producerId);
QString path = elem.attribute("resource");
QString extension;
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;
KMessageBox::ButtonCode action = KMessageBox::No;
if (!size.isEmpty() && !hash.isEmpty()) {
if (!m_searchFolder.isEmpty()) newpath = searchFileRecursively(m_searchFolder, size, hash);
- else action = (KMessageBox::ButtonCode)KMessageBox::messageBox(kapp->activeWindow(), KMessageBox::WarningYesNo, i18n("<qt>Clip <b>%1</b><br>is invalid, what do you want to do?", path), i18n("File not found"), KGuiItem(i18n("Search automatically")), /*KGuiItem(i18n("Remove from project")), */KGuiItem(i18n("Keep as placeholder")));
+ else action = (KMessageBox::ButtonCode)KMessageBox::messageBox(kapp->activeWindow(), KMessageBox::WarningYesNo, i18n("Clip <b>%1</b><br>is invalid, what do you want to do?", path), i18n("File not found"), KGuiItem(i18n("Search automatically")), /*KGuiItem(i18n("Remove from project")), */KGuiItem(i18n("Keep as placeholder")));
} else {
if (elem.attribute("type").toInt() == SLIDESHOW) {
- if (KMessageBox::messageBox(kapp->activeWindow(), KMessageBox::WarningYesNo, i18n("<qt>Clip <b>%1</b><br>is invalid, what do you want to do?", path), i18n("File not found"), KGuiItem(i18n("Search automatically")), /*KGuiItem(i18n("Remove from project")),*/ KGuiItem(i18n("Keep as placeholder"))) == KMessageBox::Yes)
+ if (KMessageBox::messageBox(kapp->activeWindow(), KMessageBox::WarningYesNo, i18n("<qt>Clip <b>%1</b><br>is invalid or missing, what do you want to do?", path), i18n("File not found"), KGuiItem(i18n("Search manually")), /*KGuiItem(i18n("Remove from project")),*/ KGuiItem(i18n("Keep as placeholder"))) == KMessageBox::Yes)
newpath = KFileDialog::getExistingDirectory(KUrl("kfiledialog:///clipfolder"), kapp->activeWindow(), i18n("Looking for %1", path));
- } else newpath = KFileDialog::getOpenFileName(KUrl("kfiledialog:///clipfolder"), QString(), kapp->activeWindow(), i18n("Looking for %1", path));
+ } else if (KMessageBox::messageBox(kapp->activeWindow(), KMessageBox::WarningYesNo, i18n("Clip <b>%1</b><br>is invalid or missing, what do you want to do?", path), i18n("File not found"), KGuiItem(i18n("Search manually")), /*KGuiItem(i18n("Remove from project")),*/ KGuiItem(i18n("Keep as placeholder"))) == KMessageBox::Yes)
+ newpath = KFileDialog::getOpenFileName(KUrl("kfiledialog:///clipfolder"), QString(), kapp->activeWindow(), i18n("Looking for %1", path));
}
if (action == KMessageBox::Yes) {
kDebug() << "// ASKED FOR SRCH CLIP: " << clipId;
clip = new DocClipBase(m_clipManager, elem, producerId);
m_clipManager->addClip(clip);
}
- if (createClipItem) emit addProjectClip(clip);
+ if (createClipItem) {
+ emit addProjectClip(clip);
+ qApp->processEvents();
+ m_render->getFileProperties(clip->toXML(), clip->getId());
+ }
}
+
void KdenliveDoc::setNewClipResource(const QString &id, const QString &path) {
QDomNodeList prods = m_document.elementsByTagName("producer");
int maxprod = prods.count();
return foundFileName;
}
-void KdenliveDoc::addClipInfo(QDomElement elem, QString clipId) {
+void KdenliveDoc::addClipInfo(QDomElement elem, QDomElement orig, QString clipId) {
DocClipBase *clip = m_clipManager->getClipById(clipId);
if (clip == NULL) {
- addClip(elem, clipId);
+ addClip(elem, clipId, false);
} else {
QMap <QString, QString> properties;
QDomNamedNodeMap attributes = elem.attributes();
clip->setProperties(properties);
emit addProjectClip(clip, false);
}
-}
-
-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);
+ if (orig != QDomElement()) {
+ QMap<QString, QString> meta;
+ QDomNode m = orig.firstChild();
+ while (!m.isNull()) {
+ QString name = m.toElement().attribute("name");
+ if (name.startsWith("meta.attr")) {
+ meta.insert(name.section('.', 2, 3), m.firstChild().nodeValue());
+ }
+ m = m.nextSibling();
+ }
+ if (!meta.isEmpty()) {
+ clip = m_clipManager->getClipById(clipId);
+ if (clip) clip->setMetadata(meta);
+ }
+ }
}
void KdenliveDoc::deleteProjectClip(QList <QString> ids) {
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());
pix.save(m_projectFolder.path() + "/thumbs/" + fileId + ".png");
}
+QString KdenliveDoc::getLadspaFile() const {
+ int ct = 0;
+ QString counter = QString::number(ct).rightJustified(5, '0', false);
+ while (QFile::exists(m_projectFolder.path() + "/ladspa/" + counter + ".ladspa")) {
+ ct++;
+ counter = QString::number(ct).rightJustified(5, '0', false);
+ }
+ return m_projectFolder.path() + "/ladspa/" + counter + ".ladspa";
+}
#include "kdenlivedoc.moc"