]> git.sesse.net Git - kdenlive/blobdiff - src/effectslist.cpp
Copy effects when cutting or pasting a clip
[kdenlive] / src / effectslist.cpp
index 9d309955a382cc14d31a3815ac67d44ac7dc8b49..92ea77c33013f3e67d66f02a2299806ff4cfdf9a 100644 (file)
@@ -36,7 +36,7 @@ QMap <QString, QString> EffectsList::effect(const QString & name) {
         effect =  this->at(i);
         QDomNode namenode = effect.elementsByTagName("name").item(0);
         if (!namenode.isNull()) {
-            effectName = i18n(qstrdup(namenode.toElement().text().toUtf8()));
+            effectName = i18n(namenode.toElement().text().toUtf8().data());
             if (name == effectName) break;
         }
     }
@@ -45,12 +45,13 @@ QMap <QString, QString> EffectsList::effect(const QString & name) {
     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);
         QDomNode namenode = effect.elementsByTagName("name").item(0);
-        if (!namenode.isNull()) effectName = i18n(qstrdup(namenode.toElement().text().toUtf8()));
+        if (!namenode.isNull()) effectName = i18n(namenode.toElement().text().toUtf8().data());
         if (name == effectName) {
             QDomNodeList params = effect.elementsByTagName("parameter");
             for (int i = 0; i < params.count(); i++) {
@@ -64,12 +65,41 @@ QDomElement EffectsList::getEffectByName(const QString & name) {
     return QDomElement();
 }
 
+QDomElement EffectsList::getEffectByTag(const QString & tag, const QString & id) const {
+
+    if (!id.isEmpty()) for (int i = 0; i < this->size(); ++i) {
+            QDomElement effect =  this->at(i);
+            if (effect.attribute("id") == id) {
+                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;
+            }
+        }
+
+    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) {
         QDomElement effect =  this->at(i);
         QDomNode namenode = effect.elementsByTagName("name").item(0);
-        if (!namenode.isNull()) list.append(i18n(qstrdup(namenode.toElement().text().toUtf8())));
+        if (!namenode.isNull()) list.append(i18n(namenode.toElement().text().toUtf8().data()));
     }
     return list;
 }
@@ -78,9 +108,30 @@ QString EffectsList::getInfo(QString effectName) {
     QString info;
     QDomElement effect = getEffectByName(effectName);
     QDomNode namenode = effect.elementsByTagName("description").item(0);
-    if (!namenode.isNull()) info = i18n(qstrdup(namenode.toElement().text().toUtf8()));
+    if (!namenode.isNull()) info = i18n(namenode.toElement().text().toUtf8().data());
     namenode = effect.elementsByTagName("author").item(0);
-    if (!namenode.isNull()) info.append(i18n("<br><b>Author:</b> ") + i18n(qstrdup(namenode.toElement().text().toUtf8())));
+    if (!namenode.isNull()) info.append(i18n("<br><b>Author:</b> ") + i18n(namenode.toElement().text().toUtf8().data()));
     return info;
 }
 
+bool EffectsList::hasKeyFrames(QDomElement effect) {
+    QDomNodeList params = effect.elementsByTagName("parameter");
+    for (int i = 0; i < params.count(); i++) {
+        QDomElement e = params.item(i).toElement();
+        if (e.attribute("type") == "keyframe") return true;
+    }
+    return false;
+}
+
+// static
+void EffectsList::setParameter(QDomElement effect, QString name, QString value) {
+    QDomNodeList params = effect.elementsByTagName("parameter");
+    for (int i = 0; i < params.count(); i++) {
+        QDomElement e = params.item(i).toElement();
+        if (e.attribute("name") == name) {
+            e.setAttribute("value", value);
+            break;
+        }
+    }
+}
+