From: <j-...@us...> - 2010-01-27 22:40:48
|
Revision: 4250 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=4250&view=rev Author: j-b-m Date: 2010-01-27 22:40:40 +0000 (Wed, 27 Jan 2010) Log Message: ----------- cleanup keyframe moving Modified Paths: -------------- trunk/kdenlive/src/abstractclipitem.cpp trunk/kdenlive/src/clipitem.cpp trunk/kdenlive/src/customtrackview.cpp trunk/kdenlive/src/effectstackedit.cpp trunk/kdenlive/src/keyframeedit.cpp trunk/kdenlive/src/keyframeedit.h Modified: trunk/kdenlive/src/abstractclipitem.cpp =================================================================== --- trunk/kdenlive/src/abstractclipitem.cpp 2010-01-26 00:24:00 UTC (rev 4249) +++ trunk/kdenlive/src/abstractclipitem.cpp 2010-01-27 22:40:40 UTC (rev 4250) @@ -271,7 +271,7 @@ 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) { Modified: trunk/kdenlive/src/clipitem.cpp =================================================================== --- trunk/kdenlive/src/clipitem.cpp 2010-01-26 00:24:00 UTC (rev 4249) +++ trunk/kdenlive/src/clipitem.cpp 2010-01-27 22:40:40 UTC (rev 4250) @@ -327,7 +327,6 @@ 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ 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::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; Modified: trunk/kdenlive/src/customtrackview.cpp =================================================================== --- trunk/kdenlive/src/customtrackview.cpp 2010-01-26 00:24:00 UTC (rev 4249) +++ trunk/kdenlive/src/customtrackview.cpp 2010-01-27 22:40:40 UTC (rev 4250) @@ -1169,7 +1169,7 @@ 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 @@ 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()); Modified: trunk/kdenlive/src/effectstackedit.cpp =================================================================== --- trunk/kdenlive/src/effectstackedit.cpp 2010-01-26 00:24:00 UTC (rev 4249) +++ trunk/kdenlive/src/effectstackedit.cpp 2010-01-27 22:40:40 UTC (rev 4250) @@ -236,12 +236,12 @@ // 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); Modified: trunk/kdenlive/src/keyframeedit.cpp =================================================================== --- trunk/kdenlive/src/keyframeedit.cpp 2010-01-26 00:24:00 UTC (rev 4249) +++ trunk/kdenlive/src/keyframeedit.cpp 2010-01-27 22:40:40 UTC (rev 4250) @@ -24,15 +24,17 @@ #include <QHeaderView> -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 @@ 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 @@ } } keyframe_list->resizeColumnsToContents(); - keyframe_list->selectRow(0); keyframe_list->blockSignals(false); slotAdjustKeyframeInfo(false); } @@ -136,18 +138,26 @@ 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 @@ 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 @@ generateAllParams(); button_delete->setEnabled(keyframe_list->rowCount() > 1); keyframe_list->setCurrentCell(newrow, col); + keyframe_list->selectRow(newrow); //slotGenerateParams(newrow, 0); } Modified: trunk/kdenlive/src/keyframeedit.h =================================================================== --- trunk/kdenlive/src/keyframeedit.h 2010-01-26 00:24:00 UTC (rev 4249) +++ trunk/kdenlive/src/keyframeedit.h 2010-01-27 22:40:40 UTC (rev 4250) @@ -75,7 +75,7 @@ { 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 @@ KeyItemDelegate *m_delegate; void generateAllParams(); QGridLayout *m_slidersLayout; + int m_active_keyframe; public slots: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |