]> git.sesse.net Git - kdenlive/commitdiff
improve opening of Kdenlive 0.6 documents
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Wed, 21 May 2008 17:33:39 +0000 (17:33 +0000)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Wed, 21 May 2008 17:33:39 +0000 (17:33 +0000)
svn path=/branches/KDE4/; revision=2194

src/kdenlivedoc.cpp
src/trackview.cpp

index d1f264ecd1bb5183dfe4c7019b7fd117269e5b0c..e5f42c4eface20aa90a3eb922a20bb885a97d8f5 100644 (file)
@@ -47,15 +47,15 @@ KdenliveDoc::KdenliveDoc(const KUrl &url, const KUrl &projectFolder, MltVideoPro
             if (!infoXmlNode.isNull()) {
                 QDomElement infoXml = infoXmlNode.toElement();
                 QString profilePath = infoXml.attribute("profile");
+                if (!profilePath.isEmpty()) setProfilePath(profilePath);
                 double version = infoXml.attribute("version").toDouble();
                 if (version < 0.7) convertDocument(version);
-                if (!profilePath.isEmpty()) setProfilePath(profilePath);
-                QDomNodeList producers = infoXmlNode.childNodes();
+                QDomNodeList producers = m_document.elementsByTagName("producer"); //infoXmlNode.childNodes();
                 QDomElement e;
                 for (int i = 0; i < producers.count(); i++) {
                     e = producers.item(i).cloneNode().toElement();
-                    if (!e.isNull() && e.tagName() == "kdenlive_producer") {
-                        e.setTagName("producer");
+                    if (!e.isNull() && e.attribute("id") != "black") {
+                        //e.setTagName("producer");
                         addClip(e, e.attribute("id").toInt());
                     }
                 }
@@ -167,6 +167,12 @@ void KdenliveDoc::convertDocument(double version) {
     QDomNode multitrack = m_document.elementsByTagName("multitrack").at(0);
     QDomNodeList playlists = m_document.elementsByTagName("playlist");
 
+    QDomNode props = m_document.elementsByTagName("properties").at(0).toElement();
+    QString profile = props.toElement().attribute("videoprofile");
+    if (!profile.isEmpty()) {
+        setProfilePath(profile);
+    } else setProfilePath("dv_pal");
+
     // move playlists outside of tractor and add the tracks instead
     int max = playlists.count();
     for (int i = 0; i < max; i++) {
@@ -194,6 +200,19 @@ void KdenliveDoc::convertDocument(double version) {
             QDomText value = m_document.createTextNode("237");
             property.appendChild(value);
             tr.appendChild(property);
+        } else {
+            // convert transition
+            QDomNamedNodeMap attrs = tr.attributes();
+            for (unsigned int j = 0; j < attrs.count(); j++) {
+                QString attrName = attrs.item(j).nodeName();
+                if (attrName != "in" && attrName != "out" && attrName != "id") {
+                    QDomElement property = m_document.createElement("property");
+                    property.setAttribute("name", attrName);
+                    QDomText value = m_document.createTextNode(attrs.item(j).nodeValue());
+                    property.appendChild(value);
+                    tr.appendChild(property);
+                }
+            }
         }
     }
 
@@ -202,15 +221,29 @@ void KdenliveDoc::convertDocument(double version) {
         tractor.insertAfter(transitions.at(0), QDomNode());
     }
 
+
     // change producer names
     QDomNodeList producers = m_document.elementsByTagName("producer");
     max = producers.count();
+
+    for (int i = 0; i < max; i++) {
+        QDomElement prod = producers.at(0).toElement();
+        int duration = prod.attribute("duration").toInt();
+        if (duration > 0) prod.setAttribute("out", QString::number(duration));
+        westley.insertBefore(prod, QDomNode());
+    }
+
+    QDomNode westley0 = m_document.elementsByTagName("westley").at(0);
+    westley0.removeChild(kdenlivedoc);
+
+    QDomNodeList elements = westley.childNodes();
+    max = elements.count();
     for (int i = 0; i < max; i++) {
-        QDomNode prod = producers.at(i);
-        prod.toElement().setTagName("kdenlive_producer");
-        //kdenlivedoc.insertBefore(prod, QDomNode());
+        QDomElement prod = elements.at(0).toElement();
+        westley0.insertAfter(prod, QDomNode());
     }
 
+    westley0.removeChild(westley);
 
     kDebug() << "/////////////////  CONVERTED DOC:";
     kDebug() << m_document.toString();
index d3fc28160f66a5bdcb7f88c6bf52ff3823802802..8117e5eb1f18429e1bbd301e0c7fa8b1733f9095 100644 (file)
@@ -178,7 +178,7 @@ void TrackView::parseDocument(QDomDocument doc) {
                     break;
                 } else if (p.attribute("name") == "a_track") a_track = p.text().toInt();
                 else if (p.attribute("name") == "b_track") b_track = m_projectTracks - 1 - p.text().toInt();
-                else if (p.attribute("name") == "mlt_service") mlt_service = p.text().toInt();
+                else if (p.attribute("name") == "mlt_service") mlt_service = p.text();
             }
         }
         if (transitionAdd) {
@@ -187,6 +187,7 @@ void TrackView::parseDocument(QDomDocument doc) {
             transitionInfo.startPos = GenTime(e.attribute("in").toInt(), m_doc->fps());
             transitionInfo.endPos = GenTime(e.attribute("out").toInt(), m_doc->fps());
             transitionInfo.track = b_track;
+            kDebug() << "///////////////   +++++++++++  ADDING TRANSITION ON TRACK: " << b_track << ", TOTAL TRKA: " << m_projectTracks;
             Transition *tr = new Transition(transitionInfo, a_track, m_scale, m_doc->fps(), QDomElement());
             m_scene->addItem(tr);
         }
@@ -194,6 +195,7 @@ void TrackView::parseDocument(QDomDocument doc) {
 
 
     m_trackview->setDuration(duration);
+    kDebug() << "///////////  TOTAL PROJECT DURATION: " << duration;
     slotRebuildTrackHeaders();
     //m_trackview->setCursorPos(cursorPos);
     //m_scrollBox->setGeometry(0, 0, 300 * zoomFactor(), m_scrollArea->height());
@@ -290,7 +292,7 @@ int TrackView::slotAddProjectTrack(int ix, QDomElement xml, bool videotrack) {
 
                 ItemInfo clipinfo;
                 clipinfo.startPos = GenTime(position, m_doc->fps());
-                clipinfo.endPos = GenTime(out, m_doc->fps());
+                clipinfo.endPos = clipinfo.startPos + GenTime(out, m_doc->fps());
                 clipinfo.track = ix;
                 kDebug() << "// INSERTING CLIP: " << in << "x" << out << ", track: " << ix << ", ID: " << id << ", SCALE: " << m_scale << ", FPS: " << m_doc->fps();
                 ClipItem *item = new ClipItem(clip, clipinfo, m_scale, m_doc->fps());