- emit moveEffect(ix, effectIndex(), m_info.groupIndex, m_info.groupName);
- event->setDropAction(Qt::MoveAction);
- event->accept();
-}
-
-ParameterContainer::ParameterContainer(QDomElement effect, ItemInfo info, EffectMetaInfo *metaInfo, QWidget * parent) :
- m_keyframeEditor(NULL),
- m_geometryWidget(NULL),
- m_metaInfo(metaInfo),
- m_effect(effect)
-{
- m_in = info.cropStart.frames(KdenliveSettings::project_fps());
- m_out = (info.cropStart + info.cropDuration).frames(KdenliveSettings::project_fps()) - 1;
-
- QDomNodeList namenode = effect.childNodes(); //elementsByTagName("parameter");
-
- QDomElement e = effect.toElement();
- int minFrame = e.attribute("start").toInt();
- int maxFrame = e.attribute("end").toInt();
- // In transitions, maxFrame is in fact one frame after the end of transition
- if (maxFrame > 0) maxFrame --;
-
- bool disable = effect.attribute("disable") == "1" && KdenliveSettings::disable_effect_parameters();
- parent->setEnabled(!disable);
-
- bool stretch = true;
- m_vbox = new QVBoxLayout(parent);
- m_vbox->setContentsMargins(4, 0, 4, 0);
- m_vbox->setSpacing(2);
-
- for (int i = 0; i < namenode.count() ; i++) {
- QDomElement pa = namenode.item(i).toElement();
- if (pa.tagName() != "parameter") continue;
- QDomElement na = pa.firstChildElement("name");
- QDomElement commentElem = pa.firstChildElement("comment");
- QString type = pa.attribute("type");
- QString paramName = na.isNull() ? pa.attribute("name") : i18n(na.text().toUtf8().data());
- QString comment;
- if (!commentElem.isNull())
- comment = i18n(commentElem.text().toUtf8().data());
- QWidget * toFillin = new QWidget(parent);
- QString value = pa.attribute("value").isNull() ?
- pa.attribute("default") : pa.attribute("value");
-
-
- /** See effects/README for info on the different types */
-
- if (type == "double" || type == "constant") {
- double min;
- double max;
- if (pa.attribute("min").contains('%'))
- min = ProfilesDialog::getStringEval(m_metaInfo->profile, pa.attribute("min"), m_metaInfo->frameSize);
- else
- min = pa.attribute("min").toDouble();
- if (pa.attribute("max").contains('%'))
- max = ProfilesDialog::getStringEval(m_metaInfo->profile, pa.attribute("max"), m_metaInfo->frameSize);
- else
- max = pa.attribute("max").toDouble();
-
- DoubleParameterWidget *doubleparam = new DoubleParameterWidget(paramName, value.toDouble(), min, max,
- pa.attribute("default").toDouble(), comment, -1, pa.attribute("suffix"), pa.attribute("decimals").toInt(), parent);
- doubleparam->setFocusPolicy(Qt::StrongFocus);
- m_vbox->addWidget(doubleparam);
- m_valueItems[paramName] = doubleparam;
- connect(doubleparam, SIGNAL(valueChanged(double)), this, SLOT(slotCollectAllParameters()));
- connect(this, SIGNAL(showComments(bool)), doubleparam, SLOT(slotShowComment(bool)));
- } else if (type == "list") {
- Listval *lsval = new Listval;
- lsval->setupUi(toFillin);
- lsval->list->setFocusPolicy(Qt::StrongFocus);
- QStringList listitems = pa.attribute("paramlist").split(';');
- if (listitems.count() == 1) {
- // probably custom effect created before change to ';' as separator
- listitems = pa.attribute("paramlist").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));
- 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 (!CollapsibleEffect::iconCache.contains(entry)) {
- QImage pix(entry);
- CollapsibleEffect::iconCache[entry] = pix.scaled(30, 30);
- }
- lsval->list->setItemIcon(i, QPixmap::fromImage(CollapsibleEffect::iconCache[entry]));
- }
- }
- if (!value.isEmpty()) lsval->list->setCurrentIndex(listitems.indexOf(value));
- lsval->name->setText(paramName);
- lsval->labelComment->setText(comment);
- lsval->widgetComment->setHidden(true);
- m_valueItems[paramName] = lsval;
- connect(lsval->list, SIGNAL(currentIndexChanged(int)) , this, SLOT(slotCollectAllParameters()));
- if (!comment.isEmpty())
- connect(this, SIGNAL(showComments(bool)), lsval->widgetComment, SLOT(setVisible(bool)));
- m_uiItems.append(lsval);
- } else if (type == "bool") {
- Boolval *bval = new Boolval;
- bval->setupUi(toFillin);
- bval->checkBox->setCheckState(value == "0" ? Qt::Unchecked : Qt::Checked);
- bval->name->setText(paramName);
- bval->labelComment->setText(comment);
- bval->widgetComment->setHidden(true);
- m_valueItems[paramName] = bval;
- connect(bval->checkBox, SIGNAL(stateChanged(int)) , this, SLOT(slotCollectAllParameters()));
- if (!comment.isEmpty())
- connect(this, SIGNAL(showComments(bool)), bval->widgetComment, SLOT(setVisible(bool)));
- m_uiItems.append(bval);
- } else if (type == "complex") {
- ComplexParameter *pl = new ComplexParameter;
- pl->setupParam(effect, pa.attribute("name"), 0, 100);
- m_vbox->addWidget(pl);
- m_valueItems[paramName+"complex"] = pl;
- connect(pl, SIGNAL(parameterChanged()), this, SLOT(slotCollectAllParameters()));
- } else if (type == "geometry") {
- if (KdenliveSettings::on_monitor_effects()) {
- 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);
- 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(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)
- geo->setupParam(pa, m_in, m_out);
- else
- geo->setupParam(pa, minFrame, maxFrame);
- m_vbox->addWidget(geo);
- m_valueItems[paramName+"geometry"] = geo;
- connect(geo, SIGNAL(parameterChanged()), this, SLOT(slotCollectAllParameters()));
- connect(geo, SIGNAL(seekToPos(int)), this, SIGNAL(seekTimeline(int)));
- connect(this, SIGNAL(syncEffectsPos(int)), geo, SLOT(slotSyncPosition(int)));