From d9df79256acce77ddf748676bc95d159cd4ea75f Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Mardelle Date: Thu, 17 Jul 2008 00:41:52 +0000 Subject: [PATCH] correctly load / save text clips svn path=/branches/KDE4/; revision=2321 --- src/clipmanager.cpp | 3 +- src/clipmanager.h | 2 +- src/docclipbase.cpp | 4 +- src/docclipbase.h | 1 - src/kdenlivedoc.cpp | 19 ++++-- src/kdenlivedoc.h | 2 +- src/mainwindow.cpp | 1 + src/projectitem.cpp | 10 +-- src/projectlist.cpp | 7 +-- src/renderer.cpp | 2 +- src/titledocument.cpp | 143 ++++++++++++++++++++++-------------------- src/titledocument.h | 6 ++ src/titlewidget.cpp | 10 +++ src/titlewidget.h | 2 + 14 files changed, 122 insertions(+), 90 deletions(-) diff --git a/src/clipmanager.cpp b/src/clipmanager.cpp index 02d34d82..67691ff2 100644 --- a/src/clipmanager.cpp +++ b/src/clipmanager.cpp @@ -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()) { diff --git a/src/clipmanager.h b/src/clipmanager.h index 164d49a6..48b7c545 100644 --- a/src/clipmanager.h +++ b/src/clipmanager.h @@ -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); diff --git a/src/docclipbase.cpp b/src/docclipbase.cpp index 467fb9a2..a380b8fa 100644 --- a/src/docclipbase.cpp +++ b/src/docclipbase.cpp @@ -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; } diff --git a/src/docclipbase.h b/src/docclipbase.h index c85e65a2..634a47b4 100644 --- a/src/docclipbase.h +++ b/src/docclipbase.h @@ -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; diff --git a/src/kdenlivedoc.cpp b/src/kdenlivedoc.cpp index 8048bd6c..1fb0f1b5 100644 --- a/src/kdenlivedoc.cpp +++ b/src/kdenlivedoc.cpp @@ -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); } diff --git a/src/kdenlivedoc.h b/src/kdenlivedoc.h index 1e758ad6..76f123b7 100644 --- a/src/kdenlivedoc.h +++ b/src/kdenlivedoc.h @@ -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); diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 870b10b3..2c9d015b 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -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 *))); diff --git a/src/projectitem.cpp b/src/projectitem.cpp index da80d71c..55467170 100644 --- a/src/projectitem.cpp +++ b/src/projectitem.cpp @@ -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. } diff --git a/src/projectlist.cpp b/src/projectlist.cpp index af0fddf3..879a7bbc 100644 --- a/src/projectlist.cpp +++ b/src/projectlist.cpp @@ -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; diff --git a/src/renderer.cpp b/src/renderer.cpp index 6e0f198e..17593582 100644 --- a/src/renderer.cpp +++ b/src/renderer.cpp @@ -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"); diff --git a/src/titledocument.cpp b/src/titledocument.cpp index 5a5b005e..000ab0ac 100644 --- a/src/titledocument.cpp +++ b/src/titledocument.cpp @@ -16,7 +16,6 @@ ***************************************************************************/ #include "titledocument.h" #include -#include #include #include #include @@ -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 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 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; diff --git a/src/titledocument.h b/src/titledocument.h index 5fcc3d03..8c4fd53c 100644 --- a/src/titledocument.h +++ b/src/titledocument.h @@ -16,6 +16,9 @@ ***************************************************************************/ #ifndef TITLEDOCUMENT_H #define TITLEDOCUMENT_H + +#include + #include 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&); diff --git a/src/titlewidget.cpp b/src/titlewidget.cpp index f4cbb594..40d8e10d 100644 --- a/src/titlewidget.cpp +++ b/src/titlewidget.cpp @@ -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); diff --git a/src/titlewidget.h b/src/titlewidget.h index 1fcc6de5..9bd79ed5 100644 --- a/src/titlewidget.h +++ b/src/titlewidget.h @@ -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); -- 2.39.2