]> git.sesse.net Git - kdenlive/commitdiff
Fix problem on effect deletion, might help in:
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Tue, 13 Jan 2009 16:35:04 +0000 (16:35 +0000)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Tue, 13 Jan 2009 16:35:04 +0000 (16:35 +0000)
http://www.kdenlive.org:80/mantis/view.php?id=281

svn path=/branches/KDE4/; revision=2913

src/clipitem.cpp
src/customtrackview.cpp
src/docclipbase.cpp
src/renderer.cpp
src/renderer.h

index b23b6296c1ccf27bd8d5253804f931e096203a74..361b0f14ca74a8010d0459db1a1c795164dd3f03 100644 (file)
@@ -1263,7 +1263,10 @@ void ClipItem::deleteEffect(QString index) {
                 needRepaint = true;
             }
             m_effectList.removeAt(i);
-        } else if (ix.toInt() > index.toInt()) m_effectList[i].setAttribute("kdenlive_ix", ix.toInt() - 1);
+            i--;
+        } else if (ix.toInt() > index.toInt()) {
+            m_effectList[i].setAttribute("kdenlive_ix", ix.toInt() - 1);
+        }
     }
     m_effectNames = m_effectList.effectNames().join(" / ");
     if (needRepaint) update(boundingRect());
index 9d6d3ca710274b675ee75afae5900f4b15f19688..7ba002bb220b099a4e401f6a5ec3d97d49155238 100644 (file)
@@ -961,7 +961,7 @@ bool CustomTrackView::insertPossible(AbstractGroupItem *group, const QPoint &pos
 void CustomTrackView::slotRefreshEffects(ClipItem *clip) {
     int track = m_document->tracksCount() - clip->track();
     GenTime pos = clip->startPos();
-    if (!m_document->renderer()->mltRemoveEffect(track, pos, "-1", false)) {
+    if (!m_document->renderer()->mltRemoveEffect(track, pos, "-1", false, false)) {
         emit displayMessage(i18n("Problem deleting effect"), ErrorMessage);
         return;
     }
@@ -984,7 +984,8 @@ void CustomTrackView::addEffect(int track, GenTime pos, QDomElement effect) {
 
 void CustomTrackView::deleteEffect(int track, GenTime pos, QDomElement effect) {
     QString index = effect.attribute("kdenlive_ix");
-    if (effect.attribute("disabled") != "1" && !m_document->renderer()->mltRemoveEffect(track, pos, index)) {
+    if (!m_document->renderer()->mltRemoveEffect(track, pos, index, true) && effect.attribute("disabled") != "1") {
+        kDebug() << "// ERROR REMOV EFFECT: " << index << ", DISABLE: " << effect.attribute("disabled");
         emit displayMessage(i18n("Problem deleting effect"), ErrorMessage);
         return;
     }
@@ -1041,7 +1042,7 @@ void CustomTrackView::updateEffect(int track, GenTime pos, QDomElement effect, i
             effectParams = clip->getEffectArgs(effect);
         }
         if (effectParams.paramValue("disabled") == "1") {
-            if (m_document->renderer()->mltRemoveEffect(track, pos, effectParams.paramValue("kdenlive_ix"))) {
+            if (m_document->renderer()->mltRemoveEffect(track, pos, effectParams.paramValue("kdenlive_ix"), false)) {
                 kDebug() << "//////  DISABLING EFFECT: " << index << ", CURRENTLA: " << clip->selectedEffectIndex();
             } else emit displayMessage(i18n("Problem deleting effect"), ErrorMessage);
         } else if (!m_document->renderer()->mltEditEffect(m_document->tracksCount() - clip->track(), clip->startPos(), effectParams))
index a020e77ed9d968a850aa79a732b897909c7a62ba..ddd2f32b36b2cbc0e34cf11356d8befe14a3815e 100644 (file)
@@ -70,8 +70,8 @@ DocClipBase::~DocClipBase() {
         delete m_thumbProd;
     }
     if (m_audioTimer) {
-       m_audioTimer->stop();
-       delete m_audioTimer;
+        m_audioTimer->stop();
+        delete m_audioTimer;
     }
     qDeleteAll(m_baseTrackProducers);
     m_baseTrackProducers.clear();
index 40dfc4c9e74a87a78a5c702511ef59ac38857d9a..4cd0774e4f99e838eee6b63d936c4a20041fefdc 100644 (file)
@@ -1742,8 +1742,8 @@ int Render::mltChangeClipSpeed(ItemInfo info, double speed, double oldspeed, Mlt
     return newLength;
 }
 
-bool Render::mltRemoveEffect(int track, GenTime position, QString index, bool doRefresh) {
-
+bool Render::mltRemoveEffect(int track, GenTime position, QString index, bool updateIndex, bool doRefresh) {
+    kDebug() << "// TRYing to remove effect at: " << index;
     Mlt::Service service(m_mltProducer->parent().get_service());
     bool success = false;
     Mlt::Tractor tractor(service);
@@ -1764,10 +1764,11 @@ bool Render::mltRemoveEffect(int track, GenTime position, QString index, bool do
         if ((index == "-1" && filter->get("kdenlive_id") != "")  || filter->get("kdenlive_ix") == index) {// && filter->get("kdenlive_id") == id) {
             if (clipService.detach(*filter) == 0) success = true;
             kDebug() << " / / / DLEETED EFFECT: " << ct;
-        } else {
+        } else if (updateIndex) {
+            // Adjust the other effects index
             if (QString(filter->get("kdenlive_ix")).toInt() > index.toInt()) filter->set("kdenlive_ix", QString(filter->get("kdenlive_ix")).toInt() - 1);
             ct++;
-        }
+        } else ct++;
         filter = clipService.filter(ct);
     }
     m_isBlocked = false;
@@ -1919,7 +1920,7 @@ bool Render::mltEditEffect(int track, GenTime position, EffectsParameterList par
 
     if (!params.paramValue("keyframes").isEmpty() || /*it.key().startsWith("#") || */tag.startsWith("ladspa") || tag == "sox" || tag == "autotrack_rectangle") {
         // This is a keyframe effect, to edit it, we remove it and re-add it.
-        mltRemoveEffect(track, position, index);
+        mltRemoveEffect(track, position, index, true);
         bool success = mltAddEffect(track, position, params);
         return success;
     }
index d13bf11166ca9e930ff37010eeed7bf0e5eafc89..3c69d96898e2b3910619eb09fff4958d482317df 100644 (file)
@@ -157,7 +157,7 @@ Q_OBJECT public:
     bool mltMoveClip(int startTrack, int endTrack, GenTime pos, GenTime moveStart, Mlt::Producer *prod);
     bool mltMoveClip(int startTrack, int endTrack, int pos, int moveStart, Mlt::Producer *prod);
     bool mltRemoveClip(int track, GenTime position);
-    bool mltRemoveEffect(int track, GenTime position, QString index, bool doRefresh = true);
+    bool mltRemoveEffect(int track, GenTime position, QString index, bool updateIndex, bool doRefresh = true);
     bool mltAddEffect(int track, GenTime position, EffectsParameterList params, bool doRefresh = true);
     bool mltEditEffect(int track, GenTime position, EffectsParameterList params);
     void mltMoveEffect(int track, GenTime position, int oldPos, int newPos);