]> git.sesse.net Git - kdenlive/commitdiff
new: saving of effect group
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Sat, 31 Mar 2012 23:29:07 +0000 (01:29 +0200)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Sat, 31 Mar 2012 23:29:07 +0000 (01:29 +0200)
src/clipitem.cpp
src/customtrackview.cpp
src/effectslist.cpp
src/effectslist.h
src/effectslistwidget.cpp
src/effectstack/collapsibleeffect.cpp
src/effectstack/collapsiblegroup.cpp
src/headertrack.cpp
src/initeffects.cpp

index fadf7ba5843896aa2ac865f5b386bd3d9d7ed3fe..1f350225b13cdbe50ec1da04c6cebcae6377e398 100644 (file)
@@ -1638,7 +1638,7 @@ void ClipItem::dropEvent(QGraphicsSceneDragDropEvent * event)
        QDomDocument doc;
        doc.setContent(effects, true);
        QDomElement e = doc.documentElement();
-       if (e.tagName() == "list") {
+       if (e.tagName() == "effectgroup") {
            // dropped an effect group
            QDomNodeList effectlist = e.elementsByTagName("effect");
            for (int i = 0; i < effectlist.count(); i++) {
index b2b8792670effbd1d5fd4d36c90c13280b2bd39a..b3ca6e39c17cc075c9132bd9db8f5fee4cfd8f82 100644 (file)
@@ -1730,7 +1730,7 @@ void CustomTrackView::slotAddGroupEffect(QDomElement effect, AbstractGroupItem *
     for (int i = 0; i < itemList.count(); i++) {
         if (itemList.at(i)->type() == AVWIDGET) {
             ClipItem *item = static_cast <ClipItem *>(itemList.at(i));
-            if (effect.tagName() == "list") {
+            if (effect.tagName() == "effectgroup") {
                QDomNodeList effectlist = effect.elementsByTagName("effect");
                for (int j = 0; j < effectlist.count(); j++) {
                    processEffect(item, effectlist.at(j).toElement(), effectCommand);
@@ -1757,7 +1757,7 @@ void CustomTrackView::slotAddEffect(QDomElement effect, GenTime pos, int track)
     QList<QGraphicsItem *> itemList;
     QUndoCommand *effectCommand = new QUndoCommand();
     QString effectName;
-    if (effect.tagName() == "list") {
+    if (effect.tagName() == "effectgroup") {
        effectName = effect.attribute("name");
     } else {
        QDomElement namenode = effect.firstChildElement("name");
@@ -1786,7 +1786,7 @@ void CustomTrackView::slotAddEffect(QDomElement effect, GenTime pos, int track)
     for (int i = 0; i < itemList.count(); i++) {
         if (itemList.at(i)->type() == AVWIDGET) {
             ClipItem *item = static_cast <ClipItem *>(itemList.at(i));
-           if (effect.tagName() == "list") {
+           if (effect.tagName() == "effectgroup") {
                QDomNodeList effectlist = effect.elementsByTagName("effect");
                for (int j = 0; j < effectlist.count(); j++) {
                    processEffect(item, effectlist.at(j).toElement(), effectCommand);
@@ -6629,7 +6629,7 @@ void CustomTrackView::slotAddTrackEffect(const QDomElement &effect, int ix)
     
     QUndoCommand *effectCommand = new QUndoCommand();
     QString effectName;
-    if (effect.tagName() == "list") {
+    if (effect.tagName() == "effectgroup") {
         effectName = effect.attribute("name");
     } else {
         QDomElement namenode = effect.firstChildElement("name");
@@ -6637,7 +6637,7 @@ void CustomTrackView::slotAddTrackEffect(const QDomElement &effect, int ix)
         else effectName = i18n("effect");
     }
     effectCommand->setText(i18n("Add %1", effectName));
-    if (effect.tagName() == "list") {
+    if (effect.tagName() == "effectgroup") {
         QDomNodeList effectlist = effect.elementsByTagName("effect");
         for (int j = 0; j < effectlist.count(); j++) {
             QDomElement trackeffect = effectlist.at(j).toElement();
index f673c0e1ed6ad79e5fc823281fdf7708160ea5a8..2ceb03050a1fc63e1797a24a403b418e81b9926c 100644 (file)
@@ -100,8 +100,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 << groupName << QString::number(Kdenlive::groupEffect);
+    }
+    else {
+       QDomElement namenode = effect.firstChildElement("name");
+       info << i18n(namenode.text().toUtf8().data()) << effect.attribute("tag") << effect.attribute("id");
+    }
     return info;
 }
 
index e52bb01f80ec1ebb69178bb8f6dd2afdbe02711d..8a851a79c15270eb77c7f69bb1763b5ac07e8dcf 100644 (file)
 
 #include <QDomDocument>
 
+namespace Kdenlive {
+  enum EFFECTTYPE { simpleEffect, groupEffect };
+}
+
 class EffectsList: public QDomDocument
 {
 public:
index 2c51069663959beab27b5588475fa83d28b3717f..7d75ac888b722f3e112be20d3293f15bc67831a7 100644 (file)
@@ -246,7 +246,8 @@ void EffectsListWidget::loadEffects(const EffectsList *effectlist, KIcon icon, Q
 
         if (!effectInfo.isEmpty()) {
             item = new QTreeWidgetItem(parentItem, QStringList(effectInfo.takeFirst()));
-            item->setIcon(0, icon);
+           if (effectInfo.count() == 4) item->setIcon(0, KIcon("folder"));
+            else item->setIcon(0, icon);
             item->setData(0, TypeRole, type);
             item->setData(0, IdRole, effectInfo);
             item->setToolTip(0, effectlist->getInfo(effectInfo.at(0), effectInfo.at(1)));
index 82c99ab98b59934b2360428849925646a4514a38..71ed8e44e346814a82a2685231ff0fab36dd85a9 100644 (file)
@@ -211,7 +211,7 @@ const QString CollapsibleEffect::getStyleSheet(QPalette p)
     QColor selected_bg = scheme.decoration(KColorScheme::FocusColor).color();
     QColor hover_bg = scheme.decoration(KColorScheme::HoverColor).color();
     QColor light_bg = scheme.shade(KColorScheme::LightShade);
-    QColor midlight_bg = scheme.shade(KColorScheme::MidlightShade);
+    //QColor midlight_bg = scheme.shade(KColorScheme::MidlightShade);
     QColor normal_bg = scheme.background(KColorScheme::AlternateBackground).color();
     QColor alt_bg = scheme.background(KColorScheme::NormalBackground).color();
     
index 4e7afd847b63680592549e85e87ccb66f8f73176..30684c26de2d3d84b575ac90316af1f4f7d7fae2 100644 (file)
@@ -162,9 +162,17 @@ void CollapsibleGroup::slotSaveGroup()
     QDomDocument doc = effectsData();
     QDomElement base = doc.documentElement();
     QDomNodeList effects = base.elementsByTagName("effect");
-    for (int i = 0; i < effects.count(); i++)
-        effects.at(i).toElement().removeAttribute("kdenlive_ix");
+    for (int i = 0; i < effects.count(); i++) {
+       QDomElement eff = effects.at(i).toElement();
+        eff.removeAttribute("kdenlive_ix");
+       QString kdenliveInfo = eff.attribute("kdenlive_info");
+       // Make sure all effects have the correct new group name
+       if (kdenliveInfo.count('/') >= 2) {
+           eff.setAttribute("kdenlive_info", kdenliveInfo.section('/', 0, 1) + "/" + name);
+       }
+    }
     
+    base.setAttribute("name", name);
     base.setAttribute("id", name);
     base.setAttribute("type", "custom");  
 
@@ -324,7 +332,7 @@ QDomDocument CollapsibleGroup::effectsData()
 {
     QMutexLocker lock(&m_mutex);
     QDomDocument doc;
-    QDomElement list = doc.createElement("list");
+    QDomElement list = doc.createElement("effectgroup");
     list.setAttribute("name", m_title->text());
     doc.appendChild(list);
     for (int j = 0; j < m_subWidgets.count(); j++) {
index 86956b7fb204cec148821388cbfcef1fb11de3ed..af95f277a4c2207c6e99819b94071303fac44681 100644 (file)
@@ -136,7 +136,7 @@ void HeaderTrack::dropEvent(QDropEvent * event)
     QDomDocument doc;
     doc.setContent(effects, true);
     QDomElement e = doc.documentElement();
-    if (e.tagName() == "list") {
+    if (e.tagName() == "effectgroup") {
         // dropped an effect group
         QDomNodeList effectlist = e.elementsByTagName("effect");
         for (int i = 0; i < effectlist.count(); i++) {
index 62961b7ccddc21c16eced2f62d1a63decd9776d8..6f0608fa47ff85c1c623dd714e40846346315984 100644 (file)
@@ -318,18 +318,25 @@ void initEffects::parseCustomEffectsFile()
     QDomDocument doc;
     QDomNodeList effects;
     QDomElement e;
+    int unknownGroupCount = 0;
     foreach(const QString & filename, fileList) {
         QString itemName = KUrl(path + filename).path();
         QFile file(itemName);
         doc.setContent(&file, false);
         file.close();
-        effects = doc.elementsByTagName("effect");
-        if (effects.count() != 1) {
-            kDebug() << "More than one effect in file " << itemName << ", not supported yet";
-        } else {
-            e = effects.item(0).toElement();
-            effectsMap.insert(e.firstChildElement("name").text().toLower().toUtf8().data(), e);
+       QDomElement base = doc.documentElement();
+        if (base.tagName() == "effectgroup") {
+           QString groupName = base.attribute("name");
+           if (groupName.isEmpty()) {
+               groupName = i18n("Group %1", unknownGroupCount);
+               base.setAttribute("name", groupName);
+               unknownGroupCount++;
+           }
+           effectsMap.insert(groupName.toLower().toUtf8().data(), base);
+        } else if (base.tagName() == "effect") {
+            effectsMap.insert(e.firstChildElement("name").text().toLower().toUtf8().data(), base);
         }
+        else kDebug() << "Unsupported effect file: " << itemName;
     }
     foreach(const QDomElement & effect, effectsMap)
         MainWindow::customEffects.append(effect);
@@ -343,7 +350,9 @@ void initEffects::parseEffectFile(EffectsList *customEffectList, EffectsList *au
     doc.setContent(&file, false);
     file.close();
     QDomElement documentElement;
-    QDomNodeList effects = doc.elementsByTagName("effect");
+    QDomNodeList effects;
+    QDomElement base = doc.documentElement();
+    effects = doc.elementsByTagName("effect");
 
     if (effects.count() == 0) {
         kDebug() << "Effect broken: " << name;
@@ -404,7 +413,7 @@ void initEffects::parseEffectFile(EffectsList *customEffectList, EffectsList *au
         }
 
         // Parse effect information.
-        if ((filtersList.contains(tag) || producersList.contains(tag))) {
+        if (base.tagName() != "effectgroup" && (filtersList.contains(tag) || producersList.contains(tag))) {
             QString type = documentElement.attribute("type", QString());
             if (type == "audio")
                 audioEffectList->append(documentElement);
@@ -414,6 +423,15 @@ void initEffects::parseEffectFile(EffectsList *customEffectList, EffectsList *au
                 videoEffectList->append(documentElement);
         }
     }
+    if (base.tagName() == "effectgroup") {
+       QString type = base.attribute("type", QString());
+        if (type == "audio")
+                audioEffectList->append(base);
+            else if (type == "custom")
+                customEffectList->append(base);
+            else
+                videoEffectList->append(base);
+    }
 }
 
 QDomDocument initEffects::createDescriptionFromMlt(Mlt::Repository* repository, const QString& /*type*/, const QString& filtername)