#include "projectlist.h"
#include "mainwindow.h"
#include "parametercontainer.h"
+#include "../customtrackview.h"
#include <KUrlRequester>
#include <KFileDialog>
m_keyframeEditor(NULL),
m_geometryWidget(NULL),
m_metaInfo(metaInfo),
- m_effect(effect)
+ m_effect(effect),
+ m_needsMonitorEffectScene(false)
{
m_in = info.cropStart.frames(KdenliveSettings::project_fps());
m_out = (info.cropStart + info.cropDuration).frames(KdenliveSettings::project_fps()) - 1;
QStringList listitems = pa.attribute("paramlist").split(';');
if (listitems.count() == 1) {
// probably custom effect created before change to ';' as separator
- listitems = pa.attribute("paramlist").split(",");
+ listitems = pa.attribute("paramlist").split(',');
}
QDomElement list = pa.firstChildElement("paramlistdisplay");
QStringList listitemsdisplay;
connect(pl, SIGNAL(parameterChanged()), this, SLOT(slotCollectAllParameters()));
} else if (type == "geometry") {
if (KdenliveSettings::on_monitor_effects()) {
+ m_needsMonitorEffectScene = true;
m_geometryWidget = new GeometryWidget(m_metaInfo->monitor, m_metaInfo->timecode, 0, true, effect.hasAttribute("showrotation"), parent);
m_geometryWidget->setFrameSize(m_metaInfo->frameSize);
- m_geometryWidget->slotShowScene(!disable);
- // connect this before setupParam to make sure the monitor scene shows up at startup
- connect(m_geometryWidget, SIGNAL(checkMonitorPosition(int)), this, SIGNAL(checkMonitorPosition(int)));
connect(m_geometryWidget, SIGNAL(parameterChanged()), this, SLOT(slotCollectAllParameters()));
if (minFrame == maxFrame)
m_geometryWidget->setupParam(pa, m_in, m_out);
m_vbox->addWidget(m_geometryWidget);
m_valueItems[paramName+"geometry"] = m_geometryWidget;
connect(m_geometryWidget, SIGNAL(seekToPos(int)), this, SIGNAL(seekTimeline(int)));
+ connect(m_geometryWidget, SIGNAL(importClipKeyframes()), this, SIGNAL(importClipKeyframes()));
connect(this, SIGNAL(syncEffectsPos(int)), m_geometryWidget, SLOT(slotSyncPosition(int)));
- connect(this, SIGNAL(effectStateChanged(bool)), m_geometryWidget, SLOT(slotShowScene(bool)));
} else {
Geometryval *geo = new Geometryval(m_metaInfo->profile, m_metaInfo->timecode, m_metaInfo->frameSize, 0);
if (minFrame == maxFrame)
if (pa.attribute("widget") == "corners") {
// we want a corners-keyframe-widget
CornersWidget *corners = new CornersWidget(m_metaInfo->monitor, pa, m_in, m_out, m_metaInfo->timecode, e.attribute("active_keyframe", "-1").toInt(), parent);
- corners->slotShowScene(!disable);
- connect(corners, SIGNAL(checkMonitorPosition(int)), this, SIGNAL(checkMonitorPosition(int)));
- connect(this, SIGNAL(effectStateChanged(bool)), corners, SLOT(slotShowScene(bool)));
+ m_needsMonitorEffectScene = true;
connect(this, SIGNAL(syncEffectsPos(int)), corners, SLOT(slotSyncPosition(int)));
geo = static_cast<KeyframeEdit *>(corners);
} else {
if (pa.hasAttribute("paramprefix")) value.remove(0, pa.attribute("paramprefix").size());
if (value.startsWith('#'))
value = value.replace('#', "0x");
- ChooseColorWidget *choosecolor = new ChooseColorWidget(paramName, value, parent);
- choosecolor->setAlphaChannelEnabled(true);
+ ChooseColorWidget *choosecolor = new ChooseColorWidget(paramName, value, pa.hasAttribute("alpha"), parent);
m_vbox->addWidget(choosecolor);
m_valueItems[paramName] = choosecolor;
connect(choosecolor, SIGNAL(displayMessage(const QString&, int)), this, SIGNAL(displayMessage(const QString&, int)));
connect(choosecolor, SIGNAL(modified()) , this, SLOT(slotCollectAllParameters()));
+ connect(choosecolor, SIGNAL(disableCurrentFilter(bool)) , this, SIGNAL(disableCurrentFilter(bool)));
} else if (type == "position") {
int pos = value.toInt();
if (effect.attribute("id") == "fadein" || effect.attribute("id") == "fade_from_black") {
meetDependency(paramName, type, EffectsList::parameter(e, depends));
#ifdef USE_QJSON
} else if (type == "roto-spline") {
+ m_needsMonitorEffectScene = true;
RotoWidget *roto = new RotoWidget(value, m_metaInfo->monitor, info, m_metaInfo->timecode, parent);
- roto->slotShowScene(!disable);
connect(roto, SIGNAL(valueChanged()), this, SLOT(slotCollectAllParameters()));
- connect(roto, SIGNAL(checkMonitorPosition(int)), this, SIGNAL(checkMonitorPosition(int)));
connect(roto, SIGNAL(seekToPos(int)), this, SIGNAL(seekTimeline(int)));
connect(this, SIGNAL(syncEffectsPos(int)), roto, SLOT(slotSyncPosition(int)));
- connect(this, SIGNAL(effectStateChanged(bool)), roto, SLOT(slotShowScene(bool)));
m_vbox->addWidget(roto);
m_valueItems[paramName] = roto;
#endif
QDomElement pa = namenode.item(i).toElement();
QString type = pa.attribute("type");
if (type == "filterjob") {
- emit startFilterJob(pa.attribute("filtertag"), pa.attribute("filterparams"), pa.attribute("finalfilter"), pa.attribute("consumer"), pa.attribute("consumerparams"), pa.attribute("wantedproperties"));
- kDebug()<<" - - -PROPS:\n"<<pa.attribute("filtertag")<<"-"<< pa.attribute("filterparams")<<"-"<< pa.attribute("consumer")<<"-"<< pa.attribute("consumerparams")<<"-"<< pa.attribute("wantedproperties");
+ QString filterparams = pa.attribute("filterparams");
+ if (filterparams.contains("%params")) {
+ // Replace with current geometry
+ EffectsParameterList parameters;
+ QDomNodeList params = m_effect.elementsByTagName("parameter");
+ CustomTrackView::adjustEffectParameters(parameters, params, m_metaInfo->profile);
+ QString paramData;
+ for (int j = 0; j < parameters.count(); j++)
+ paramData.append(parameters.at(j).name()+"="+parameters.at(j).value()+" ");
+ filterparams.replace("%params", paramData);
+ }
+ QMap <QString, QString> extraParams;
+ QDomNodeList jobparams = pa.elementsByTagName("jobparam");
+ for (int j = 0; j < jobparams.count(); j++) {
+ QDomElement e = jobparams.item(j).toElement();
+ extraParams.insert(e.attribute("name"), e.text().toUtf8());
+ }
+ emit startFilterJob(pa.attribute("filtertag"), filterparams, pa.attribute("consumer"), pa.attribute("consumerparams"), extraParams);
+ kDebug()<<" - - -PROPS:\n"<<pa.attribute("filtertag")<<"-"<< filterparams<<"-"<< pa.attribute("consumer")<<"-"<< pa.attribute("consumerparams")<<"-"<< pa.attribute("extraparams");
break;
}
}
}
}
-bool ParameterContainer::needsMonitorEffectScene()
+bool ParameterContainer::needsMonitorEffectScene() const
+{
+ return m_needsMonitorEffectScene;
+}
+
+void ParameterContainer::setKeyframes(const QString &data, int maximum)
{
- return true;
+ if (!m_geometryWidget) {
+ kDebug()<<" / / NO GEOMETRY WIDGET FOUND FOR IMPORTING DATA";
+ return;
+ }
+ m_geometryWidget->importKeyframes(data, maximum);
+
}
+