+}
+
+void KeyframeEdit::addParameter(const QDomElement &e, int activeKeyframe)
+{
+ keyframe_list->blockSignals(true);
+ m_params.append(e.cloneNode().toElement());
+
+ QDomElement na = e.firstChildElement("name");
+ QString paramName = i18n(na.text().toUtf8().data());
+ QDomElement commentElem = e.firstChildElement("comment");
+ QString comment;
+ if (!commentElem.isNull())
+ comment = i18n(commentElem.text().toUtf8().data());
+
+ 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);
+}
+
+void KeyframeEdit::slotDeleteKeyframe()
+{
+ if (keyframe_list->rowCount() < 2)
+ return;
+ int col = keyframe_list->currentColumn();
+ int row = keyframe_list->currentRow();
+ keyframe_list->removeRow(keyframe_list->currentRow());
+ row = qMin(row, keyframe_list->rowCount() - 1);
+ keyframe_list->setCurrentCell(row, col);
+ keyframe_list->selectRow(row);
+ generateAllParams();
+
+ bool disable = keyframe_list->rowCount() < 2;
+ button_delete->setEnabled(!disable);
+ disable &= getPos(0) == m_min;
+ widgetTable->setHidden(disable);
+ buttonKeyframes->setHidden(!disable);