From: Jean-Baptiste Mardelle Date: Mon, 5 Nov 2012 23:14:29 +0000 (+0100) Subject: Fix bug on transition change undo X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=c2c5d4c68bb8196d1d8e1cf2a0a102f7b58c7830;p=kdenlive Fix bug on transition change undo --- diff --git a/src/geometrywidget.cpp b/src/geometrywidget.cpp index 4e68956d..e92f029c 100644 --- a/src/geometrywidget.cpp +++ b/src/geometrywidget.cpp @@ -57,6 +57,7 @@ GeometryWidget::GeometryWidget(Monitor* monitor, Timecode timecode, int clipPos, setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Maximum); MonitorEditWidget *edit = monitor->getEffectEdit(); edit->removeCustomControls(); + edit->addCustomButton(KIcon("draw-path"), i18n("Show path"), this, SLOT(slotShowPath(bool)), true, KdenliveSettings::onmonitoreffects_geometryshowpath()); edit->addCustomButton(KIcon("transform-crop"), i18n("Show previous keyframe"), this, SLOT(slotShowPreviousKeyFrame(bool)), true, KdenliveSettings::onmonitoreffects_geometryshowprevious()); m_scene = edit->getScene(); m_scene->cleanup(); @@ -291,6 +292,16 @@ void GeometryWidget::slotShowPreviousKeyFrame(bool show) slotPositionChanged(-1, false); } +void GeometryWidget::slotShowPath(bool show) +{ + KdenliveSettings::setOnmonitoreffects_geometryshowpath(show); + if (m_geomPath) { + if (show) m_scene->addItem(m_geomPath); + else m_scene->removeItem(m_geomPath); + } + slotPositionChanged(-1, false); +} + void GeometryWidget::updateTimecodeFormat() { m_timePos->slotUpdateTimeCodeFormat(); @@ -361,7 +372,8 @@ void GeometryWidget::setupParam(const QDomElement elem, int minframe, int maxfra connect(m_geomPath, SIGNAL(changed()), this, SLOT(slotUpdatePath())); m_geomPath->setPen(QPen(Qt::red)); m_geomPath->setPoints(m_geometry); - m_scene->addItem(m_geomPath); + if (KdenliveSettings::onmonitoreffects_geometryshowpath()) + m_scene->addItem(m_geomPath); m_scene->centerView(); slotPositionChanged(0, false); } @@ -535,7 +547,7 @@ void GeometryWidget::slotDeleteKeyframe(int pos) } m_timeline->update(); - if (m_geomPath) { + if (m_geomPath && KdenliveSettings::onmonitoreffects_geometryshowpath()) { m_scene->removeItem(m_geomPath); m_geomPath->setPoints(m_geometry); m_scene->addItem(m_geomPath); @@ -624,7 +636,7 @@ void GeometryWidget::slotUpdateGeometry() geom->insert(item2); } } - if (m_geomPath) { + if (m_geomPath && KdenliveSettings::onmonitoreffects_geometryshowpath()) { m_scene->removeItem(m_geomPath); m_geomPath->setPoints(m_geometry); m_scene->addItem(m_geomPath); @@ -824,7 +836,7 @@ void GeometryWidget::slotResetKeyframes() item.mix(100); m_geometry->insert(item); m_timeline->setKeyGeometry(m_geometry, m_outPoint - m_inPoint); - if (m_geomPath) { + if (m_geomPath && KdenliveSettings::onmonitoreffects_geometryshowpath()) { m_scene->removeItem(m_geomPath); m_geomPath->setPoints(m_geometry); m_scene->addItem(m_geomPath); @@ -853,7 +865,7 @@ void GeometryWidget::slotResetNextKeyframes() m_geometry->insert(item); } m_timeline->setKeyGeometry(m_geometry, m_outPoint - m_inPoint); - if (m_geomPath) { + if (m_geomPath && KdenliveSettings::onmonitoreffects_geometryshowpath()) { m_scene->removeItem(m_geomPath); m_geomPath->setPoints(m_geometry); m_scene->addItem(m_geomPath); @@ -892,7 +904,7 @@ void GeometryWidget::slotResetPreviousKeyframes() m_geometry->insert(item); } m_timeline->setKeyGeometry(m_geometry, m_outPoint - m_inPoint); - if (m_geomPath) { + if (m_geomPath && KdenliveSettings::onmonitoreffects_geometryshowpath()) { m_scene->removeItem(m_geomPath); m_geomPath->setPoints(m_geometry); m_scene->addItem(m_geomPath); @@ -948,7 +960,7 @@ void GeometryWidget::importKeyframes(const QString &data, int maximum) m_geometry->insert(item); } m_timeline->setKeyGeometry(m_geometry, m_outPoint - m_inPoint); - if (m_geomPath) { + if (m_geomPath && KdenliveSettings::onmonitoreffects_geometryshowpath()) { m_scene->removeItem(m_geomPath); m_geomPath->setPoints(m_geometry); m_scene->addItem(m_geomPath); diff --git a/src/geometrywidget.h b/src/geometrywidget.h index 6875056b..aaa82b97 100644 --- a/src/geometrywidget.h +++ b/src/geometrywidget.h @@ -177,6 +177,8 @@ private slots: void slotFitToHeight(); /** @brief Show / hide previous keyframe in monitor scene. */ void slotShowPreviousKeyFrame(bool show); + /** @brief Show / hide keyframe path in monitor scene. */ + void slotShowPath(bool show); signals: void parameterChanged(); diff --git a/src/kdenlivesettings.kcfg b/src/kdenlivesettings.kcfg index ca309317..b6044801 100644 --- a/src/kdenlivesettings.kcfg +++ b/src/kdenlivesettings.kcfg @@ -796,6 +796,11 @@ false + + + true + + false diff --git a/src/transitionsettings.cpp b/src/transitionsettings.cpp index 996d8a89..dc8c0f47 100644 --- a/src/transitionsettings.cpp +++ b/src/transitionsettings.cpp @@ -122,9 +122,21 @@ void TransitionSettings::slotTransitionChanged(bool reinit, bool updateCurrent) m_effectEdit->transferParamDesc(e, m_usedTransition->info(), false); } else { // Same transition, we just want to update the parameters value - slotUpdateEffectParams(e, e); - if (m_usedTransition->hasGeometry()) - m_effectEdit->transferParamDesc(m_usedTransition->toXML(), m_usedTransition->info(), false); + int ix = transitionList->findData(m_usedTransition->transitionInfo(), Qt::UserRole, Qt::MatchExactly); + if (ix != transitionList->currentIndex()) { + // Transition type changed, reload params + transitionList->blockSignals(true); + transitionList->setCurrentIndex(ix); + transitionList->blockSignals(false); + m_effectEdit->transferParamDesc(e, m_usedTransition->info(), false); + } + else { + slotUpdateEffectParams(e, e); + if (m_usedTransition->hasGeometry()) + m_effectEdit->transferParamDesc(m_usedTransition->toXML(), m_usedTransition->info(), false); + } + if (m_effectEdit->needsMonitorEffectScene()) + connect(m_effectEdit->monitor(), SIGNAL(renderPosition(int)), this, SLOT(slotRenderPos(int))); } slotCheckMonitorPosition(m_effectEdit->monitor()->render->seekFramePosition()); } @@ -153,7 +165,7 @@ void TransitionSettings::slotTransitionItemSelected(Transition* t, int nextTrack m_effectEdit->setFrameSize(p); m_autoTrackTransition = nextTrack; disconnect(m_effectEdit->monitor(), SIGNAL(renderPosition(int)), this, SLOT(slotRenderPos(int))); - if (t == m_usedTransition) { + if (t == m_usedTransition) { if (t == NULL) return; if (update) { transitionTrack->blockSignals(true);