X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Feffectstack%2Fparametercontainer.cpp;h=6bc33844ae54d962795a7b2c964c197fd48f4d76;hb=eafc34b6b1318c71b097bb5ad609f37f2eb62d04;hp=82b228a4022d8d364146ff9b13e57253f436271e;hpb=f41770656c58ffc541441d04a3845cd1005fcdcf;p=kdenlive diff --git a/src/effectstack/parametercontainer.cpp b/src/effectstack/parametercontainer.cpp index 82b228a4..6bc33844 100644 --- a/src/effectstack/parametercontainer.cpp +++ b/src/effectstack/parametercontainer.cpp @@ -43,6 +43,7 @@ #include "projectlist.h" #include "mainwindow.h" #include "parametercontainer.h" +#include "../customtrackview.h" #include #include @@ -94,7 +95,7 @@ class Fontval: public QWidget, public Ui::Fontval_UI }; -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), @@ -120,7 +121,7 @@ ParameterContainer::ParameterContainer(QDomElement effect, ItemInfo info, Effect 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"); @@ -175,7 +176,7 @@ ParameterContainer::ParameterContainer(QDomElement effect, ItemInfo info, Effect 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"))) { @@ -188,6 +189,7 @@ ParameterContainer::ParameterContainer(QDomElement effect, ItemInfo info, Effect } 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; @@ -200,6 +202,7 @@ ParameterContainer::ParameterContainer(QDomElement effect, ItemInfo info, Effect 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; @@ -219,18 +222,23 @@ ParameterContainer::ParameterContainer(QDomElement effect, ItemInfo info, Effect 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); @@ -249,11 +257,13 @@ ParameterContainer::ParameterContainer(QDomElement effect, ItemInfo info, Effect 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(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; @@ -270,10 +280,12 @@ ParameterContainer::ParameterContainer(QDomElement effect, ItemInfo info, Effect if (value.startsWith('#')) value = value.replace('#', "0x"); 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") { @@ -283,6 +295,8 @@ ParameterContainer::ParameterContainer(QDomElement effect, ItemInfo info, Effect 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())); @@ -402,17 +416,19 @@ ParameterContainer::ParameterContainer(QDomElement effect, ItemInfo info, Effect 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; @@ -424,7 +440,7 @@ ParameterContainer::ParameterContainer(QDomElement effect, ItemInfo info, Effect 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 @@ -432,8 +448,8 @@ ParameterContainer::ParameterContainer(QDomElement effect, ItemInfo info, Effect 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; @@ -441,7 +457,7 @@ ParameterContainer::ParameterContainer(QDomElement effect, ItemInfo info, Effect 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); @@ -467,10 +483,10 @@ ParameterContainer::ParameterContainer(QDomElement effect, ItemInfo info, Effect // Make sure all doubleparam spinboxes have the same width, looks much better QList allWidgets = findChildren(); 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); } } @@ -481,12 +497,12 @@ ParameterContainer::~ParameterContainer() 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") { @@ -545,7 +561,7 @@ void ParameterContainer::updateTimecodeFormat() 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(); @@ -581,7 +597,7 @@ void ParameterContainer::slotCollectAllParameters() //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"); @@ -624,7 +640,7 @@ void ParameterContainer::slotCollectAllParameters() 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(); @@ -724,7 +740,7 @@ void ParameterContainer::slotCollectAllParameters() 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(); @@ -802,12 +818,33 @@ void ParameterContainer::updateParameter(const QString &key, const QString &valu 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"<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 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"<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"