]> git.sesse.net Git - kdenlive/commitdiff
Update positions in keyframe widget immediately when frame timecode setting changes
authorTill Theato <root@ttill.de>
Thu, 1 Jul 2010 22:10:15 +0000 (22:10 +0000)
committerTill Theato <root@ttill.de>
Thu, 1 Jul 2010 22:10:15 +0000 (22:10 +0000)
svn path=/trunk/kdenlive/; revision=4564

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

index 0ba3aa1d1ead54fcbd6d17d549e06be646e6c2ed..a496a6ec229de690cc876f0ad6797e56975d5151 100644 (file)
@@ -117,6 +117,8 @@ void EffectStackEdit::setFrameSize(QPoint p)
 
 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);
@@ -196,12 +198,14 @@ void EffectStackEdit::transferParamDesc(const QDomElement d, int pos, int in, in
         if (type == "double" || type == "constant") {
             int min;
             int max;
-            if (pa.attribute("min").startsWith('%')) {
+            if (pa.attribute("min").startsWith('%'))
                 min = (int) ProfilesDialog::getStringEval(m_profile, pa.attribute("min"));
-            } else min = pa.attribute("min").toInt();
-            if (pa.attribute("max").startsWith('%')) {
+            else
+                min = pa.attribute("min").toInt();
+            if (pa.attribute("max").startsWith('%'))
                 max = (int) ProfilesDialog::getStringEval(m_profile, pa.attribute("max"));
-            } else max = pa.attribute("max").toInt();
+            else
+                max = pa.attribute("max").toInt();
             createSliderItem(paramName, (int)(value.toDouble() + 0.5) , min, max, pa.attribute("suffix", QString()));
             delete toFillin;
             toFillin = NULL;
@@ -258,8 +262,10 @@ void EffectStackEdit::transferParamDesc(const QDomElement d, int pos, int in, in
             connect(pl, SIGNAL(parameterChanged()), this, SLOT(collectAllParameters()));
         } else if (type == "geometry") {
             Geometryval *geo = new Geometryval(m_profile, m_timecode, m_frameSize, pos);
-            if (minFrame == maxFrame) geo->setupParam(pa, m_in, m_out);
-            else geo->setupParam(pa, minFrame, maxFrame);
+            if (minFrame == maxFrame)
+                geo->setupParam(pa, m_in, m_out);
+            else
+                geo->setupParam(pa, minFrame, maxFrame);
             m_vbox->addWidget(geo);
             m_valueItems[paramName+"geometry"] = geo;
             connect(geo, SIGNAL(parameterChanged()), this, SLOT(collectAllParameters()));
@@ -316,7 +322,8 @@ void EffectStackEdit::transferParamDesc(const QDomElement d, int pos, int in, in
                 out.replace("%i", QString::number(j));
                 points << QPointF(EffectsList::parameter(e, in).toDouble(), EffectsList::parameter(e, out).toDouble());
             }
-            if (!points.isEmpty()) curve->setCurve(KisCubicCurve(points));
+            if (!points.isEmpty())
+                curve->setCurve(KisCubicCurve(points));
             QSpinBox *spinin = new QSpinBox();
             spinin->setRange(0, 1000);
             QSpinBox *spinout = new QSpinBox();
@@ -397,9 +404,8 @@ void EffectStackEdit::transferParamDesc(const QDomElement d, int pos, int in, in
             toFillin = NULL;
         }
 
-        if (toFillin) {
+        if (toFillin)
             m_vbox->addWidget(toFillin);
-        }
     }
     m_vbox->addStretch();
 }
@@ -409,21 +415,39 @@ wipeInfo EffectStackEdit::getWipeInfo(QString value)
     wipeInfo info;
     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;
+
+    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;
 }
 
@@ -484,10 +508,14 @@ void EffectStackEdit::collectAllParameters()
         QDomNode na = pa.firstChildElement("name");
         QString type = pa.attributes().namedItem("type").nodeValue();
         QString paramName = i18n(na.toElement().text().toUtf8().data());
-        if (type == "complex") paramName.append("complex");
-        else if (type == "position") paramName.append("position");
-        else if (type == "geometry") paramName.append("geometry");
-        else if (type == "keyframe") paramName.append("keyframe");
+        if (type == "complex")
+            paramName.append("complex");
+        else if (type == "position")
+            paramName.append("position");
+        else if (type == "geometry")
+            paramName.append("geometry");
+        else if (type == "keyframe")
+            paramName.append("keyframe");
         if (type != "simplekeyframe" && !m_valueItems.contains(paramName)) {
             kDebug() << "// Param: " << paramName << " NOT FOUND";
             continue;
@@ -555,20 +583,34 @@ void EffectStackEdit::collectAllParameters()
         } else if (type == "wipe") {
             Wipeval *wp = (Wipeval*)m_valueItems.value(paramName);
             wipeInfo info;
-            if (wp->start_left->isChecked()) info.start = LEFT;
-            else if (wp->start_right->isChecked()) info.start = RIGHT;
-            else if (wp->start_up->isChecked()) info.start = UP;
-            else if (wp->start_down->isChecked()) info.start = DOWN;
-            else if (wp->start_center->isChecked()) info.start = CENTER;
-            else info.start = LEFT;
+            if (wp->start_left->isChecked())
+                info.start = LEFT;
+            else if (wp->start_right->isChecked())
+                info.start = RIGHT;
+            else if (wp->start_up->isChecked())
+                info.start = UP;
+            else if (wp->start_down->isChecked())
+                info.start = DOWN;
+            else if (wp->start_center->isChecked())
+                info.start = CENTER;
+            else
+                info.start = LEFT;
             info.startTransparency = wp->start_transp->value();
-            if (wp->end_left->isChecked()) info.end = LEFT;
-            else if (wp->end_right->isChecked()) info.end = RIGHT;
-            else if (wp->end_up->isChecked()) info.end = UP;
-            else if (wp->end_down->isChecked()) info.end = DOWN;
-            else if (wp->end_center->isChecked()) info.end = CENTER;
-            else info.end = RIGHT;
+
+            if (wp->end_left->isChecked())
+                info.end = LEFT;
+            else if (wp->end_right->isChecked())
+                info.end = RIGHT;
+            else if (wp->end_up->isChecked())
+                info.end = UP;
+            else if (wp->end_down->isChecked())
+                info.end = DOWN;
+            else if (wp->end_center->isChecked())
+                info.end = CENTER;
+            else
+                info.end = RIGHT;
             info.endTransparency = wp->end_transp->value();
+
             setValue = getWipeString(info);
         } else if ((type == "simplekeyframe" || type == "keyframe") && m_keyframeEditor) {
             QString realName = i18n(na.toElement().text().toUtf8().data());
@@ -579,9 +621,10 @@ void EffectStackEdit::collectAllParameters()
             KUrlRequester *req = ((Urlval*)m_valueItems.value(paramName))->urlwidget;
             setValue = req->url().path();
         }
-        if (!setValue.isNull()) {
+
+        if (!setValue.isNull())
             pa.attributes().namedItem("value").setNodeValue(setValue);
-        }
+
     }
     emit parameterChanged(oldparam, newparam);
 }
index ee1d7768d48c85a1bdbfe7e789053325f61538a7..09556ad9a77f6b26568fdbc78fd1ae0aa3b747e0 100644 (file)
@@ -46,7 +46,7 @@ public:
     QDomElement getParamDesc();
     QString getValue() const;
     void setFrameSize(QPoint p);
-    /* update the timecode display depending on what the user wants (frame number or hh:mm:ss:ff) */
+    /** @brief Update the timecode display according to settings (frame number or hh:mm:ss:ff) */
     void updateTimecodeFormat();
 
 private:
index c46de5503bd840352a158f634bc3868fb4d9e082..71f9dde1409f5a343923a12f8f054ddaa0e2a8cf 100644 (file)
@@ -390,6 +390,16 @@ void KeyframeEdit::slotSetSeeking(int state)
     KdenliveSettings::setKeyframeseek(state == Qt::Checked);
 }
 
+void KeyframeEdit::updateTimecodeFormat()
+{
+    for (int row = 0; row < keyframe_list->rowCount(); ++row) {
+        QString pos = keyframe_list->verticalHeaderItem(row)->text();
+        if (KdenliveSettings::frametimecode())
+            keyframe_list->verticalHeaderItem(row)->setText(QString::number(m_timecode.getFrameCount(pos)));
+        else
+            keyframe_list->verticalHeaderItem(row)->setText(m_timecode.getTimecodeFromFrames(pos.toInt()));
+    }
+}
 
 /*void KeyframeEdit::slotSaveCurrentParam(QTreeWidgetItem *item, int column)
 {
index 5a903755a91cabab9a1d53283f83745a7315334a..fa006fc9698a3f099fabca2d755abcf82afc7f6f 100644 (file)
@@ -84,6 +84,8 @@ public:
     void setupParam();
     void addParameter(QDomElement e);
     const QString getValue(const QString &name);
+    /** @brief Update the timecode display according to settings (frame number or hh:mm:ss:ff) */
+    void updateTimecodeFormat();
 
 private:
     QList <QDomElement> m_params;
@@ -105,9 +107,6 @@ private:
     * @return timecode */
     QString getPosString(int pos);
 
-public slots:
-
-
 private slots:
     void slotDeleteKeyframe();
     void slotAddKeyframe();