X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Feffectstackedit.cpp;h=a496a6ec229de690cc876f0ad6797e56975d5151;hb=bb32a23e9e4ed5b55320c7074b3eca686ef8c0c5;hp=74af29bdca2fc11c73b82a2304d5e5ed69282169;hpb=cd0a632bc2ffba5c097869364ddffae65605b97b;p=kdenlive diff --git a/src/effectstackedit.cpp b/src/effectstackedit.cpp index 74af29bd..a496a6ec 100644 --- a/src/effectstackedit.cpp +++ b/src/effectstackedit.cpp @@ -21,9 +21,11 @@ #include "ui_boolval_ui.h" #include "ui_colorval_ui.h" #include "ui_wipeval_ui.h" +#include "ui_urlval_ui.h" #include "complexparameter.h" #include "geometryval.h" #include "positionedit.h" +#include "projectlist.h" #include "effectslist.h" #include "kdenlivesettings.h" #include "profilesdialog.h" @@ -32,6 +34,7 @@ #include #include +#include #include #include @@ -61,6 +64,9 @@ class Wipeval: public QWidget, public Ui::Wipeval_UI { }; +class Urlval: public QWidget, public Ui::Urlval_UI +{ +}; QMap EffectStackEdit::iconCache; @@ -111,6 +117,8 @@ void EffectStackEdit::setFrameSize(QPoint p) void EffectStackEdit::updateTimecodeFormat() { + if (m_keyframeEditor) + m_keyframeEditor->updateTimecodeFormat(); QDomNodeList namenode = m_params.elementsByTagName("parameter"); for (int i = 0; i < namenode.count() ; i++) { QDomNode pa = namenode.item(i); @@ -142,7 +150,7 @@ void EffectStackEdit::updateParameter(const QString &name, const QString &value) m_params.setAttribute(name, value); } -void EffectStackEdit::transferParamDesc(const QDomElement d, int in, int out) +void EffectStackEdit::transferParamDesc(const QDomElement d, int pos, int in, int out) { clearAllItems(); if (m_keyframeEditor) delete m_keyframeEditor; @@ -190,12 +198,14 @@ void EffectStackEdit::transferParamDesc(const QDomElement d, int in, int out) if (type == "double" || type == "constant") { int min; int max; - if (pa.attribute("min").startsWith('%')) { + 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('%')) { + 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(); + else + max = pa.attribute("max").toInt(); createSliderItem(paramName, (int)(value.toDouble() + 0.5) , min, max, pa.attribute("suffix", QString())); delete toFillin; toFillin = NULL; @@ -251,12 +261,15 @@ void EffectStackEdit::transferParamDesc(const QDomElement d, int in, int out) 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, m_in); - geo->setupParam(pa, minFrame, maxFrame); + 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, SLOT(slotSeekToPos(int))); + 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; @@ -266,7 +279,7 @@ void EffectStackEdit::transferParamDesc(const QDomElement d, int in, int out) m_valueItems[paramName+"keyframe"] = geo; m_keyframeEditor = geo; connect(geo, SIGNAL(parameterChanged()), this, SLOT(collectAllParameters())); - connect(geo, SIGNAL(seekToPos(int)), this, SLOT(slotSeekToPos(int))); + 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); @@ -309,7 +322,8 @@ void EffectStackEdit::transferParamDesc(const QDomElement d, int in, int out) 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)); + if (!points.isEmpty()) + curve->setCurve(KisCubicCurve(points)); QSpinBox *spinin = new QSpinBox(); spinin->setRange(0, 1000); QSpinBox *spinout = new QSpinBox(); @@ -375,43 +389,65 @@ void EffectStackEdit::transferParamDesc(const QDomElement d, int in, int out) 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) { + if (toFillin) m_vbox->addWidget(toFillin); - } } m_vbox->addStretch(); } -void EffectStackEdit::slotSeekToPos(int pos) -{ - emit seekTimeline(pos); -} - wipeInfo EffectStackEdit::getWipeInfo(QString value) { wipeInfo info; QString start = value.section(';', 0, 0); QString end = value.section(';', 1, 1).section('=', 1, 1); - if (start.startsWith("-100%,0")) info.start = LEFT; - else if (start.startsWith("100%,0")) info.start = RIGHT; - else if (start.startsWith("0%,100%")) info.start = DOWN; - else if (start.startsWith("0%,-100%")) info.start = UP; - else info.start = CENTER; - if (start.count(':') == 2) info.startTransparency = start.section(':', -1).toInt(); - else info.startTransparency = 100; - - if (end.startsWith("-100%,0")) info.end = LEFT; - else if (end.startsWith("100%,0")) info.end = RIGHT; - else if (end.startsWith("0%,100%")) info.end = DOWN; - else if (end.startsWith("0%,-100%")) info.end = UP; - else info.end = CENTER; - if (end.count(':') == 2) info.endTransparency = end.section(':', -1).toInt(); - else info.endTransparency = 100; + + if (start.startsWith("-100%,0")) + info.start = LEFT; + else if (start.startsWith("100%,0")) + info.start = RIGHT; + else if (start.startsWith("0%,100%")) + info.start = DOWN; + else if (start.startsWith("0%,-100%")) + info.start = UP; + else + info.start = CENTER; + + if (start.count(':') == 2) + info.startTransparency = start.section(':', -1).toInt(); + else + info.startTransparency = 100; + + if (end.startsWith("-100%,0")) + info.end = LEFT; + else if (end.startsWith("100%,0")) + info.end = RIGHT; + else if (end.startsWith("0%,100%")) + info.end = DOWN; + else if (end.startsWith("0%,-100%")) + info.end = UP; + else + info.end = CENTER; + + if (end.count(':') == 2) + info.endTransparency = end.section(':', -1).toInt(); + else + info.endTransparency = 100; + return info; } @@ -472,10 +508,14 @@ void EffectStackEdit::collectAllParameters() QDomNode na = pa.firstChildElement("name"); QString type = pa.attributes().namedItem("type").nodeValue(); QString paramName = i18n(na.toElement().text().toUtf8().data()); - if (type == "complex") paramName.append("complex"); - else if (type == "position") paramName.append("position"); - else if (type == "geometry") paramName.append("geometry"); - else if (type == "keyframe") paramName.append("keyframe"); + if (type == "complex") + paramName.append("complex"); + else if (type == "position") + paramName.append("position"); + else if (type == "geometry") + paramName.append("geometry"); + else if (type == "keyframe") + paramName.append("keyframe"); if (type != "simplekeyframe" && !m_valueItems.contains(paramName)) { kDebug() << "// Param: " << paramName << " NOT FOUND"; continue; @@ -543,30 +583,48 @@ void EffectStackEdit::collectAllParameters() } else if (type == "wipe") { Wipeval *wp = (Wipeval*)m_valueItems.value(paramName); wipeInfo info; - if (wp->start_left->isChecked()) info.start = LEFT; - else if (wp->start_right->isChecked()) info.start = RIGHT; - else if (wp->start_up->isChecked()) info.start = UP; - else if (wp->start_down->isChecked()) info.start = DOWN; - else if (wp->start_center->isChecked()) info.start = CENTER; - else info.start = LEFT; + if (wp->start_left->isChecked()) + info.start = LEFT; + else if (wp->start_right->isChecked()) + info.start = RIGHT; + else if (wp->start_up->isChecked()) + info.start = UP; + else if (wp->start_down->isChecked()) + info.start = DOWN; + else if (wp->start_center->isChecked()) + info.start = CENTER; + else + info.start = LEFT; info.startTransparency = wp->start_transp->value(); - if (wp->end_left->isChecked()) info.end = LEFT; - else if (wp->end_right->isChecked()) info.end = RIGHT; - else if (wp->end_up->isChecked()) info.end = UP; - else if (wp->end_down->isChecked()) info.end = DOWN; - else if (wp->end_center->isChecked()) info.end = CENTER; - else info.end = RIGHT; + + if (wp->end_left->isChecked()) + info.end = LEFT; + else if (wp->end_right->isChecked()) + info.end = RIGHT; + else if (wp->end_up->isChecked()) + info.end = UP; + else if (wp->end_down->isChecked()) + info.end = DOWN; + else if (wp->end_center->isChecked()) + info.end = CENTER; + else + info.end = RIGHT; info.endTransparency = wp->end_transp->value(); + setValue = getWipeString(info); } else if ((type == "simplekeyframe" || type == "keyframe") && m_keyframeEditor) { QString realName = i18n(na.toElement().text().toUtf8().data()); QString val = m_keyframeEditor->getValue(realName); kDebug() << "SET VALUE: " << val; namenode.item(i).toElement().setAttribute("keyframes", val); + } else if (type == "url") { + KUrlRequester *req = ((Urlval*)m_valueItems.value(paramName))->urlwidget; + setValue = req->url().path(); } - if (!setValue.isNull()) { + + if (!setValue.isNull()) pa.attributes().namedItem("value").setNodeValue(setValue); - } + } emit parameterChanged(oldparam, newparam); }