From f09fa7e85377a8f129f0f74be3226551b003e79c Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Mardelle Date: Wed, 27 Jan 2010 22:40:40 +0000 Subject: [PATCH] cleanup keyframe moving svn path=/trunk/kdenlive/; revision=4250 --- src/abstractclipitem.cpp | 2 +- src/clipitem.cpp | 16 ++++++++++++---- src/customtrackview.cpp | 4 ++-- src/effectstackedit.cpp | 4 ++-- src/keyframeedit.cpp | 32 ++++++++++++++++++++++---------- src/keyframeedit.h | 3 ++- 6 files changed, 41 insertions(+), 20 deletions(-) diff --git a/src/abstractclipitem.cpp b/src/abstractclipitem.cpp index 39ed506d..a0f860f0 100644 --- a/src/abstractclipitem.cpp +++ b/src/abstractclipitem.cpp @@ -271,7 +271,7 @@ void AbstractClipItem::drawKeyFrames(QPainter *painter, QRectF /*exposedRect*/) y1 = br.bottom() - i.value() * maxh; QLineF l2; while (i != m_keyframes.constEnd()) { - if (i.key() == m_selectedKeyframe) color = QColor(Qt::red); + if (i.key() == m_editedKeyframe) color = QColor(Qt::red); else color = QColor(Qt::blue); ++i; if (i == m_keyframes.constEnd() && m_keyframes.count() != 1) { diff --git a/src/clipitem.cpp b/src/clipitem.cpp index c59c33bf..f97ed719 100644 --- a/src/clipitem.cpp +++ b/src/clipitem.cpp @@ -327,7 +327,6 @@ void ClipItem::setKeyframes(const int ix, const QString keyframes) m_keyframeFactor = 100.0 / (max - min); m_keyframeDefault = e.attribute("default").toDouble(); m_selectedKeyframe = 0; - m_editedKeyframe = -1; // parse keyframes const QStringList keyframes = e.attribute("keyframes").split(';', QString::SkipEmptyParts); foreach(const QString &str, keyframes) { @@ -335,6 +334,8 @@ void ClipItem::setKeyframes(const int ix, const QString keyframes) double val = str.section(':', 1, 1).toDouble(); m_keyframes[pos] = val; } + if (m_keyframes.find(m_editedKeyframe) == m_keyframes.end()) m_editedKeyframe = -1; + if (m_keyframes.find(m_editedKeyframe) == m_keyframes.end()) m_editedKeyframe = -1; update(); return; } @@ -360,7 +361,7 @@ void ClipItem::setSelectedEffect(const int ix) m_keyframeFactor = 100.0 / (max - min); m_keyframeDefault = e.attribute("default").toDouble(); m_selectedKeyframe = 0; - m_editedKeyframe = -1; + // parse keyframes const QStringList keyframes = e.attribute("keyframes").split(';', QString::SkipEmptyParts); foreach(const QString &str, keyframes) { @@ -368,6 +369,7 @@ void ClipItem::setSelectedEffect(const int ix) double val = str.section(':', 1, 1).toDouble(); m_keyframes[pos] = val; } + if (m_keyframes.find(m_editedKeyframe) == m_keyframes.end()) m_editedKeyframe = -1; update(); return; } @@ -852,8 +854,11 @@ OPERATIONTYPE ClipItem::operationMode(QPointF pos) const double scale = projectScene()->scale().x(); double maximumOffset = 6 / scale; if (isSelected() || (parentItem() && parentItem()->isSelected())) { - m_editedKeyframe = mouseOverKeyFrames(pos, maximumOffset); - if (m_editedKeyframe != -1) return KEYFRAME; + int kf = mouseOverKeyFrames(pos, maximumOffset); + if (kf != -1) { + m_editedKeyframe = kf; + return KEYFRAME; + } } QRectF rect = sceneBoundingRect(); int addtransitionOffset = 10; @@ -1631,6 +1636,8 @@ bool ClipItem::isVideoOnly() const void ClipItem::insertKeyframe(QDomElement effect, int pos, int val) { if (effect.attribute("disabled") == "1") return; + effect.setAttribute("active_keyframe", pos); + m_editedKeyframe = pos; QDomNodeList params = effect.elementsByTagName("parameter"); for (int i = 0; i < params.count(); i++) { QDomElement e = params.item(i).toElement(); @@ -1658,6 +1665,7 @@ void ClipItem::insertKeyframe(QDomElement effect, int pos, int val) void ClipItem::movedKeyframe(QDomElement effect, int oldpos, int newpos, double value) { if (effect.attribute("disabled") == "1") return; + effect.setAttribute("active_keyframe", newpos); QDomNodeList params = effect.elementsByTagName("parameter"); int start = cropStart().frames(m_fps); int end = (cropStart() + cropDuration()).frames(m_fps) - 1; diff --git a/src/customtrackview.cpp b/src/customtrackview.cpp index 2ac23366..17ddcc78 100644 --- a/src/customtrackview.cpp +++ b/src/customtrackview.cpp @@ -1169,7 +1169,7 @@ void CustomTrackView::groupSelectedItems(bool force, bool createNewGroup) void CustomTrackView::mouseDoubleClickEvent(QMouseEvent *event) { if (m_dragItem && m_dragItem->hasKeyFrames()) { - if (m_moveOpMode == KEYFRAME) { + /*if (m_moveOpMode == KEYFRAME) { // user double clicked on a keyframe, open edit dialog //TODO: update for effects with several values per keyframe QDialog d(parentWidget()); @@ -1191,7 +1191,7 @@ void CustomTrackView::mouseDoubleClickEvent(QMouseEvent *event) emit clipItemSelected(item, item->selectedEffectIndex()); } - } else { + } else*/ { // add keyframe GenTime keyFramePos = GenTime((int)(mapToScene(event->pos()).x()), m_document->fps()) - m_dragItem->startPos() + m_dragItem->cropStart(); int val = m_dragItem->addKeyFrame(keyFramePos, mapToScene(event->pos()).toPoint().y()); diff --git a/src/effectstackedit.cpp b/src/effectstackedit.cpp index 0d92a36f..e9ae636b 100644 --- a/src/effectstackedit.cpp +++ b/src/effectstackedit.cpp @@ -236,12 +236,12 @@ void EffectStackEdit::transferParamDesc(const QDomElement d, int in, int out) // keyframe editor widget kDebug() << "min: " << m_in << ", MAX: " << m_out; if (m_keyframeEditor == NULL) { - KeyframeEdit *geo = new KeyframeEdit(pa, m_in, m_in + m_out, pa.attribute("min").toInt(), pa.attribute("max").toInt(), m_timecode); + KeyframeEdit *geo = new KeyframeEdit(pa, m_in, m_in + m_out, pa.attribute("min").toInt(), pa.attribute("max").toInt(), m_timecode, e.attribute("active_keyframe", "-1").toInt()); m_vbox->addWidget(geo); m_valueItems[paramName+"keyframe"] = geo; m_keyframeEditor = geo; connect(geo, SIGNAL(parameterChanged()), this, SLOT(collectAllParameters())); - connect(geo, SIGNAL(seekToPos(int)), this, SLOT(slotSeekToPos(int))); + connect(geo, SIGNAL(seekToPos(int)), this, SLOT(slotSeekToPos(int))); } else { // we already have a keyframe editor, so just add another column for the new param m_keyframeEditor->addParameter(pa); diff --git a/src/keyframeedit.cpp b/src/keyframeedit.cpp index 7d98db46..b6dbca01 100644 --- a/src/keyframeedit.cpp +++ b/src/keyframeedit.cpp @@ -24,15 +24,17 @@ #include -KeyframeEdit::KeyframeEdit(QDomElement e, int minFrame, int maxFrame, int minVal, int maxVal, Timecode tc, QWidget* parent) : +KeyframeEdit::KeyframeEdit(QDomElement e, int minFrame, int maxFrame, int minVal, int maxVal, Timecode tc, int active_keyframe, QWidget* parent) : QWidget(parent), m_min(minFrame), m_max(maxFrame), m_minVal(minVal), m_maxVal(maxVal), m_timecode(tc), - m_previousPos(0) + m_previousPos(0), + m_active_keyframe(active_keyframe) { + kDebug() << " / / / /MODIFIED KFR: " << m_active_keyframe; setupUi(this); m_params.append(e); keyframe_list->setFont(KGlobalSettings::generalFont()); @@ -44,21 +46,22 @@ KeyframeEdit::KeyframeEdit(QDomElement e, int minFrame, int maxFrame, int minVal button_delete->setIcon(KIcon("list-remove")); button_delete->setToolTip(i18n("Delete keyframe")); connect(keyframe_list, SIGNAL(itemSelectionChanged()), this, SLOT(slotAdjustKeyframeInfo())); - //keyframe_val->setRange(m_minVal, m_maxVal); + connect(keyframe_list, SIGNAL(cellChanged(int, int)), this, SLOT(slotGenerateParams(int, int))); setupParam(); - //keyframe_list->sortItems(0); + keyframe_list->resizeRowsToContents(); keyframe_list->resizeColumnsToContents(); - keyframe_list->setSelectionBehavior(QAbstractItemView::SelectRows); //keyframe_list->horizontalHeader()->resizeSections(QHeaderView::ResizeToContents); connect(button_delete, SIGNAL(clicked()), this, SLOT(slotDeleteKeyframe())); connect(button_add, SIGNAL(clicked()), this, SLOT(slotAddKeyframe())); - connect(keyframe_list, SIGNAL(cellChanged(int, int)), this, SLOT(slotGenerateParams(int, int))); //connect(keyframe_list, SIGNAL(itemDoubleClicked(QTreeWidgetItem *, int)), this, SLOT(slotSaveCurrentParam(QTreeWidgetItem *, int))); connect(keyframe_pos, SIGNAL(valueChanged(int)), this, SLOT(slotAdjustKeyframePos(int))); //connect(keyframe_val, SIGNAL(valueChanged(int)), this, SLOT(slotAdjustKeyframeValue(int))); keyframe_pos->setPageStep(1); - + if (!keyframe_list->currentItem()) { + keyframe_list->setCurrentCell(0, 0); + keyframe_list->selectRow(0); + } /*m_delegate = new KeyItemDelegate(minVal, maxVal); keyframe_list->setItemDelegate(m_delegate);*/ } @@ -114,7 +117,6 @@ void KeyframeEdit::addParameter(QDomElement e) } } keyframe_list->resizeColumnsToContents(); - keyframe_list->selectRow(0); keyframe_list->blockSignals(false); slotAdjustKeyframeInfo(false); } @@ -136,18 +138,26 @@ void KeyframeEdit::setupParam() connect(sl, SIGNAL(valueChanged(int)), this, SLOT(slotAdjustKeyframeValue(int))); m_slidersLayout->addWidget(sl, 0, 1); param_sliders->setLayout(m_slidersLayout); + keyframe_list->setSelectionBehavior(QAbstractItemView::SelectRows); + keyframe_list->setSelectionMode(QAbstractItemView::SingleSelection); + QStringList frames = m_params.at(0).attribute("keyframes").split(";", QString::SkipEmptyParts); for (int i = 0; i < frames.count(); i++) { keyframe_list->insertRow(i); - QString framePos = m_timecode.getTimecodeFromFrames(frames.at(i).section(':', 0, 0).toInt()); + int currentpos = frames.at(i).section(':', 0, 0).toInt(); + QString framePos = m_timecode.getTimecodeFromFrames(currentpos); keyframe_list->setVerticalHeaderItem(i, new QTableWidgetItem(framePos)); keyframe_list->setItem(i, col, new QTableWidgetItem(frames.at(i).section(':', 1, 1))); + if ((m_active_keyframe > -1) && (m_active_keyframe == currentpos)) { + keyframe_list->setCurrentCell(i, 0); + keyframe_list->selectRow(i); + } //item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEditable | Qt::ItemIsEnabled); } /*QTreeWidgetItem *first = keyframe_list->topLevelItem(0); if (first) keyframe_list->setCurrentItem(first);*/ keyframe_list->blockSignals(false); - keyframe_list->setCurrentCell(0, 0); + //keyframe_list->setCurrentCell(0, 0); //slotAdjustKeyframeInfo(); button_delete->setEnabled(keyframe_list->rowCount() > 1); } @@ -160,6 +170,7 @@ void KeyframeEdit::slotDeleteKeyframe() keyframe_list->removeRow(keyframe_list->currentRow()); row = qMin(row, keyframe_list->rowCount() - 1); keyframe_list->setCurrentCell(row, col); + keyframe_list->selectRow(row); generateAllParams(); button_delete->setEnabled(keyframe_list->rowCount() > 1); } @@ -202,6 +213,7 @@ void KeyframeEdit::slotAddKeyframe() generateAllParams(); button_delete->setEnabled(keyframe_list->rowCount() > 1); keyframe_list->setCurrentCell(newrow, col); + keyframe_list->selectRow(newrow); //slotGenerateParams(newrow, 0); } diff --git a/src/keyframeedit.h b/src/keyframeedit.h index 7a30db94..91b3a7a1 100644 --- a/src/keyframeedit.h +++ b/src/keyframeedit.h @@ -75,7 +75,7 @@ class KeyframeEdit : public QWidget, public Ui::KeyframeEditor_UI { Q_OBJECT public: - explicit KeyframeEdit(QDomElement e, int minFrame, int maxFrame, int minVal, int maxVal, Timecode tc, QWidget* parent = 0); + explicit KeyframeEdit(QDomElement e, int minFrame, int maxFrame, int minVal, int maxVal, Timecode tc, int active_keyframe, QWidget* parent = 0); virtual ~KeyframeEdit(); void setupParam(); void addParameter(QDomElement e); @@ -91,6 +91,7 @@ private: KeyItemDelegate *m_delegate; void generateAllParams(); QGridLayout *m_slidersLayout; + int m_active_keyframe; public slots: -- 2.39.2