From ac2a99496e12f6650c678ddc0485b72c865d6501 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Mardelle Date: Mon, 21 Jun 2010 07:32:58 +0000 Subject: [PATCH] implement region transition (still needs MLT patch for composite properties) svn path=/trunk/kdenlive/; revision=4538 --- src/CMakeLists.txt | 1 + src/effectstackedit.cpp | 19 +++++++++++ src/effectstackview.cpp | 15 ++++----- src/initeffects.cpp | 72 +++++++++++++++++++++++----------------- src/widgets/urlval_ui.ui | 44 ++++++++++++++++++++++++ 5 files changed, 112 insertions(+), 39 deletions(-) create mode 100644 src/widgets/urlval_ui.ui diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 0023c713..c0d4bcd1 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -88,6 +88,7 @@ kde4_add_ui_files(kdenlive_UI widgets/keyframeeditor_ui.ui widgets/timecodedisplay_ui.ui widgets/tracksconfigdialog_ui.ui + widgets/urlval_ui.ui ) set(kdenlive_SRCS diff --git a/src/effectstackedit.cpp b/src/effectstackedit.cpp index 7c68f57c..43354d92 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; @@ -376,6 +382,16 @@ void EffectStackEdit::transferParamDesc(const QDomElement d, int pos, int in, in 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->setText(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; @@ -559,6 +575,9 @@ void EffectStackEdit::collectAllParameters() 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()) { pa.attributes().namedItem("value").setNodeValue(setValue); diff --git a/src/effectstackview.cpp b/src/effectstackview.cpp index f9b80123..04bf15bb 100644 --- a/src/effectstackview.cpp +++ b/src/effectstackview.cpp @@ -172,7 +172,7 @@ void EffectStackView::slotClipItemSelected(ClipItem* c, int ix) m_ui.effectlist->blockSignals(true); m_ui.effectlist->clear(); m_effectedit->transferParamDesc(QDomElement(), 0, 0, 0); - m_ui.region_url->clear(); + m_ui.region_url->clear(); m_ui.effectlist->blockSignals(false); setEnabled(false); return; @@ -250,10 +250,9 @@ void EffectStackView::setupListView(int ix) } m_ui.effectlist->blockSignals(false); if (m_ui.effectlist->count() == 0) { - m_effectedit->transferParamDesc(QDomElement(), 0, 0, 0); - m_ui.region_url->clear(); - } - else slotItemSelectionChanged(false); + m_effectedit->transferParamDesc(QDomElement(), 0, 0, 0); + m_ui.region_url->clear(); + } else slotItemSelectionChanged(false); slotUpdateCheckAllButton(); } @@ -264,12 +263,12 @@ void EffectStackView::slotItemSelectionChanged(bool update) bool isChecked = false; if (hasItem && m_ui.effectlist->currentItem()->checkState() == Qt::Checked) isChecked = true; if (hasItem && m_ui.effectlist->currentItem()->isSelected()) { - QDomElement eff = m_clipref->effectAt(activeRow); + QDomElement eff = m_clipref->effectAt(activeRow); m_effectedit->transferParamDesc(eff, 0, m_clipref->cropStart().frames(KdenliveSettings::project_fps()), (m_clipref->cropStart() + m_clipref->cropDuration()).frames(KdenliveSettings::project_fps())); //minx max frame - m_ui.region_url->setText(eff.attribute("region")); + m_ui.region_url->setText(eff.attribute("region")); } if (m_clipref && update) m_clipref->setSelectedEffect(activeRow); m_ui.buttonDel->setEnabled(hasItem); @@ -321,7 +320,7 @@ void EffectStackView::slotResetEffect() dom.setAttribute("kdenlive_ix", old.attribute("kdenlive_ix")); m_clipref->initEffect(dom); m_effectedit->transferParamDesc(dom, 0, m_clipref->cropStart().frames(KdenliveSettings::project_fps()), (m_clipref->cropStart() + m_clipref->cropDuration()).frames(KdenliveSettings::project_fps()));//minx max frame - m_ui.region_url->setText(dom.attribute("region")); + m_ui.region_url->setText(dom.attribute("region")); emit updateClipEffect(m_clipref, old, dom, activeRow); } } diff --git a/src/initeffects.cpp b/src/initeffects.cpp index eb7a2839..7e445d13 100644 --- a/src/initeffects.cpp +++ b/src/initeffects.cpp @@ -620,9 +620,34 @@ void initEffects::fillTransitionsList(Mlt::Repository *repository, EffectsList * int pos = names.indexOf("mix"); if (pos != -1) names.takeAt(pos); - pos = names.indexOf("region"); - if (pos != -1) - names.takeAt(pos); + + QStringList imagenamelist = QStringList() << i18n("None"); + QStringList imagefiles = QStringList() << QString(); + QStringList filters; + filters << "*.pgm" << "*.png"; + QStringList customLumas = KGlobal::dirs()->findDirs("appdata", "lumas"); + foreach(QString folder, customLumas) { + if (!folder.endsWith('/')) + folder.append('/'); + QStringList filesnames = QDir(folder).entryList(filters, QDir::Files); + foreach(const QString &fname, filesnames) { + imagenamelist.append(fname); + imagefiles.append(folder + fname); + } + } + + // Check for MLT luma files. + KUrl folder(mlt_environment("MLT_DATA")); + folder.addPath("lumas"); + folder.addPath(mlt_environment("MLT_NORMALISATION")); + QDir lumafolder(folder.path()); + QStringList filesnames = lumafolder.entryList(filters, QDir::Files); + foreach(const QString &fname, filesnames) { + imagenamelist.append(fname); + KUrl path(folder); + path.addPath(fname); + imagefiles.append(path.toLocalFile()); + } foreach(const QString &name, names) { QDomDocument ret; @@ -634,7 +659,6 @@ void initEffects::fillTransitionsList(Mlt::Repository *repository, EffectsList * QDomElement desc = ret.createElement("description"); ktrans.appendChild(tname); ktrans.appendChild(desc); - Mlt::Properties *metadata = repository->metadata(transition_type, name.toUtf8().data()); if (metadata && metadata->is_valid()) { // If possible, set name and description. @@ -683,33 +707,6 @@ void initEffects::fillTransitionsList(Mlt::Repository *repository, EffectsList * * Check for Kdenlive installed luma files, add empty string at * start for no luma file. */ - QStringList imagenamelist = QStringList() << i18n("None"); - QStringList imagefiles = QStringList() << QString(); - QStringList filters; - filters << "*.pgm" << "*.png"; - QStringList customLumas = KGlobal::dirs()->findDirs("appdata", "lumas"); - foreach(QString folder, customLumas) { - if (!folder.endsWith('/')) - folder.append('/'); - QStringList filesnames = QDir(folder).entryList(filters, QDir::Files); - foreach(const QString &fname, filesnames) { - imagenamelist.append(fname); - imagefiles.append(folder + fname); - } - } - - // Check for MLT luma files. - KUrl folder(mlt_environment("MLT_DATA")); - folder.addPath("lumas"); - folder.addPath(mlt_environment("MLT_NORMALISATION")); - QDir lumafolder(folder.path()); - QStringList filesnames = lumafolder.entryList(filters, QDir::Files); - foreach(const QString &fname, filesnames) { - imagenamelist.append(fname); - KUrl path(folder); - path.addPath(fname); - imagefiles.append(path.toLocalFile()); - } // Implement default transitions. QList paramList; @@ -755,7 +752,20 @@ void initEffects::fillTransitionsList(Mlt::Repository *repository, EffectsList * } else if (name == "mix") { tname.appendChild(ret.createTextNode(i18n("Mix"))); } else if (name == "region") { + ktrans.setAttribute("id", name); tname.appendChild(ret.createTextNode(i18n("Region"))); + desc.appendChild(ret.createTextNode(i18n("Use alpha channel of another clip to create a transition."))); + paramList.append(quickParameterFill(ret, i18n("Transparency clip"), "resource", "url", "", "", "", "", "", "")); + paramList.append(quickParameterFill(ret, i18n("Geometry"), "composite.geometry", "geometry", "0%,0%:100%x100%:100", "-500;-500;-500;-500;0", "500;500;500;500;100")); + paramList.append(quickParameterFill(ret, i18n("Alpha Channel Operation"), "composite.operator", "list", "over", "", "", "over,and,or,xor", "over,and,or,xor")); + paramList.append(quickParameterFill(ret, i18n("Align"), "composite.aligned", "bool", "1", "0", "1")); + paramList.append(quickParameterFill(ret, i18n("Fill"), "composite.fill", "bool", "1", "0", "1")); + paramList.append(quickParameterFill(ret, i18n("Distort"), "composite.distort", "bool", "0", "0", "1")); + paramList.append(quickParameterFill(ret, i18n("Wipe File"), "composite.luma", "list", "", "", "", imagefiles.join(","), imagenamelist.join(","))); + paramList.append(quickParameterFill(ret, i18n("Wipe Softness"), "composite.softness", "double", "0", "0", "100", "", "", "100")); + paramList.append(quickParameterFill(ret, i18n("Wipe Invert"), "composite.luma_invert", "bool", "0", "0", "1")); + paramList.append(quickParameterFill(ret, i18n("Force Progressive Rendering"), "composite.progressive", "bool", "1", "0", "1")); + paramList.append(quickParameterFill(ret, i18n("Force Deinterlace Overlay"), "composite.deinterlace", "bool", "0", "0", "1")); } foreach(const QDomElement &e, paramList) ktrans.appendChild(e); diff --git a/src/widgets/urlval_ui.ui b/src/widgets/urlval_ui.ui new file mode 100644 index 00000000..32445bae --- /dev/null +++ b/src/widgets/urlval_ui.ui @@ -0,0 +1,44 @@ + + + Urlval_UI + + + + 0 + 0 + 194 + 42 + + + + + 0 + + + 0 + + + + + Param + + + Qt::AlignCenter + + + + + + + + + + + KUrlRequester + QFrame +
kurlrequester.h
+
+
+ + +
-- 2.39.2