From: Jean-Baptiste Mardelle Date: Tue, 13 Jan 2009 16:35:04 +0000 (+0000) Subject: Fix problem on effect deletion, might help in: X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=c202c7c6840d019693ff6eb25d0669a222d7eaca;p=kdenlive Fix problem on effect deletion, might help in: http://www.kdenlive.org:80/mantis/view.php?id=281 svn path=/branches/KDE4/; revision=2913 --- diff --git a/src/clipitem.cpp b/src/clipitem.cpp index b23b6296..361b0f14 100644 --- a/src/clipitem.cpp +++ b/src/clipitem.cpp @@ -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()); diff --git a/src/customtrackview.cpp b/src/customtrackview.cpp index 9d6d3ca7..7ba002bb 100644 --- a/src/customtrackview.cpp +++ b/src/customtrackview.cpp @@ -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)) diff --git a/src/docclipbase.cpp b/src/docclipbase.cpp index a020e77e..ddd2f32b 100644 --- a/src/docclipbase.cpp +++ b/src/docclipbase.cpp @@ -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(); diff --git a/src/renderer.cpp b/src/renderer.cpp index 40dfc4c9..4cd0774e 100644 --- a/src/renderer.cpp +++ b/src/renderer.cpp @@ -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; } diff --git a/src/renderer.h b/src/renderer.h index d13bf111..3c69d968 100644 --- a/src/renderer.h +++ b/src/renderer.h @@ -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);