]> git.sesse.net Git - kdenlive/blobdiff - src/trackview.cpp
string fixes
[kdenlive] / src / trackview.cpp
index 640431ee60cac3761b3f39a09e08a8dff71cea6b..f91abc35b871e51146332e79f8f1f5dab11dff43 100644 (file)
@@ -106,8 +106,7 @@ TrackView::TrackView(KdenliveDoc *doc, bool *ok, QWidget *parent) :
     connect(m_trackview, SIGNAL(updateTrackHeaders()), this, SLOT(slotRepaintTracks()));
 
     parseDocument(m_doc->toXml());
-    int error = m_doc->setSceneList();
-    if (error == -1) *ok = false;
+    if (m_doc->setSceneList() == -1) *ok = false;
     else *ok = true;
     connect(m_trackview, SIGNAL(cursorMoved(int, int)), m_ruler, SLOT(slotCursorMoved(int, int)));
     connect(m_trackview->horizontalScrollBar(), SIGNAL(valueChanged(int)), m_ruler, SLOT(slotMoveRuler(int)));
@@ -307,6 +306,13 @@ void TrackView::parseDocument(QDomDocument doc)
                 else if (paramName == "force_track" && p.text() == "1") forceTrack = true;
             }
         }
+        if (a_track == b_track || b_track == 0) {
+            // invalid transition, remove it
+            m_documentErrors.append(i18n("Removed invalid transition: %1", e.attribute("id")) + '\n');
+            tractor.removeChild(transitions.item(i));
+            i--;
+            continue;
+        }
         if (transitionAdd || mlt_service != "mix") {
             // Transition should be added to the scene
             ItemInfo transitionInfo;
@@ -628,7 +634,6 @@ int TrackView::slotAddProjectTrack(int ix, QDomElement xml, bool locked)
                 if (locked) item->setItemLocked(true);
                 clip->addReference();
                 position += (out - in + 1);
-                kDebug() << "/////////\n\n\n" << "CLIP SPEED: " << speed << ", " << strobe << "\n\n\n/////////////////////";
                 if (speed != 1.0 || strobe > 1) {
                     QDomElement speedeffect = MainWindow::videoEffects.getEffectByTag(QString(), "speed").cloneNode().toElement();
                     EffectsList::setParameter(speedeffect, "speed", QString::number((int)(100 * speed + 0.5)));
@@ -640,12 +645,13 @@ int TrackView::slotAddProjectTrack(int ix, QDomElement xml, bool locked)
                 // parse clip effects
                 QDomNodeList effects = elem.childNodes();
                 for (int ix = 0; ix < effects.count(); ix++) {
+                    bool disableeffect = false;
                     QDomElement effect = effects.at(ix).toElement();
                     if (effect.tagName() == "filter") {
                         // add effect to clip
                         QString effecttag;
                         QString effectid;
-                        QString effectindex;
+                        QString effectindex = QString::number(ix + 1);
                         QString ladspaEffectFile;
                         // Get effect tag & index
                         for (QDomNode n3 = effect.firstChild(); !n3.isNull(); n3 = n3.nextSibling()) {
@@ -655,8 +661,12 @@ int TrackView::slotAddProjectTrack(int ix, QDomElement xml, bool locked)
                                 effecttag = effectparam.text();
                             } else if (effectparam.attribute("name") == "kdenlive_id") {
                                 effectid = effectparam.text();
+                            } else if (effectparam.attribute("name") == "disable" && effectparam.text().toInt() == 1) {
+                                // Fix effects index
+                                disableeffect = true;
                             } else if (effectparam.attribute("name") == "kdenlive_ix") {
-                                effectindex = effectparam.text();
+                                // Fix effects index
+                                effectparam.firstChild().setNodeValue(effectindex);
                             } else if (effectparam.attribute("name") == "src") {
                                 ladspaEffectFile = effectparam.text();
                                 if (!QFile::exists(ladspaEffectFile)) {
@@ -785,7 +795,15 @@ int TrackView::slotAddProjectTrack(int ix, QDomElement xml, bool locked)
                                             if (factor.startsWith('%')) {
                                                 fact = ProfilesDialog::getStringEval(m_doc->mltProfile(), factor);
                                             } else fact = factor.toDouble();
-                                            e.setAttribute("value", paramvalue.toDouble() * fact);
+                                            if (e.attribute("type") == "simplekeyframe") {
+                                                QStringList kfrs = paramvalue.split(";");
+                                                for (int l = 0; l < kfrs.count(); l++) {
+                                                    QString fr = kfrs.at(l).section("=", 0, 0);
+                                                    double val = kfrs.at(l).section("=", 1, 1).toDouble();
+                                                    kfrs[l] = fr + ":" + QString::number((int)(val * fact));
+                                                }
+                                                e.setAttribute("keyframes", kfrs.join(";"));
+                                            } else e.setAttribute("value", paramvalue.toDouble() * fact);
                                         } else e.setAttribute("value", paramvalue);
                                         break;
                                     }
@@ -800,8 +818,8 @@ int TrackView::slotAddProjectTrack(int ix, QDomElement xml, bool locked)
                                 }
                                 currenteffect.setAttribute("src", ladspaEffectFile);
                             }
+                            if (disableeffect) currenteffect.setAttribute("disable", "1");
                             item->addEffect(currenteffect, false);
-                            item->effectsCounter();
                         }
                     }
                 }