]> git.sesse.net Git - kdenlive/commitdiff
Fix bug on transition change undo
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Mon, 5 Nov 2012 23:14:29 +0000 (00:14 +0100)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Mon, 5 Nov 2012 23:14:29 +0000 (00:14 +0100)
src/geometrywidget.cpp
src/geometrywidget.h
src/kdenlivesettings.kcfg
src/transitionsettings.cpp

index 4e68956d818eaf4b5fe22771509675865bcb351f..e92f029ce23668aa7d08041bb173be471587e752 100644 (file)
@@ -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);
index 6875056b711dc85fd1a5f8c8ded96278007e6396..aaa82b9745759a3002430f7de778cf5eeaa3ccfa 100644 (file)
@@ -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();
index ca30931725b8dec9b8207446dd919a77cae385d4..b6044801105ea09f51ea5d6f1d11bcd24f93327c 100644 (file)
       <default>false</default>
     </entry>
 
+    <entry name="onmonitoreffects_geometryshowpath" type="Bool">
+      <label>Show keyframe path in monitor.</label>
+      <default>true</default>
+    </entry>
+
     <entry name="onmonitoreffects_cornersshowcontrols" type="Bool">
       <label>Show additional controls in the c0rners on-monitor widget.</label>
       <default>false</default>
index 996d8a8948599431fcb3922bfa09d003123c8a61..dc8c0f4717c42728d057b620a804885763b04756 100644 (file)
@@ -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);