X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Finiteffects.cpp;h=56e6c97734700d6d49ab470af520563549e9e942;hb=8ddbcd4eb887ff2859c5420264a803a986cea14a;hp=62961b7ccddc21c16eced2f62d1a63decd9776d8;hpb=fd3954b6965b2bc81eeed9fadd40dbbf9607fa37;p=kdenlive diff --git a/src/initeffects.cpp b/src/initeffects.cpp index 62961b7c..56e6c977 100644 --- a/src/initeffects.cpp +++ b/src/initeffects.cpp @@ -20,7 +20,6 @@ #include "initeffects.h" #include "kdenlivesettings.h" #include "effectslist.h" -#include "effectstackedit.h" #include "mainwindow.h" #include @@ -32,6 +31,8 @@ #include #include +#include "locale.h" + initEffectsThumbnailer::initEffectsThumbnailer() : QThread() { @@ -49,10 +50,10 @@ void initEffectsThumbnailer::run() foreach(const QString & entry, m_list) { kDebug() << entry; if (!entry.isEmpty() && (entry.endsWith(".png") || entry.endsWith(".pgm"))) { - if (!EffectStackEdit::iconCache.contains(entry)) { + if (!MainWindow::m_lumacache.contains(entry)) { QImage pix(entry); //if (!pix.isNull()) - EffectStackEdit::iconCache[entry] = pix.scaled(30, 30); + MainWindow::m_lumacache.insert(entry, pix.scaled(30, 30, Qt::KeepAspectRatio, Qt::SmoothTransformation)); kDebug() << "stored"; } } @@ -134,7 +135,7 @@ QDomDocument initEffects::getUsedCustomEffects(QMap effectids } //static -void initEffects::parseEffectFiles() +void initEffects::parseEffectFiles(const QString &locale) { QStringList::Iterator more; QStringList::Iterator it; @@ -147,6 +148,9 @@ void initEffects::parseEffectFiles() return; } + // Warning: Mlt::Factory::init() resets the locale to the default system value, make sure we keep correct locale + if (!locale.isEmpty()) setlocale(LC_NUMERIC, locale.toUtf8().constData()); + // Retrieve the list of MLT's available effects. Mlt::Properties *filters = repository->filters(); QStringList filtersList; @@ -268,7 +272,10 @@ void initEffects::parseEffectFiles() max = MainWindow::customEffects.count(); for (int i = 0; i < max; ++i) { effectInfo = MainWindow::customEffects.at(i); - effectsMap.insert(effectInfo.firstChildElement("name").text().toLower().toUtf8().data(), effectInfo); + if (effectInfo.tagName() == "effectgroup") { + effectsMap.insert(effectInfo.attribute("name").toUtf8().data(), effectInfo); + } + else effectsMap.insert(effectInfo.firstChildElement("name").text().toUtf8().data(), effectInfo); } MainWindow::customEffects.clearList(); foreach(const QDomElement & effect, effectsMap) @@ -318,18 +325,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(base.firstChildElement("name").text().toLower().toUtf8().data(), base); } + else kDebug() << "Unsupported effect file: " << itemName; } foreach(const QDomElement & effect, effectsMap) MainWindow::customEffects.append(effect); @@ -343,7 +357,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 +420,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 +430,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)