]> git.sesse.net Git - kdenlive/commitdiff
correctly load / save text clips
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Thu, 17 Jul 2008 00:41:52 +0000 (00:41 +0000)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Thu, 17 Jul 2008 00:41:52 +0000 (00:41 +0000)
svn path=/branches/KDE4/; revision=2321

14 files changed:
src/clipmanager.cpp
src/clipmanager.h
src/docclipbase.cpp
src/docclipbase.h
src/kdenlivedoc.cpp
src/kdenlivedoc.h
src/mainwindow.cpp
src/projectitem.cpp
src/projectlist.cpp
src/renderer.cpp
src/titledocument.cpp
src/titledocument.h
src/titlewidget.cpp
src/titlewidget.h

index 02d34d821a99d52d481fe4400513bedf9543eebb..67691ff2fbfd6a24d3e3848137c5d44de7043b44 100644 (file)
@@ -153,12 +153,13 @@ void ClipManager::slotAddSlideshowClipFile(const QString name, const QString pat
 
 
 
-void ClipManager::slotAddTextClipFile(const QString path, const QString group, const int groupId) {
+void ClipManager::slotAddTextClipFile(const QString path, const QString xml, const QString group, const int groupId) {
     kDebug() << "/////  CLIP MANAGER, ADDING CLIP: " << path;
     QDomDocument doc;
     QDomElement prod = doc.createElement("producer");
     prod.setAttribute("resource", path + ".png");
     prod.setAttribute("xml", path);
+    prod.setAttribute("xmldata", xml);
     uint id = m_clipIdCounter++;
     prod.setAttribute("id", QString::number(id));
     if (!group.isEmpty()) {
index 164d49a6e5f6c08b83c0de28216d98efae5ec7de..48b7c545621e87c2fa2a2ed2569239e1fbaf6b1e 100644 (file)
@@ -49,7 +49,7 @@ Q_OBJECT public:
     DocClipBase *getClipAt(int pos);
     void deleteClip(uint clipId);
     void slotAddClipFile(const KUrl url, const QString group, const int groupId);
-    void slotAddTextClipFile(const QString path, const QString group, const int groupId);
+    void slotAddTextClipFile(const QString path, const QString xml, const QString group, const int groupId);
     void slotAddColorClipFile(const QString name, const QString color, QString duration, const QString group, const int groupId);
     void slotAddSlideshowClipFile(const QString name, const QString path, int count, const QString duration, bool loop, const QString group, const int groupId);
     DocClipBase *getClipById(int clipId);
index 467fb9a225e0250628c02cfc96a223a32d0c0192..a380b8fafa4b1c9e6271bd266091aca65fe59eee 100644 (file)
@@ -155,6 +155,7 @@ const QString DocClipBase::getProperty(const QString prop) const {
 
 void DocClipBase::setDuration(GenTime dur) {
     m_duration = dur;
+    m_properties.insert("duration", QString::number((int) dur.frames(KdenliveSettings::project_fps())));
 }
 
 const GenTime &DocClipBase::duration() const {
@@ -239,9 +240,6 @@ void DocClipBase::setAudioThumbCreated(bool isDone) {
 }
 
 
-QDomDocument DocClipBase::generateSceneList(bool, bool) const {
-}
-
 void DocClipBase::setThumbnail(const QPixmap & pixmap) {
     m_thumbnail = pixmap;
 }
index c85e65a251a28847b2b65ff52f3393f8bf260992..634a47b40ce02c902f45f4df5b27517ce8eab7a4 100644 (file)
@@ -140,7 +140,6 @@ Q_OBJECT public:
                             const GenTime & endTime) const;
     /** returns a QString containing all of the XML data required to recreate this clip. */
     QDomElement toXML() const;
-    QDomDocument generateSceneList(bool addProducers = true, bool rendering = false) const;
 
     /** Returns true if the xml passed matches the values in this clip */
     bool matchesXML(const QDomElement & element) const;
index 8048bd6c2aefe53974650e321b36374fa461a45b..1fb0f1b5abb1b8c370fc0a00c6840f290d5877ad 100644 (file)
@@ -40,6 +40,7 @@
 KdenliveDoc::KdenliveDoc(const KUrl &url, const KUrl &projectFolder, MltVideoProfile profile, QUndoGroup *undoGroup, MainWindow *parent): QObject(parent), m_render(NULL), m_url(url), m_projectFolder(projectFolder), m_profile(profile), m_fps((double)profile.frame_rate_num / profile.frame_rate_den), m_width(profile.width), m_height(profile.height), m_commandStack(new KUndoStack(undoGroup)), m_modified(false), m_documentLoadingProgress(0), m_documentLoadingStep(0.0), m_startPos(0), m_zoom(4) {
     kDebug() << "// init profile, ratnum: " << profile.frame_rate_num << ", " << profile.frame_rate_num << ", width: " << profile.width;
     m_clipManager = new ClipManager(this);
+    KdenliveSettings::setProject_fps(m_fps);
     if (!url.isEmpty()) {
         QString tmpFile;
         if (KIO::NetAccess::download(url.path(), tmpFile, parent)) {
@@ -411,6 +412,7 @@ void KdenliveDoc::setProfilePath(QString path) {
     m_fps = (double) m_profile.frame_rate_num / m_profile.frame_rate_den;
     m_width = m_profile.width;
     m_height = m_profile.height;
+    KdenliveSettings::setProject_fps(m_fps);
     kDebug() << "KDEnnlive document, init timecode from path: " << path << ",  " << m_fps;
     if (m_fps == 30000.0 / 1001.0) m_timecode.setFormat(30, true);
     else m_timecode.setFormat((int) m_fps);
@@ -607,9 +609,9 @@ void KdenliveDoc::slotAddClipFile(const KUrl url, const QString group, const int
     setModified(true);
 }
 
-void KdenliveDoc::slotAddTextClipFile(const QString path, const QString group, const int groupId) {
+void KdenliveDoc::slotAddTextClipFile(const QString path, const QString xml, const QString group, const int groupId) {
     kDebug() << "/////////  DOCUM, ADD TXT CLP: " << path;
-    m_clipManager->slotAddTextClipFile(path, group, groupId);
+    m_clipManager->slotAddTextClipFile(path, xml, group, groupId);
     setModified(true);
 }
 
@@ -663,18 +665,23 @@ void KdenliveDoc::slotCreateTextClip(QString group, int groupId) {
         }
         QPixmap pix = dia_ui->renderedPixmap();
         pix.save(path + ".png");
-        dia_ui->saveTitle(path + ".kdenlivetitle");
-        slotAddTextClipFile(path, QString(), -1);
+        //dia_ui->saveTitle(path + ".kdenlivetitle");
+        slotAddTextClipFile(path, dia_ui->xml().toString(), QString(), -1);
     }
     delete dia_ui;
 }
 
 void KdenliveDoc::editTextClip(QString path, int id) {
-    TitleWidget *dia_ui = new TitleWidget(KUrl(path + ".kdenlivetitle"), path, m_render, kapp->activeWindow());
+    DocClipBase *clip = m_clipManager->getClipById(id);
+    if (!clip) return;
+    TitleWidget *dia_ui = new TitleWidget(KUrl()/*path + ".kdenlivetitle")*/, path, m_render, kapp->activeWindow());
+    QDomDocument doc;
+    doc.setContent(clip->getProperty("xmldata"));
+    dia_ui->setXml(doc);
     if (dia_ui->exec() == QDialog::Accepted) {
         QPixmap pix = dia_ui->renderedPixmap();
         pix.save(path + ".png");
-        dia_ui->saveTitle(path + ".kdenlivetitle");
+        //dia_ui->saveTitle(path + ".kdenlivetitle");
         //slotAddClipFile(KUrl("/tmp/kdenlivetitle.png"), QString(), -1);
         emit refreshClipThumbnail(id);
     }
index 1e758ad6028149ae4fac832e3bfce3fdf74b2eff..76f123b7ee7318591f44479e0008014ab77e009a 100644 (file)
@@ -67,7 +67,7 @@ Q_OBJECT public:
     void addFolder(const QString foldername, int clipId, bool edit);
     void deleteFolder(const QString foldername, int clipId);
     void slotAddClipFile(const KUrl url, const QString group, const int groupId = -1);
-    void slotAddTextClipFile(const QString path, const QString group, const int groupId = -1);
+    void slotAddTextClipFile(const QString path, const QString xml, const QString group, const int groupId = -1);
     void editTextClip(QString path, int id);
     void slotAddFolder(const QString folderName);
     void slotDeleteFolder(const QString folderName, const int id);
index 870b10b3524550df4b64bff784cb6e8a650cfef3..2c9d015b730dade28a8e97a56185b449b088b8e3 100644 (file)
@@ -1010,6 +1010,7 @@ void MainWindow::connectDocument(TrackView *trackView, KdenliveDoc *doc) { //cha
         disconnect(m_projectList, SIGNAL(clipSelected(DocClipBase *)), m_clipMonitor, SLOT(slotSetXml(DocClipBase *)));
         m_clipMonitor->stop();
     }
+    KdenliveSettings::setProject_fps(doc->fps());
     m_monitorManager->resetProfiles(doc->profilePath());
     m_projectList->setDocument(doc);
     connect(m_projectList, SIGNAL(clipSelected(DocClipBase *)), m_clipMonitor, SLOT(slotSetXml(DocClipBase *)));
index da80d71c3c3492ccc4d5949033e4753fa34e6198..55467170b2cbb1cf01e7e3f731a6cd28040949be 100644 (file)
@@ -51,7 +51,8 @@ ProjectItem::ProjectItem(QTreeWidget * parent, const QStringList & strings, QDom
             slotSetToolTip();
         }
 
-        if (m_clipType == COLOR || m_clipType == IMAGE) element.setAttribute("duration", MAXCLIPDURATION);
+        if (m_clipType == COLOR || m_clipType == IMAGE || m_clipType == SLIDESHOW || m_clipType == TEXT)
+            element.setAttribute("duration", MAXCLIPDURATION);
         else if (element.attribute("duration").isEmpty() && !element.attribute("out").isEmpty()) {
             element.setAttribute("duration", element.attribute("out").toInt() - element.attribute("in").toInt());
         }
@@ -213,12 +214,13 @@ void ProjectItem::slotSetToolTip() {
 
 void ProjectItem::setProperties(const QMap < QString, QString > &attributes, const QMap < QString, QString > &metadata) {
     if (attributes.contains("duration")) {
-        if (m_clipType == AUDIO || m_clipType == VIDEO || m_clipType == AV) m_clip->setProperty("duration", attributes["duration"]);
+        //if (m_clipType == AUDIO || m_clipType == VIDEO || m_clipType == AV)
+        //m_clip->setProperty("duration", attributes["duration"]);
         GenTime duration = GenTime(attributes["duration"].toInt(), KdenliveSettings::project_fps());
         setData(1, DurationRole, Timecode::getEasyTimecode(duration, KdenliveSettings::project_fps()));
         m_clip->setDuration(duration);
-        kDebug() << "//// LOADED CLIP, DURATION SET TO: " << duration.frames(KdenliveSettings::project_fps());
-    } else {
+        //kDebug() << "//// LOADED CLIP, DURATION SET TO: " << duration.frames(KdenliveSettings::project_fps());
+    } else  {
         // No duration known, use an arbitrary one until it is.
     }
 
index af0fddf35bd1001b46efb3cb10639c1e0bd11851..879a7bbc4c248dbf59317a91bb4e48a0b3867064 100644 (file)
@@ -311,11 +311,7 @@ void ProjectList::slotAddClip(QUrl givenUrl, QString group) {
     if (!m_commandStack) kDebug() << "!!!!!!!!!!!!!!!!  NO CMD STK";
     KUrl::List list;
     if (givenUrl.isEmpty()) {
-        KFileDialog d(KUrl("kfiledialog:///clipfolder"), "application/x-kdenlive application/flv application/vnd.rn-realmedia video/x-dv video/x-msvideo video/mpeg video/x-ms-wmv audio/mpeg audio/x-mp3 audio/x-wav application/ogg video/mp4 video/quicktime image/gif image/jpeg image/png image/x-bmp image/svg+xml image/tiff image/x-xcf-gimp image/x-vnd.adobe.photoshop image/x-pcx image/x-exr", this);
-        d.setFilter(d.currentFilter() + "\n*.m2t *.mts|HDV video\n*.dv|DV video");
-        if (d.exec() == QDialog::Accepted)
-            list = d.selectedUrls();
-        /*list = KFileDialog::getOpenUrls(KUrl("kfiledialog:///clipfolder"), "application/vnd.kde.kdenlive application/vnd.westley.scenelist application/flv application/vnd.rn-realmedia video/x-dv video/x-msvideo video/mpeg video/x-ms-wmv audio/mpeg audio/x-mp3 audio/x-wav application/ogg video/mp4 video/quicktime image/gif image/jpeg image/png image/x-bmp image/svg+xml image/tiff image/x-xcf-gimp image/x-vnd.adobe.photoshop image/x-pcx image/x-exr\n*.m2t *.mts|HDV video\n*.dv|DV video");*/
+        list = KFileDialog::getOpenUrls(KUrl("kfiledialog:///clipfolder"), "application/vnd.kde.kdenlive application/vnd.westley.scenelist application/flv application/vnd.rn-realmedia video/x-dv video/x-msvideo video/mpeg video/x-ms-wmv audio/mpeg audio/x-mp3 audio/x-wav application/ogg video/mp4 video/quicktime image/gif image/jpeg image/png image/x-bmp image/svg+xml image/tiff image/x-xcf-gimp image/x-vnd.adobe.photoshop image/x-pcx image/x-exr\n*.m2t *.mts|HDV video\n*.dv|DV video");
     } else list.append(givenUrl);
     if (list.isEmpty()) return;
     KUrl::List::Iterator it;
@@ -394,6 +390,7 @@ void ProjectList::slotAddSlideshowClip() {
     }
     delete dia;
 }
+
 void ProjectList::slotAddTitleClip() {
     QString group = QString();
     int groupId = -1;
index 6e0f198e2a0f6f082447437b2d116c2cb417c748..17593582989f38d814b1ab3355585dc9beadfded 100644 (file)
@@ -388,7 +388,7 @@ void Render::getFileProperties(const QDomElement &xml, int clipId) {
 
     Mlt::Producer *producer = getProducerById(QString::number(clipId));
     if (producer == NULL) {
-        if (url.isEmpty()) {
+        if (true /*url.isEmpty()*/) {
             QDomDocument doc;
             QDomElement westley = doc.createElement("westley");
             QDomElement play = doc.createElement("playlist");
index 5a5b005e9f4a2844f0a9d89c671cefefb46e4d1b..000ab0ac1d50ea23cd2831858b4dbe2033e8e0e7 100644 (file)
@@ -16,7 +16,6 @@
  ***************************************************************************/
 #include "titledocument.h"
 #include <QGraphicsScene>
-#include <QDomDocument>
 #include <QDomElement>
 #include <QGraphicsItem>
 #include <QGraphicsRectItem>
@@ -35,12 +34,9 @@ void TitleDocument::setScene(QGraphicsScene* _scene) {
     scene = _scene;
 }
 
-bool TitleDocument::saveDocument(const KUrl& url, QGraphicsPolygonItem* startv, QGraphicsPolygonItem* endv) {
+QDomDocument TitleDocument::xml(QGraphicsPolygonItem* startv, QGraphicsPolygonItem* endv) {
     QDomDocument doc;
 
-    if (!scene)
-        return false;
-
     QDomElement main = doc.createElement("kdenlivetitle");
     doc.appendChild(main);
 
@@ -128,6 +124,15 @@ bool TitleDocument::saveDocument(const KUrl& url, QGraphicsPolygonItem* startv,
     backgr.setAttribute("color", colorToString(color));
     main.appendChild(backgr);
 
+    return doc;
+}
+
+
+bool TitleDocument::saveDocument(const KUrl& url, QGraphicsPolygonItem* startv, QGraphicsPolygonItem* endv) {
+    if (!scene)
+        return false;
+
+    QDomDocument doc = xml(startv, endv);
     KTemporaryFile tmpfile;
     if (!tmpfile.open()) kWarning() << "/////  CANNOT CREATE TMP FILE in: " << tmpfile.fileName();
     QFile xmlf(tmpfile.fileName());
@@ -135,13 +140,12 @@ bool TitleDocument::saveDocument(const KUrl& url, QGraphicsPolygonItem* startv,
     xmlf.write(doc.toString().toAscii());
     xmlf.close();
     kDebug() << KIO::NetAccess::upload(tmpfile.fileName(), url, 0);
-
+    return true;
 }
 
-int TitleDocument::loadDocument(const KUrl& url , QGraphicsPolygonItem* startv, QGraphicsPolygonItem* endv) {
+int TitleDocument::loadDocument(const KUrl& url, QGraphicsPolygonItem* startv, QGraphicsPolygonItem* endv) {
     QString tmpfile;
     QDomDocument doc;
-    int maxZValue = 0;
     double aspect_ratio = 4.0 / 3.0;
     if (!scene)
         return -1;
@@ -154,72 +158,78 @@ int TitleDocument::loadDocument(const KUrl& url , QGraphicsPolygonItem* startv,
         } else
             return -1;
         KIO::NetAccess::removeTempFile(tmpfile);
-        QDomNodeList titles = doc.elementsByTagName("kdenlivetitle");
-        if (titles.size()) {
+        return loadFromXml(doc, startv, endv);
+    }
+}
 
-            QDomNodeList items = titles.item(0).childNodes();
-            for (int i = 0;i < items.count();i++) {
-                QGraphicsItem *gitem = NULL;
-                kDebug() << items.item(i).attributes().namedItem("type").nodeValue();
-                int zValue = items.item(i).attributes().namedItem("z-index").nodeValue().toInt();
-                if (zValue > -1000)
-                    if (items.item(i).attributes().namedItem("type").nodeValue() == "QGraphicsTextItem") {
-                        QFont font(items.item(i).namedItem("content").attributes().namedItem("font").nodeValue());
-                        font.setBold(items.item(i).namedItem("content").attributes().namedItem("font-bold").nodeValue().toInt());
-                        font.setItalic(items.item(i).namedItem("content").attributes().namedItem("font-italic").nodeValue().toInt());
-                        font.setUnderline(items.item(i).namedItem("content").attributes().namedItem("font-underline").nodeValue().toInt());
-                        font.setPointSize(items.item(i).namedItem("content").attributes().namedItem("font-size").nodeValue().toInt());
-                        QColor col(stringToColor(items.item(i).namedItem("content").attributes().namedItem("font-color").nodeValue()));
-                        QGraphicsTextItem *txt = scene->addText(items.item(i).namedItem("content").firstChild().nodeValue(), font);
-                        txt->setDefaultTextColor(col);
-                        txt->setTextInteractionFlags(Qt::NoTextInteraction);
-                        gitem = txt;
+int TitleDocument::loadFromXml(QDomDocument doc, QGraphicsPolygonItem* startv, QGraphicsPolygonItem* endv) {
+    QDomNodeList titles = doc.elementsByTagName("kdenlivetitle");
+    int maxZValue = 0;
+    if (titles.size()) {
+
+        QDomNodeList items = titles.item(0).childNodes();
+        for (int i = 0;i < items.count();i++) {
+            QGraphicsItem *gitem = NULL;
+            kDebug() << items.item(i).attributes().namedItem("type").nodeValue();
+            int zValue = items.item(i).attributes().namedItem("z-index").nodeValue().toInt();
+            if (zValue > -1000)
+                if (items.item(i).attributes().namedItem("type").nodeValue() == "QGraphicsTextItem") {
+                    QFont font(items.item(i).namedItem("content").attributes().namedItem("font").nodeValue());
+                    font.setBold(items.item(i).namedItem("content").attributes().namedItem("font-bold").nodeValue().toInt());
+                    font.setItalic(items.item(i).namedItem("content").attributes().namedItem("font-italic").nodeValue().toInt());
+                    font.setUnderline(items.item(i).namedItem("content").attributes().namedItem("font-underline").nodeValue().toInt());
+                    font.setPointSize(items.item(i).namedItem("content").attributes().namedItem("font-size").nodeValue().toInt());
+                    QColor col(stringToColor(items.item(i).namedItem("content").attributes().namedItem("font-color").nodeValue()));
+                    QGraphicsTextItem *txt = scene->addText(items.item(i).namedItem("content").firstChild().nodeValue(), font);
+                    txt->setDefaultTextColor(col);
+                    txt->setTextInteractionFlags(Qt::NoTextInteraction);
+                    gitem = txt;
+                } else
+                    if (items.item(i).attributes().namedItem("type").nodeValue() == "QGraphicsRectItem") {
+                        QString rect = items.item(i).namedItem("content").attributes().namedItem("rect").nodeValue();
+                        QString br_str = items.item(i).namedItem("content").attributes().namedItem("brushcolor").nodeValue();
+                        QString pen_str = items.item(i).namedItem("content").attributes().namedItem("pencolor").nodeValue();
+                        double penwidth = items.item(i).namedItem("content").attributes().namedItem("penwidth").nodeValue().toDouble();
+                        QGraphicsRectItem *rec = scene->addRect(stringToRect(rect), QPen(QBrush(stringToColor(pen_str)), penwidth), QBrush(stringToColor(br_str)));
+                        gitem = rec;
                     } else
-                        if (items.item(i).attributes().namedItem("type").nodeValue() == "QGraphicsRectItem") {
-                            QString rect = items.item(i).namedItem("content").attributes().namedItem("rect").nodeValue();
-                            QString br_str = items.item(i).namedItem("content").attributes().namedItem("brushcolor").nodeValue();
-                            QString pen_str = items.item(i).namedItem("content").attributes().namedItem("pencolor").nodeValue();
-                            double penwidth = items.item(i).namedItem("content").attributes().namedItem("penwidth").nodeValue().toDouble();
-                            QGraphicsRectItem *rec = scene->addRect(stringToRect(rect), QPen(QBrush(stringToColor(pen_str)), penwidth), QBrush(stringToColor(br_str)));
+                        if (items.item(i).attributes().namedItem("type").nodeValue() == "QGraphicsPixmapItem") {
+                            QString url = items.item(i).namedItem("content").attributes().namedItem("url").nodeValue();
+                            QPixmap pix(url);
+                            QGraphicsPixmapItem *rec = scene->addPixmap(pix);
+                            rec->setData(Qt::UserRole, url);
                             gitem = rec;
                         } else
-                            if (items.item(i).attributes().namedItem("type").nodeValue() == "QGraphicsPixmapItem") {
+                            if (items.item(i).attributes().namedItem("type").nodeValue() == "QGraphicsSvgItem") {
                                 QString url = items.item(i).namedItem("content").attributes().namedItem("url").nodeValue();
-                                QPixmap pix(url);
-                                QGraphicsPixmapItem *rec = scene->addPixmap(pix);
+                                QGraphicsSvgItem *rec = new QGraphicsSvgItem(url);
+                                scene->addItem(rec);
                                 rec->setData(Qt::UserRole, url);
                                 gitem = rec;
-                            } else
-                                if (items.item(i).attributes().namedItem("type").nodeValue() == "QGraphicsSvgItem") {
-                                    QString url = items.item(i).namedItem("content").attributes().namedItem("url").nodeValue();
-                                    QGraphicsSvgItem *rec = new QGraphicsSvgItem(url);
-                                    scene->addItem(rec);
-                                    rec->setData(Qt::UserRole, url);
-                                    gitem = rec;
-                                }
-                //pos and transform
-                if (gitem) {
-                    QPointF p(items.item(i).namedItem("position").attributes().namedItem("x").nodeValue().toDouble(),
-                              items.item(i).namedItem("position").attributes().namedItem("y").nodeValue().toDouble());
-                    gitem->setPos(p);
-                    gitem->setTransform(stringToTransform(items.item(i).namedItem("position").firstChild().firstChild().nodeValue()));
-                    int zValue = items.item(i).attributes().namedItem("z-index").nodeValue().toInt();
-                    if (zValue > maxZValue) maxZValue = zValue;
-                    gitem->setZValue(zValue);
-                    gitem->setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
-                }
-                if (items.item(i).nodeName() == "background") {
-                    kDebug() << items.item(i).attributes().namedItem("color").nodeValue();
-                    QColor color = QColor(stringToColor(items.item(i).attributes().namedItem("color").nodeValue()));
-                    //color.setAlpha(items.item(i).attributes().namedItem("alpha").nodeValue().toInt());
-                    QList<QGraphicsItem *> items = scene->items();
-                    for (int i = 0; i < items.size(); i++) {
-                        if (items.at(i)->zValue() == -1100) {
-                            ((QGraphicsRectItem *)items.at(i))->setBrush(QBrush(color));
-                            break;
-                        }
+                            }
+            //pos and transform
+            if (gitem) {
+                QPointF p(items.item(i).namedItem("position").attributes().namedItem("x").nodeValue().toDouble(),
+                          items.item(i).namedItem("position").attributes().namedItem("y").nodeValue().toDouble());
+                gitem->setPos(p);
+                gitem->setTransform(stringToTransform(items.item(i).namedItem("position").firstChild().firstChild().nodeValue()));
+                int zValue = items.item(i).attributes().namedItem("z-index").nodeValue().toInt();
+                if (zValue > maxZValue) maxZValue = zValue;
+                gitem->setZValue(zValue);
+                gitem->setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
+            }
+            if (items.item(i).nodeName() == "background") {
+                kDebug() << items.item(i).attributes().namedItem("color").nodeValue();
+                QColor color = QColor(stringToColor(items.item(i).attributes().namedItem("color").nodeValue()));
+                //color.setAlpha(items.item(i).attributes().namedItem("alpha").nodeValue().toInt());
+                QList<QGraphicsItem *> items = scene->items();
+                for (int i = 0; i < items.size(); i++) {
+                    if (items.at(i)->zValue() == -1100) {
+                        ((QGraphicsRectItem *)items.at(i))->setBrush(QBrush(color));
+                        break;
                     }
-                } /*else if (items.item(i).nodeName() == "startviewport" && startv) {
+                }
+            } /*else if (items.item(i).nodeName() == "startviewport" && startv) {
                     QPointF p(items.item(i).attributes().namedItem("x").nodeValue().toDouble(), items.item(i).attributes().namedItem("y").nodeValue().toDouble());
                     double width = items.item(i).attributes().namedItem("size").nodeValue().toDouble();
                     QRectF rect(-width, -width / aspect_ratio, width*2.0, width / aspect_ratio*2.0);
@@ -234,7 +244,6 @@ int TitleDocument::loadDocument(const KUrl& url , QGraphicsPolygonItem* startv,
                     endv->setPolygon(rect);
                     endv->setPos(p);
                 }*/
-            }
         }
     }
     return maxZValue;
index 5fcc3d0350d794684aeab2e358746f8e309ef479..8c4fd53cf3c7d2a840a7df78db398c1feacc9b06 100644 (file)
@@ -16,6 +16,9 @@
  ***************************************************************************/
 #ifndef TITLEDOCUMENT_H
 #define TITLEDOCUMENT_H
+
+#include <QDomDocument>
+
 #include <KUrl>
 
 class QGraphicsScene;
@@ -28,6 +31,9 @@ public:
     void setScene(QGraphicsScene* scene);
     bool saveDocument(const KUrl& url, QGraphicsPolygonItem* startv, QGraphicsPolygonItem* endv);
     int loadDocument(const KUrl& url, QGraphicsPolygonItem* startv, QGraphicsPolygonItem* endv);
+    QDomDocument xml(QGraphicsPolygonItem* startv, QGraphicsPolygonItem* endv);
+    int loadFromXml(QDomDocument doc, QGraphicsPolygonItem* startv, QGraphicsPolygonItem* endv);
+
 private:
     QString colorToString(const QColor&);
     QString rectFToString(const QRectF&);
index f4cbb5940272387776eb700681ff37771065fac1..40d8e10d0128419ae3c930e43bdb184246784451 100644 (file)
@@ -199,6 +199,7 @@ void TitleWidget::slotRectTool() {
     m_scene->setTool(TITLE_RECTANGLE);
     m_buttonText->setChecked(false);
     m_buttonCursor->setChecked(false);
+    m_buttonRect->setChecked(true);
 }
 
 void TitleWidget::slotSelectTool() {
@@ -611,6 +612,15 @@ void TitleWidget::saveTitle(KUrl url) {
     if (!url.isEmpty()) m_titledocument.saveDocument(url, startViewport, endViewport);
 }
 
+QDomDocument TitleWidget::xml() {
+    return m_titledocument.xml(startViewport, endViewport);
+}
+
+void TitleWidget::setXml(QDomDocument doc) {
+    m_titledocument.loadFromXml(doc, startViewport, endViewport);
+    slotSelectTool();
+}
+
 QPixmap TitleWidget::renderedPixmap() {
     QPixmap pix(m_frameWidth, m_frameHeight);
     pix.fill(Qt::transparent);
index 1fcc6de504a65ec5759acf7e161779ce95f28bd6..9bd79ed519beee1dbb5cc7321fc0e2a697d6c7e5 100644 (file)
@@ -45,6 +45,8 @@ class TitleWidget : public QDialog , public Ui::TitleWidget_UI {
     Q_OBJECT
 public:
     TitleWidget(KUrl url, QString projectPath, Render *render, QWidget *parent = 0);
+    QDomDocument xml();
+    void setXml(QDomDocument doc);
 
 protected:
     virtual void resizeEvent(QResizeEvent * event);