-
- for (int i = 0; i < namenode.count() ; i++) {
- QDomElement pa = namenode.item(i).toElement();
- QDomNode na = pa.firstChildElement("name");
- QString type = pa.attribute("type");
- QString paramName = i18n(na.toElement().text().toUtf8().data());
- QWidget * toFillin = new QWidget(m_baseWidget);
- QString value = pa.attribute("value").isNull() ?
- pa.attribute("default") : pa.attribute("value");
-
- /** Currently supported parameter types are:
- * constant (=double): a slider with an integer value (use the "factor" attribute to divide the value so that you can get a double
- * list: a combobox containing a list of values to choose
- * bool: a checkbox
- * complex: designed for keyframe parameters, but old and not finished, do not use
- * geometry: a rectangle that can be moved & resized, with possible keyframes, used in composite transition
- * keyframe: a list widget with a list of entries (position and value)
- * color: a color chooser button
- * position: a slider representing the position of a frame in the current clip
- * curve: a single curve representing multiple points
- * wipe: a widget designed for the wipe transition, allowing to choose a position (left, right, top,...)
- */
-
- if (type == "double" || type == "constant") {
- int min;
- int max;
- if (pa.attribute("min").startsWith('%'))
- min = (int) ProfilesDialog::getStringEval(m_profile, pa.attribute("min"));
- else
- min = pa.attribute("min").toInt();
- if (pa.attribute("max").startsWith('%'))
- max = (int) ProfilesDialog::getStringEval(m_profile, pa.attribute("max"));
- else
- max = pa.attribute("max").toInt();
- createSliderItem(paramName, (int)(value.toDouble() + 0.5) , min, max, pa.attribute("suffix", QString()));
- delete toFillin;
- toFillin = NULL;
- } else if (type == "list") {
- Listval *lsval = new Listval;
- lsval->setupUi(toFillin);
- QStringList listitems = pa.attribute("paramlist").split(',');
- QStringList listitemsdisplay = pa.attribute("paramlistdisplay").split(',');
- if (listitemsdisplay.count() != listitems.count()) listitemsdisplay = listitems;
- //lsval->list->addItems(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 (!EffectStackEdit::iconCache.contains(entry)) {
- QImage pix(entry);
- EffectStackEdit::iconCache[entry] = pix.scaled(30, 30);
- }
- lsval->list->setItemIcon(i, QPixmap::fromImage(iconCache[entry]));
- }
- }
- if (!value.isEmpty()) lsval->list->setCurrentIndex(listitems.indexOf(value));
- lsval->title->setTitle(paramName);
- m_valueItems[paramName] = lsval;
- connect(lsval->list, SIGNAL(currentIndexChanged(int)) , this, SLOT(collectAllParameters()));
- 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->checkBox->setText(paramName);
- m_valueItems[paramName] = bval;
- connect(bval->checkBox, SIGNAL(stateChanged(int)) , this, SLOT(collectAllParameters()));
- m_uiItems.append(bval);
- } else if (type == "complex") {
- /*QStringList names=nodeAtts.namedItem("name").nodeValue().split(';');
- QStringList max=nodeAtts.namedItem("max").nodeValue().split(';');
- QStringList min=nodeAtts.namedItem("min").nodeValue().split(';');
- QStringList val=value.split(';');
- kDebug() << "in complex"<<names.size() << " " << max.size() << " " << min.size() << " " << val.size() ;
- if ( (names.size() == max.size() ) &&
- (names.size()== min.size()) &&
- (names.size()== val.size()) )
- {
- for (int i=0;i< names.size();i++){
- createSliderItem(names[i],val[i].toInt(),min[i].toInt(),max[i].toInt());
- };
- }*/
- ComplexParameter *pl = new ComplexParameter;
- pl->setupParam(d, pa.attribute("name"), 0, 100);
- m_vbox->addWidget(pl);
- m_valueItems[paramName+"complex"] = pl;
- connect(pl, SIGNAL(parameterChanged()), this, SLOT(collectAllParameters()));
- } else if (type == "geometry") {
- Geometryval *geo = new Geometryval(m_profile, m_timecode, m_frameSize, pos);
- 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(collectAllParameters()));
- connect(geo, SIGNAL(seekToPos(int)), this, SIGNAL(seekTimeline(int)));
- } 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, pa.attribute("min").toInt(), pa.attribute("max").toInt(), m_timecode, e.attribute("active_keyframe", "-1").toInt());
- m_vbox->addWidget(geo);
- m_valueItems[paramName+"keyframe"] = geo;
- m_keyframeEditor = geo;
- connect(geo, SIGNAL(parameterChanged()), this, SLOT(collectAllParameters()));
- connect(geo, SIGNAL(seekToPos(int)), this, SIGNAL(seekTimeline(int)));
- } else {
- // we already have a keyframe editor, so just add another column for the new param
- m_keyframeEditor->addParameter(pa);
- }
- } else if (type == "color") {
- if (value.startsWith('#'))
- value = value.replace('#', "0x");
- bool ok;
- ChooseColorWidget *choosecolor = new ChooseColorWidget(paramName, QColor(value.toUInt(&ok, 16)), this);
- 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(collectAllParameters()));
- } else if (type == "position") {
- int pos = value.toInt();
- if (d.attribute("id") == "fadein" || d.attribute("id") == "fade_from_black") {
- pos = pos - m_in;
- } else if (d.attribute("id") == "fadeout" || d.attribute("id") == "fade_to_black") {
- // fadeout position starts from clip end
- pos = m_out - (pos - m_in);
- }
- PositionEdit *posedit = new PositionEdit(paramName, pos, 1, m_out, m_timecode);
- m_vbox->addWidget(posedit);
- m_valueItems[paramName+"position"] = posedit;
- connect(posedit, SIGNAL(parameterChanged()), this, SLOT(collectAllParameters()));
- } else if (type == "curve") {
- KisCurveWidget *curve = new KisCurveWidget(this);
- curve->setMaxPoints(pa.attribute("max").toInt());
- QList<QPointF> points;
- int number = EffectsList::parameter(e, pa.attribute("number")).toInt();
- QString inName = pa.attribute("inpoints");
- QString outName = pa.attribute("outpoints");
- int start = pa.attribute("min").toInt();
- for (int j = start; j <= number; j++) {
- QString in = inName;
- in.replace("%i", QString::number(j));
- QString out = outName;
- out.replace("%i", QString::number(j));
- points << QPointF(EffectsList::parameter(e, in).toDouble(), EffectsList::parameter(e, out).toDouble());
- }
- if (!points.isEmpty())
- curve->setCurve(KisCubicCurve(points));
- QSpinBox *spinin = new QSpinBox();
- spinin->setRange(0, 1000);
- QSpinBox *spinout = new QSpinBox();
- spinout->setRange(0, 1000);
- curve->setupInOutControls(spinin, spinout, 0, 1000);
- m_vbox->addWidget(curve);
- m_vbox->addWidget(spinin);
- m_vbox->addWidget(spinout);
- connect(curve, SIGNAL(modified()), this, SLOT(collectAllParameters()));
- m_valueItems[paramName] = curve;
- } else if (type == "wipe") {
- Wipeval *wpval = new Wipeval;
- wpval->setupUi(toFillin);
- wipeInfo w = getWipeInfo(value);
- switch (w.start) {
- case UP:
- wpval->start_up->setChecked(true);
- break;
- case DOWN:
- wpval->start_down->setChecked(true);
- break;
- case RIGHT:
- wpval->start_right->setChecked(true);
- break;
- case LEFT:
- wpval->start_left->setChecked(true);
- break;
- default:
- wpval->start_center->setChecked(true);
- break;
- }
- switch (w.end) {
- case UP:
- wpval->end_up->setChecked(true);
- break;
- case DOWN:
- wpval->end_down->setChecked(true);
- break;
- case RIGHT:
- wpval->end_right->setChecked(true);
- break;
- case LEFT:
- wpval->end_left->setChecked(true);
- break;
- default:
- wpval->end_center->setChecked(true);
- break;
- }
- wpval->start_transp->setValue(w.startTransparency);
- wpval->end_transp->setValue(w.endTransparency);
- m_valueItems[paramName] = wpval;
- connect(wpval->end_up, SIGNAL(clicked()), this, SLOT(collectAllParameters()));
- connect(wpval->end_down, SIGNAL(clicked()), this, SLOT(collectAllParameters()));
- connect(wpval->end_left, SIGNAL(clicked()), this, SLOT(collectAllParameters()));
- connect(wpval->end_right, SIGNAL(clicked()), this, SLOT(collectAllParameters()));
- connect(wpval->end_center, SIGNAL(clicked()), this, SLOT(collectAllParameters()));
- connect(wpval->start_up, SIGNAL(clicked()), this, SLOT(collectAllParameters()));
- connect(wpval->start_down, SIGNAL(clicked()), this, SLOT(collectAllParameters()));
- connect(wpval->start_left, SIGNAL(clicked()), this, SLOT(collectAllParameters()));
- connect(wpval->start_right, SIGNAL(clicked()), this, SLOT(collectAllParameters()));
- connect(wpval->start_center, SIGNAL(clicked()), this, SLOT(collectAllParameters()));
- connect(wpval->start_transp, SIGNAL(valueChanged(int)), this, SLOT(collectAllParameters()));
- connect(wpval->end_transp, SIGNAL(valueChanged(int)), this, SLOT(collectAllParameters()));
- //wpval->title->setTitle(na.toElement().text());
- m_uiItems.append(wpval);
- } else if (type == "url") {
- Urlval *cval = new Urlval;
- cval->setupUi(toFillin);
- cval->label->setText(paramName);
- cval->urlwidget->fileDialog()->setFilter(ProjectList::getExtensions());
- m_valueItems[paramName] = cval;
- cval->urlwidget->setUrl(KUrl(value));
- connect(cval->urlwidget, SIGNAL(returnPressed()) , this, SLOT(collectAllParameters()));
- connect(cval->urlwidget, SIGNAL(urlSelected(const KUrl&)) , this, SLOT(collectAllParameters()));
- m_uiItems.append(cval);
- } else {
- delete toFillin;
- toFillin = NULL;
- }
-
- if (toFillin)
- m_vbox->addWidget(toFillin);