]> git.sesse.net Git - kdenlive/commitdiff
Fix newly introduced effect types
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Tue, 20 Mar 2012 18:53:49 +0000 (19:53 +0100)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Tue, 20 Mar 2012 18:53:49 +0000 (19:53 +0100)
src/effectstack/collapsibleeffect.cpp
src/effectstack/collapsibleeffect.h
src/effectstack/effectstackview2.cpp
src/effectstack/effectstackview2.h

index d4b36530a11d9a4449c32af1dc627ec02f79b526..767cc630d1351b98ad4f8ff20d6583b4d77a27b2 100644 (file)
@@ -24,6 +24,8 @@
 #include "ui_boolval_ui.h"
 #include "ui_wipeval_ui.h"
 #include "ui_urlval_ui.h"
+#include "ui_keywordval_ui.h"
+#include "ui_fontval_ui.h"
 #include "complexparameter.h"
 #include "geometryval.h"
 #include "positionedit.h"
@@ -69,6 +71,14 @@ class Urlval: public QWidget, public Ui::Urlval_UI
 {
 };
 
+class Keywordval: public QWidget, public Ui::Keywordval_UI
+{
+};
+
+class Fontval: public QWidget, public Ui::Fontval_UI
+{
+};
+
 QMap<QString, QImage> CollapsibleEffect::iconCache;
 
 void clearLayout(QLayout *layout)
@@ -348,6 +358,9 @@ void CollapsibleEffect::setupWidget(ItemInfo info, int index, EffectMetaInfo *me
     }
     if (collapseButton->isEnabled()) slotShow(!m_effect.hasAttribute("k_collapsed"));
     connect (m_paramWidget, SIGNAL(parameterChanged(const QDomElement, const QDomElement, int)), this, SIGNAL(parameterChanged(const QDomElement, const QDomElement, int)));
+    
+    connect(m_paramWidget, SIGNAL(startFilterJob(QString,QString,QString,QString,QString,QString)), this, SIGNAL(startFilterJob(QString,QString,QString,QString,QString,QString)));
+    
     connect (this, SIGNAL(syncEffectsPos(int)), m_paramWidget, SIGNAL(syncEffectsPos(int)));
     connect (this, SIGNAL(effectStateChanged(bool)), m_paramWidget, SIGNAL(effectStateChanged(bool)));
     connect (m_paramWidget, SIGNAL(checkMonitorPosition(int)), this, SIGNAL(checkMonitorPosition(int)));
@@ -687,6 +700,47 @@ ParameterContainer::ParameterContainer(QDomElement effect, ItemInfo info, Effect
             connect(cval->urlwidget, SIGNAL(returnPressed()) , this, SLOT(slotCollectAllParameters()));
             connect(cval->urlwidget, SIGNAL(urlSelected(const KUrl&)) , this, SLOT(slotCollectAllParameters()));
             m_uiItems.append(cval);
+       } else if (type == "keywords") {
+            Keywordval* kval = new Keywordval;
+            kval->setupUi(toFillin);
+            kval->label->setText(paramName);
+            kval->lineeditwidget->setText(value);
+            QDomElement klistelem = pa.firstChildElement("keywords");
+            QDomElement kdisplaylistelem = pa.firstChildElement("keywordsdisplay");
+            QStringList keywordlist;
+            QStringList keyworddisplaylist;
+            if (!klistelem.isNull()) {
+                keywordlist = klistelem.text().split(';');
+                keyworddisplaylist = i18n(kdisplaylistelem.text().toUtf8().data()).split(';');
+            }
+            if (keyworddisplaylist.count() != keywordlist.count()) {
+                keyworddisplaylist = keywordlist;
+            }
+            for (int i = 0; i < keywordlist.count(); i++) {
+                kval->comboboxwidget->addItem(keyworddisplaylist.at(i), keywordlist.at(i));
+            }
+            // Add disabled user prompt at index 0
+            kval->comboboxwidget->insertItem(0, i18n("<select a keyword>"), "");
+            kval->comboboxwidget->model()->setData( kval->comboboxwidget->model()->index(0,0), QVariant(Qt::NoItemFlags), Qt::UserRole -1);
+            kval->comboboxwidget->setCurrentIndex(0);
+            m_valueItems[paramName] = kval;
+            connect(kval->lineeditwidget, SIGNAL(editingFinished()) , this, SLOT(collectAllParameters()));
+            connect(kval->comboboxwidget, SIGNAL(activated (const QString&)), this, SLOT(collectAllParameters()));
+            m_uiItems.append(kval);
+        } else if (type == "fontfamily") {
+            Fontval* fval = new Fontval;
+            fval->setupUi(toFillin);
+            fval->name->setText(paramName);
+            fval->fontfamilywidget->setCurrentFont(QFont(value));
+            m_valueItems[paramName] = fval;
+            connect(fval->fontfamilywidget, SIGNAL(currentFontChanged(const QFont &)), this, SLOT(collectAllParameters())) ;
+            m_uiItems.append(fval);
+        } else if (type == "filterjob") {
+           QVBoxLayout *l= new QVBoxLayout(toFillin);
+           QPushButton *button = new QPushButton(paramName, toFillin);
+           l->addWidget(button);
+            m_valueItems[paramName] = button;
+            connect(button, SIGNAL(pressed()), this, SLOT(slotStartFilterJobAction()));   
         } else {
             delete toFillin;
             toFillin = NULL;
@@ -961,8 +1015,20 @@ void ParameterContainer::slotCollectAllParameters()
         } else if (type == "url") {
             KUrlRequester *req = ((Urlval*)m_valueItems.value(paramName))->urlwidget;
             setValue = req->url().path();
+       } else if (type == "keywords"){
+            QLineEdit *line = ((Keywordval*)m_valueItems.value(paramName))->lineeditwidget;
+            QComboBox *combo = ((Keywordval*)m_valueItems.value(paramName))->comboboxwidget;
+            if(combo->currentIndex())
+            {
+                QString comboval = combo->itemData(combo->currentIndex()).toString();
+                line->insert(comboval);
+                combo->setCurrentIndex(0);
+            }
+            setValue = line->text();
+        } else if (type == "fontfamily") {
+            QFontComboBox* fontfamily = ((Fontval*)m_valueItems.value(paramName))->fontfamilywidget;
+            setValue = fontfamily->currentFont().family();
         }
-
         if (!setValue.isNull())
             pa.attributes().namedItem("value").setNodeValue(setValue);
 
@@ -1020,4 +1086,16 @@ int ParameterContainer::index()
     return m_index;
 }
 
-
+void ParameterContainer::slotStartFilterJobAction()
+{
+    QDomNodeList namenode = m_effect.elementsByTagName("parameter");
+    for (int i = 0; i < namenode.count() ; i++) {
+        QDomElement pa = namenode.item(i).toElement();
+        QString type = pa.attribute("type");
+        if (type == "filterjob") {
+            emit startFilterJob(pa.attribute("filtertag"), pa.attribute("filterparams"), pa.attribute("finalfilter"), pa.attribute("consumer"), pa.attribute("consumerparams"), pa.attribute("wantedproperties"));
+            kDebug()<<" - - -PROPS:\n"<<pa.attribute("filtertag")<<"-"<< pa.attribute("filterparams")<<"-"<< pa.attribute("consumer")<<"-"<< pa.attribute("consumerparams")<<"-"<< pa.attribute("wantedproperties");
+            break;
+        }
+    }
+}
index f77a90fb7fb716e09d0f89bf303b7e166ae7e7c5..97bbbcce57d78f9f373dcadef3bff3705af44225 100644 (file)
@@ -67,6 +67,7 @@ public:
 
 private slots:
     void slotCollectAllParameters();
+    void slotStartFilterJobAction();
 
 private:
         /** @brief Updates parameter @param name according to new value of dependency.
@@ -95,7 +96,9 @@ signals:
     void effectStateChanged(bool);
     void checkMonitorPosition(int);
     void seekTimeline(int);
-    void showComments(bool);
+    void showComments(bool);    
+    /** @brief Start an MLT filter job on this clip. */
+    void startFilterJob(QString filterName, QString filterParams, QString finalFilterName, QString consumer, QString consumerParams, QString properties);
     
 };
 
@@ -135,8 +138,7 @@ private:
     QDomElement m_effect;
     QDomElement m_original_effect;
     QList <QDomElement> m_subEffects;
-    bool m_lastEffect;
-    int m_in;
+    bool m_lastEffect;    int m_in;
     int m_out;
     bool m_active;
     
@@ -155,6 +157,8 @@ signals:
     void activateEffect(int);
     void checkMonitorPosition(int);
     void seekTimeline(int);
+    /** @brief Start an MLT filter job on this clip. */
+    void startFilterJob(QString filterName, QString filterParams, QString finalFilterName, QString consumer, QString consumerParams, QString properties);
 };
 
 
index 2d21adb5c4bd0ac0d0ec2546a47e727353a57a00..e2ea33099cb66000b2eb2907466e782996994ae4 100644 (file)
@@ -204,6 +204,7 @@ void EffectStackView2::setupListView(int ix)
         m_effects.append(currentEffect);
         vbox1->addWidget(currentEffect);
         connect(currentEffect, SIGNAL(parameterChanged(const QDomElement, const QDomElement, int)), this , SLOT(slotUpdateEffectParams(const QDomElement, const QDomElement, int)));
+       connect(currentEffect, SIGNAL(startFilterJob(QString,QString,QString,QString,QString,QString)), this , SLOT(slotStartFilterJob(QString,QString,QString,QString,QString,QString)));
         connect(currentEffect, SIGNAL(deleteEffect(const QDomElement, int)), this , SLOT(slotDeleteEffect(const QDomElement, int)));
         connect(currentEffect, SIGNAL(changeEffectPosition(int,bool)), this , SLOT(slotMoveEffect(int , bool)));
         connect(currentEffect, SIGNAL(effectStateChanged(bool, int)), this, SLOT(slotUpdateEffectState(bool, int)));
@@ -332,4 +333,10 @@ void EffectStackView2::slotMoveEffect(int index, bool up)
     else emit changeEffectPosition(m_clipref, -1, startPos, endPos);
 }
 
+void EffectStackView2::slotStartFilterJob(const QString&filterName, const QString&filterParams, const QString&finalFilterName, const QString&consumer, const QString&consumerParams, const QString&properties)
+{
+    if (!m_clipref) return;
+    emit startFilterJob(m_clipref->info(), m_clipref->clipProducer(), filterName, filterParams, finalFilterName, consumer, consumerParams, properties);
+}
+
 #include "effectstackview2.moc"
index 9ee6927212395d5302690b2410daa9f0fce21954..ba08fac9be422a811bfa067599ba011e9588586a 100644 (file)
@@ -121,6 +121,9 @@ private slots:
     void slotUpdateEffectState(bool disable, int index);
 
     void slotSetCurrentEffect(int ix);
+    
+    /** @brief Triggers a filter job on this clip. */
+    void slotStartFilterJob(const QString&filterName, const QString&filterParams, const QString&finalFilterName, const QString&consumer, const QString&consumerParams, const QString&properties);
 
 
 signals:
@@ -142,6 +145,7 @@ signals:
     void updateClipRegion(ClipItem*, int, QString);
     void displayMessage(const QString&, int);
     void showComments(bool show);
+    void startFilterJob(ItemInfo info, const QString &clipId, const QString &filterName, const QString &filterParams, const QString&finalFilterName, const QString &consumer, const QString &consumerParams, const QString &properties);
 };
 
 #endif