]> git.sesse.net Git - kdenlive/blob - src/trackview.cpp
start of the clip tracks view
[kdenlive] / src / trackview.cpp
1
2 #include <QMouseEvent>
3 #include <QStylePainter>
4 #include <QScrollBar>
5
6 #include <KDebug>
7
8 #include "definitions.h"
9 #include "documentvideotrack.h"
10 #include "documentaudiotrack.h"
11 #include "headertrack.h"
12 #include "trackview.h"
13
14 TrackView::TrackView(KdenliveDoc *doc, QWidget *parent)
15     : QWidget(parent), m_doc(doc), m_scale(1.0)
16 {
17   view = new Ui::TimeLine_UI();
18   view->setupUi(this);
19   m_ruler = new CustomRuler(doc->timecode());
20   QVBoxLayout *layout = new QVBoxLayout;
21   layout->addWidget(m_ruler);
22   view->ruler_frame->setLayout(layout);
23
24   m_tracksLayout = new QVBoxLayout;
25   m_tracksLayout->setContentsMargins (0, 0, 0, 0);
26   m_scrollArea = new QScrollArea;
27
28   m_tracksLayout->addWidget(m_scrollArea);
29   m_scrollArea->setHorizontalScrollBarPolicy ( Qt::ScrollBarAlwaysOn);
30   m_scrollArea->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::MinimumExpanding);
31   m_scrollArea->setWidgetResizable( true );
32
33   m_scrollBox = new QFrame(m_scrollArea);
34   //m_scrollBox ->setFlat(false);
35   m_scrollBox ->setFocusPolicy(Qt::WheelFocus);
36   m_scrollBox->setSizePolicy( QSizePolicy::Preferred,QSizePolicy::Fixed );
37
38   m_tracksAreaLayout = new QVBoxLayout(m_scrollBox);
39   m_tracksAreaLayout->setContentsMargins (0, 0, 0, 0);
40   m_tracksAreaLayout->setSpacing(0);
41 //MyScroll->setGeometry(...);
42   m_scrollArea->setWidget(m_scrollBox);
43
44   view->tracks_frame->setLayout(m_tracksLayout);
45
46   m_headersLayout = new QVBoxLayout;
47   m_headersLayout->setContentsMargins (0, 0, 0, 0);
48   view->headers_frame->setLayout(m_headersLayout);
49
50   parseDocument(doc->toXml());
51
52   connect(view->horizontalSlider, SIGNAL(valueChanged ( int )), this, SLOT(slotChangeZoom( int )));
53 }
54
55 void TrackView::parseDocument(QDomDocument doc)
56 {
57   QDomNodeList tracks = doc.elementsByTagName("playlist");
58   m_projectDuration = 300;
59   int duration;
60   for (int i = 0; i < tracks.count(); i++)
61   {
62     if (tracks.item(i).toElement().attribute("hide", QString::null) == "video") {
63       // this is an audio track
64       duration = slotAddAudioTrack(i, tracks.item(i).toElement());
65     }
66     else duration = slotAddVideoTrack(i, tracks.item(i).toElement());
67     if (duration > m_projectDuration) m_projectDuration = duration;
68   }
69   m_tracksAreaLayout->insertStretch (1000);
70   //m_scrollBox->setGeometry(0, 0, 300 * zoomFactor(), m_scrollArea->height());
71 }
72
73 void TrackView::slotChangeZoom(int factor)
74 {
75   m_ruler->setPixelPerMark(factor);
76   m_scale = m_ruler->pixelPerMark();
77   for (int i = 0; i < documentTracks.count(); i++) {
78     kDebug()<<"------REPAINTING OBJECT";
79     documentTracks.at(i)->update();
80     //documentTracks.at(i)->setFixedWidth(300 * zoomFactor());
81   }
82   m_scrollBox->setFixedWidth(( m_projectDuration + 300) * zoomFactor());
83   /*m_scrollArea->horizontalScrollBar()->setMaximum(300 * zoomFactor());
84   m_scrollArea->horizontalScrollBar()->setPageStep(FRAME_SIZE * zoomFactor());*/
85 }
86
87 const double TrackView::zoomFactor() const
88 {
89   return m_scale * FRAME_SIZE;
90 }
91
92 KdenliveDoc *TrackView::document()
93 {
94   return m_doc;
95 }
96
97 int TrackView::slotAddAudioTrack(int ix, QDomElement xml)
98 {
99   DocumentTrack *track = new DocumentAudioTrack(xml, this, m_scrollBox);
100   HeaderTrack *header = new HeaderTrack();
101   m_tracksAreaLayout->addWidget(track); //, ix, Qt::AlignTop);
102   m_headersLayout->addWidget(header); //, ix, Qt::AlignTop);
103   documentTracks.insert(ix, track);
104   return track->duration();
105   //track->show();
106 }
107
108 int TrackView::slotAddVideoTrack(int ix, QDomElement xml)
109 {
110   DocumentTrack *track = new DocumentVideoTrack(xml, this, m_scrollBox);
111   HeaderTrack *header = new HeaderTrack();
112   m_tracksAreaLayout->addWidget(track); //, ix, Qt::AlignTop);
113   m_headersLayout->addWidget(header); //, ix, Qt::AlignTop);
114   documentTracks.insert(ix, track);
115   return track->duration();
116   //track->show();
117 }
118
119 #include "trackview.moc"