]> git.sesse.net Git - kdenlive/blobdiff - src/trackview.cpp
start of the clip tracks view
[kdenlive] / src / trackview.cpp
index 40d7989701486aa99beb11f84d947784cc467a71..236e3ee3074b676ccb8d99b021befd35d21d997e 100644 (file)
@@ -1,15 +1,18 @@
 
 #include <QMouseEvent>
 #include <QStylePainter>
+#include <QScrollBar>
 
 #include <KDebug>
 
-#include "documenttrack.h"
+#include "definitions.h"
+#include "documentvideotrack.h"
+#include "documentaudiotrack.h"
 #include "headertrack.h"
 #include "trackview.h"
 
 TrackView::TrackView(KdenliveDoc *doc, QWidget *parent)
-    : QWidget(parent), m_doc(doc)
+    : QWidget(parent), m_doc(doc), m_scale(1.0)
 {
   view = new Ui::TimeLine_UI();
   view->setupUi(this);
@@ -25,10 +28,19 @@ TrackView::TrackView(KdenliveDoc *doc, QWidget *parent)
   m_tracksLayout->addWidget(m_scrollArea);
   m_scrollArea->setHorizontalScrollBarPolicy ( Qt::ScrollBarAlwaysOn);
   m_scrollArea->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::MinimumExpanding);
-  m_tracksAreaLayout = new QVBoxLayout;
+  m_scrollArea->setWidgetResizable( true );
+
+  m_scrollBox = new QFrame(m_scrollArea);
+  //m_scrollBox ->setFlat(false);
+  m_scrollBox ->setFocusPolicy(Qt::WheelFocus);
+  m_scrollBox->setSizePolicy( QSizePolicy::Preferred,QSizePolicy::Fixed );
+
+  m_tracksAreaLayout = new QVBoxLayout(m_scrollBox);
   m_tracksAreaLayout->setContentsMargins (0, 0, 0, 0);
-  m_tracksAreaLayout->insertStretch (1000);
-  m_scrollArea->setLayout(m_tracksAreaLayout);
+  m_tracksAreaLayout->setSpacing(0);
+//MyScroll->setGeometry(...);
+  m_scrollArea->setWidget(m_scrollBox);
+
   view->tracks_frame->setLayout(m_tracksLayout);
 
   m_headersLayout = new QVBoxLayout;
@@ -42,16 +54,39 @@ TrackView::TrackView(KdenliveDoc *doc, QWidget *parent)
 
 void TrackView::parseDocument(QDomDocument doc)
 {
-  QDomNodeList tracks = doc.elementsByTagName("kdenlivetrack");
+  QDomNodeList tracks = doc.elementsByTagName("playlist");
+  m_projectDuration = 300;
+  int duration;
   for (int i = 0; i < tracks.count(); i++)
   {
-    slotAddTrack(i);
+    if (tracks.item(i).toElement().attribute("hide", QString::null) == "video") {
+      // this is an audio track
+      duration = slotAddAudioTrack(i, tracks.item(i).toElement());
+    }
+    else duration = slotAddVideoTrack(i, tracks.item(i).toElement());
+    if (duration > m_projectDuration) m_projectDuration = duration;
   }
+  m_tracksAreaLayout->insertStretch (1000);
+  //m_scrollBox->setGeometry(0, 0, 300 * zoomFactor(), m_scrollArea->height());
 }
 
 void TrackView::slotChangeZoom(int factor)
 {
   m_ruler->setPixelPerMark(factor);
+  m_scale = m_ruler->pixelPerMark();
+  for (int i = 0; i < documentTracks.count(); i++) {
+    kDebug()<<"------REPAINTING OBJECT";
+    documentTracks.at(i)->update();
+    //documentTracks.at(i)->setFixedWidth(300 * zoomFactor());
+  }
+  m_scrollBox->setFixedWidth(( m_projectDuration + 300) * zoomFactor());
+  /*m_scrollArea->horizontalScrollBar()->setMaximum(300 * zoomFactor());
+  m_scrollArea->horizontalScrollBar()->setPageStep(FRAME_SIZE * zoomFactor());*/
+}
+
+const double TrackView::zoomFactor() const
+{
+  return m_scale * FRAME_SIZE;
 }
 
 KdenliveDoc *TrackView::document()
@@ -59,12 +94,25 @@ KdenliveDoc *TrackView::document()
   return m_doc;
 }
 
-void TrackView::slotAddTrack(int ix)
+int TrackView::slotAddAudioTrack(int ix, QDomElement xml)
+{
+  DocumentTrack *track = new DocumentAudioTrack(xml, this, m_scrollBox);
+  HeaderTrack *header = new HeaderTrack();
+  m_tracksAreaLayout->addWidget(track); //, ix, Qt::AlignTop);
+  m_headersLayout->addWidget(header); //, ix, Qt::AlignTop);
+  documentTracks.insert(ix, track);
+  return track->duration();
+  //track->show();
+}
+
+int TrackView::slotAddVideoTrack(int ix, QDomElement xml)
 {
-  DocumentTrack *track = new DocumentTrack();
+  DocumentTrack *track = new DocumentVideoTrack(xml, this, m_scrollBox);
   HeaderTrack *header = new HeaderTrack();
-  m_tracksAreaLayout->addWidget(track, ix, Qt::AlignTop);
-  m_headersLayout->addWidget(header, ix, Qt::AlignTop);
+  m_tracksAreaLayout->addWidget(track); //, ix, Qt::AlignTop);
+  m_headersLayout->addWidget(header); //, ix, Qt::AlignTop);
+  documentTracks.insert(ix, track);
+  return track->duration();
   //track->show();
 }