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.
prod.setAttribute("transparency", "1");
prod.setAttribute("in", "0");
prod.setAttribute("transparency", "1");
prod.setAttribute("in", "0");
QDomDocument titledoc;
QFile txtfile(path.path());
if (txtfile.open(QIODevice::ReadOnly) && titledoc.setContent(&txtfile)) {
txtfile.close();
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();
+ }
- 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);
AddClipCommand *command = new AddClipCommand(m_doc, doc.documentElement(), QString::number(id), true);
m_doc->commandStack()->push(command);
-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);
{
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();
KTemporaryFile tmpfile;
if (!tmpfile.open()) {
kWarning() << "///// CANNOT CREATE TMP FILE in: " << tmpfile.fileName();
return KIO::NetAccess::upload(tmpfile.fileName(), url, 0);
}
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");
{
m_projectPath = projectpath;
QDomNodeList titles = doc.elementsByTagName("kdenlivetitle");
}
}
//TODO: get default title duration instead of hardcoded one
}
}
//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"))
if (doc.documentElement().hasAttribute("out"))
- *out = doc.documentElement().attribute("out").toInt();
+ *duration = doc.documentElement().attribute("out").toInt();
int maxZValue = 0;
if (titles.size()) {
int maxZValue = 0;
if (titles.size()) {
public:
TitleDocument();
void setScene(QGraphicsScene* scene, int width, int height);
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);
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();
/** \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();
delete fs;
}
if (!url.isEmpty()) {
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()));
}
}
KMessageBox::error(this, i18n("Cannot write to file %1", url.path()));
}
}
QDomDocument TitleWidget::xml()
{
QDomDocument doc = m_titledocument.xml(m_startViewport, m_endViewport);
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()));
void TitleWidget::setXml(QDomDocument doc)
{
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);
- 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));
/*if (doc.documentElement().hasAttribute("out")) {
GenTime duration = GenTime(doc.documentElement().attribute("out").toDouble() / 1000.0);
title_duration->setText(m_tc.getTimecode(duration));