]> git.sesse.net Git - kdenlive/blobdiff - src/trackview.cpp
Fix crash when opening doc with a transition to track 0
[kdenlive] / src / trackview.cpp
index 23803a3de4009e411f59e0ba7b3281d04d82c964..72d33204317630b3b7ba902e1f8b3f897ed5fa5f 100644 (file)
@@ -37,7 +37,8 @@
 #include <QScrollBar>
 
 TrackView::TrackView(KdenliveDoc *doc, QWidget *parent)
-        : QWidget(parent), m_doc(doc), m_scale(1.0), m_projectTracks(0) {
+        : QWidget(parent), m_doc(doc), m_scale(1.0), m_projectTracks(0)
+{
 
     view = new Ui::TimeLine_UI();
     view->setupUi(this);
@@ -90,36 +91,44 @@ TrackView::TrackView(KdenliveDoc *doc, QWidget *parent)
 }
 
 
-int TrackView::duration() const {
+int TrackView::duration() const
+{
     return m_trackview->duration();
 }
 
-int TrackView::tracksNumber() const {
+int TrackView::tracksNumber() const
+{
     return m_projectTracks - 1;
 }
 
-int TrackView::inPoint() const {
+int TrackView::inPoint() const
+{
     return m_ruler->inPoint();
 }
 
-int TrackView::outPoint() const {
+int TrackView::outPoint() const
+{
     return m_ruler->outPoint();
 }
 
-void TrackView::slotSetZone(QPoint p) {
+void TrackView::slotSetZone(QPoint p)
+{
     m_ruler->setZone(p);
 }
 
-void TrackView::slotTransitionItemSelected(Transition *t, bool update) {
+void TrackView::slotTransitionItemSelected(Transition *t, bool update)
+{
     emit transitionItemSelected(t, update);
 }
 
-void TrackView::setDuration(int dur) {
+void TrackView::setDuration(int dur)
+{
     m_trackview->setDuration(dur);
     m_ruler->setDuration(dur);
 }
 
-void TrackView::parseDocument(QDomDocument doc) {
+void TrackView::parseDocument(QDomDocument doc)
+{
     //int cursorPos = 0;
     m_documentErrors.clear();
     // kDebug() << "//// DOCUMENT: " << doc.toString();
@@ -178,6 +187,7 @@ void TrackView::parseDocument(QDomDocument doc) {
                 m_doc->switchTrackVideo(i - 1, true);
                 m_doc->switchTrackAudio(i - 1, true);
             }
+
             trackduration = slotAddProjectTrack(pos, p, m_doc->isTrackLocked(i - 1));
             pos--;
             //kDebug() << " PRO DUR: " << trackduration << ", TRACK DUR: " << duration;
@@ -300,7 +310,7 @@ void TrackView::parseDocument(QDomDocument doc) {
                 Transition *tr = new Transition(transitionInfo, a_track, m_doc->fps(), base, isAutomatic);
                 if (forceTrack) tr->setForcedTrack(true, a_track);
                 m_scene->addItem(tr);
-                if (m_doc->isTrackLocked(b_track - 1)) {
+                if (b_track > 0 && m_doc->isTrackLocked(b_track - 1)) {
                     tr->setItemLocked(true);
                 }
             }
@@ -328,26 +338,31 @@ void TrackView::parseDocument(QDomDocument doc) {
     //m_scrollBox->setGeometry(0, 0, 300 * zoomFactor(), m_scrollArea->height());
 }
 
-void TrackView::slotDeleteClip(const QString &clipId) {
+void TrackView::slotDeleteClip(const QString &clipId)
+{
     m_trackview->deleteClip(clipId);
 }
 
-void TrackView::setCursorPos(int pos) {
+void TrackView::setCursorPos(int pos)
+{
     m_trackview->setCursorPos(pos);
 }
 
-void TrackView::moveCursorPos(int pos) {
+void TrackView::moveCursorPos(int pos)
+{
     m_trackview->setCursorPos(pos, false);
 }
 
-void TrackView::slotChangeZoom(int factor) {
+void TrackView::slotChangeZoom(int factor)
+{
     m_doc->setZoom(factor);
     m_ruler->setPixelPerMark(factor);
     m_scale = (double) FRAME_SIZE / m_ruler->comboScale[factor]; // m_ruler->comboScale[m_currentZoom] /
     m_trackview->setScale(m_scale);
 }
 
-int TrackView::fitZoom() const {
+int TrackView::fitZoom() const
+{
     int zoom = (int)((duration() + 20 / m_scale) * FRAME_SIZE / m_trackview->width());
     int i;
     for (i = 0; i < 13; i++)
@@ -355,17 +370,20 @@ int TrackView::fitZoom() const {
     return i;
 }
 
-KdenliveDoc *TrackView::document() {
+KdenliveDoc *TrackView::document()
+{
     return m_doc;
 }
 
-void TrackView::refresh() {
+void TrackView::refresh()
+{
     m_trackview->viewport()->update();
 }
 
-void TrackView::slotRebuildTrackHeaders() {
+void TrackView::slotRebuildTrackHeaders()
+{
     QList <TrackInfo> list = m_doc->tracksList();
-    QList<HeaderTrack *> widgets = this->findChildren<HeaderTrack *>();
+    QList<HeaderTrack *> widgets = findChildren<HeaderTrack *>();
     for (int i = 0; i < widgets.count(); i++)
         delete widgets.at(i);
     int max = list.count();
@@ -384,7 +402,8 @@ void TrackView::slotRebuildTrackHeaders() {
 }
 
 
-int TrackView::slotAddProjectTrack(int ix, QDomElement xml, bool locked) {
+int TrackView::slotAddProjectTrack(int ix, QDomElement xml, bool locked)
+{
     // parse track
     int position = 0;
     QDomNodeList children = xml.childNodes();
@@ -421,6 +440,8 @@ int TrackView::slotAddProjectTrack(int ix, QDomElement xml, bool locked) {
                 clipinfo.track = ix;
                 //kDebug() << "// INSERTING CLIP: " << in << "x" << out << ", track: " << ix << ", ID: " << id << ", SCALE: " << m_scale << ", FPS: " << m_doc->fps();
                 ClipItem *item = new ClipItem(clip, clipinfo, m_doc->fps(), speed, false);
+                if (idString.endsWith("_video")) item->setVideoOnly(true);
+                else if (idString.endsWith("_audio")) item->setAudioOnly(true);
                 m_scene->addItem(item);
                 if (locked) item->setItemLocked(true);
                 clip->addReference();
@@ -630,8 +651,9 @@ int TrackView::slotAddProjectTrack(int ix, QDomElement xml, bool locked) {
     //track->show();
 }
 
-DocClipBase *TrackView::getMissingProducer(const QString id) const {
-    QDomElement missingXml = QDomElement();
+DocClipBase *TrackView::getMissingProducer(const QString id) const
+{
+    QDomElement missingXml;
     QDomDocument doc = m_doc->toXml();
     QString docRoot = doc.documentElement().attribute("root");
     if (!docRoot.endsWith('/')) docRoot.append('/');
@@ -665,24 +687,29 @@ DocClipBase *TrackView::getMissingProducer(const QString id) const {
     return missingClip;
 }
 
-QGraphicsScene *TrackView::projectScene() {
+QGraphicsScene *TrackView::projectScene()
+{
     return m_scene;
 }
 
-CustomTrackView *TrackView::projectView() {
+CustomTrackView *TrackView::projectView()
+{
     return m_trackview;
 }
 
-void TrackView::setEditMode(const QString & editMode) {
+void TrackView::setEditMode(const QString & editMode)
+{
     m_editMode = editMode;
 }
 
-const QString & TrackView::editMode() const {
+const QString & TrackView::editMode() const
+{
     return m_editMode;
 }
 
-void TrackView::slotChangeTrackLock(int ix, bool lock) {
-    QList<HeaderTrack *> widgets = this->findChildren<HeaderTrack *>();
+void TrackView::slotChangeTrackLock(int ix, bool lock)
+{
+    QList<HeaderTrack *> widgets = findChildren<HeaderTrack *>();
     widgets.at(ix)->setLock(lock);
 }