#include "positionedit.h"
#include "kis_curve_widget.h"
#include "kis_cubic_curve.h"
-#include "choosecolorwidget.h"
+#include "widgets/choosecolorwidget.h"
#include "geometrywidget.h"
#include "colortools.h"
#include "doubleparameterwidget.h"
#include "projectlist.h"
#include "mainwindow.h"
#include "parametercontainer.h"
+#include "../customtrackview.h"
#include <KUrlRequester>
#include <KFileDialog>
};
-ParameterContainer::ParameterContainer(QDomElement effect, ItemInfo info, EffectMetaInfo *metaInfo, QWidget * parent) :
+ParameterContainer::ParameterContainer(const QDomElement &effect, const ItemInfo &info, EffectMetaInfo *metaInfo, QWidget * parent) :
m_keyframeEditor(NULL),
m_geometryWidget(NULL),
m_metaInfo(metaInfo),
m_vbox->setContentsMargins(4, 0, 4, 0);
m_vbox->setSpacing(2);
- for (int i = 0; i < namenode.count() ; i++) {
+ for (int i = 0; i < namenode.count() ; ++i) {
QDomElement pa = namenode.item(i).toElement();
if (pa.tagName() != "parameter") continue;
QDomElement na = pa.firstChildElement("name");
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;
if (listitemsdisplay.count() != listitems.count())
listitemsdisplay = listitems;
lsval->list->setIconSize(QSize(30, 30));
- for (int i = 0; i < listitems.count(); i++) {
+ for (int i = 0; i < listitems.count(); ++i) {
lsval->list->addItem(listitemsdisplay.at(i), listitems.at(i));
QString entry = listitems.at(i);
if (!entry.isEmpty() && (entry.endsWith(".png") || entry.endsWith(".pgm"))) {
}
if (!value.isEmpty()) lsval->list->setCurrentIndex(listitems.indexOf(value));
lsval->name->setText(paramName);
+ lsval->setToolTip(comment);
lsval->labelComment->setText(comment);
lsval->widgetComment->setHidden(true);
m_valueItems[paramName] = lsval;
bval->setupUi(toFillin);
bval->checkBox->setCheckState(value == "0" ? Qt::Unchecked : Qt::Checked);
bval->name->setText(paramName);
+ bval->name->setToolTip(comment);
bval->labelComment->setText(comment);
bval->widgetComment->setHidden(true);
m_valueItems[paramName] = bval;
m_geometryWidget = new GeometryWidget(m_metaInfo->monitor, m_metaInfo->timecode, 0, true, effect.hasAttribute("showrotation"), parent);
m_geometryWidget->setFrameSize(m_metaInfo->frameSize);
connect(m_geometryWidget, SIGNAL(parameterChanged()), this, SLOT(slotCollectAllParameters()));
- if (minFrame == maxFrame)
+ if (minFrame == maxFrame) {
m_geometryWidget->setupParam(pa, m_in, m_out);
+ connect(this, SIGNAL(updateRange(int,int)), m_geometryWidget, SLOT(slotUpdateRange(int,int)));
+ }
else
m_geometryWidget->setupParam(pa, minFrame, maxFrame);
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)));
} else {
Geometryval *geo = new Geometryval(m_metaInfo->profile, m_metaInfo->timecode, m_metaInfo->frameSize, 0);
- if (minFrame == maxFrame)
+ if (minFrame == maxFrame) {
geo->setupParam(pa, m_in, m_out);
+ connect(this, SIGNAL(updateRange(int,int)), geo, SLOT(slotUpdateRange(int,int)));
+ }
else
geo->setupParam(pa, minFrame, maxFrame);
m_vbox->addWidget(geo);
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);
+ connect(this, SIGNAL(updateRange(int,int)), corners, SLOT(slotUpdateRange(int,int)));
m_needsMonitorEffectScene = true;
connect(this, SIGNAL(syncEffectsPos(int)), corners, SLOT(slotSyncPosition(int)));
geo = static_cast<KeyframeEdit *>(corners);
} else {
geo = new KeyframeEdit(pa, m_in, m_out, m_metaInfo->timecode, e.attribute("active_keyframe", "-1").toInt());
+ connect(this, SIGNAL(updateRange(int,int)), geo, SLOT(slotUpdateRange(int,int)));
}
m_vbox->addWidget(geo);
m_valueItems[paramName+"keyframe"] = geo;
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);
+ choosecolor->setToolTip(comment);
m_vbox->addWidget(choosecolor);
m_valueItems[paramName] = choosecolor;
- connect(choosecolor, SIGNAL(displayMessage(const QString&, int)), this, SIGNAL(displayMessage(const QString&, int)));
+ connect(choosecolor, SIGNAL(displayMessage(QString,int)), this, SIGNAL(displayMessage(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") {
pos = m_out - pos;
}
PositionEdit *posedit = new PositionEdit(paramName, pos, 0, m_out - m_in, m_metaInfo->timecode);
+ posedit->setToolTip(comment);
+ connect(this, SIGNAL(updateRange(int,int)), posedit, SLOT(setRange(int,int)));
m_vbox->addWidget(posedit);
m_valueItems[paramName+"position"] = posedit;
connect(posedit, SIGNAL(parameterChanged()), this, SLOT(slotCollectAllParameters()));
Urlval *cval = new Urlval;
cval->setupUi(toFillin);
cval->label->setText(paramName);
+ cval->setToolTip(comment);
cval->urlwidget->fileDialog()->setFilter(ProjectList::getExtensions());
m_valueItems[paramName] = cval;
cval->urlwidget->setUrl(KUrl(value));
connect(cval->urlwidget, SIGNAL(returnPressed()) , this, SLOT(slotCollectAllParameters()));
- connect(cval->urlwidget, SIGNAL(urlSelected(const KUrl&)) , this, SLOT(slotCollectAllParameters()));
+ connect(cval->urlwidget, SIGNAL(urlSelected(KUrl)) , this, SLOT(slotCollectAllParameters()));
m_uiItems.append(cval);
} else if (type == "keywords") {
Keywordval* kval = new Keywordval;
kval->setupUi(toFillin);
kval->label->setText(paramName);
kval->lineeditwidget->setText(value);
+ kval->setToolTip(comment);
QDomElement klistelem = pa.firstChildElement("keywords");
QDomElement kdisplaylistelem = pa.firstChildElement("keywordsdisplay");
QStringList keywordlist;
if (keyworddisplaylist.count() != keywordlist.count()) {
keyworddisplaylist = keywordlist;
}
- for (int i = 0; i < keywordlist.count(); i++) {
+ for (int i = 0; i < keywordlist.count(); ++i) {
kval->comboboxwidget->addItem(keyworddisplaylist.at(i), keywordlist.at(i));
}
// Add disabled user prompt at index 0
kval->comboboxwidget->model()->setData( kval->comboboxwidget->model()->index(0,0), QVariant(Qt::NoItemFlags), Qt::UserRole -1);
kval->comboboxwidget->setCurrentIndex(0);
m_valueItems[paramName] = kval;
- connect(kval->lineeditwidget, SIGNAL(editingFinished()) , this, SLOT(collectAllParameters()));
- connect(kval->comboboxwidget, SIGNAL(activated (const QString&)), this, SLOT(collectAllParameters()));
+ connect(kval->lineeditwidget, SIGNAL(editingFinished()) , this, SLOT(slotCollectAllParameters()));
+ connect(kval->comboboxwidget, SIGNAL(activated(QString)), this, SLOT(slotCollectAllParameters()));
m_uiItems.append(kval);
} else if (type == "fontfamily") {
Fontval* fval = new Fontval;
fval->name->setText(paramName);
fval->fontfamilywidget->setCurrentFont(QFont(value));
m_valueItems[paramName] = fval;
- connect(fval->fontfamilywidget, SIGNAL(currentFontChanged(const QFont &)), this, SLOT(collectAllParameters())) ;
+ connect(fval->fontfamilywidget, SIGNAL(currentFontChanged(QFont)), this, SLOT(slotCollectAllParameters())) ;
m_uiItems.append(fval);
} else if (type == "filterjob") {
QVBoxLayout *l= new QVBoxLayout(toFillin);
// Make sure all doubleparam spinboxes have the same width, looks much better
QList<DoubleParameterWidget *> allWidgets = findChildren<DoubleParameterWidget *>();
int minSize = 0;
- for (int i = 0; i < allWidgets.count(); i++) {
+ for (int i = 0; i < allWidgets.count(); ++i) {
if (minSize < allWidgets.at(i)->spinSize()) minSize = allWidgets.at(i)->spinSize();
}
- for (int i = 0; i < allWidgets.count(); i++) {
+ for (int i = 0; i < allWidgets.count(); ++i) {
allWidgets.at(i)->setSpinSize(minSize);
}
}
delete m_vbox;
}
-void ParameterContainer::meetDependency(const QString& name, QString type, QString value)
+void ParameterContainer::meetDependency(const QString& name, const QString &type, const QString &value)
{
if (type == "curve") {
KisCurveWidget *curve = (KisCurveWidget*)m_valueItems[name];
if (curve) {
- int color = value.toInt();
+ const int color = value.toInt();
curve->setPixmap(QPixmap::fromImage(ColorTools::rgbCurvePlane(curve->size(), (ColorTools::ColorsRGB)(color == 3 ? 4 : color), 0.8)));
}
} else if (type == "bezier_spline") {
m_keyframeEditor->updateTimecodeFormat();
QDomNodeList namenode = m_effect.elementsByTagName("parameter");
- for (int i = 0; i < namenode.count() ; i++) {
+ for (int i = 0; i < namenode.count() ; ++i) {
QDomNode pa = namenode.item(i);
QDomElement na = pa.firstChildElement("name");
QString type = pa.attributes().namedItem("type").nodeValue();
//QDomElement newparam = oldparam.cloneNode().toElement();
QDomNodeList namenode = m_effect.elementsByTagName("parameter");
- for (int i = 0; i < namenode.count() ; i++) {
+ for (int i = 0; i < namenode.count() ; ++i) {
QDomElement pa = namenode.item(i).toElement();
QDomElement na = pa.firstChildElement("name");
QString type = pa.attribute("type");
namenode.item(i).toElement().setAttribute("value", geom->getValue());
}
} else if (type == "addedgeometry") {
- namenode.item(i).toElement().setAttribute("value", m_geometryWidget->getExtraValue(namenode.item(i).toElement().attribute("name")));
+ if (m_geometryWidget) namenode.item(i).toElement().setAttribute("value", m_geometryWidget->getExtraValue(namenode.item(i).toElement().attribute("name")));
} else if (type == "position") {
PositionEdit *pedit = ((PositionEdit*)m_valueItems.value(paramName));
int pos = pedit->getPosition();
pa.setAttribute("intimeline", "1");
}
else if (pa.hasAttribute("intimeline"))
- pa.removeAttribute("intimeline");
+ pa.setAttribute("intimeline", "0");
} else if (type == "url") {
KUrlRequester *req = ((Urlval*)m_valueItems.value(paramName))->urlwidget;
setValue = req->url().path();
void ParameterContainer::slotStartFilterJobAction()
{
QDomNodeList namenode = m_effect.elementsByTagName("parameter");
- for (int i = 0; i < namenode.count() ; i++) {
+ for (int i = 0; i < namenode.count() ; ++i) {
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("%position")) {
+ if (m_geometryWidget) filterparams.replace("%position", QString::number(m_geometryWidget->currentPosition()));
+ }
+ 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());
+ }
+ extraParams.insert("offset", QString::number(m_in));
+ 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;
}
}
{
return m_needsMonitorEffectScene;
}
+
+void ParameterContainer::setKeyframes(const QString &data, int maximum)
+{
+ if (!m_geometryWidget) {
+ kDebug()<<" / / NO GEOMETRY WIDGET FOUND FOR IMPORTING DATA";
+ return;
+ }
+ m_geometryWidget->importKeyframes(data, maximum);
+
+}
+
+void ParameterContainer::setRange(int inPoint, int outPoint)
+{
+ m_in = inPoint;
+ m_out = outPoint;
+ emit updateRange(m_in, m_out);
+}
+
+
+
+#include "parametercontainer.moc"