]> git.sesse.net Git - kdenlive/commitdiff
* Remove broken transition (where in > out) on project opening
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Fri, 9 Jan 2009 15:10:58 +0000 (15:10 +0000)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Fri, 9 Jan 2009 15:10:58 +0000 (15:10 +0000)
svn path=/branches/KDE4/; revision=2885

src/kdenlivedoc.cpp
src/kdenlivedoc.h
src/trackview.cpp

index f1d6495160751ca423d5ffe9e63dded261d9395f..6d6baa38b5612bf877d13df54fa138428ce4dba2 100644 (file)
@@ -187,10 +187,7 @@ KdenliveDoc::KdenliveDoc(const KUrl &url, const KUrl &projectFolder, QUndoGroup
     if (m_fps == 30000.0 / 1001.0) m_timecode.setFormat(30, true);
     else m_timecode.setFormat((int) m_fps);
 
-    m_render->setSceneList(m_document.toString(), m_startPos);
     //kDebug() << "// SETTING SCENE LIST:\n\n" << m_document.toString();
-    checkProjectClips();
-
     connect(m_autoSaveTimer, SIGNAL(timeout()), this, SLOT(slotAutoSave()));
 
 }
@@ -205,6 +202,11 @@ KdenliveDoc::~KdenliveDoc() {
     }
 }
 
+void KdenliveDoc::setSceneList() {
+    m_render->setSceneList(m_document.toString(), m_startPos);
+    checkProjectClips();
+}
+
 QDomDocument KdenliveDoc::createEmptyDocument(const int videotracks, const int audiotracks) {
     // Creating new document
     QDomDocument doc;
index 2368ca6326157e5a4491ea55a84318493f55a4c5..e5bfbbdc968524bf452fd00bd8a50211808c8034 100644 (file)
@@ -120,6 +120,7 @@ Q_OBJECT public:
     QString getLadspaFile() const;
     void setZone(int start, int end);
     QPoint zone() const;
+    void setSceneList();
 
 private:
     KUrl m_url;
index bdc09307969a7d657805be1810fe33295bda1452..d5eec1590ba9515b0941d8a11e5b72833cd6cd9e 100644 (file)
@@ -78,7 +78,7 @@ TrackView::TrackView(KdenliveDoc *doc, QWidget *parent)
     connect(m_trackview, SIGNAL(trackHeightChanged()), this, SLOT(slotRebuildTrackHeaders()));
 
     parseDocument(m_doc->toXml());
-
+    m_doc->setSceneList();
     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)));
     connect(m_trackview, SIGNAL(mousePosition(int)), this, SIGNAL(mousePosition(int)));
@@ -127,6 +127,7 @@ void TrackView::parseDocument(QDomDocument doc) {
     }*/
 
     // parse project tracks
+    QDomElement tractor = doc.elementsByTagName("tractor").item(0).toElement();
     QDomNodeList tracks = doc.elementsByTagName("track");
     QDomNodeList playlists = doc.elementsByTagName("playlist");
     int duration = 300;
@@ -176,9 +177,9 @@ void TrackView::parseDocument(QDomDocument doc) {
 
     // parse transitions
     QDomNodeList transitions = doc.elementsByTagName("transition");
-    int projectTransitions = transitions.count();
+
     //kDebug() << "//////////// TIMELINE FOUND: " << projectTransitions << " transitions";
-    for (int i = 0; i < projectTransitions; i++) {
+    for (int i = 0; i < transitions.count(); i++) {
         e = transitions.item(i).toElement();
         QDomNodeList transitionparams = e.childNodes();
         bool transitionAdd = true;
@@ -269,9 +270,18 @@ void TrackView::parseDocument(QDomDocument doc) {
             transitionInfo.endPos = GenTime(e.attribute("out").toInt() + 1, m_doc->fps());
             transitionInfo.track = m_projectTracks - 1 - b_track;
             //kDebug() << "///////////////   +++++++++++  ADDING TRANSITION ON TRACK: " << b_track << ", TOTAL TRKA: " << m_projectTracks;
-            Transition *tr = new Transition(transitionInfo, a_track, m_doc->fps(), base, isAutomatic);
-            if (forceTrack) tr->setForcedTrack(true, a_track);
-            m_scene->addItem(tr);
+           if (transitionInfo.startPos >= transitionInfo.endPos) {
+               // invalid transition, remove it.
+               m_documentErrors.append(i18n("Removed invalid transition: %1\n", e.attribute("id")));
+               kDebug()<<"///// REMOVED INVALID TRANSITION: "<<e.attribute("id");
+                tractor.removeChild(transitions.item(i));
+                i--;
+           }
+           else {
+               Transition *tr = new Transition(transitionInfo, a_track, m_doc->fps(), base, isAutomatic);
+               if (forceTrack) tr->setForcedTrack(true, a_track);
+               m_scene->addItem(tr);
+           }
         }
     }