#include <QIcon>
initEffectsThumbnailer::initEffectsThumbnailer() :
- QThread()
+ QThread()
{
}
void initEffectsThumbnailer::run()
{
- foreach(const QString &entry, m_list) {
+ foreach(const QString & entry, m_list) {
kDebug() << entry;
if (!entry.isEmpty() && (entry.endsWith(".png") || entry.endsWith(".pgm"))) {
if (!EffectStackEdit::iconCache.contains(entry)) {
filters << "*.pgm" << "*.png";
QStringList customLumas = KGlobal::dirs()->findDirs("appdata", "lumas");
- foreach(const QString &folder, customLumas) {
+ foreach(const QString & folder, customLumas) {
QStringList filesnames = QDir(folder).entryList(filters, QDir::Files);
- foreach(const QString &fname, filesnames) {
+ foreach(const QString & fname, filesnames) {
imagenamelist.append(fname);
imagefiles.append(KUrl(folder).path(KUrl::AddTrailingSlash) + fname);
}
folder.addPath(mlt_environment("MLT_NORMALISATION"));
QDir lumafolder(folder.path());
QStringList filesnames = lumafolder.entryList(filters, QDir::Files);
- foreach(const QString &fname, filesnames) {
+ foreach(const QString & fname, filesnames) {
imagenamelist.append(fname);
KUrl path(folder);
path.addPath(fname);
}
}
+// static
+QDomDocument initEffects::getUsedCustomEffects(QMap <QString, QString> effectids)
+{
+ QMapIterator<QString, QString> i(effectids);
+ int ix;
+ QDomDocument doc;
+ QDomElement list = doc.createElement("customeffects");
+ doc.appendChild(list);
+ while (i.hasNext()) {
+ i.next();
+ ix = MainWindow::customEffects.hasEffect(i.value(), i.key());
+ if (ix > -1) {
+ QDomElement e = MainWindow::customEffects.at(ix);
+ list.appendChild(doc.importNode(e, true));
+ }
+ }
+ return doc;
+}
+
//static
Mlt::Repository *initEffects::parseEffectFiles()
{
effectsMap.insert(effectInfo.elementsByTagName("name").item(0).toElement().text().toLower().toUtf8().data(), effectInfo);
}
MainWindow::transitions.clearList();
- foreach(const QDomElement &effect, effectsMap)
+ foreach(const QDomElement & effect, effectsMap)
MainWindow::transitions.append(effect);
effectsMap.clear();
for (int i = 0; i < MainWindow::customEffects.count(); ++i) {
effectsMap.insert(effectInfo.elementsByTagName("name").item(0).toElement().text().toLower().toUtf8().data(), effectInfo);
}
MainWindow::customEffects.clearList();
- foreach(const QDomElement &effect, effectsMap)
+ foreach(const QDomElement & effect, effectsMap)
MainWindow::customEffects.append(effect);
effectsMap.clear();
for (int i = 0; i < MainWindow::audioEffects.count(); ++i) {
effectsMap.insert(effectInfo.elementsByTagName("name").item(0).toElement().text().toLower().toUtf8().data(), effectInfo);
}
MainWindow::audioEffects.clearList();
- foreach(const QDomElement &effect, effectsMap)
+ foreach(const QDomElement & effect, effectsMap)
MainWindow::audioEffects.append(effect);
effectsMap.clear();
for (int i = 0; i < MainWindow::videoEffects.count(); ++i) {
effectsMap.insert(effectInfo.elementsByTagName("name").item(0).toElement().text().toLower().toUtf8().data(), effectInfo);
}
// Add remaining filters to the list of video effects.
- foreach(const QString &filtername, filtersList) {
+ foreach(const QString & filtername, filtersList) {
QDomDocument doc = createDescriptionFromMlt(repository, "filters", filtername);
if (!doc.isNull())
effectsMap.insert(doc.documentElement().elementsByTagName("name").item(0).toElement().text().toLower().toUtf8().data(), doc.documentElement());
}
MainWindow::videoEffects.clearList();
- foreach(const QDomElement &effect, effectsMap)
+ foreach(const QDomElement & effect, effectsMap)
MainWindow::videoEffects.append(effect);
return repository;
QDomDocument doc;
QDomNodeList effects;
QDomElement e;
- foreach(const QString &filename, fileList) {
+ foreach(const QString & filename, fileList) {
QString itemName = KUrl(path + filename).path();
QFile file(itemName);
doc.setContent(&file, false);
effectsMap.insert(e.elementsByTagName("name").item(0).toElement().text().toLower().toUtf8().data(), e);
}
}
- foreach(const QDomElement &effect, effectsMap)
- MainWindow::customEffects.append(effect);
+ foreach(const QDomElement & effect, effectsMap)
+ MainWindow::customEffects.append(effect);
}
// static
if (QString(paramdesc.get("type")) == "float") {
params.setAttribute("type", "constant");
params.setAttribute("factor", "1000");
- if (paramdesc.get("maximum")) params.setAttribute("max", QString(paramdesc.get("maximum")).toFloat()*1000.0);
- if (paramdesc.get("minimum")) params.setAttribute("min", QString(paramdesc.get("minimum")).toFloat()*1000.0);
+ if (paramdesc.get("maximum")) params.setAttribute("max", QString(paramdesc.get("maximum")).toFloat() * 1000.0);
+ if (paramdesc.get("minimum")) params.setAttribute("min", QString(paramdesc.get("minimum")).toFloat() * 1000.0);
}
if (QString(paramdesc.get("type")) == "boolean")
params.setAttribute("type", "bool");
if (!folder.endsWith('/'))
folder.append('/');
QStringList filesnames = QDir(folder).entryList(filters, QDir::Files);
- foreach(const QString &fname, filesnames) {
+ foreach(const QString & fname, filesnames) {
imagenamelist.append(fname);
imagefiles.append(folder + fname);
}
folder.addPath(mlt_environment("MLT_NORMALISATION"));
QDir lumafolder(folder.path());
QStringList filesnames = lumafolder.entryList(filters, QDir::Files);
- foreach(const QString &fname, filesnames) {
+ foreach(const QString & fname, filesnames) {
imagenamelist.append(fname);
KUrl path(folder);
path.addPath(fname);
imagefiles.append(path.toLocalFile());
}
- foreach(const QString &name, names) {
+ foreach(const QString & name, names) {
QDomDocument ret;
QDomElement ktrans = ret.createElement("ktransition");
ret.appendChild(ktrans);
paramList.append(quickParameterFill(ret, i18n("Force Progressive Rendering"), "composite.progressive", "bool", "1", "0", "1"));
paramList.append(quickParameterFill(ret, i18n("Force Deinterlace Overlay"), "composite.deinterlace", "bool", "0", "0", "1"));
}
- foreach(const QDomElement &e, paramList)
+ foreach(const QDomElement & e, paramList)
ktrans.appendChild(e);
}
#include "documentchecker.h"
#include "documentvalidator.h"
#include "kdenlive-config.h"
+#include "initeffects.h"
#include <KDebug>
#include <KStandardDirs>
parent->slotGotProgressInfo(i18n("Loading"), 0);
QDomElement mlt = m_document.firstChildElement("mlt");
QDomElement infoXml = mlt.firstChildElement("kdenlivedoc");
- QDomElement e;
+ // Check embedded effects
+ QDomElement customeffects = infoXml.firstChildElement("customeffects");
+ if (!customeffects.isNull() && customeffects.hasChildNodes()) {
+ parent->slotGotProgressInfo(i18n("Importing project effects"), 0);
+ if (saveCustomEffects(customeffects.childNodes())) parent->slotReloadEffects();
+ }
+
+ QDomElement e;
// Read notes
QDomElement notesxml = infoXml.firstChildElement("documentnotes");
if (!notesxml.isNull()) m_notesWidget->setText(notesxml.firstChild().nodeValue());
KMessageBox::error(kapp->activeWindow(), i18n("Cannot write to file %1, scene list is corrupted.", path));
return false;
}
+
QDomElement addedXml = sceneList.createElement("kdenlivedoc");
mlt.appendChild(addedXml);
+ // check if project contains custom effects to embed them in project file
+ QDomNodeList effects = mlt.elementsByTagName("filter");
+ int maxEffects = effects.count();
+ kDebug() << "// FOUD " << maxEffects << " EFFECTS+++++++++++++++++++++";
+ QMap <QString, QString> effectIds;
+ for (int i = 0; i < maxEffects; i++) {
+ QDomNode m = effects.at(i);
+ QDomNodeList params = m.childNodes();
+ QString id;
+ QString tag;
+ for (int j = 0; j < params.count(); j++) {
+ QDomElement e = params.item(j).toElement();
+ if (e.attribute("name") == "kdenlive_id") {
+ id = e.firstChild().nodeValue();
+ }
+ if (e.attribute("name") == "tag") {
+ tag = e.firstChild().nodeValue();
+ }
+ if (!id.isEmpty() && !tag.isEmpty()) effectIds.insert(id, tag);
+ }
+ }
+ QDomDocument customeffects = initEffects::getUsedCustomEffects(effectIds);
+ addedXml.appendChild(sceneList.importNode(customeffects.documentElement(), true));
+
QDomElement markers = sceneList.createElement("markers");
addedXml.setAttribute("version", DOCUMENTVERSION);
addedXml.setAttribute("kdenliveversion", VERSION);
return list.at(effectIndex).cloneNode().toElement();
}
+bool KdenliveDoc::saveCustomEffects(QDomNodeList customeffects)
+{
+ QDomElement e;
+ QStringList importedEffects;
+ int maxchild = customeffects.count();
+ for (int i = 0; i < maxchild; i++) {
+ e = customeffects.at(i).toElement();
+ QString id = e.attribute("id");
+ QString tag = e.attribute("tag");
+ if (!id.isEmpty()) {
+ // Check if effect exists or save it
+ if (MainWindow::customEffects.hasEffect(tag, id) == -1) {
+ QDomDocument doc;
+ doc.appendChild(doc.importNode(e, true));
+ QString path = KStandardDirs::locateLocal("appdata", "effects/", true);
+ path += id + ".xml";
+ if (!QFile::exists(path)) {
+ importedEffects << id;
+ QFile file(path);
+ if (file.open(QFile::WriteOnly | QFile::Truncate)) {
+ QTextStream out(&file);
+ out << doc.toString();
+ }
+ }
+ }
+ }
+ }
+ if (!importedEffects.isEmpty()) KMessageBox::informationList(kapp->activeWindow(), i18n("The following effects were imported from the project:"), importedEffects);
+ return (!importedEffects.isEmpty());
+}
+
#include "kdenlivedoc.moc"