3 #include <QStylePainter>
8 #include "definitions.h"
9 #include "documentvideotrack.h"
10 #include "documentaudiotrack.h"
11 #include "headertrack.h"
12 #include "trackview.h"
13 #include "trackpanelclipmovefunction.h"
15 TrackView::TrackView(KdenliveDoc *doc, QWidget *parent)
16 : QWidget(parent), m_doc(doc), m_scale(1.0), m_panelUnderMouse(NULL), m_function(NULL)
18 setMouseTracking(true);
19 view = new Ui::TimeLine_UI();
21 m_ruler = new CustomRuler(doc->timecode());
22 QVBoxLayout *layout = new QVBoxLayout;
23 layout->addWidget(m_ruler);
24 view->ruler_frame->setLayout(layout);
26 m_tracksLayout = new QVBoxLayout;
27 m_tracksLayout->setContentsMargins (0, 0, 0, 0);
28 m_scrollArea = new QScrollArea;
30 m_tracksLayout->addWidget(m_scrollArea);
31 m_scrollArea->setHorizontalScrollBarPolicy ( Qt::ScrollBarAlwaysOn);
32 m_scrollArea->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::MinimumExpanding);
33 m_scrollArea->setWidgetResizable( true );
35 m_scrollBox = new QFrame(m_scrollArea);
36 //m_scrollBox ->setFlat(false);
37 m_scrollBox ->setFocusPolicy(Qt::WheelFocus);
38 m_scrollBox->setSizePolicy( QSizePolicy::Preferred,QSizePolicy::Fixed );
40 m_tracksAreaLayout = new QVBoxLayout(m_scrollBox);
41 m_tracksAreaLayout->setContentsMargins (0, 0, 0, 0);
42 m_tracksAreaLayout->setSpacing(0);
43 //MyScroll->setGeometry(...);
44 m_scrollArea->setWidget(m_scrollBox);
46 view->tracks_frame->setLayout(m_tracksLayout);
48 m_headersLayout = new QVBoxLayout;
49 m_headersLayout->setContentsMargins (0, 0, 0, 0);
50 view->headers_frame->setLayout(m_headersLayout);
52 parseDocument(doc->toXml());
54 TrackPanelClipMoveFunction *m_moveFunction = new TrackPanelClipMoveFunction(this);
55 registerFunction("move", m_moveFunction);
58 connect(view->horizontalSlider, SIGNAL(valueChanged ( int )), this, SLOT(slotChangeZoom( int )));
61 void TrackView::registerFunction(const QString & name, TrackPanelFunction * function)
63 m_factory.registerFunction(name, function);
66 void TrackView::parseDocument(QDomDocument doc)
68 QDomNodeList tracks = doc.elementsByTagName("playlist");
69 m_projectDuration = 300;
71 for (int i = 0; i < tracks.count(); i++)
73 if (tracks.item(i).toElement().attribute("hide", QString::null) == "video") {
74 // this is an audio track
75 duration = slotAddAudioTrack(i, tracks.item(i).toElement());
77 else duration = slotAddVideoTrack(i, tracks.item(i).toElement());
78 if (duration > m_projectDuration) m_projectDuration = duration;
80 m_tracksAreaLayout->insertStretch (1000);
81 //m_scrollBox->setGeometry(0, 0, 300 * zoomFactor(), m_scrollArea->height());
84 void TrackView::slotChangeZoom(int factor)
86 m_ruler->setPixelPerMark(factor);
87 m_scale = m_ruler->pixelPerMark();
88 for (int i = 0; i < documentTracks.count(); i++) {
89 kDebug()<<"------REPAINTING OBJECT";
90 documentTracks.at(i)->update();
91 //documentTracks.at(i)->setFixedWidth(300 * zoomFactor());
93 m_scrollBox->setFixedWidth(( m_projectDuration + 300) * zoomFactor());
94 /*m_scrollArea->horizontalScrollBar()->setMaximum(300 * zoomFactor());
95 m_scrollArea->horizontalScrollBar()->setPageStep(FRAME_SIZE * zoomFactor());*/
98 const double TrackView::zoomFactor() const
100 return m_scale * FRAME_SIZE;
103 const int TrackView::mapLocalToValue(int x) const
105 return (int) x * zoomFactor();
108 KdenliveDoc *TrackView::document()
113 int TrackView::slotAddAudioTrack(int ix, QDomElement xml)
115 DocumentTrack *track = new DocumentAudioTrack(xml, this, m_scrollBox);
116 HeaderTrack *header = new HeaderTrack();
117 m_tracksAreaLayout->addWidget(track); //, ix, Qt::AlignTop);
118 m_headersLayout->addWidget(header); //, ix, Qt::AlignTop);
119 documentTracks.insert(ix, track);
120 return track->duration();
124 int TrackView::slotAddVideoTrack(int ix, QDomElement xml)
126 DocumentTrack *track = new DocumentVideoTrack(xml, this, m_scrollBox);
127 HeaderTrack *header = new HeaderTrack();
128 m_tracksAreaLayout->addWidget(track); //, ix, Qt::AlignTop);
129 m_headersLayout->addWidget(header); //, ix, Qt::AlignTop);
130 documentTracks.insert(ix, track);
131 return track->duration();
135 DocumentTrack *TrackView::panelAt(int y)
140 void TrackView::setEditMode(const QString & editMode)
142 m_editMode = editMode;
145 const QString & TrackView::editMode() const
150 /** This event occurs when the mouse has been moved. */
151 void TrackView::mouseMoveEvent(QMouseEvent * event) {
152 kDebug()<<"-------- TRACKVIEW MOUSE MOVE EVENT -----";
153 if (m_panelUnderMouse) {
154 if (event->buttons() & Qt::LeftButton) {
158 m_function->mouseMoved(m_panelUnderMouse, event);
160 m_panelUnderMouse = 0;
165 m_function->mouseReleased(m_panelUnderMouse, event);
168 m_panelUnderMouse = 0;
171 DocumentTrack *panel = panelAt(event->y());
173 QCursor result(Qt::ArrowCursor);
175 TrackPanelFunction *function =
176 getApplicableFunction(panel, editMode(),
179 result = function->getMouseCursor(panel, event);
183 setCursor(QCursor(Qt::ArrowCursor));
188 TrackPanelFunction *TrackView::getApplicableFunction(DocumentTrack *
189 panel, const QString & editMode, QMouseEvent * event) {
190 TrackPanelFunction *function = 0;
192 QStringList list = panel->applicableFunctions(editMode);
193 QStringList::iterator itt = list.begin();
195 while (itt != list.end()) {
196 TrackPanelFunction *testFunction = m_factory.function(*itt);
198 if (testFunction->mouseApplies(panel, event)) {
199 function = testFunction;
211 #include "trackview.moc"