]> git.sesse.net Git - kdenlive/blobdiff - src/trackview.cpp
Fix hang on exit somewhere strange inside Qt on OS X.
[kdenlive] / src / trackview.cpp
index 54d916a4067fc414e65487884b6125044caa948e..c72136c569948e87a2604ff1c2974424a7f38c3e 100644 (file)
@@ -105,6 +105,8 @@ TrackView::TrackView(KdenliveDoc *doc, bool *ok, QWidget *parent) :
     connect(m_trackview, SIGNAL(tracksChanged()), this, SLOT(slotReloadTracks()));
     connect(m_trackview, SIGNAL(updateTrackHeaders()), this, SLOT(slotRepaintTracks()));
     connect(m_trackview, SIGNAL(showTrackEffects(int, TrackInfo)), this, SIGNAL(showTrackEffects(int, TrackInfo)));
+    connect(m_trackview, SIGNAL(updateTrackEffectState(int)), this, SLOT(slotUpdateTrackEffectState(int)));
+
 
     parseDocument(m_doc->toXml());
     if (m_doc->setSceneList() == -1) *ok = false;
@@ -251,8 +253,7 @@ void TrackView::parseDocument(QDomDocument doc)
                 p = playlists.item(j).toElement();
                 if (p.attribute("id") == playlist_name) {
                     // playlist found, check track effects
-                    QDomNodeList trackEffects = p.elementsByTagName("filter");
-                    kDebug() << "<< PLAYLIST: " << playlist_name << ", effects: " << trackEffects.count() << ", TK IX: " << trackIndex;
+                    QDomNodeList trackEffects = p.childNodes();
                     slotAddProjectEffects(trackEffects, p, NULL, trackIndex++);
                     break;
                 }
@@ -683,11 +684,12 @@ int TrackView::slotAddProjectTrack(int ix, QDomElement xml, bool locked)
     return position;
 }
 
-void TrackView::slotAddProjectEffects(QDomNodeList effects, QDomElement parent, ClipItem *clip, int trackIndex)
+void TrackView::slotAddProjectEffects(QDomNodeList effects, QDomElement parentNode, ClipItem *clip, int trackIndex)
 {
     for (int ix = 0; ix < effects.count(); ix++) {
         bool disableeffect = false;
         QDomElement effect = effects.at(ix).toElement();
+        if (effect.tagName() != "filter") continue;
 
         // add effect to clip
         QString effecttag;
@@ -727,7 +729,7 @@ void TrackView::slotAddProjectEffects(QDomNodeList effects, QDomElement parent,
         if (clipeffect.isNull()) {
             kDebug() << "///  WARNING, EFFECT: " << effecttag << ": " << effectid << " not found, removing it from project";
             m_documentErrors.append(i18n("Effect %1:%2 not found in MLT, it was removed from this project\n", effecttag, effectid));
-            parent.removeChild(effects.at(ix));
+            if (parentNode.removeChild(effects.at(ix)).isNull()) kDebug() << "///  PROBLEM REMOVING EFFECT: " << effecttag;
             ix--;
         } else {
             QDomElement currenteffect = clipeffect.cloneNode().toElement();
@@ -769,7 +771,10 @@ void TrackView::slotAddProjectEffects(QDomNodeList effects, QDomElement parent,
                         endvalue = effectparam.text().toDouble() * fact;
                 }
                 // add first keyframe
-                keyframes.append(QString::number(effectin) + ':' + QString::number(startvalue) + ';' + QString::number(effectout) + ':' + QString::number(endvalue) + ';');
+                if (effectout <= effectin) {
+                    // there is only one keyframe
+                    keyframes.append(QString::number(effectin) + ':' + QString::number(startvalue) + ';');
+                } else keyframes.append(QString::number(effectin) + ':' + QString::number(startvalue) + ';' + QString::number(effectout) + ':' + QString::number(endvalue) + ';');
                 QDomNode lastParsedEffect;
                 ix++;
                 QDomNode n2 = effects.at(ix);
@@ -989,7 +994,18 @@ void TrackView::updateRuler()
 
 void TrackView::slotShowTrackEffects(int ix)
 {
+    m_trackview->clearSelection();
     emit showTrackEffects(m_doc->tracksCount() - ix, m_doc->trackInfoAt(m_doc->tracksCount() - ix - 1));
 }
 
+void TrackView::slotUpdateTrackEffectState(int ix)
+{
+    QList<HeaderTrack *> widgets = findChildren<HeaderTrack *>();
+    if (ix >= widgets.count()) {
+        kDebug() << "ERROR, Trying to access a non existant track: " << ix;
+        return;
+    }
+    widgets.at(m_doc->tracksCount() - ix - 1)->updateEffectLabel(m_doc->trackInfoAt(ix).effectsList.effectNames());
+}
+
 #include "trackview.moc"