]> git.sesse.net Git - kdenlive/blobdiff - src/effectslist.cpp
Fix automask effect crash
[kdenlive] / src / effectslist.cpp
index 9e0bad5cb489675fd4cb93a5b44e2d5de3d77f8e..19e9137975a10a2b3eec834833b9dabaa389068f 100644 (file)
@@ -45,6 +45,7 @@ QMap <QString, QString> EffectsList::effect(const QString & name) {
     return filter;
 }
 
+
 QDomElement EffectsList::getEffectByName(const QString & name) const {
     QString effectName;
     for (int i = 0; i < this->size(); ++i) {
@@ -55,7 +56,8 @@ QDomElement EffectsList::getEffectByName(const QString & name) const {
             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"));
+                if (!e.hasAttribute("value"))
+                    e.setAttribute("value", e.attribute("default"));
             }
             return effect;
         }
@@ -64,19 +66,34 @@ QDomElement EffectsList::getEffectByName(const QString & name) const {
     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"));
+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);
+            kDebug() << "// SRCH EFFECT; " << id << ", LKING: " << effect.attribute("id");
+            if (effect.attribute("id") == id) {
+                QDomNodeList params = effect.elementsByTagName("parameter");
+                for (int i = 0; i < params.count(); i++) {
+                    QDomElement e = params.item(i).toElement();
+                    if (!e.hasAttribute("value"))
+                        e.setAttribute("value", e.attribute("default"));
+                }
+                return effect;
+            }
+        }
+
+    if (!tag.isEmpty()) 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();
+                    if (!e.hasAttribute("value"))
+                        e.setAttribute("value", e.attribute("default"));
+                }
+                return effect;
             }
-            return effect;
         }
-    }
 
     return QDomElement();
 }
@@ -88,6 +105,7 @@ QStringList EffectsList::effectNames() {
         QDomNode namenode = effect.elementsByTagName("name").item(0);
         if (!namenode.isNull()) list.append(i18n(namenode.toElement().text().toUtf8().data()));
     }
+    qSort(list);
     return list;
 }
 
@@ -101,3 +119,24 @@ QString EffectsList::getInfo(QString effectName) {
     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;
+        }
+    }
+}
+