- QStringList frames = e.attribute("keyframes").split(";", QString::SkipEmptyParts);
- for (int i = 0; i < frames.count(); i++) {
- QString framePos = m_timecode.getTimecodeFromFrames(frames.at(i).section(':', 0, 0).toInt());
- QList<QTreeWidgetItem *> list = keyframe_list->findItems(framePos, Qt::MatchExactly, 0);
- QTreeWidgetItem *item;
- if (!list.isEmpty()) {
- item = list.at(0);
- item->setText(2, frames.at(i).section(':', 1, 1));
- }
- else {
- item = new QTreeWidgetItem(QStringList() << framePos << QString() << frames.at(i).section(':', 1, 1));
- item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEditable | Qt::ItemIsEnabled);
- keyframe_list->addTopLevelItem(item);
- }
- }
-}
-
-void KeyframeEdit::setupParam(QDomElement e)
-{
- if (!e.isNull()) m_param = e;
- keyframe_list->clear();
- QStringList frames = m_param.attribute("keyframes").split(";", QString::SkipEmptyParts);
- for (int i = 0; i < frames.count(); i++) {
- QString framePos = m_timecode.getTimecodeFromFrames(frames.at(i).section(':', 0, 0).toInt());
- QTreeWidgetItem *item = new QTreeWidgetItem(QStringList() << framePos << frames.at(i).section(':', 1, 1));
- item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEditable | Qt::ItemIsEnabled);
- keyframe_list->addTopLevelItem(item);
- }
- QTreeWidgetItem *first = keyframe_list->topLevelItem(0);
- if (first) keyframe_list->setCurrentItem(first);
- slotAdjustKeyframeInfo();
- button_delete->setEnabled(keyframe_list->topLevelItemCount() > 1);
+ int columnId = keyframe_list->columnCount();
+ keyframe_list->insertColumn(columnId);
+ keyframe_list->setHorizontalHeaderItem(columnId, new QTableWidgetItem(paramName));
+
+ DoubleParameterWidget *doubleparam = new DoubleParameterWidget(paramName, 0,
+ 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);
+ if (e.attribute("intimeline") == "1") {
+ doubleparam->setInTimelineProperty(true);
+ }
+
+ 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;
+ for (j = 0; j < keyframe_list->rowCount(); j++) {
+ int currentPos = getPos(j);
+ if (frame == currentPos) {
+ keyframe_list->setItem(j, columnId, new QTableWidgetItem(frames.at(i).section(':', 1, 1)));
+ found = true;
+ break;
+ } else if (currentPos > frame) {
+ break;
+ }
+ }
+ if (!found) {
+ keyframe_list->insertRow(j);
+ keyframe_list->setVerticalHeaderItem(j, new QTableWidgetItem(getPosString(frame)));
+ keyframe_list->setItem(j, columnId, new QTableWidgetItem(frames.at(i).section(':', 1, 1)));
+ keyframe_list->resizeRowToContents(j);
+ }
+ if ((activeKeyframe > -1) && (activeKeyframe == frame)) {
+ keyframe_list->setCurrentCell(i, columnId);
+ keyframe_list->selectRow(i);
+ }
+ }
+ keyframe_list->resizeColumnsToContents();
+ keyframe_list->blockSignals(false);
+ slotAdjustKeyframeInfo(false);
+ button_delete->setEnabled(keyframe_list->rowCount() > 1);