+ QTableWidgetItem *above = keyframe_list->item(item->row() - 1, item->column());
+ QTableWidgetItem *below = keyframe_list->item(item->row() + 1, item->column());
+ if (above)
+ min = getPos(above->row()) + 1;
+ if (below)
+ max = getPos(below->row()) - 1;
+
+ m_position->blockSignals(true);
+ m_position->setRange(min, max, true);
+ m_position->setPosition(getPos(item->row()));
+ m_position->blockSignals(false);
+
+ for (int col = 0; col < keyframe_list->columnCount(); col++) {
+ DoubleParameterWidget *doubleparam = static_cast <DoubleParameterWidget*>(m_slidersLayout->itemAtPosition(col, 0)->widget());
+ if (!doubleparam)
+ continue;
+ doubleparam->blockSignals(true);
+ if (keyframe_list->item(item->row(), col)) {
+ 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";
+ }
+ doubleparam->blockSignals(false);
+ }
+ if (KdenliveSettings::keyframeseek() && seek)
+ emit seekToPos(m_position->getPosition() - m_min);
+}
+
+void KeyframeEdit::slotAdjustKeyframePos(int value)
+{
+ QTableWidgetItem *item = keyframe_list->currentItem();
+ keyframe_list->verticalHeaderItem(item->row())->setText(getPosString(value));
+ slotGenerateParams(item->row(), -1);
+ if (KdenliveSettings::keyframeseek())
+ emit seekToPos(value - m_min);
+}
+
+void KeyframeEdit::slotAdjustKeyframeValue(double value)
+{
+ Q_UNUSED(value)
+
+ QTableWidgetItem *item = keyframe_list->currentItem();
+ for (int col = 0; col < keyframe_list->columnCount(); col++) {
+ DoubleParameterWidget *doubleparam = static_cast <DoubleParameterWidget*>(m_slidersLayout->itemAtPosition(col, 0)->widget());
+ if (!doubleparam)
+ continue;
+ double val = doubleparam->getValue();
+ QTableWidgetItem *nitem = keyframe_list->item(item->row(), col);
+ if (nitem && nitem->text().toDouble() != val)
+ nitem->setText(QString::number(val));
+ }
+ //keyframe_list->item(item->row() - 1, item->column());
+
+}
+
+int KeyframeEdit::getPos(int row)
+{
+ if (!keyframe_list->verticalHeaderItem(row))
+ return 0;
+ if (KdenliveSettings::frametimecode())
+ return keyframe_list->verticalHeaderItem(row)->text().toInt();
+ else
+ return m_timecode.getFrameCount(keyframe_list->verticalHeaderItem(row)->text());
+}
+
+QString KeyframeEdit::getPosString(int pos)
+{
+ if (KdenliveSettings::frametimecode())
+ return QString::number(pos);
+ else
+ return m_timecode.getTimecodeFromFrames(pos);
+}
+
+void KeyframeEdit::slotSetSeeking(bool seek)
+{
+ KdenliveSettings::setKeyframeseek(seek);
+}
+
+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()));
+ }
+
+ m_position->updateTimecodeFormat();
+}
+
+void KeyframeEdit::slotKeyframeMode()
+{
+ widgetTable->setHidden(false);
+ buttonKeyframes->setHidden(true);
+ slotAddKeyframe();
+}
+
+void KeyframeEdit::slotResetKeyframe()
+{
+ for (int col = 0; col < keyframe_list->columnCount(); ++col) {
+ DoubleParameterWidget *doubleparam = static_cast<DoubleParameterWidget*>(m_slidersLayout->itemAtPosition(col, 0)->widget());
+ if (doubleparam)
+ doubleparam->slotReset();
+ }
+}
+
+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"));
+ }
+ for (int col = 0; col < keyframe_list->columnCount(); col++) {
+ DoubleParameterWidget *doubleparam = static_cast <DoubleParameterWidget*>(m_slidersLayout->itemAtPosition(col, 0)->widget());
+ if (!doubleparam)
+ continue;
+ doubleparam->setInTimelineProperty(col == id);
+ //kDebug()<<"// PARAM: "<<col<<" Set TO: "<<(bool) (col == id);
+
+ }
+ if (update) emit parameterChanged();