Git commit 65291fac2609fe71e4be801a4d5349ddda5b9243 by Jean-Baptiste Mardel= le. 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 =3D doc.documentElement(); - if (e.tagName() =3D=3D "list") { + if (e.tagName() =3D=3D "effectgroup") { // dropped an effect group QDomNodeList effectlist =3D e.elementsByTagName("effect"); for (int i =3D 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 =3D 0; i < itemList.count(); i++) { if (itemList.at(i)->type() =3D=3D AVWIDGET) { ClipItem *item =3D static_cast (itemList.at(i)); - if (effect.tagName() =3D=3D "list") { + if (effect.tagName() =3D=3D "effectgroup") { QDomNodeList effectlist =3D effect.elementsByTagName("effect"); for (int j =3D 0; j < effectlist.count(); j++) { processEffect(item, effectlist.at(j).toElement(), effectCommand); @@ -1757,7 +1757,7 @@ void CustomTrackView::slotAddEffect(QDomElement effec= t, GenTime pos, int track) QList itemList; QUndoCommand *effectCommand =3D new QUndoCommand(); QString effectName; - if (effect.tagName() =3D=3D "list") { + if (effect.tagName() =3D=3D "effectgroup") { effectName =3D effect.attribute("name"); } else { QDomElement namenode =3D effect.firstChildElement("name"); @@ -1786,7 +1786,7 @@ void CustomTrackView::slotAddEffect(QDomElement effec= t, GenTime pos, int track) for (int i =3D 0; i < itemList.count(); i++) { if (itemList.at(i)->type() =3D=3D AVWIDGET) { ClipItem *item =3D static_cast (itemList.at(i)); - if (effect.tagName() =3D=3D "list") { + if (effect.tagName() =3D=3D "effectgroup") { QDomNodeList effectlist =3D effect.elementsByTagName("effect"); for (int j =3D 0; j < effectlist.count(); j++) { processEffect(item, effectlist.at(j).toElement(), effectCommand); @@ -6629,7 +6629,7 @@ void CustomTrackView::slotAddTrackEffect(const QDomEl= ement &effect, int ix) = QUndoCommand *effectCommand =3D new QUndoCommand(); QString effectName; - if (effect.tagName() =3D=3D "list") { + if (effect.tagName() =3D=3D "effectgroup") { effectName =3D effect.attribute("name"); } else { QDomElement namenode =3D effect.firstChildElement("name"); @@ -6637,7 +6637,7 @@ void CustomTrackView::slotAddTrackEffect(const QDomEl= ement &effect, int ix) else effectName =3D i18n("effect"); } effectCommand->setText(i18n("Add %1", effectName)); - if (effect.tagName() =3D=3D "list") { + if (effect.tagName() =3D=3D "effectgroup") { QDomNodeList effectlist =3D effect.elementsByTagName("effect"); for (int j =3D 0; j < effectlist.count(); j++) { QDomElement trackeffect =3D 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) co= nst { QStringList info; QDomElement effect =3D m_baseElement.childNodes().at(ix).toElement(); - QDomElement namenode =3D effect.firstChildElement("name"); - info << i18n(namenode.text().toUtf8().data()) << effect.attribute("tag= ") << effect.attribute("id"); + if (effect.tagName() =3D=3D "effectgroup") { + QString groupName =3D effect.attribute("name"); + info << groupName << groupName << groupName << QString::number(Kdenlive::= groupEffect); + } + else { + QDomElement namenode =3D 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 = +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 =3D new QTreeWidgetItem(parentItem, QStringList(effectInf= o.takeFirst())); - item->setIcon(0, icon); + if (effectInfo.count() =3D=3D 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), effe= ctInfo.at(1))); diff --git a/src/effectstack/collapsibleeffect.cpp b/src/effectstack/collap= sibleeffect.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 =3D scheme.decoration(KColorScheme::FocusColor).col= or(); QColor hover_bg =3D scheme.decoration(KColorScheme::HoverColor).color(= ); QColor light_bg =3D scheme.shade(KColorScheme::LightShade); - QColor midlight_bg =3D scheme.shade(KColorScheme::MidlightShade); + //QColor midlight_bg =3D scheme.shade(KColorScheme::MidlightShade); QColor normal_bg =3D scheme.background(KColorScheme::AlternateBackgrou= nd).color(); QColor alt_bg =3D scheme.background(KColorScheme::NormalBackground).co= lor(); = diff --git a/src/effectstack/collapsiblegroup.cpp b/src/effectstack/collaps= iblegroup.cpp index 4e7afd8..30684c2 100644 --- a/src/effectstack/collapsiblegroup.cpp +++ b/src/effectstack/collapsiblegroup.cpp @@ -162,9 +162,17 @@ void CollapsibleGroup::slotSaveGroup() QDomDocument doc =3D effectsData(); QDomElement base =3D doc.documentElement(); QDomNodeList effects =3D base.elementsByTagName("effect"); - for (int i =3D 0; i < effects.count(); i++) - effects.at(i).toElement().removeAttribute("kdenlive_ix"); + for (int i =3D 0; i < effects.count(); i++) { + QDomElement eff =3D effects.at(i).toElement(); + eff.removeAttribute("kdenlive_ix"); + QString kdenliveInfo =3D eff.attribute("kdenlive_info"); + // Make sure all effects have the correct new group name + if (kdenliveInfo.count('/') >=3D 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 =3D doc.createElement("list"); + QDomElement list =3D doc.createElement("effectgroup"); list.setAttribute("name", m_title->text()); doc.appendChild(list); for (int j =3D 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 =3D doc.documentElement(); - if (e.tagName() =3D=3D "list") { + if (e.tagName() =3D=3D "effectgroup") { // dropped an effect group QDomNodeList effectlist =3D e.elementsByTagName("effect"); for (int i =3D 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 =3D 0; foreach(const QString & filename, fileList) { QString itemName =3D KUrl(path + filename).path(); QFile file(itemName); doc.setContent(&file, false); file.close(); - effects =3D doc.elementsByTagName("effect"); - if (effects.count() !=3D 1) { - kDebug() << "More than one effect in file " << itemName << ", = not supported yet"; - } else { - e =3D effects.item(0).toElement(); - effectsMap.insert(e.firstChildElement("name").text().toLower()= .toUtf8().data(), e); + QDomElement base =3D doc.documentElement(); + if (base.tagName() =3D=3D "effectgroup") { + QString groupName =3D base.attribute("name"); + if (groupName.isEmpty()) { + groupName =3D i18n("Group %1", unknownGroupCount); + base.setAttribute("name", groupName); + unknownGroupCount++; + } + effectsMap.insert(groupName.toLower().toUtf8().data(), base); + } else if (base.tagName() =3D=3D "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 *customEf= fectList, EffectsList *au doc.setContent(&file, false); file.close(); QDomElement documentElement; - QDomNodeList effects =3D doc.elementsByTagName("effect"); + QDomNodeList effects; + QDomElement base =3D doc.documentElement(); + effects =3D doc.elementsByTagName("effect"); = if (effects.count() =3D=3D 0) { kDebug() << "Effect broken: " << name; @@ -404,7 +413,7 @@ void initEffects::parseEffectFile(EffectsList *customEf= fectList, EffectsList *au } = // Parse effect information. - if ((filtersList.contains(tag) || producersList.contains(tag))) { + if (base.tagName() !=3D "effectgroup" && (filtersList.contains(tag= ) || producersList.contains(tag))) { QString type =3D documentElement.attribute("type", QString()); if (type =3D=3D "audio") audioEffectList->append(documentElement); @@ -414,6 +423,15 @@ void initEffects::parseEffectFile(EffectsList *customE= ffectList, EffectsList *au videoEffectList->append(documentElement); } } + if (base.tagName() =3D=3D "effectgroup") { + QString type =3D base.attribute("type", QString()); + if (type =3D=3D "audio") + audioEffectList->append(base); + else if (type =3D=3D "custom") + customEffectList->append(base); + else + videoEffectList->append(base); + } } = QDomDocument initEffects::createDescriptionFromMlt(Mlt::Repository* reposi= tory, const QString& /*type*/, const QString& filtername)