transition.setAttribute("in", "0");
//TODO: Make audio mix last for all project duration
transition.setAttribute("out", "15000");
- transition.setAttribute("a_track", QString::number(1));
- transition.setAttribute("b_track", QString::number(i));
- transition.setAttribute("mlt_service", "mix");
- transition.setAttribute("combine", "1");
- transition.setAttribute("internal_added", "237");
+
+ QDomElement property = m_document.createElement("property");
+ property.setAttribute("name", "a_track");
+ QDomText value = m_document.createTextNode(QString::number(1));
+ property.appendChild(value);
+ transition.appendChild(property);
+
+ property = m_document.createElement("property");
+ property.setAttribute("name", "b_track");
+ value = m_document.createTextNode(QString::number(i));
+ property.appendChild(value);
+ transition.appendChild(property);
+
+ property = m_document.createElement("property");
+ property.setAttribute("name", "mlt_service");
+ value = m_document.createTextNode("mix");
+ property.appendChild(value);
+ transition.appendChild(property);
+
+ property = m_document.createElement("property");
+ property.setAttribute("name", "combine");
+ value = m_document.createTextNode("1");
+ property.appendChild(value);
+ transition.appendChild(property);
+
+ property = m_document.createElement("property");
+ property.setAttribute("name", "internal_added");
+ value = m_document.createTextNode("237");
+ property.appendChild(value);
+ transition.appendChild(property);
tractor.appendChild(transition);
}
westley.appendChild(tractor);
disconnect(effectStack, SIGNAL(updateClipEffect(ClipItem*, QDomElement, QDomElement)), m_activeTimeline->projectView(), SLOT(slotUpdateClipEffect(ClipItem*, QDomElement, QDomElement)));
disconnect(effectStack, SIGNAL(removeEffect(ClipItem*, QDomElement)), m_activeTimeline->projectView(), SLOT(slotDeleteEffect(ClipItem*, QDomElement)));
disconnect(effectStack, SIGNAL(changeEffectState(ClipItem*, QDomElement, bool)), m_activeTimeline->projectView(), SLOT(slotChangeEffectState(ClipItem*, QDomElement, bool)));
- disconnect(effectStack, SIGNAL(changeEffectPosition(ClipItem*, int, int)), trackView->projectView(), SLOT(slotChangeEffectPosition(ClipItem*, int, int)));
+ disconnect(effectStack, SIGNAL(changeEffectPosition(ClipItem*, int, int)), trackView->projectView(), SLOT(slotChangeEffectPosition(ClipItem*, int, int)));
disconnect(effectStack, SIGNAL(refreshEffectStack(ClipItem*)), m_activeTimeline->projectView(), SLOT(slotRefreshEffects(ClipItem*)));
disconnect(transitionConfig, SIGNAL(transitionUpdated(Transition *, QDomElement)), trackView->projectView() , SLOT(slotTransitionUpdated(Transition *, QDomElement)));
disconnect(m_activeTimeline->projectView(), SIGNAL(activateDocumentMonitor()), m_projectMonitor, SLOT(activateMonitor()));
#include "headertrack.h"
#include "trackview.h"
#include "clipitem.h"
+#include "transition.h"
#include "kdenlivesettings.h"
#include "clipmanager.h"
#include "customruler.h"
if (!props.isNull()) {
cursorPos = props.toElement().attribute("timeline_position").toInt();
}
+
+ // parse project tracks
QDomNodeList tracks = doc.elementsByTagName("track");
QDomNodeList playlists = doc.elementsByTagName("playlist");
int duration = 300;
if (trackduration > duration) duration = trackduration;
} else pos--;
}
+
+
+ // parse transitions
+ QDomNodeList transitions = doc.elementsByTagName("transition");
+ int projectTransitions = transitions.count();
+ kDebug() << "//////////// TIMELINE FOUND: " << projectTransitions << " transitions";
+ for (int i = 0; i < projectTransitions; i++) {
+ e = transitions.item(i).toElement();
+ QDomNodeList transitionparams = e.childNodes();
+ bool transitionAdd = true;
+ int a_track = 0;
+ int b_track = 0;
+ QString mlt_service;
+ for (int k = 0; k < transitionparams.count(); k++) {
+ p = transitionparams.item(k).toElement();
+ if (!p.isNull()) {
+ // do not add audio mixing transitions
+ if (p.attribute("name") == "internal_added" && p.text() == "237") {
+ transitionAdd = false;
+ kDebug() << "// TRANSITRION " << i << " IS NOT VALID (INTERN ADDED)";
+ break;
+ } else if (p.attribute("name") == "a_track") a_track = p.text().toInt();
+ else if (p.attribute("name") == "b_track") b_track = m_projectTracks - 1 - p.text().toInt();
+ else if (p.attribute("name") == "mlt_service") mlt_service = p.text().toInt();
+ }
+ }
+ if (transitionAdd) {
+ // Transition should be added to the scene
+ ItemInfo transitionInfo;
+ transitionInfo.startPos = GenTime(e.attribute("in").toInt(), m_doc->fps());
+ transitionInfo.endPos = GenTime(e.attribute("out").toInt(), m_doc->fps());
+ transitionInfo.track = b_track;
+ Transition *tr = new Transition(transitionInfo, a_track, m_scale, m_doc->fps(), QDomElement());
+ m_scene->addItem(tr);
+ }
+ }
+
+
m_trackview->setDuration(duration);
slotRebuildTrackHeaders();
//m_trackview->setCursorPos(cursorPos);
if (elem.tagName() == "blank") {
position += elem.attribute("length").toInt();
} else if (elem.tagName() == "entry") {
- // Found a clip
+ // Found a clip
int in = elem.attribute("in").toInt();
int id = elem.attribute("producer").toInt();
DocClipBase *clip = m_doc->clipManager()->getClipById(id);
m_scene->addItem(item);
position += out;
- // parse clip effects
- for (QDomNode n2 = elem.firstChild(); !n2.isNull(); n2 = n2.nextSibling()) {
- QDomElement effect = n2.toElement();
- if (effect.tagName() == "filter") {
- // add effect to clip
- QString effecttag;
- QString effectindex;
- // Get effect tag & index
- for (QDomNode n3 = effect.firstChild(); !n3.isNull(); n3 = n3.nextSibling()) {
- // parse effect parameters
- QDomElement effectparam = n3.toElement();
- if (effectparam.attribute("name") == "tag") {
- effecttag = effectparam.text();
- }
- if (effectparam.attribute("name") == "kdenlive_ix") {
- effectindex = effectparam.text();
- }
- }
-
- // get effect standard tags
- QDomElement clipeffect = MainWindow::videoEffects.getEffectByTag(effecttag);
- clipeffect.setAttribute("kdenlive_ix",effectindex);
- QDomNodeList clipeffectparams = clipeffect.childNodes();
-
- // adjust effect parameters
- for (QDomNode n3 = effect.firstChild(); !n3.isNull(); n3 = n3.nextSibling()) {
- // parse effect parameters
- QDomElement effectparam = n3.toElement();
- QString paramname = effectparam.attribute("name");
- QString paramvalue = effectparam.text();
-
- // try to find this parameter in the effect xml
- QDomElement e;
- for (int k = 0; k < clipeffectparams.count(); k++) {
- e = clipeffectparams.item(k).toElement();
- if (!e.isNull() && e.tagName() == "parameter" && e.attribute("name") == paramname) {
- e.setAttribute("value", paramvalue);
- break;
- }
- }
- }
- item->addEffect(clipeffect, false);
- }
- }
+ // parse clip effects
+ for (QDomNode n2 = elem.firstChild(); !n2.isNull(); n2 = n2.nextSibling()) {
+ QDomElement effect = n2.toElement();
+ if (effect.tagName() == "filter") {
+ // add effect to clip
+ QString effecttag;
+ QString effectindex;
+ // Get effect tag & index
+ for (QDomNode n3 = effect.firstChild(); !n3.isNull(); n3 = n3.nextSibling()) {
+ // parse effect parameters
+ QDomElement effectparam = n3.toElement();
+ if (effectparam.attribute("name") == "tag") {
+ effecttag = effectparam.text();
+ }
+ if (effectparam.attribute("name") == "kdenlive_ix") {
+ effectindex = effectparam.text();
+ }
+ }
+
+ // get effect standard tags
+ QDomElement clipeffect = MainWindow::videoEffects.getEffectByTag(effecttag);
+ clipeffect.setAttribute("kdenlive_ix", effectindex);
+ QDomNodeList clipeffectparams = clipeffect.childNodes();
+
+ // adjust effect parameters
+ for (QDomNode n3 = effect.firstChild(); !n3.isNull(); n3 = n3.nextSibling()) {
+ // parse effect parameters
+ QDomElement effectparam = n3.toElement();
+ QString paramname = effectparam.attribute("name");
+ QString paramvalue = effectparam.text();
+
+ // try to find this parameter in the effect xml
+ QDomElement e;
+ for (int k = 0; k < clipeffectparams.count(); k++) {
+ e = clipeffectparams.item(k).toElement();
+ if (!e.isNull() && e.tagName() == "parameter" && e.attribute("name") == paramname) {
+ e.setAttribute("value", paramvalue);
+ break;
+ }
+ }
+ }
+ item->addEffect(clipeffect, false);
+ }
+ }
} else kWarning() << "CANNOT INSERT CLIP " << id;
//m_clipList.append(clip);