+void TrackView::adjustparameterValue(QDomNodeList clipeffectparams, const QString ¶mname, const QString ¶mvalue)
+{
+ QDomElement e;
+ QLocale locale;
+ for (int k = 0; k < clipeffectparams.count(); k++) {
+ e = clipeffectparams.item(k).toElement();
+ if (!e.isNull() && e.tagName() == "parameter" && e.attribute("name") == paramname) {
+ QString type = e.attribute("type");
+ QString factor = e.attribute("factor", "1");
+ double fact;
+ if (factor.contains('%')) {
+ fact = ProfilesDialog::getStringEval(m_doc->mltProfile(), factor);
+ } else {
+ fact = factor.toDouble();
+ }
+ double offset = e.attribute("offset", "0").toDouble();
+ if (type == "simplekeyframe") {
+ QStringList kfrs = paramvalue.split(";");
+ for (int l = 0; l < kfrs.count(); l++) {
+ QString fr = kfrs.at(l).section('=', 0, 0);
+ double val = locale.toDouble(kfrs.at(l).section('=', 1, 1));
+ //kfrs[l] = fr + ":" + locale.toString((int)(val * fact));
+ kfrs[l] = fr + ':' + QString::number((int) (offset + val * fact));
+ }
+ e.setAttribute("keyframes", kfrs.join(";"));
+ } else if (type == "double" || type == "constant") {
+ bool ok;
+ e.setAttribute("value", offset + locale.toDouble(paramvalue, &ok) * fact);
+ if (!ok)
+ e.setAttribute("value", paramvalue);
+ } else {
+ e.setAttribute("value", paramvalue);
+ }
+ break;
+ }
+ }
+}
+
+
+QDomElement TrackView::getEffectByTag(const QString &effecttag, const QString &effectid)
+{
+ QDomElement clipeffect = MainWindow::customEffects.getEffectByTag(QString(), effectid);
+ if (clipeffect.isNull()) {
+ clipeffect = MainWindow::videoEffects.getEffectByTag(effecttag, effectid);
+ }
+ if (clipeffect.isNull()) {
+ clipeffect = MainWindow::audioEffects.getEffectByTag(effecttag, effectid);
+ }
+ return clipeffect;
+}
+
+
+DocClipBase *TrackView::getMissingProducer(const QString &id) const