]> git.sesse.net Git - kdenlive/commitdiff
First steps for effects with several keyframable parameters
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Wed, 18 Nov 2009 20:56:44 +0000 (20:56 +0000)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Wed, 18 Nov 2009 20:56:44 +0000 (20:56 +0000)
svn path=/trunk/kdenlive/; revision=4133

src/effectstackedit.cpp
src/effectstackedit.h
src/keyframeedit.cpp
src/keyframeedit.h

index e2db15e93322578f3150a0a9a6f25adb887a2f27..c9511d15e819b8ea82dd6ad13d402af6002bcfaf 100644 (file)
 #include "ui_boolval_ui.h"
 #include "ui_colorval_ui.h"
 #include "ui_wipeval_ui.h"
-#include "ui_keyframeeditor_ui.h"
 #include "complexparameter.h"
 #include "geometryval.h"
-#include "keyframeedit.h"
 #include "positionedit.h"
 #include "effectslist.h"
 #include "kdenlivesettings.h"
@@ -68,7 +66,8 @@ EffectStackEdit::EffectStackEdit(QWidget *parent) :
         QScrollArea(parent),
         m_in(0),
         m_out(0),
-        m_frameSize(QPoint())
+        m_frameSize(QPoint()),
+       m_keyframeEditor(NULL)
 {
     m_baseWidget = new QWidget(this);
     setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
@@ -122,6 +121,7 @@ void EffectStackEdit::updateParameter(const QString &name, const QString &value)
 void EffectStackEdit::transferParamDesc(const QDomElement d, int in, int out)
 {
     clearAllItems();
+    m_keyframeEditor = NULL;
     m_params = d;
     m_in = in;
     m_out = out;
@@ -234,13 +234,17 @@ void EffectStackEdit::transferParamDesc(const QDomElement d, int in, int out)
         } else if (type == "keyframe" || type == "simplekeyframe") {
             // keyframe editor widget
             kDebug() << "min: " << m_in << ", MAX: " << m_out;
-            KeyframeEdit *geo = new KeyframeEdit(pa, m_out - m_in - 1, pa.attribute("min").toInt(), pa.attribute("max").toInt(), m_timecode, paramName);
-            //geo->setupParam(100, pa.attribute("min").toInt(), pa.attribute("max").toInt(), pa.attribute("keyframes"));
-            //connect(geo, SIGNAL(seekToPos(int)), this, SLOT(slotSeekToPos(int)));
-            //geo->setupParam(pa, minFrame, maxFrame);
-            m_vbox->addWidget(geo);
-            m_valueItems[paramName+"keyframe"] = geo;
-            connect(geo, SIGNAL(parameterChanged()), this, SLOT(collectAllParameters()));
+           if (m_keyframeEditor == NULL) {
+               KeyframeEdit *geo = new KeyframeEdit(pa, m_out - m_in - 1, pa.attribute("min").toInt(), pa.attribute("max").toInt(), m_timecode, paramName);
+               m_vbox->addWidget(geo);
+               m_valueItems[paramName+"keyframe"] = geo;
+               m_keyframeEditor = geo;
+               connect(geo, SIGNAL(parameterChanged()), this, SLOT(collectAllParameters()));
+           }
+           else {
+               // we already have a keyframe editor, so just add another column for the new param
+               m_keyframeEditor->addParameter(pa);
+           }
         } else if (type == "color") {
             Colorval *cval = new Colorval;
             cval->setupUi(toFillin);
index 5045bc3df490075aa4bc42949daed7251f195ac5..0cc9dcdc9da4f89e6d5f1faf072cc66ed0e794d9 100644 (file)
@@ -20,7 +20,7 @@
 
 #include "definitions.h"
 #include "timecode.h"
-
+#include "keyframeedit.h"
 
 #include <QWidget>
 #include <QDomElement>
@@ -66,6 +66,7 @@ private:
     int m_in;
     int m_out;
     QPoint m_frameSize;
+    KeyframeEdit *m_keyframeEditor;
 
 public slots:
     void transferParamDesc(const QDomElement, int , int);
index 262136736540f416a31d162d803b5a0084b8de45..687695a155d3c795ed257853c31a883ba85afca8 100644 (file)
@@ -64,6 +64,30 @@ KeyframeEdit::~KeyframeEdit()
     delete m_delegate;
 }
 
+void KeyframeEdit::addParameter(QDomElement e) {
+    QDomNode na = e.firstChildElement("name");
+    kDebug() << "- - - -ADD PARAM:" <<na.toElement().text();
+    QString paramName = i18n(na.toElement().text().toUtf8().data());
+    keyframe_list->setColumnCount(3);
+    keyframe_list->headerItem()->setText(2, paramName);
+    
+    QStringList frames = e.attribute("keyframes").split(";", QString::SkipEmptyParts);
+    for (int i = 0; i < frames.count(); i++) {
+        QString framePos = m_timecode.getTimecodeFromFrames(frames.at(i).section(':', 0, 0).toInt());
+       QList<QTreeWidgetItem *> list = keyframe_list->findItems(framePos, Qt::MatchExactly, 0);
+       QTreeWidgetItem *item;
+       if (!list.isEmpty()) {
+           item = list.at(0);
+           item->setText(2, frames.at(i).section(':', 1, 1));
+       }
+        else {
+           item = new QTreeWidgetItem(QStringList() << framePos << QString() << frames.at(i).section(':', 1, 1));
+           item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEditable | Qt::ItemIsEnabled);
+           keyframe_list->addTopLevelItem(item);
+       }
+    }
+}
+
 void KeyframeEdit::setupParam(QDomElement e)
 {
     if (!e.isNull()) m_param = e;
index 0aa620d26a9427f961870fae895fd7328d5d732e..bd632e0d2308ff45e0e00e47198886cebe86c6a2 100644 (file)
@@ -78,6 +78,7 @@ public:
     explicit KeyframeEdit(QDomElement e, int maxFrame, int minVal, int maxVal, Timecode tc, const QString paramName = QString(), QWidget* parent = 0);
     virtual ~KeyframeEdit();
     void setupParam(QDomElement e = QDomElement());
+    void addParameter(QDomElement e);
 
 private:
     QDomElement m_param;