From 73ef85a1519aaac96d773e644b341dc854b496ab Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Mardelle Date: Wed, 18 Nov 2009 20:56:44 +0000 Subject: [PATCH] First steps for effects with several keyframable parameters svn path=/trunk/kdenlive/; revision=4133 --- src/effectstackedit.cpp | 24 ++++++++++++++---------- src/effectstackedit.h | 3 ++- src/keyframeedit.cpp | 24 ++++++++++++++++++++++++ src/keyframeedit.h | 1 + 4 files changed, 41 insertions(+), 11 deletions(-) diff --git a/src/effectstackedit.cpp b/src/effectstackedit.cpp index e2db15e9..c9511d15 100644 --- a/src/effectstackedit.cpp +++ b/src/effectstackedit.cpp @@ -21,10 +21,8 @@ #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); diff --git a/src/effectstackedit.h b/src/effectstackedit.h index 5045bc3d..0cc9dcdc 100644 --- a/src/effectstackedit.h +++ b/src/effectstackedit.h @@ -20,7 +20,7 @@ #include "definitions.h" #include "timecode.h" - +#include "keyframeedit.h" #include #include @@ -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); diff --git a/src/keyframeedit.cpp b/src/keyframeedit.cpp index 26213673..687695a1 100644 --- a/src/keyframeedit.cpp +++ b/src/keyframeedit.cpp @@ -64,6 +64,30 @@ KeyframeEdit::~KeyframeEdit() delete m_delegate; } +void KeyframeEdit::addParameter(QDomElement e) { + QDomNode na = e.firstChildElement("name"); + kDebug() << "- - - -ADD PARAM:" <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 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; diff --git a/src/keyframeedit.h b/src/keyframeedit.h index 0aa620d2..bd632e0d 100644 --- a/src/keyframeedit.h +++ b/src/keyframeedit.h @@ -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; -- 2.39.2