]> git.sesse.net Git - kdenlive/commitdiff
Use new parametercontainer widget for transitions
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Mon, 26 Mar 2012 21:52:06 +0000 (23:52 +0200)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Mon, 26 Mar 2012 21:52:06 +0000 (23:52 +0200)
src/effectstack/collapsibleeffect.cpp
src/effectstack/collapsibleeffect.h
src/effectstackedit.cpp
src/effectstackedit.h
src/effectstackview.cpp
src/transitionsettings.cpp
src/transitionsettings.h

index 228031ce61da1d0e419cdb36e8ac89db818ba029..3c8b47b2e1d79d60d578adb7185298d3547b207c 100644 (file)
@@ -212,6 +212,7 @@ CollapsibleEffect::~CollapsibleEffect()
     delete m_menu;
 }
 
+
 void CollapsibleEffect::slotCreateGroup()
 {
     emit createGroup(effectIndex());
@@ -988,7 +989,7 @@ ParameterContainer::ParameterContainer(QDomElement effect, ItemInfo info, Effect
 
 ParameterContainer::~ParameterContainer()
 {
-    //clearLayout(m_vbox);
+    clearLayout(m_vbox);
     delete m_vbox;
 }
 
@@ -1319,3 +1320,4 @@ void ParameterContainer::slotStartFilterJobAction()
     }
 }
 
+
index 87fbc2ece8bb487b59eeb2475c78291b2421168e..49d843f19989036c055f3cbc3d297647c9d2573f 100644 (file)
@@ -26,7 +26,6 @@
 
 #include "timecode.h"
 #include "keyframeedit.h"
-#include "effectstackedit.h"
 
 #include <QDomElement>
 #include <QToolButton>
@@ -43,6 +42,15 @@ struct EffectMetaInfo {
     bool trackMode;
 };
 
+enum WIPE_DIRECTON { UP = 0, DOWN = 1, LEFT = 2, RIGHT = 3, CENTER = 4 };
+
+struct wipeInfo {
+    WIPE_DIRECTON start;
+    WIPE_DIRECTON end;
+    int startTransparency;
+    int endTransparency;
+};
+
 class MySpinBox : public QSpinBox
 {
     Q_OBJECT
index 2f3d1d8d16f61bd45ba771281832b3eb0d7d267b..2c10f8340984462cb88c2cd39d0abd93a012d555 100644 (file)
@@ -86,12 +86,14 @@ EffectStackEdit::EffectStackEdit(Monitor *monitor, QWidget *parent) :
     QScrollArea(parent),
     m_in(0),
     m_out(0),
-    m_frameSize(QPoint()),
     m_keyframeEditor(NULL),
     m_monitor(monitor),
-    m_geometryWidget(NULL)
+    m_geometryWidget(NULL),
+    m_paramWidget(NULL)
 {
     m_baseWidget = new QWidget(this);
+    m_metaInfo.monitor = monitor;
+    m_metaInfo.trackMode = false;
     setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded);
     setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
     setFrameStyle(QFrame::NoFrame);
@@ -112,12 +114,11 @@ EffectStackEdit::EffectStackEdit(Monitor *monitor, QWidget *parent) :
                                 QAbstractSpinBox::up-button#dragBox {width:0px;padding:0px;} QAbstractSpinBox[inTimeline=\"true\"]#dragBox { border: 1px solid %2;} QAbstractSpinBox:hover#dragBox {border: 1px solid %3;} ")
                                 .arg(dark_bg.name()).arg(selected_bg.name()).arg(hover_bg.name()).arg(light_bg.name()));
     setStyleSheet(stylesheet);
-    
-    setWidget(m_baseWidget);
-    setWidgetResizable(true);
-    m_vbox = new QVBoxLayout(m_baseWidget);
+    setWidget(m_baseWidget);   
+    /*m_vbox = new QVBoxLayout(m_baseWidget);
     m_vbox->setContentsMargins(0, 0, 0, 0);
-    m_vbox->setSpacing(2);
+    m_vbox->setSpacing(2);    */
+    setWidgetResizable(true);
 }
 
 EffectStackEdit::~EffectStackEdit()
@@ -126,8 +127,21 @@ EffectStackEdit::~EffectStackEdit()
     delete m_baseWidget;
 }
 
+Monitor *EffectStackEdit::monitor()
+{
+    return m_metaInfo.monitor;
+}
+
+void EffectStackEdit::updateProjectFormat(MltVideoProfile profile, Timecode t)
+{
+    m_metaInfo.profile = profile;
+    m_metaInfo.timecode = t;
+}
+
 void EffectStackEdit::setFrameSize(QPoint p)
 {
+    m_metaInfo.frameSize = p;
+    /*
     m_frameSize = p;
     QDomNodeList namenode = m_params.elementsByTagName("parameter");
     for (int i = 0; i < namenode.count() ; i++) {
@@ -147,38 +161,12 @@ void EffectStackEdit::setFrameSize(QPoint p)
                 break;
             }
         }
-    }
+    }*/
 }
 
 void EffectStackEdit::updateTimecodeFormat()
 {
-    if (m_keyframeEditor)
-        m_keyframeEditor->updateTimecodeFormat();
-
-    QDomNodeList namenode = m_params.elementsByTagName("parameter");
-    for (int i = 0; i < namenode.count() ; i++) {
-        QDomNode pa = namenode.item(i);
-        QDomElement na = pa.firstChildElement("name");
-        QString type = pa.attributes().namedItem("type").nodeValue();
-        QString paramName = na.isNull() ? pa.attributes().namedItem("name").nodeValue() : i18n(na.text().toUtf8().data());
-
-        if (type == "geometry") {
-            if (KdenliveSettings::on_monitor_effects()) {
-                if (m_geometryWidget) m_geometryWidget->updateTimecodeFormat();
-            } else {
-                Geometryval *geom = ((Geometryval*)m_valueItems[paramName+"geometry"]);
-                geom->updateTimecodeFormat();
-            }
-            break;
-        } else if (type == "position") {
-            PositionEdit *posi = ((PositionEdit*)m_valueItems[paramName+"position"]);
-            posi->updateTimecodeFormat();
-            break;
-        } else if (type == "roto-spline") {
-            RotoWidget *widget = static_cast<RotoWidget *>(m_valueItems[paramName]);
-            widget->updateTimecodeFormat();
-        }
-    }
+    if (m_paramWidget) m_paramWidget->updateTimecodeFormat();
 }
 
 void EffectStackEdit::meetDependency(const QString& name, QString type, QString value)
@@ -197,12 +185,6 @@ void EffectStackEdit::meetDependency(const QString& name, QString type, QString
     }
 }
 
-void EffectStackEdit::updateProjectFormat(MltVideoProfile profile, Timecode t)
-{
-    m_profile = profile;
-    m_timecode = t;
-}
-
 void EffectStackEdit::updateParameter(const QString &name, const QString &value)
 {
     m_params.setAttribute(name, value);
@@ -215,9 +197,20 @@ void EffectStackEdit::updateParameter(const QString &name, const QString &value)
     }
 }
 
-void EffectStackEdit::transferParamDesc(const QDomElement &d, ItemInfo info, bool isEffect)
+void EffectStackEdit::transferParamDesc(const QDomElement &d, ItemInfo info, bool /*isEffect*/)
 {
-    clearAllItems();
+    if (m_paramWidget) delete m_paramWidget;
+    m_paramWidget = new ParameterContainer(d, info, &m_metaInfo, 0, m_baseWidget);
+    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 (m_paramWidget, SIGNAL(checkMonitorPosition(int)), this, SIGNAL(checkMonitorPosition(int)));
+    connect (m_paramWidget, SIGNAL(seekTimeline(int)), this, SIGNAL(seekTimeline(int)));
+    return;
+    /*
+    //clearAllItems();
     if (m_keyframeEditor) delete m_keyframeEditor;
     m_keyframeEditor = NULL;
     m_params = d;
@@ -266,7 +259,7 @@ void EffectStackEdit::transferParamDesc(const QDomElement &d, ItemInfo info, boo
                         pa.attribute("default") : pa.attribute("value");
 
 
-        /** See effects/README for info on the different types */
+      
 
         if (type == "double" || type == "constant") {
             double min;
@@ -610,98 +603,12 @@ void EffectStackEdit::transferParamDesc(const QDomElement &d, ItemInfo info, boo
     }
     for (int i = 0; i < allWidgets.count(); i++) {
         allWidgets.at(i)->setSpinSize(minSize);
-    }
-}
-
-wipeInfo EffectStackEdit::getWipeInfo(QString value)
-{
-    wipeInfo info;
-    // Convert old geometry values that used a comma as separator
-    if (value.contains(',')) value.replace(',','/');
-    QString start = value.section(';', 0, 0);
-    QString end = value.section(';', 1, 1).section('=', 1, 1);
-    if (start.startsWith("-100%/0"))
-        info.start = LEFT;
-    else if (start.startsWith("100%/0"))
-        info.start = RIGHT;
-    else if (start.startsWith("0%/100%"))
-        info.start = DOWN;
-    else if (start.startsWith("0%/-100%"))
-        info.start = UP;
-    else
-        info.start = CENTER;
-
-    if (start.count(':') == 2)
-        info.startTransparency = start.section(':', -1).toInt();
-    else
-        info.startTransparency = 100;
-
-    if (end.startsWith("-100%/0"))
-        info.end = LEFT;
-    else if (end.startsWith("100%/0"))
-        info.end = RIGHT;
-    else if (end.startsWith("0%/100%"))
-        info.end = DOWN;
-    else if (end.startsWith("0%/-100%"))
-        info.end = UP;
-    else
-        info.end = CENTER;
-
-    if (end.count(':') == 2)
-        info.endTransparency = end.section(':', -1).toInt();
-    else
-        info.endTransparency = 100;
-
-    return info;
-}
-
-QString EffectStackEdit::getWipeString(wipeInfo info)
-{
-
-    QString start;
-    QString end;
-    switch (info.start) {
-    case LEFT:
-        start = "-100%/0%:100%x100%";
-        break;
-    case RIGHT:
-        start = "100%/0%:100%x100%";
-        break;
-    case DOWN:
-        start = "0%/100%:100%x100%";
-        break;
-    case UP:
-        start = "0%/-100%:100%x100%";
-        break;
-    default:
-        start = "0%/0%:100%x100%";
-        break;
-    }
-    start.append(':' + QString::number(info.startTransparency));
-
-    switch (info.end) {
-    case LEFT:
-        end = "-100%/0%:100%x100%";
-        break;
-    case RIGHT:
-        end = "100%/0%:100%x100%";
-        break;
-    case DOWN:
-        end = "0%/100%:100%x100%";
-        break;
-    case UP:
-        end = "0%/-100%:100%x100%";
-        break;
-    default:
-        end = "0%/0%:100%x100%";
-        break;
-    }
-    end.append(':' + QString::number(info.endTransparency));
-    return QString(start + ";-1=" + end);
+    }*/
 }
 
 void EffectStackEdit::collectAllParameters()
 {
+  /*
     if (m_valueItems.isEmpty() || m_params.isNull()) return;
     const QDomElement oldparam = m_params.cloneNode().toElement();
     QDomElement newparam = oldparam.cloneNode().toElement();
@@ -757,19 +664,13 @@ void EffectStackEdit::collectAllParameters()
             setValue = QString::number(pos);
             if (newparam.attribute("id") == "fadein" || newparam.attribute("id") == "fade_from_black") {
                 // Make sure duration is not longer than clip
-                /*if (pos > m_out) {
-                    pos = m_out;
-                    pedit->setPosition(pos);
-                }*/
+
                 EffectsList::setParameter(newparam, "in", QString::number(m_in));
                 EffectsList::setParameter(newparam, "out", QString::number(m_in + pos));
                 setValue.clear();
             } else if (newparam.attribute("id") == "fadeout" || newparam.attribute("id") == "fade_to_black") {
                 // Make sure duration is not longer than clip
-                /*if (pos > m_out) {
-                    pos = m_out;
-                    pedit->setPosition(pos);
-                }*/
+
                 EffectsList::setParameter(newparam, "in", QString::number(m_out - pos));
                 EffectsList::setParameter(newparam, "out", QString::number(m_out));
                 setValue.clear();
@@ -873,7 +774,7 @@ void EffectStackEdit::collectAllParameters()
             pa.attributes().namedItem("value").setNodeValue(setValue);
 
     }
-    emit parameterChanged(oldparam, newparam);
+    emit parameterChanged(oldparam, newparam);*/
 }
 
 void EffectStackEdit::clearAllItems()
@@ -917,3 +818,4 @@ void EffectStackEdit::slotStartFilterJobAction()
     }
 }
 
+
index 73f117ecd709628ac14ff4712bf4ef8827721e68..18d4d3167f6fb32b9a981a34d1d6437cb9ae623d 100644 (file)
@@ -21,6 +21,7 @@
 #include "definitions.h"
 #include "timecode.h"
 #include "keyframeedit.h"
+#include "effectstack/collapsibleeffect.h"
 
 #include <QWidget>
 #include <QDomElement>
 #include <QMap>
 #include <QScrollArea>
 
-enum WIPE_DIRECTON { UP = 0, DOWN = 1, LEFT = 2, RIGHT = 3, CENTER = 4 };
-
-struct wipeInfo {
-    WIPE_DIRECTON start;
-    WIPE_DIRECTON end;
-    int startTransparency;
-    int endTransparency;
-};
-
 class QFrame;
 class Monitor;
 class GeometryWidget;
@@ -59,12 +51,11 @@ public:
     void updateTimecodeFormat();
     /** @brief Returns true if this effect wants to keep track of current position in clip. */
     bool effectNeedsSyncPosition() const;
+    Monitor *monitor();
 
 private:
     /** @brief Deletes all parameter widgets. */
     void clearAllItems();
-    wipeInfo getWipeInfo(QString value);
-    QString getWipeString(wipeInfo info);
     /** @brief Updates parameter @param name according to new value of dependency.
     * @param name Name of the parameter which will be updated
     * @param type Type of the parameter which will be updated
@@ -73,17 +64,16 @@ private:
 
     QVBoxLayout *m_vbox;
     QList<QWidget*> m_uiItems;
-    QWidget *m_baseWidget;
     QDomElement m_params;
     QMap<QString, QWidget*> m_valueItems;
-    MltVideoProfile m_profile;
-    Timecode m_timecode;
     int m_in;
     int m_out;
-    QPoint m_frameSize;
     KeyframeEdit *m_keyframeEditor;
     Monitor *m_monitor;
     GeometryWidget *m_geometryWidget;
+    EffectMetaInfo m_metaInfo;
+    QWidget *m_baseWidget;
+    ParameterContainer *m_paramWidget;
 
 public slots:
     /** @brief Called when an effect is selected, builds the UIĀ for this effect. */
@@ -101,7 +91,7 @@ private slots:
     void slotStartFilterJobAction();
 
 signals:
-    void parameterChanged(const QDomElement &, const QDomElement &);
+    void parameterChanged(const QDomElement &, const QDomElement &, int);
     void seekTimeline(int);
     void displayMessage(const QString&, int);
     void checkMonitorPosition(int);
index a917ff7e00bf6861c9ddcc1a64781cf917b3a8d5..caa49e4ab03266c36da8de44211e6159fa5217f6 100644 (file)
@@ -48,7 +48,7 @@ EffectStackView::EffectStackView(Monitor *monitor, QWidget *parent) :
 {
     m_ui.setupUi(this);
     QVBoxLayout *vbox1 = new QVBoxLayout(m_ui.frame);
-    m_effectedit = new EffectStackEdit(monitor, m_ui.frame);
+    //m_effectedit = new EffectStackEdit(monitor, m_ui.frame);
     m_ui.frame->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Preferred);
     vbox1->setContentsMargins(2, 0, 2, 0);
     vbox1->setSpacing(0);
index 6d87559b27700b064b6f36c23e5d9a33aa8a6285..b5503bffecc07f45dbcd9e18a2bd65db618572c0 100644 (file)
@@ -23,6 +23,8 @@
 #include "effectstackedit.h"
 #include "kdenlivesettings.h"
 #include "mainwindow.h"
+#include "monitoreditwidget.h"
+#include "monitorscene.h"
 
 #include <KDebug>
 
@@ -38,7 +40,7 @@ TransitionSettings::TransitionSettings(Monitor *monitor, QWidget* parent) :
     vbox1->setSpacing(0);
     vbox1->addWidget(m_effectEdit);
     frame->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum));
-    connect(m_effectEdit, SIGNAL(seekTimeline(int)), this, SIGNAL(seekTimeline(int)));
+    connect(m_effectEdit, SIGNAL(seekTimeline(int)), this, SLOT(slotSeekTimeline(int)));
     setEnabled(false);
 
     QList<QStringList> transitionsList;
@@ -62,7 +64,8 @@ TransitionSettings::TransitionSettings(Monitor *monitor, QWidget* parent) :
 
     connect(transitionList, SIGNAL(activated(int)), this, SLOT(slotTransitionChanged()));
     connect(transitionTrack, SIGNAL(activated(int)), this, SLOT(slotTransitionTrackChanged()));
-    connect(m_effectEdit, SIGNAL(parameterChanged(const QDomElement&, const QDomElement&)), this , SLOT(slotUpdateEffectParams(const QDomElement&, const QDomElement&)));
+    connect(m_effectEdit, SIGNAL(parameterChanged(const QDomElement&, const QDomElement&, int)), this , SLOT(slotUpdateEffectParams(const QDomElement&, const QDomElement&)));
+    connect(m_effectEdit, SIGNAL(checkMonitorPosition(int)), this, SLOT(slotCheckMonitorPosition(int)));
     connect(monitor, SIGNAL(renderPosition(int)), this, SLOT(slotRenderPos(int)));
 }
 
@@ -212,4 +215,21 @@ void TransitionSettings::slotRenderPos(int pos)
         m_effectEdit->slotSyncEffectsPos(pos - m_usedTransition->startPos().frames(KdenliveSettings::project_fps()));
 }
 
+void TransitionSettings::slotSeekTimeline(int pos)
+{
+    if (m_usedTransition)
+       emit seekTimeline(m_usedTransition->startPos().frames(KdenliveSettings::project_fps()) + pos);
+}
+
+void TransitionSettings::slotCheckMonitorPosition(int renderPos)
+{
+    if (renderPos >= m_usedTransition->startPos().frames(KdenliveSettings::project_fps()) && renderPos <= m_usedTransition->endPos().frames(KdenliveSettings::project_fps())) {
+        if (!m_effectEdit->monitor()->getEffectEdit()->getScene()->views().at(0)->isVisible())
+            m_effectEdit->monitor()->slotEffectScene(true);
+    } else {
+        m_effectEdit->monitor()->slotEffectScene(false);
+    }
+}
+
+
 #include "transitionsettings.moc"
index 356a74deb42dc8057470f517627081c1487091c2..81821eaf37484e06ef1b73d84d4579cb7676bbfc 100644 (file)
@@ -57,6 +57,8 @@ private slots:
     void slotTransitionTrackChanged();
     /** @brief Pass position changes of the timeline cursor to the effects to keep their local timelines in sync. */
     void slotRenderPos(int pos);
+    void slotSeekTimeline(int pos);
+    void slotCheckMonitorPosition(int renderPos);
 
 signals:
     void transitionUpdated(Transition *, QDomElement);