X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Feffectslist.cpp;h=cff4941893ff030fabb476c4d5e01b14afe5ed0c;hb=ce68de86827a11cd0dc96465fba021b2f7ceea55;hp=68706abb02dd2800852efe3f0b0152068e026a3f;hpb=2a4060e2edb252fd65c5fafc48643cfb3609255e;p=kdenlive diff --git a/src/effectslist.cpp b/src/effectslist.cpp index 68706abb..cff49418 100644 --- a/src/effectslist.cpp +++ b/src/effectslist.cpp @@ -54,6 +54,17 @@ QDomElement EffectsList::getEffectByName(const QString & name) const return QDomElement(); } + +void EffectsList::initEffect(QDomElement effect) const +{ + 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")); + } +} + QDomElement EffectsList::getEffectByTag(const QString & tag, const QString & id) const { QDomNodeList effects = m_baseElement.childNodes(); @@ -61,22 +72,20 @@ QDomElement EffectsList::getEffectByTag(const QString & tag, const QString & id) QDomElement effect = effects.at(i).toElement(); if (!id.isEmpty()) { 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")); - } + if (effect.tagName() == "effectgroup") { + // Effect group + QDomNodeList subeffects = effect.elementsByTagName("effect"); + for (int j = 0; j < subeffects.count(); j++) { + QDomElement sub = subeffects.at(j).toElement(); + initEffect(sub); + } + } + else initEffect(effect); return effect; } } else if (!tag.isEmpty()) { 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")); - } + initEffect(effect); return effect; } } @@ -100,8 +109,14 @@ QStringList EffectsList::effectIdInfo(const int ix) const { QStringList info; QDomElement effect = m_baseElement.childNodes().at(ix).toElement(); - QDomElement namenode = effect.firstChildElement("name"); - info << i18n(namenode.text().toUtf8().data()) << effect.attribute("tag") << effect.attribute("id"); + if (effect.tagName() == "effectgroup") { + QString groupName = effect.attribute("name"); + info << groupName << groupName << effect.attribute("id") << QString::number(Kdenlive::groupEffect); + } + else { + QDomElement namenode = effect.firstChildElement("name"); + info << i18n(namenode.text().toUtf8().data()) << effect.attribute("tag") << effect.attribute("id"); + } return info; } @@ -197,13 +212,24 @@ void EffectsList::clearList() void EffectsList::setParameter(QDomElement effect, const QString &name, const QString &value) { QDomNodeList params = effect.elementsByTagName("parameter"); + bool found = false; for (int i = 0; i < params.count(); i++) { QDomElement e = params.item(i).toElement(); if (e.attribute("name") == name) { e.setAttribute("value", value); + found = true; break; } } + if (!found) { + // create property + QDomDocument doc = effect.ownerDocument(); + QDomElement e = doc.createElement("parameter"); + e.setAttribute("name", name); + QDomText val = doc.createTextNode(value); + e.appendChild(val); + effect.appendChild(e); + } } // static @@ -303,7 +329,7 @@ QDomElement EffectsList::append(QDomElement e) if (!e.isNull()) { result = m_baseElement.appendChild(importNode(e, true)).toElement(); if (m_useIndex) { - updateIndexes(m_baseElement.childNodes()); + updateIndexes(m_baseElement.childNodes(), m_baseElement.childNodes().count() - 1); } } return result; @@ -331,7 +357,7 @@ void EffectsList::removeAt(int ix) QDomNodeList effects = m_baseElement.childNodes(); if (ix <= 0 || ix > effects.count()) return; m_baseElement.removeChild(effects.at(ix - 1)); - if (m_useIndex) updateIndexes(effects); + if (m_useIndex) updateIndexes(effects, ix - 1); } QDomElement EffectsList::itemFromIndex(int ix) const @@ -346,20 +372,24 @@ QDomElement EffectsList::insert(QDomElement effect) QDomNodeList effects = m_baseElement.childNodes(); int ix = effect.attribute("kdenlive_ix").toInt(); QDomElement result; - if (effect.hasAttribute("kdenlive_ix") && ix > effects.count()) result = m_baseElement.appendChild(importNode(effect, true)).toElement(); + if (ix <= 0 || ix > effects.count()) { + ix = effects.count(); + result = m_baseElement.appendChild(importNode(effect, true)).toElement(); + } else { QDomElement listeffect = effects.at(ix - 1).toElement(); - result = m_baseElement.insertBefore(importNode(effect, true), listeffect).toElement(); + result = m_baseElement.insertBefore(importNode(effect, true), listeffect).toElement(); } - if (m_useIndex) updateIndexes(effects); + if (m_useIndex && ix > 0) + updateIndexes(effects, ix - 1); return result; } -void EffectsList::updateIndexes(QDomNodeList effects) +void EffectsList::updateIndexes(QDomNodeList effects, int startIndex) { - for (int i = 0; i < effects.count(); i++) { + for (int i = startIndex; i < effects.count(); i++) { QDomElement listeffect = effects.at(i).toElement(); - listeffect.setAttribute("kdenlive_ix", i + 1); + listeffect.setAttribute("kdenlive_ix", i + 1); } } @@ -375,8 +405,8 @@ void EffectsList::updateEffect(QDomElement effect) int ix = effect.attribute("kdenlive_ix").toInt(); QDomElement current = effectFromIndex(effects, ix); if (!current.isNull()) { - m_baseElement.insertBefore(importNode(effect, true), current); - m_baseElement.removeChild(current); + m_baseElement.insertBefore(importNode(effect, true), current); + m_baseElement.removeChild(current); } else m_baseElement.appendChild(importNode(effect, true)); }