From: Jean-Baptiste Mardelle Date: Wed, 26 Dec 2012 08:10:19 +0000 (+0100) Subject: Fix title duration, keeping compatibility with Kdenlive 0.92 X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=1a57025e45748243a7a6075f5df0be47f8ffbce2;p=kdenlive Fix title duration, keeping compatibility with Kdenlive 0.92 In kdelivetitle format, currently the "out" property means duration, so we will slowly deprecate the "out" property in favor of the more correct "duration" attribute. --- diff --git a/src/clipmanager.cpp b/src/clipmanager.cpp index 55a947f8..8eea860b 100644 --- a/src/clipmanager.cpp +++ b/src/clipmanager.cpp @@ -738,16 +738,22 @@ void ClipManager::slotAddTextTemplateClip(QString titleName, const KUrl &path, c prod.setAttribute("transparency", "1"); prod.setAttribute("in", "0"); - int out = 0; + int duration = 0; QDomDocument titledoc; QFile txtfile(path.path()); if (txtfile.open(QIODevice::ReadOnly) && titledoc.setContent(&txtfile)) { txtfile.close(); - out = titledoc.documentElement().attribute("out").toInt(); + if (titledoc.documentElement().hasAttribute("duration")) { + duration = titledoc.documentElement().attribute("duration").toInt(); + } + else { + // keep some time for backwards compatibility - 26/12/12 + duration = titledoc.documentElement().attribute("out").toInt(); + } } else txtfile.close(); - if (out == 0) out = m_doc->getFramePos(KdenliveSettings::image_duration()); - prod.setAttribute("out", out); + if (duration == 0) duration = m_doc->getFramePos(KdenliveSettings::title_duration()); + prod.setAttribute("out", duration - 1); AddClipCommand *command = new AddClipCommand(m_doc, doc.documentElement(), QString::number(id), true); m_doc->commandStack()->push(command); diff --git a/src/titledocument.cpp b/src/titledocument.cpp index 6ab7d19e..e9404b73 100644 --- a/src/titledocument.cpp +++ b/src/titledocument.cpp @@ -284,13 +284,15 @@ QColor TitleDocument::getBackgroundColor() } -bool TitleDocument::saveDocument(const KUrl& url, QGraphicsRectItem* startv, QGraphicsRectItem* endv, int out, bool embed) +bool TitleDocument::saveDocument(const KUrl& url, QGraphicsRectItem* startv, QGraphicsRectItem* endv, int duration, bool embed) { if (!m_scene) return false; QDomDocument doc = xml(startv, endv, embed); - doc.documentElement().setAttribute("out", out); + doc.documentElement().setAttribute("duration", duration); + // keep some time for backwards compatibility (opening projects with older versions) - 26/12/12 + doc.documentElement().setAttribute("out", duration); KTemporaryFile tmpfile; if (!tmpfile.open()) { kWarning() << "///// CANNOT CREATE TMP FILE in: " << tmpfile.fileName(); @@ -308,7 +310,7 @@ bool TitleDocument::saveDocument(const KUrl& url, QGraphicsRectItem* startv, QGr return KIO::NetAccess::upload(tmpfile.fileName(), url, 0); } -int TitleDocument::loadFromXml(QDomDocument doc, QGraphicsRectItem* startv, QGraphicsRectItem* endv, int *out, const QString& projectpath) +int TitleDocument::loadFromXml(QDomDocument doc, QGraphicsRectItem* startv, QGraphicsRectItem* endv, int *duration, const QString& projectpath) { m_projectPath = projectpath; QDomNodeList titles = doc.elementsByTagName("kdenlivetitle"); @@ -334,10 +336,12 @@ int TitleDocument::loadFromXml(QDomDocument doc, QGraphicsRectItem* startv, QGra } } //TODO: get default title duration instead of hardcoded one + if (doc.documentElement().hasAttribute("duration")) + *duration = doc.documentElement().attribute("duration").toInt(); if (doc.documentElement().hasAttribute("out")) - *out = doc.documentElement().attribute("out").toInt(); + *duration = doc.documentElement().attribute("out").toInt(); else - *out = 125; + *duration = 125; int maxZValue = 0; if (titles.size()) { diff --git a/src/titledocument.h b/src/titledocument.h index a00c8b7d..8c30827c 100644 --- a/src/titledocument.h +++ b/src/titledocument.h @@ -34,9 +34,9 @@ class TitleDocument public: TitleDocument(); void setScene(QGraphicsScene* scene, int width, int height); - bool saveDocument(const KUrl& url, QGraphicsRectItem* startv, QGraphicsRectItem* endv, int out, bool embed_images = false); + bool saveDocument(const KUrl& url, QGraphicsRectItem* startv, QGraphicsRectItem* endv, int duration, bool embed_images = false); QDomDocument xml(QGraphicsRectItem* startv, QGraphicsRectItem* endv, bool embed_images = false); - int loadFromXml(QDomDocument doc, QGraphicsRectItem* startv, QGraphicsRectItem* endv, int *out, const QString& projectpath = ""); + int loadFromXml(QDomDocument doc, QGraphicsRectItem* startv, QGraphicsRectItem* endv, int *duration, const QString& projectpath = QString()); /** \brief Get the background color (incl. alpha) from the document, if possibly * \returns The background color of the document, inclusive alpha. If none found, returns (0,0,0,0) */ QColor getBackgroundColor(); diff --git a/src/titlewidget.cpp b/src/titlewidget.cpp index bc2e0309..b769fdf6 100644 --- a/src/titlewidget.cpp +++ b/src/titlewidget.cpp @@ -1875,7 +1875,7 @@ void TitleWidget::saveTitle(KUrl url) delete fs; } if (!url.isEmpty()) { - if (m_titledocument.saveDocument(url, m_startViewport, m_endViewport, m_tc.getFrameCount(title_duration->text()) - 1, embed_image) == false) + if (m_titledocument.saveDocument(url, m_startViewport, m_endViewport, m_tc.getFrameCount(title_duration->text()), embed_image) == false) KMessageBox::error(this, i18n("Cannot write to file %1", url.path())); } } @@ -1883,7 +1883,7 @@ void TitleWidget::saveTitle(KUrl url) QDomDocument TitleWidget::xml() { QDomDocument doc = m_titledocument.xml(m_startViewport, m_endViewport); - doc.documentElement().setAttribute("out", m_tc.getFrameCount(title_duration->text()) - 1); + doc.documentElement().setAttribute("duration", m_tc.getFrameCount(title_duration->text())); return doc; } @@ -1894,10 +1894,10 @@ int TitleWidget::duration() const void TitleWidget::setXml(QDomDocument doc) { - int out; - m_count = m_titledocument.loadFromXml(doc, m_startViewport, m_endViewport, &out, m_projectTitlePath); + int duration; + m_count = m_titledocument.loadFromXml(doc, m_startViewport, m_endViewport, &duration, m_projectTitlePath); adjustFrameSize(); - title_duration->setText(m_tc.getTimecode(GenTime(out + 1, m_render->fps()))); + title_duration->setText(m_tc.getTimecode(GenTime(duration, m_render->fps()))); /*if (doc.documentElement().hasAttribute("out")) { GenTime duration = GenTime(doc.documentElement().attribute("out").toDouble() / 1000.0); title_duration->setText(m_tc.getTimecode(duration));