+void initEffects::fillTransitionsList(Mlt::Repository * repository, EffectsList* transitions, QStringList names) {
+ // remove transitions that are not implemented
+ int pos = names.indexOf("mix");
+ if (pos != -1) names.takeAt(pos);
+ pos = names.indexOf("region");
+ if (pos != -1) names.takeAt(pos);
+ foreach(const QString &name, names) {
+ QDomDocument ret;
+ QDomElement ktrans = ret.createElement("ktransition");
+ ret.appendChild(ktrans);
+ ktrans.setAttribute("tag", name);
+ QDomElement tname = ret.createElement("name");
+ QList<QDomElement> paramList;
+ Mlt::Properties *metadata = repository->metadata(transition_type, name.toAscii().data());
+ //kDebug() << filtername;
+ if (metadata && metadata->is_valid()) {
+ Mlt::Properties param_props((mlt_properties) metadata->get_data("parameters"));
+ for (int j = 0; param_props.is_valid() && j < param_props.count();j++) {
+ QDomElement params = ret.createElement("parameter");
+
+ Mlt::Properties paramdesc((mlt_properties) param_props.get_data(param_props.get_name(j)));
+
+ params.setAttribute("name", paramdesc.get("identifier"));
+
+ if (paramdesc.get("maximum")) params.setAttribute("max", paramdesc.get("maximum"));
+ if (paramdesc.get("minimum")) params.setAttribute("min", paramdesc.get("minimum"));
+ if (QString(paramdesc.get("type")) == "integer") {
+ params.setAttribute("type", "constant");
+ params.setAttribute("factor", "100");
+ }
+ if (QString(paramdesc.get("type")) == "boolean")
+ params.setAttribute("type", "bool");
+ if (!QString(paramdesc.get("format")).isEmpty()) {
+ params.setAttribute("type", "complex");
+ params.setAttribute("format", paramdesc.get("format"));
+
+ }
+ if (paramdesc.get("default")) params.setAttribute("default", paramdesc.get("default"));
+ if (paramdesc.get("value")) {
+ params.setAttribute("value", paramdesc.get("value"));
+ } else {
+ params.setAttribute("value", paramdesc.get("default"));
+ }
+
+
+ QDomElement pname = ret.createElement("name");
+ pname.appendChild(ret.createTextNode(paramdesc.get("title")));
+ params.appendChild(pname);
+
+ ktrans.appendChild(params);
+ }
+
+ ret.appendChild(ktrans);
+ if (metadata->get("title") && metadata->get("identifier")) {
+ ktrans.setAttribute("tag", name);
+ QDomElement tname = ret.createElement("name");
+ tname.appendChild(ret.createTextNode(metadata->get("title")));
+ ktrans.appendChild(tname);
+ }
+
+ //kDebug() << ret.toString();
+ } else {
+ if (name == "luma") {
+
+ tname.appendChild(ret.createTextNode("Luma"));
+
+ QString path(mlt_environment("MLT_DATA"));
+ path.append("/lumas/").append(mlt_environment("MLT_NORMALISATION"));
+ Mlt::Properties entries;
+ mlt_properties_dir_list(entries.get_properties(), path.toAscii().data(), "*.*", 1);
+ kDebug() << path << entries.count();
+ QString imagefiles;
+ //QStringList imagelist;
+ QString imagenamelist;
+ for (int i = 0;i < entries.count();i++) {
+ //if (!imagefiles.isEmpty()) // add empty entry too
+ imagefiles.append(",");
+ imagefiles.append(entries.get(i));
+ //imagelist << entries.get(i);
+ imagenamelist.append(",");
+ imagenamelist.append(KUrl(entries.get(i)).fileName());
+ }
+ paramList.append(quickParameterFill(ret, "Softness", "softness", "double", "0", "0", "100", "", "", "100"));
+ paramList.append(quickParameterFill(ret, "Invert", "invert", "bool", "0", "0", "1"));
+ paramList.append(quickParameterFill(ret, "ImageFile", "resource", "list", "", "", "", imagefiles, imagenamelist));
+ paramList.append(quickParameterFill(ret, "Reverse Transition", "reverse", "bool", "0", "0", "1"));
+ //thumbnailer.prepareThumbnailsCall(imagelist);
+
+ } else if (name == "composite") {
+ paramList.append(quickParameterFill(ret, "Geometry", "geometry", "geometry", "0%,0%:100%x100%:100", "-500;-500;-500;-500;0", "500;500;500;500;100"));
+ paramList.append(quickParameterFill(ret, "Distort", "distort", "bool", "1", "1", "1"));
+ tname.appendChild(ret.createTextNode("Composite"));
+ QDomDocument ret1;
+ QDomElement ktrans1 = ret1.createElement("ktransition");
+ ret1.appendChild(ktrans1);
+ ktrans1.setAttribute("tag", name);
+ QDomElement tname1 = ret.createElement("name");
+ tname1.appendChild(ret1.createTextNode("PIP"));
+
+ } else if (name == "mix") {
+ tname.appendChild(ret.createTextNode("Mix"));
+ } else if (name == "affine") {
+ tname.appendChild(ret.createTextNode("Affine"));
+ paramList.append(quickParameterFill(ret, "Rotate Y", "rotate_y", "double", "0", "0", "360"));
+ paramList.append(quickParameterFill(ret, "Rotate X", "rotate_x", "double", "0", "0", "360"));
+ paramList.append(quickParameterFill(ret, "Rotate Z", "rotate_z", "double", "0", "0", "360"));
+ paramList.append(quickParameterFill(ret, "Fix Rotate Y", "fix_rotate_y", "double", "0", "0", "360"));
+ paramList.append(quickParameterFill(ret, "Fix Rotate X", "fix_rotate_x", "double", "0", "0", "360"));
+ paramList.append(quickParameterFill(ret, "Fix Rotate Z", "fix_rotate_z", "double", "0", "0", "360"));
+ paramList.append(quickParameterFill(ret, "Shear Y", "shear_y", "double", "0", "0", "360"));
+ paramList.append(quickParameterFill(ret, "Shear X", "shear_x", "double", "0", "0", "360"));
+ paramList.append(quickParameterFill(ret, "Shear Z", "shear_z", "double", "0", "0", "360"));
+ paramList.append(quickParameterFill(ret, "Fix Shear Y", "fix_shear_y", "double", "0", "0", "360"));
+ paramList.append(quickParameterFill(ret, "Fix Shear X", "fix_shear_x", "double", "0", "0", "360"));
+ paramList.append(quickParameterFill(ret, "Fix Shear Z", "fix_shear_z", "double", "0", "0", "360"));
+ paramList.append(quickParameterFill(ret, "Mirror", "mirror_off", "bool", "0", "0", "1"));
+ paramList.append(quickParameterFill(ret, "Repeat", "repeat_off", "bool", "0", "0", "1"));
+ paramList.append(quickParameterFill(ret, "Geometry", "geometry", "geometry", "0;0;100;100;100", "0;0;100;100;100", "0;0;100;100;100"));
+ tname.appendChild(ret.createTextNode("Composite"));
+ } else if (name == "region") {
+ tname.appendChild(ret.createTextNode("Region"));
+ }
+
+
+ }
+
+ ktrans.appendChild(tname);
+
+ foreach(const QDomElement &e, paramList) {
+ ktrans.appendChild(e);
+ }
+
+
+ transitions->append(ret.documentElement());
+ //kDebug() << "//// //// TRANSITON XML";
+ //kDebug() << ret.toString();
+ /*
+
+ <transition fill="1" in="11" a_track="1" out="73" mlt_service="luma" b_track="2" softness="0" resource="/home/marco/Projekte/kdenlive/install_cmake/share/apps/kdenlive/pgm/PAL/square2.pgm" />
+ */
+ }
+
+ QString wipetrans = "<ktransition tag=\"composite\" ><name>Wipe</name><parameter tag=\"geometry\" type=\"wipe\" default=\"-100%,0%:100%x100%;-1=0%,0%:100%x100%\" name=\"geometry\"><name>Direction</name> </parameter><parameter tag=\"aligned\" default=\"0\" type=\"bool\" name=\"aligned\" ><name>Align</name></parameter></ktransition>";
+ QDomDocument ret;
+ ret.setContent(wipetrans);
+ transitions->append(ret.documentElement());
+}
+
+QDomElement initEffects::quickParameterFill(QDomDocument & doc, QString name, QString tag, QString type, QString def, QString min, QString max, QString list, QString listdisplaynames, QString factor, QString namedesc, QString format) {
+ QDomElement parameter = doc.createElement("parameter");
+ parameter.setAttribute("tag", tag);
+ parameter.setAttribute("default", def);
+ parameter.setAttribute("type", type);
+ parameter.setAttribute("name", tag);
+ parameter.setAttribute("max", max);
+ parameter.setAttribute("min", min);
+ if (!list.isEmpty())
+ parameter.setAttribute("paramlist", list);
+ if (!listdisplaynames.isEmpty())
+ parameter.setAttribute("paramlistdisplay", listdisplaynames);
+ if (!factor.isEmpty())
+ parameter.setAttribute("factor", factor);
+ if (!namedesc.isEmpty())
+ parameter.setAttribute("namedesc", namedesc);
+ if (!format.isEmpty())
+ parameter.setAttribute("format", format);
+ QDomElement pname = doc.createElement("name");
+ pname.appendChild(doc.createTextNode(name));
+ parameter.appendChild(pname);
+
+ return parameter;
+}