]> git.sesse.net Git - kdenlive/commitdiff
Allow import of Kdenlive 0.5 title clips (double click on each text clip & click...
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Wed, 1 Oct 2008 19:47:11 +0000 (19:47 +0000)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Wed, 1 Oct 2008 19:47:11 +0000 (19:47 +0000)
svn path=/branches/KDE4/; revision=2423

src/kdenlivedoc.cpp
src/kdenlivedoc.h

index 50d7ea07b04dda0d1aad64bafc6676eb885a015d..353e117f20a0a17de9a031709100edae191fe7d7 100644 (file)
@@ -405,6 +405,7 @@ void KdenliveDoc::convertDocument(double version) {
     max = producers.count();
     for (int i = 0; i < max; i++) {
         QDomElement prod = producers.at(i).toElement();
+
         if (prod.attribute("mlt_service") == "framebuffer") {
             QString slowmotionprod = prod.attribute("resource");
             slowmotionprod.replace(':', '?');
@@ -412,7 +413,6 @@ void KdenliveDoc::convertDocument(double version) {
             prod.setAttribute("resource", slowmotionprod);
         }
     }
-
     // move producers to correct place, markers to a global list, fix clip descriptions
     QDomElement markers = m_document.createElement("markers");
     producers = m_document.elementsByTagName("producer");
@@ -420,25 +420,100 @@ void KdenliveDoc::convertDocument(double version) {
     for (int i = 0; i < max; i++) {
         QDomElement prod = producers.at(0).toElement();
         QDomNode m = prod.firstChild();
-        if (!m.isNull() && m.toElement().tagName() == "markers") {
-            QDomNodeList prodchilds = m.childNodes();
-            int maxchild = prodchilds.count();
-            for (int k = 0; k < maxchild; k++) {
-                QDomElement mark = prodchilds.at(0).toElement();
-                mark.setAttribute("id", prod.attribute("id"));
-                markers.insertAfter(mark, QDomNode());
-            }
-            prod.removeChild(m);
-        } else if (m.isText()) {
-            QString comment = m.nodeValue();
-            if (!comment.isEmpty()) {
-                prod.setAttribute("description", comment);
+        if (!m.isNull()) {
+            if (m.toElement().tagName() == "markers") {
+                QDomNodeList prodchilds = m.childNodes();
+                int maxchild = prodchilds.count();
+                for (int k = 0; k < maxchild; k++) {
+                    QDomElement mark = prodchilds.at(0).toElement();
+                    mark.setAttribute("id", prod.attribute("id"));
+                    markers.insertAfter(mark, QDomNode());
+                }
+                prod.removeChild(m);
+            } else if (prod.attribute("type").toInt() == TEXT) {
+                // convert title clip
+                if (m.toElement().tagName() == "textclip") {
+                    QDomDocument tdoc;
+                    QDomElement titleclip = m.toElement();
+                    QDomElement title = tdoc.createElement("kdenlivetitle");
+                    tdoc.appendChild(title);
+                    QDomNodeList objects = titleclip.childNodes();
+                    int maxchild = objects.count();
+                    for (int k = 0; k < maxchild; k++) {
+                        QString objectxml;
+                        QDomElement ob = objects.at(k).toElement();
+                        if (ob.attribute("type") == "3") {
+                            // text object
+                            QDomElement item = tdoc.createElement("item");
+                            item.setAttribute("z-index", ob.attribute("z"));
+                            item.setAttribute("type", "QGraphicsTextItem");
+                            QDomElement position = tdoc.createElement("position");
+                            position.setAttribute("x", ob.attribute("x"));
+                            position.setAttribute("y", ob.attribute("y"));
+                            QDomElement content = tdoc.createElement("content");
+                            content.setAttribute("font", ob.attribute("font_family"));
+                            content.setAttribute("font-size", ob.attribute("font_size"));
+                            content.setAttribute("font-bold", ob.attribute("bold"));
+                            content.setAttribute("font-italic", ob.attribute("italic"));
+                            content.setAttribute("font-underline", ob.attribute("underline"));
+                            QString col = ob.attribute("color");
+                            QColor c(col);
+                            content.setAttribute("font-color", colorToString(c));
+                            QDomText conttxt = tdoc.createTextNode(ob.attribute("text"));
+                            content.appendChild(conttxt);
+                            item.appendChild(position);
+                            item.appendChild(content);
+                            title.appendChild(item);
+                        } else if (ob.attribute("type") == "5") {
+                            // rectangle object
+                            QDomElement item = tdoc.createElement("item");
+                            item.setAttribute("z-index", ob.attribute("z"));
+                            item.setAttribute("type", "QGraphicsRectItem");
+                            QDomElement position = tdoc.createElement("position");
+                            position.setAttribute("x", ob.attribute("x"));
+                            position.setAttribute("y", ob.attribute("y"));
+                            QDomElement content = tdoc.createElement("content");
+                            QString col = ob.attribute("color");
+                            QColor c(col);
+                            content.setAttribute("brushcolor", colorToString(c));
+                            QString rect = "0,0,";
+                            rect.append(ob.attribute("width"));
+                            rect.append(",");
+                            rect.append(ob.attribute("height"));
+                            content.setAttribute("rect", rect);
+                            item.appendChild(position);
+                            item.appendChild(content);
+                            title.appendChild(item);
+                        }
+                    }
+                    prod.setAttribute("xmldata", tdoc.toString());
+                    QString titlesFolder = projectFolder().path() + "/titles/";
+                    KStandardDirs::makeDir(titlesFolder);
+                    QString titleName = "title";
+                    int counter = 0;
+                    QString path = titlesFolder + titleName + QString::number(counter).rightJustified(3, '0', false);
+                    while (QFile::exists(path + ".png")) {
+                        counter++;
+                        path = titlesFolder + titleName + QString::number(counter).rightJustified(3, '0', false);
+                    }
+                    prod.setAttribute("xml", path);
+                    prod.setAttribute("resource", path + ".png");
+                    //kDebug()<<"TITLE DATA:\n"<<tdoc.toString();
+                    prod.removeChild(m);
+                }
+
+            } else if (m.isText()) {
+                QString comment = m.nodeValue();
+                if (!comment.isEmpty()) {
+                    prod.setAttribute("description", comment);
+                }
+                prod.removeChild(m);
             }
-            prod.removeChild(m);
         }
         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);
@@ -459,6 +534,12 @@ void KdenliveDoc::convertDocument(double version) {
     //kDebug() << "/////////////////  END CONVERTED DOC:";
 }
 
+QString KdenliveDoc::colorToString(const QColor& c) {
+    QString ret = "%1,%2,%3,%4";
+    ret = ret.arg(c.red()).arg(c.green()).arg(c.blue()).arg(c.alpha());
+    return ret;
+}
+
 QDomElement KdenliveDoc::documentInfoXml() {
     QDomDocument doc;
     QDomElement e;
index 17df275a0480cd9a9b91a757b055244ff4c92bb5..331e03484c82a7170580b00e5413db93c0d35c90 100644 (file)
@@ -132,6 +132,7 @@ private:
     double m_documentLoadingProgress;
     void convertDocument(double version);
     QDomDocument createEmptyDocument(const int videotracks, const int audiotracks);
+    QString colorToString(const QColor& c);
 
 public slots:
     void slotCreateTextClip(QString group, const QString &groupId);