From f09c29c790d79fcd240d0f03aad0bc0da0246292 Mon Sep 17 00:00:00 2001 From: Till Theato Date: Fri, 5 Nov 2010 23:19:58 +0000 Subject: [PATCH] Some small cleanups and even smaller speed improvements for project loading svn path=/trunk/kdenlive/; revision=5074 --- src/documentvalidator.cpp | 51 ++++++++++++++++++--------------------- src/kdenlivedoc.cpp | 2 +- src/trackview.cpp | 27 +++++++++++---------- 3 files changed, 39 insertions(+), 41 deletions(-) diff --git a/src/documentvalidator.cpp b/src/documentvalidator.cpp index 1ebcb6f0..e6e0be7e 100644 --- a/src/documentvalidator.cpp +++ b/src/documentvalidator.cpp @@ -36,36 +36,34 @@ DocumentValidator::DocumentValidator(QDomDocument doc): bool DocumentValidator::validate(const double currentVersion) { - // Check if we're validating a Kdenlive project - if (!isProject()) + QDomElement mlt = m_doc.firstChildElement("mlt"); + // At least the root element must be there + if (mlt.isNull()) return false; + QDomElement kdenliveDoc = mlt.firstChildElement("kdenlivedoc"); + // Check if we're validating a Kdenlive project + if (kdenliveDoc.isNull()) + return false; // Upgrade the document to the latest version - QDomNode kdenlivedocNode = m_doc.elementsByTagName("kdenlivedoc").at(0); - QDomElement kdenlivedocElm = kdenlivedocNode.toElement(); - if (!upgrade(kdenlivedocElm.attribute("version").toDouble(), currentVersion)) + if (!upgrade(kdenliveDoc.attribute("version").toDouble(), currentVersion)) return false; /* * Check the syntax (this will be replaced by XSD validation with Qt 4.6) * and correct some errors */ - QDomNode mltNode = m_doc.elementsByTagName("mlt").at(0); - QDomElement mltElm = mltNode.toElement(); - if (mltElm.isNull()) // At least the root element must be there - return false; - else { + { // Return (or create) the tractor - QDomNode tractorNode = m_doc.elementsByTagName("tractor").at(0); - QDomElement tractorElm = tractorNode.toElement(); - if (tractorElm.isNull()) { + QDomElement tractor = mlt.firstChildElement("tractor"); + if (tractor.isNull()) { m_modified = true; - tractorElm = m_doc.createElement("tractor"); - tractorElm.setAttribute("global_feed", "1"); - tractorElm.setAttribute("in", "0"); - tractorElm.setAttribute("out", "-1"); - tractorElm.setAttribute("id", "maintractor"); - mltElm.appendChild(tractorElm); + tractor = m_doc.createElement("tractor"); + tractor.setAttribute("global_feed", "1"); + tractor.setAttribute("in", "0"); + tractor.setAttribute("out", "-1"); + tractor.setAttribute("id", "maintractor"); + mlt.appendChild(tractor); } /* @@ -74,9 +72,9 @@ bool DocumentValidator::validate(const double currentVersion) */ QDomNodeList playlists = m_doc.elementsByTagName("playlist"); int tracksMax = playlists.count() - 1; // Remove the black track - QDomNodeList tracks = m_doc.elementsByTagName("track"); + QDomNodeList tracks = tractor.elementsByTagName("track"); tracksMax = qMax(tracks.count() - 1, tracksMax); - QDomNodeList tracksinfo = m_doc.elementsByTagName("trackinfo"); + QDomNodeList tracksinfo = kdenliveDoc.elementsByTagName("trackinfo"); tracksMax = qMax(tracksinfo.count(), tracksMax); tracksMax = qMax(1, tracksMax); // Force existance of one track if (playlists.count() - 1 < tracksMax || @@ -90,7 +88,7 @@ bool DocumentValidator::validate(const double currentVersion) // Looks like one MLT track is missing, remove the extra Kdenlive track if there is one. if (tracksinfo.count() != tracks.count() - 1) { // The Kdenlive tracks are not ok, clear and rebuild them - QDomNode tinfo = m_doc.elementsByTagName("tracksinfo").at(0); + QDomNode tinfo = kdenliveDoc.elementsByTagName("tracksinfo").at(0); QDomNode tnode = tinfo.firstChild(); while (!tnode.isNull()) { tinfo.removeChild(tnode); @@ -120,22 +118,21 @@ bool DocumentValidator::validate(const double currentVersion) difference = tracksMax - (playlists.count() - 1); for (int i = 0; i < difference; ++i) { QDomElement playlist = m_doc.createElement("playlist"); - mltElm.appendChild(playlist); + mlt.appendChild(playlist); } } if (tracks.count() - 1 < tracksMax) { difference = tracksMax - (tracks.count() - 1); for (int i = 0; i < difference; ++i) { QDomElement track = m_doc.createElement("track"); - tractorElm.appendChild(track); + tractor.appendChild(track); } } if (tracksinfo.count() < tracksMax) { - QDomNode tracksinfoNode = m_doc.elementsByTagName("tracksinfo").at(0); - QDomElement tracksinfoElm = tracksinfoNode.toElement(); + QDomElement tracksinfoElm = kdenliveDoc.firstChildElement("tracksinfo"); if (tracksinfoElm.isNull()) { tracksinfoElm = m_doc.createElement("tracksinfo"); - kdenlivedocElm.appendChild(tracksinfoElm); + kdenliveDoc.appendChild(tracksinfoElm); } difference = tracksMax - tracksinfo.count(); for (int i = 0; i < difference; ++i) { diff --git a/src/kdenlivedoc.cpp b/src/kdenlivedoc.cpp index d0aae8bb..b2383dc4 100644 --- a/src/kdenlivedoc.cpp +++ b/src/kdenlivedoc.cpp @@ -148,7 +148,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")); diff --git a/src/trackview.cpp b/src/trackview.cpp index cb255cd5..e4255c33 100644 --- a/src/trackview.cpp +++ b/src/trackview.cpp @@ -197,8 +197,9 @@ void TrackView::parseDocument(QDomDocument doc) }*/ // parse project tracks - QDomElement tractor = doc.elementsByTagName("tractor").item(0).toElement(); - QDomNodeList tracks = doc.elementsByTagName("track"); + QDomElement mlt = doc.firstChildElement("mlt"); + QDomElement tractor = mlt.firstChildElement("tractor"); + QDomNodeList tracks = tractor.elementsByTagName("track"); QDomNodeList playlists = doc.elementsByTagName("playlist"); int duration = 300; m_projectTracks = tracks.count(); @@ -232,7 +233,7 @@ void TrackView::parseDocument(QDomDocument doc) if (e.hasAttribute("in") == false && e.hasAttribute("out") == false) continue; int in = e.attribute("in").toInt(); int out = e.attribute("out").toInt(); - if (in > out || in == out) { + if (in >= out) { // invalid producer, remove it QString id = e.attribute("id"); m_invalidProducers.append(id); @@ -285,7 +286,7 @@ void TrackView::parseDocument(QDomDocument doc) } // parse transitions - QDomNodeList transitions = doc.elementsByTagName("transition"); + QDomNodeList transitions = tractor.elementsByTagName("transition"); //kDebug() << "//////////// TIMELINE FOUND: " << projectTransitions << " transitions"; for (int i = 0; i < transitions.count(); i++) { @@ -423,8 +424,11 @@ void TrackView::parseDocument(QDomDocument doc) } } + + QDomElement infoXml = mlt.firstChildElement("kdenlivedoc"); + // Add guides - QDomNodeList guides = doc.elementsByTagName("guide"); + QDomNodeList guides = infoXml.elementsByTagName("guide"); for (int i = 0; i < guides.count(); i++) { e = guides.item(i).toElement(); const QString comment = e.attribute("comment"); @@ -433,14 +437,12 @@ void TrackView::parseDocument(QDomDocument doc) } // Rebuild groups - QDomNodeList groups = doc.elementsByTagName("group"); + QDomNodeList groups = infoXml.elementsByTagName("group"); m_trackview->loadGroups(groups); m_trackview->setDuration(duration); kDebug() << "/////////// TOTAL PROJECT DURATION: " << duration; // Remove Kdenlive extra info from xml doc before sending it to MLT - QDomElement mlt = doc.firstChildElement("mlt"); - QDomElement infoXml = mlt.firstChildElement("kdenlivedoc"); mlt.removeChild(infoXml); slotRebuildTrackHeaders(); @@ -763,7 +765,7 @@ void TrackView::slotAddProjectEffects(QDomNodeList effects, QDomElement parentNo } // add first keyframe if (effectout <= effectin) { - // there is only one keyframe + // there is only one keyframe keyframes.append(QString::number(effectin) + ':' + QString::number(startvalue) + ';'); } else keyframes.append(QString::number(effectin) + ':' + QString::number(startvalue) + ';' + QString::number(effectout) + ':' + QString::number(endvalue) + ';'); QDomNode lastParsedEffect; @@ -855,11 +857,10 @@ void TrackView::slotAddProjectEffects(QDomNodeList effects, QDomElement parentNo currenteffect.setAttribute("src", ladspaEffectFile); } if (disableeffect) currenteffect.setAttribute("disable", "1"); - if (clip) clip->addEffect(currenteffect, false); - else { - kDebug() << "<< TRACK: " << trackIndex << ", adding effect";; + if (clip) + clip->addEffect(currenteffect, false); + else m_doc->addTrackEffect(trackIndex, currenteffect); - } } } } -- 2.39.2