update(boundingRect());
}
-QMap <QString, QString> ClipItem::addEffect(QDomElement effect) {
+QMap <QString, QString> ClipItem::addEffect(QDomElement effect, bool animate) {
QMap <QString, QString> effectParams;
+ /*QDomDocument doc;
+ doc.appendChild(doc.importNode(effect, true));
+ kDebug() << "/////// CLIPÂ ADD EFFECT: "<< doc.toString();*/
m_effectList.append(effect);
effectParams["tag"] = effect.attribute("tag");
effectParams["kdenlive_ix"] = effect.attribute("kdenlive_ix");
effectParams[e.attribute("name")] = QString::number(effectParams[e.attribute("name")].toDouble() / e.attribute("factor").toDouble());
}
}
- flashClip();
+ if (animate) flashClip();
update(boundingRect());
return effectParams;
}
/** Give a string list of the clip's effect names */
QStringList effectNames();
/** Add an effect to the clip and return the parameters that will be passed to Mlt */
- QMap <QString, QString> addEffect(QDomElement effect);
+ QMap <QString, QString> addEffect(QDomElement effect, bool animate = true);
/** Get the effect parameters that will be passed to Mlt */
QMap <QString, QString> getEffectArgs(QDomElement effect);
/** Delete effect with id index */
return filter;
}
-QDomElement EffectsList::getEffectByName(const QString & name) {
+QDomElement EffectsList::getEffectByName(const QString & name) const {
QString effectName;
for (int i = 0; i < this->size(); ++i) {
QDomElement effect = this->at(i);
return QDomElement();
}
+QDomElement EffectsList::getEffectByTag(const QString & tag) const {
+ QString effectName;
+ for (int i = 0; i < this->size(); ++i) {
+ QDomElement effect = this->at(i);
+ if (effect.attribute("tag") == tag) {
+ QDomNodeList params = effect.elementsByTagName("parameter");
+ for (int i = 0; i < params.count(); i++) {
+ QDomElement e = params.item(i).toElement();
+ e.setAttribute("value", e.attribute("default"));
+ }
+ return effect;
+ }
+ }
+
+ return QDomElement();
+}
+
QStringList EffectsList::effectNames() {
QStringList list;
for (int i = 0; i < this->size(); ++i) {
#include "clipmanager.h"
#include "customruler.h"
#include "kdenlivedoc.h"
+#include "mainwindow.h"
#include "customtrackview.h"
TrackView::TrackView(KdenliveDoc *doc, QWidget *parent)
int TrackView::slotAddProjectTrack(int ix, QDomElement xml, bool videotrack) {
TrackInfo info;
+
if (videotrack) {
info.type = VIDEOTRACK;
info.isMute = false;
int trackTop = KdenliveSettings::trackheight() * ix;
// parse track
int position = 0;
-
for (QDomNode n = xml.firstChild(); !n.isNull(); n = n.nextSibling()) {
QDomElement elem = n.toElement();
if (elem.tagName() == "blank") {
position += elem.attribute("length").toInt();
} else if (elem.tagName() == "entry") {
+ // Found a clip
int in = elem.attribute("in").toInt();
int id = elem.attribute("producer").toInt();
DocClipBase *clip = m_doc->clipManager()->getClipById(id);
ClipItem *item = new ClipItem(clip, clipinfo, m_scale, m_doc->fps());
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);
+ }
+ }
+
} else kWarning() << "CANNOTÂ INSERT CLIP " << id;
//m_clipList.append(clip);
}