#include "colortools.h"
#include "doubleparameterwidget.h"
#include "cornerswidget.h"
+#include "beziercurve/beziersplinewidget.h"
#include <KDebug>
#include <KLocale>
QMap<QString, QImage> EffectStackEdit::iconCache;
EffectStackEdit::EffectStackEdit(Monitor *monitor, QWidget *parent) :
- QScrollArea(parent),
- m_in(0),
- m_out(0),
- m_frameSize(QPoint()),
- m_keyframeEditor(NULL),
- m_monitor(monitor)
+ QScrollArea(parent),
+ m_in(0),
+ m_out(0),
+ m_frameSize(QPoint()),
+ m_keyframeEditor(NULL),
+ m_monitor(monitor)
{
m_baseWidget = new QWidget(this);
setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
KisCurveWidget *curve = (KisCurveWidget*)m_valueItems[name];
if (curve) {
int color = value.toInt();
- curve->setPixmap(QPixmap::fromImage(ColorTools::rgbCurvePlane(curve->size(), (ColorTools::ColorsRGB)color, 0.8)));
+ curve->setPixmap(QPixmap::fromImage(ColorTools::rgbCurvePlane(curve->size(), (ColorTools::ColorsRGB)(color == 3 ? 4 : color), 0.8)));
+ }
+ } else if (type == "bezier_spline") {
+ BezierSplineWidget *widget = (BezierSplineWidget*)m_valueItems[name];
+ if (widget) {
+ widget->setMode((BezierSplineWidget::CurveModes)((int)(value.toDouble() * 10)));
}
}
}
void EffectStackEdit::updateParameter(const QString &name, const QString &value)
{
m_params.setAttribute(name, value);
+
+ if (name == "disable") {
+ // if effect is disabled, disable parameters widget
+ setEnabled(value.toInt() == 0 || !KdenliveSettings::disable_effect_parameters());
+ if (KdenliveSettings::on_monitor_effects()) {
+ // effect disabled, hide monitor scene if any
+ QDomNodeList namenode = m_params.elementsByTagName("parameter");
+ for (int i = 0; i < namenode.count() ; i++) {
+ QDomNode pa = namenode.item(i);
+ QDomNode na = pa.firstChildElement("name");
+ QString type = pa.attributes().namedItem("type").nodeValue();
+ if (type == "geometry") {
+ QString paramName = i18n(na.toElement().text().toUtf8().data());
+ paramName.append("geometry");
+ GeometryWidget *geometry = ((GeometryWidget*)m_valueItems.value(paramName));
+ geometry->slotShowScene(value.toInt() == 0 || !KdenliveSettings::disable_effect_parameters());
+ }
+ }
+ }
+ }
}
void EffectStackEdit::transferParamDesc(const QDomElement d, int pos, int in, int out, bool isEffect)
const int minFrame = e.attribute("start").toInt();
const int maxFrame = e.attribute("end").toInt();
+ bool disable = d.attribute("disable") == "1" && KdenliveSettings::disable_effect_parameters();
+ setEnabled(!disable);
+
+ bool stretch = true;
+
for (int i = 0; i < namenode.count() ; i++) {
QDomElement pa = namenode.item(i).toElement();
- QDomNode na = pa.firstChildElement("name");
+ QDomElement na = pa.firstChildElement("name");
+ QDomElement commentElem = pa.firstChildElement("comment");
QString type = pa.attribute("type");
- QString paramName = i18n(na.toElement().text().toUtf8().data());
+ QString paramName = i18n(na.text().toUtf8().data());
+ QString comment;
+ if (!commentElem.isNull())
+ comment = i18n(commentElem.text().toUtf8().data());
QWidget * toFillin = new QWidget(m_baseWidget);
QString value = pa.attribute("value").isNull() ?
pa.attribute("default") : pa.attribute("value");
max = pa.attribute("max").toInt();
DoubleParameterWidget *doubleparam = new DoubleParameterWidget(paramName, (int)(value.toDouble() + 0.5), min, max,
- pa.attribute("default").toInt(), pa.attribute("suffix"), this);
+ pa.attribute("default").toInt(), comment, pa.attribute("suffix"), this);
m_vbox->addWidget(doubleparam);
m_valueItems[paramName] = doubleparam;
connect(doubleparam, SIGNAL(valueChanged(int)), this, SLOT(collectAllParameters()));
+ connect(this, SIGNAL(showComments()), doubleparam, SLOT(slotShowComment()));
} else if (type == "list") {
Listval *lsval = new Listval;
lsval->setupUi(toFillin);
QStringList listitems = pa.attribute("paramlist").split(',');
- QStringList listitemsdisplay = pa.attribute("paramlistdisplay").split(',');
+ QDomElement list = pa.firstChildElement("paramlistdisplay");
+ QStringList listitemsdisplay;
+ if (!list.isNull()) listitemsdisplay = i18n(list.text().toUtf8().data()).split(',');
+ else listitemsdisplay = i18n(pa.attribute("paramlistdisplay").toUtf8().data()).split(',');
if (listitemsdisplay.count() != listitems.count())
listitemsdisplay = listitems;
lsval->list->setIconSize(QSize(30, 30));
connect(pl, SIGNAL(parameterChanged()), this, SLOT(collectAllParameters()));
} else if (type == "geometry") {
if (KdenliveSettings::on_monitor_effects()) {
- GeometryWidget *geometry = new GeometryWidget(m_monitor, m_timecode, pos, isEffect, this);
+ GeometryWidget *geometry = new GeometryWidget(m_monitor, m_timecode, pos, isEffect, disable, this);
// connect this before setupParam to make sure the monitor scene shows up at startup
connect(geometry, SIGNAL(checkMonitorPosition(int)), this, SIGNAL(checkMonitorPosition(int)));
connect(geometry, SIGNAL(parameterChanged()), this, SLOT(collectAllParameters()));
}
} else if (type == "keyframe" || type == "simplekeyframe") {
// keyframe editor widget
- kDebug() << "min: " << m_in << ", MAX: " << m_out;
if (m_keyframeEditor == NULL) {
KeyframeEdit *geo = new KeyframeEdit(pa, m_in, m_in + m_out, m_timecode, e.attribute("active_keyframe", "-1").toInt());
m_vbox->addWidget(geo);
m_keyframeEditor = geo;
connect(geo, SIGNAL(parameterChanged()), this, SLOT(collectAllParameters()));
connect(geo, SIGNAL(seekToPos(int)), this, SIGNAL(seekTimeline(int)));
+ connect(this, SIGNAL(showComments()), geo, SIGNAL(showComments()));
} else {
// we already have a keyframe editor, so just add another column for the new param
m_keyframeEditor->addParameter(pa);
connect(curve, SIGNAL(modified()), this, SLOT(collectAllParameters()));
m_valueItems[paramName] = curve;
+ QString depends = pa.attribute("depends");
+ if (!depends.isEmpty())
+ meetDependency(paramName, type, EffectsList::parameter(e, depends));
+ } else if (type == "bezier_spline") {
+ BezierSplineWidget *widget = new BezierSplineWidget(value, this);
+ stretch = false;
+ m_vbox->addWidget(widget);
+ m_valueItems[paramName] = widget;
+ connect(widget, SIGNAL(modified()), this, SLOT(collectAllParameters()));
QString depends = pa.attribute("depends");
if (!depends.isEmpty())
meetDependency(paramName, type, EffectsList::parameter(e, depends));
if (toFillin)
m_vbox->addWidget(toFillin);
}
- m_vbox->addStretch();
- if(m_keyframeEditor)
+ if (stretch)
+ m_vbox->addStretch();
+
+ if (m_keyframeEditor)
m_keyframeEditor->checkVisibleParam();
}
QString depends = pa.attributes().namedItem("depends").nodeValue();
if (!depends.isEmpty())
meetDependency(paramName, type, EffectsList::parameter(newparam, depends));
+ } else if (type == "bezier_spline") {
+ BezierSplineWidget *widget = (BezierSplineWidget*)m_valueItems.value(paramName);
+ setValue = widget->spline();
+ QString depends = pa.attributes().namedItem("depends").nodeValue();
+ if (!depends.isEmpty())
+ meetDependency(paramName, type, EffectsList::parameter(newparam, depends));
} else if (type == "corners") {
CornersWidget *corners = ((CornersWidget*)m_valueItems.value(paramName));
QString xName = pa.attributes().namedItem("xpoints").nodeValue();