+ if (column == -1) {
+ // position of keyframe changed
+ QTableWidgetItem *item = keyframe_list->item(row, 0);
+ if (item == NULL) return;
+ QString val = keyframe_list->verticalHeaderItem(row)->text();
+ int pos;
+ if (KdenliveSettings::frametimecode()) pos = val.toInt();
+ else pos = m_timecode.getFrameCount(val);
+
+ if (pos <= m_min) {
+ pos = m_min;
+ if (KdenliveSettings::frametimecode()) val = QString::number(pos);
+ else val = m_timecode.getTimecodeFromFrames(pos);
+ }
+ if (pos > m_max) {
+ pos = m_max;
+ if (KdenliveSettings::frametimecode()) val = QString::number(pos);
+ else val = m_timecode.getTimecodeFromFrames(pos);
+ }
+ if (val != keyframe_list->verticalHeaderItem(row)->text()) keyframe_list->verticalHeaderItem(row)->setText(val);
+
+ for (int col = 0; col < keyframe_list->horizontalHeader()->count(); col++) {
+ item = keyframe_list->item(row, col);
+ 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++) {
+ if (keyframe_list->item(i, col)) {
+ int pos3;
+ if (KdenliveSettings::frametimecode()) pos3 = keyframe_list->verticalHeaderItem(i)->text().toInt();
+ else pos3 = m_timecode.getFrameCount(keyframe_list->verticalHeaderItem(i)->text());
+ keyframes.append(QString::number(pos3) + ':' + keyframe_list->item(i, col)->text() + ';');
+ }
+ }
+ m_params[col].setAttribute("keyframes", keyframes);
+ }
+
+ emit parameterChanged();
+ return;
+
+ }