]> git.sesse.net Git - kdenlive/blobdiff - src/keyframeedit.cpp
Moving widget files into widgets folder.
[kdenlive] / src / keyframeedit.cpp
index fe26d5cdb3f88d9568d17ec57bcb3e3364df0a56..a7e157ffe86aa8ea0d4176135f1deba95b3a3f20 100644 (file)
@@ -16,7 +16,7 @@
  ***************************************************************************/
 
 #include "keyframeedit.h"
-#include "doubleparameterwidget.h"
+#include "widgets/doubleparameterwidget.h"
 #include "positionedit.h"
 #include "kdenlivesettings.h"
 
 
 #include <QHeaderView>
 
-KeyframeEdit::KeyframeEdit(QDomElement e, int minFrame, int maxFrame, Timecode tc, int activeKeyframe, QWidget* parent) :
-        QWidget(parent),
-        m_min(minFrame),
-        m_max(maxFrame),
-        m_timecode(tc)
+KeyframeEdit::KeyframeEdit(const QDomElement &e, int minFrame, int maxFrame, const Timecode &tc, int activeKeyframe, QWidget* parent) :
+    QWidget(parent),
+    m_min(minFrame),
+    m_max(maxFrame),
+    m_timecode(tc)
 {
     setupUi(this);
     if (m_max == -1) {
@@ -48,7 +48,7 @@ KeyframeEdit::KeyframeEdit(QDomElement e, int minFrame, int maxFrame, Timecode t
     buttonResetKeyframe->setIcon(KIcon("edit-undo"));
     buttonSeek->setIcon(KIcon("insert-link"));
     connect(keyframe_list, SIGNAL(itemSelectionChanged()), this, SLOT(slotAdjustKeyframeInfo()));
-    connect(keyframe_list, SIGNAL(cellChanged(int, int)), this, SLOT(slotGenerateParams(int, int)));
+    connect(keyframe_list, SIGNAL(cellChanged(int,int)), this, SLOT(slotGenerateParams(int,int)));
 
     m_position = new PositionEdit(i18n("Position"), 0, 0, 1, tc, widgetTable);
     ((QGridLayout*)widgetTable->layout())->addWidget(m_position, 3, 0, 1, -1);
@@ -70,7 +70,7 @@ KeyframeEdit::KeyframeEdit(QDomElement e, int minFrame, int maxFrame, Timecode t
     connect(buttonResetKeyframe, SIGNAL(clicked()), this, SLOT(slotResetKeyframe()));
     connect(m_position, SIGNAL(parameterChanged(int)), this, SLOT(slotAdjustKeyframePos(int)));
 
-    //connect(keyframe_list, SIGNAL(itemDoubleClicked(QTreeWidgetItem *, int)), this, SLOT(slotSaveCurrentParam(QTreeWidgetItem *, int)));
+    //connect(keyframe_list, SIGNAL(itemDoubleClicked(QTreeWidgetItem*,int)), this, SLOT(slotSaveCurrentParam(QTreeWidgetItem*,int)));
 
     if (!keyframe_list->currentItem()) {
         keyframe_list->setCurrentCell(0, 0);
@@ -99,7 +99,7 @@ KeyframeEdit::~KeyframeEdit()
     }
 }
 
-void KeyframeEdit::addParameter(QDomElement e, int activeKeyframe)
+void KeyframeEdit::addParameter(const QDomElement &e, int activeKeyframe)
 {
     keyframe_list->blockSignals(true);
     m_params.append(e.cloneNode().toElement());
@@ -116,9 +116,9 @@ void KeyframeEdit::addParameter(QDomElement e, int activeKeyframe)
     keyframe_list->setHorizontalHeaderItem(columnId, new QTableWidgetItem(paramName));
 
     DoubleParameterWidget *doubleparam = new DoubleParameterWidget(paramName, 0,
-            m_params.at(columnId).attribute("min").toInt(), m_params.at(columnId).attribute("max").toInt(),
-            m_params.at(columnId).attribute("default").toInt(), comment, columnId, m_params.at(columnId).attribute("suffix"), this);
-    connect(doubleparam, SIGNAL(valueChanged(int)), this, SLOT(slotAdjustKeyframeValue(int)));
+                                                                   m_params.at(columnId).attribute("min").toDouble(), m_params.at(columnId).attribute("max").toDouble(),
+                                                                   m_params.at(columnId).attribute("default").toDouble(), comment, columnId, m_params.at(columnId).attribute("suffix"), m_params.at(columnId).attribute("decimals").toInt(), this);
+    connect(doubleparam, SIGNAL(valueChanged(double)), this, SLOT(slotAdjustKeyframeValue(double)));
     connect(this, SIGNAL(showComments(bool)), doubleparam, SLOT(slotShowComment(bool)));
     connect(doubleparam, SIGNAL(setInTimeline(int)), this, SLOT(slotUpdateVisibleParameter(int)));
     m_slidersLayout->addWidget(doubleparam, columnId, 0);
@@ -126,8 +126,8 @@ void KeyframeEdit::addParameter(QDomElement e, int activeKeyframe)
         doubleparam->setInTimelineProperty(true);
     }
 
-    QStringList frames = e.attribute("keyframes").split(";", QString::SkipEmptyParts);
-    for (int i = 0; i < frames.count(); i++) {
+    QStringList frames = e.attribute("keyframes").split(';', QString::SkipEmptyParts);
+    for (int i = 0; i < frames.count(); ++i) {
         int frame = frames.at(i).section(':', 0, 0).toInt();
         bool found = false;
         int j;
@@ -192,15 +192,15 @@ void KeyframeEdit::slotAddKeyframe()
         newrow++;
     } else if (row == 0) {
         if (pos1 == m_min) {
-            result = m_max - 1;
+            result = m_max;
             newrow++;
         } else {
             result = m_min;
         }
     } else {
-        if (pos1 < m_max - 1) {
+        if (pos1 < m_max) {
             // last keyframe selected and it is not at end of clip -> add keyframe at the end
-            result = m_max - 1;
+            result = m_max;
             newrow++;
         } else {
             int pos2 = getPos(row - 1);
@@ -210,7 +210,7 @@ void KeyframeEdit::slotAddKeyframe()
 
     keyframe_list->insertRow(newrow);
     keyframe_list->setVerticalHeaderItem(newrow, new QTableWidgetItem(getPosString(result)));
-    for (int i = 0; i < keyframe_list->columnCount(); i++)
+    for (int i = 0; i < keyframe_list->columnCount(); ++i)
         keyframe_list->setItem(newrow, i, new QTableWidgetItem(keyframe_list->item(item->row(), i)->text()));
 
     keyframe_list->resizeRowsToContents();
@@ -242,13 +242,14 @@ void KeyframeEdit::slotGenerateParams(int row, int column)
 
         for (int col = 0; col < keyframe_list->horizontalHeader()->count(); col++) {
             item = keyframe_list->item(row, col);
+            if (!item) continue;
             int v = item->text().toInt();
             if (v >= m_params.at(col).attribute("max").toInt())
                 item->setText(m_params.at(col).attribute("max"));
             if (v <= m_params.at(col).attribute("min").toInt())
                 item->setText(m_params.at(col).attribute("min"));
             QString keyframes;
-            for (int i = 0; i < keyframe_list->rowCount(); i++) {
+            for (int i = 0; i < keyframe_list->rowCount(); ++i) {
                 if (keyframe_list->item(i, col))
                     keyframes.append(QString::number(getPos(i)) + ':' + keyframe_list->item(i, col)->text() + ';');
             }
@@ -286,7 +287,7 @@ void KeyframeEdit::slotGenerateParams(int row, int column)
     slotAdjustKeyframeInfo(false);
 
     QString keyframes;
-    for (int i = 0; i < keyframe_list->rowCount(); i++) {
+    for (int i = 0; i < keyframe_list->rowCount(); ++i) {
         if (keyframe_list->item(i, column))
             keyframes.append(QString::number(getPos(i)) + ':' + keyframe_list->item(i, column)->text() + ';');
     }
@@ -298,7 +299,7 @@ void KeyframeEdit::generateAllParams()
 {
     for (int col = 0; col < keyframe_list->columnCount(); col++) {
         QString keyframes;
-        for (int i = 0; i < keyframe_list->rowCount(); i++) {
+        for (int i = 0; i < keyframe_list->rowCount(); ++i) {
             if (keyframe_list->item(i, col))
                 keyframes.append(QString::number(getPos(i)) + ':' + keyframe_list->item(i, col)->text() + ';');
         }
@@ -333,7 +334,7 @@ void KeyframeEdit::slotAdjustKeyframeInfo(bool seek)
         max = getPos(below->row()) - 1;
 
     m_position->blockSignals(true);
-    m_position->setRange(min, max);
+    m_position->setRange(min, max, true);
     m_position->setPosition(getPos(item->row()));
     m_position->blockSignals(false);
 
@@ -343,7 +344,7 @@ void KeyframeEdit::slotAdjustKeyframeInfo(bool seek)
             continue;
         doubleparam->blockSignals(true);
         if (keyframe_list->item(item->row(), col)) {
-            doubleparam->setValue(keyframe_list->item(item->row(), col)->text().toInt());
+            doubleparam->setValue(keyframe_list->item(item->row(), col)->text().toDouble());
         } else {
             kDebug() << "Null pointer exception caught: http://www.kdenlive.org/mantis/view.php?id=1771";
         }
@@ -362,7 +363,7 @@ void KeyframeEdit::slotAdjustKeyframePos(int value)
         emit seekToPos(value - m_min);
 }
 
-void KeyframeEdit::slotAdjustKeyframeValue(int value)
+void KeyframeEdit::slotAdjustKeyframeValue(double value)
 {
     Q_UNUSED(value)
 
@@ -371,9 +372,9 @@ void KeyframeEdit::slotAdjustKeyframeValue(int value)
         DoubleParameterWidget *doubleparam = static_cast <DoubleParameterWidget*>(m_slidersLayout->itemAtPosition(col, 0)->widget());
         if (!doubleparam)
             continue;
-        int val = doubleparam->getValue();
+        double val = doubleparam->getValue();
         QTableWidgetItem *nitem = keyframe_list->item(item->row(), col);
-        if (nitem && nitem->text().toInt() != val)
+        if (nitem && nitem->text().toDouble() != val)
             nitem->setText(QString::number(val));
     }
     //keyframe_list->item(item->row() - 1, item->column());
@@ -382,6 +383,8 @@ void KeyframeEdit::slotAdjustKeyframeValue(int value)
 
 int KeyframeEdit::getPos(int row)
 {
+    if (!keyframe_list->verticalHeaderItem(row))
+        return 0;
     if (KdenliveSettings::frametimecode())
         return keyframe_list->verticalHeaderItem(row)->text().toInt();
     else
@@ -433,7 +436,7 @@ void KeyframeEdit::slotResetKeyframe()
 void KeyframeEdit::slotUpdateVisibleParameter(int id, bool update)
 {
     for (int i = 0; i < m_params.count(); ++i) {
-        m_params[i].setAttribute("intimeline", (i == id ? "1" : "0"));        
+        m_params[i].setAttribute("intimeline", (i == id ? "1" : "0"));
     }
     for (int col = 0; col < keyframe_list->columnCount(); col++) {
         DoubleParameterWidget *doubleparam = static_cast <DoubleParameterWidget*>(m_slidersLayout->itemAtPosition(col, 0)->widget());
@@ -462,7 +465,7 @@ void KeyframeEdit::checkVisibleParam()
     if (m_params.count() == 0)
         return;
     
-    foreach(QDomElement elem, m_params) {
+    foreach(const QDomElement &elem, m_params) {
         if (elem.attribute("intimeline") == "1")
             return;
     }
@@ -470,4 +473,10 @@ void KeyframeEdit::checkVisibleParam()
     slotUpdateVisibleParameter(0);
 }
 
+void KeyframeEdit::slotUpdateRange(int inPoint, int outPoint)
+{
+    m_min = inPoint;
+    m_max = outPoint;
+}
+
 #include "keyframeedit.moc"