]> git.sesse.net Git - kdenlive/commitdiff
implement region transition (still needs MLT patch for composite properties)
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Mon, 21 Jun 2010 07:32:58 +0000 (07:32 +0000)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Mon, 21 Jun 2010 07:32:58 +0000 (07:32 +0000)
svn path=/trunk/kdenlive/; revision=4538

src/CMakeLists.txt
src/effectstackedit.cpp
src/effectstackview.cpp
src/initeffects.cpp
src/widgets/urlval_ui.ui [new file with mode: 0644]

index 0023c713a28c8ce23c4147b306e5addd78fcaa66..c0d4bcd1e5296f26724705c863bc5c0d9611fca5 100644 (file)
@@ -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
index 7c68f57cffbca6a55f510a769b78f044c962f3cf..43354d92b7ca1b202d8a899ce8257aba7f88b60b 100644 (file)
 #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 <KDebug>
 #include <KLocale>
+#include <KFileDialog>
 
 #include <QVBoxLayout>
 #include <QSlider>
@@ -61,6 +64,9 @@ class Wipeval: public QWidget, public Ui::Wipeval_UI
 {
 };
 
+class Urlval: public QWidget, public Ui::Urlval_UI
+{
+};
 
 QMap<QString, QImage> 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);
index f9b8012333fa3f763d0a88c9aab6139d1521ca2d..04bf15bb3a46459f02cd6a2020f503c6898a256a 100644 (file)
@@ -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);
     }
 }
index eb7a28397fdfd693950980b4af39d158be4284bf..7e445d13f1c52240c90412523daff586c9e36dc6 100644 (file)
@@ -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<QDomElement> 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 (file)
index 0000000..32445ba
--- /dev/null
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>Urlval_UI</class>
+ <widget class="QWidget" name="Urlval_UI">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>194</width>
+    <height>42</height>
+   </rect>
+  </property>
+  <layout class="QGridLayout" name="gridLayout">
+   <property name="verticalSpacing">
+    <number>0</number>
+   </property>
+   <property name="margin">
+    <number>0</number>
+   </property>
+   <item row="0" column="0" colspan="2">
+    <widget class="QLabel" name="label">
+     <property name="text">
+      <string>Param</string>
+     </property>
+     <property name="alignment">
+      <set>Qt::AlignCenter</set>
+     </property>
+    </widget>
+   </item>
+   <item row="1" column="0">
+    <widget class="KUrlRequester" name="urlwidget"/>
+   </item>
+  </layout>
+ </widget>
+ <customwidgets>
+  <customwidget>
+   <class>KUrlRequester</class>
+   <extends>QFrame</extends>
+   <header>kurlrequester.h</header>
+  </customwidget>
+ </customwidgets>
+ <resources/>
+ <connections/>
+</ui>