[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [kdenlive/effectstack] src: new: saving of effect group
From:       Jean-Baptiste Mardelle <jb () kdenlive ! org>
Date:       2012-03-31 23:29:26
Message-ID: 20120331232926.4A84EA60A9 () git ! kde ! org
[Download RAW message or body]

Git commit 65291fac2609fe71e4be801a4d5349ddda5b9243 by Jean-Baptiste Mardelle.
Committed on 01/04/2012 at 01:29.
Pushed by mardelle into branch 'effectstack'.

new: saving of effect group

M  +1    -1    src/clipitem.cpp
M  +5    -5    src/customtrackview.cpp
M  +8    -2    src/effectslist.cpp
M  +4    -0    src/effectslist.h
M  +2    -1    src/effectslistwidget.cpp
M  +1    -1    src/effectstack/collapsibleeffect.cpp
M  +11   -3    src/effectstack/collapsiblegroup.cpp
M  +1    -1    src/headertrack.cpp
M  +26   -8    src/initeffects.cpp

http://commits.kde.org/kdenlive/65291fac2609fe71e4be801a4d5349ddda5b9243

diff --git a/src/clipitem.cpp b/src/clipitem.cpp
index fadf7ba..1f35022 100644
--- a/src/clipitem.cpp
+++ b/src/clipitem.cpp
@@ -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++) {
diff --git a/src/customtrackview.cpp b/src/customtrackview.cpp
index b2b8792..b3ca6e3 100644
--- a/src/customtrackview.cpp
+++ b/src/customtrackview.cpp
@@ -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();
diff --git a/src/effectslist.cpp b/src/effectslist.cpp
index f673c0e..2ceb030 100644
--- a/src/effectslist.cpp
+++ b/src/effectslist.cpp
@@ -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;
 }
 
diff --git a/src/effectslist.h b/src/effectslist.h
index e52bb01..8a851a7 100644
--- a/src/effectslist.h
+++ b/src/effectslist.h
@@ -32,6 +32,10 @@
 
 #include <QDomDocument>
 
+namespace Kdenlive {
+  enum EFFECTTYPE { simpleEffect, groupEffect };
+}
+
 class EffectsList: public QDomDocument
 {
 public:
diff --git a/src/effectslistwidget.cpp b/src/effectslistwidget.cpp
index 2c51069..7d75ac8 100644
--- a/src/effectslistwidget.cpp
+++ b/src/effectslistwidget.cpp
@@ -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)));
diff --git a/src/effectstack/collapsibleeffect.cpp \
b/src/effectstack/collapsibleeffect.cpp index 82c99ab..71ed8e4 100644
--- a/src/effectstack/collapsibleeffect.cpp
+++ b/src/effectstack/collapsibleeffect.cpp
@@ -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();
     
diff --git a/src/effectstack/collapsiblegroup.cpp \
b/src/effectstack/collapsiblegroup.cpp index 4e7afd8..30684c2 100644
--- a/src/effectstack/collapsiblegroup.cpp
+++ b/src/effectstack/collapsiblegroup.cpp
@@ -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++) {
diff --git a/src/headertrack.cpp b/src/headertrack.cpp
index 86956b7..af95f27 100644
--- a/src/headertrack.cpp
+++ b/src/headertrack.cpp
@@ -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++) {
diff --git a/src/initeffects.cpp b/src/initeffects.cpp
index 62961b7..6f0608f 100644
--- a/src/initeffects.cpp
+++ b/src/initeffects.cpp
@@ -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)


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic