]> git.sesse.net Git - kdenlive/blob - src/trackview.h
fix seeking issue
[kdenlive] / src / trackview.h
1 /***************************************************************************
2  *   Copyright (C) 2007 by Jean-Baptiste Mardelle (jb@kdenlive.org)        *
3  *                                                                         *
4  *   This program is free software; you can redistribute it and/or modify  *
5  *   it under the terms of the GNU General Public License as published by  *
6  *   the Free Software Foundation; either version 2 of the License, or     *
7  *   (at your option) any later version.                                   *
8  *                                                                         *
9  *   This program is distributed in the hope that it will be useful,       *
10  *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
11  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
12  *   GNU General Public License for more details.                          *
13  *                                                                         *
14  *   You should have received a copy of the GNU General Public License     *
15  *   along with this program; if not, write to the                         *
16  *   Free Software Foundation, Inc.,                                       *
17  *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA          *
18  ***************************************************************************/
19
20
21 #ifndef TRACKVIEW_H
22 #define TRACKVIEW_H
23
24 #include <QScrollArea>
25 #include <QVBoxLayout>
26 #include <KRuler>
27 #include <QGroupBox>
28 #include <QGraphicsScene>
29 #include <QGraphicsLineItem>
30
31 #define FRAME_SIZE 90
32
33 #include "ui_timeline_ui.h"
34 #include "customruler.h"
35 #include "kdenlivedoc.h"
36 #include "documenttrack.h"
37 #include "trackpanelfunctionfactory.h"
38 #include "trackpanelfunction.h"
39 #include "customtrackview.h"
40
41 class TrackView : public QWidget
42 {
43   Q_OBJECT
44   
45   public:
46     TrackView(KdenliveDoc *doc, QWidget *parent=0);
47
48         /** This event occurs when the mouse has been moved. */
49     void mouseMoveEvent(QMouseEvent * event);
50
51     const double zoomFactor() const;
52     DocumentTrack *panelAt(int y);
53     const int mapLocalToValue(int x) const;
54     void setEditMode(const QString & editMode);
55     const QString & editMode() const;
56     QGraphicsScene *projectScene();
57     CustomTrackView *projectView();
58     int duration();
59     int tracksNumber();
60
61   public slots:
62     KdenliveDoc *document();
63
64   private:
65     Ui::TimeLine_UI *view;
66     CustomRuler *m_ruler;
67     CustomTrackView *m_trackview;
68     double m_scale;
69     QList <DocumentTrack*> documentTracks;
70     int m_projectDuration;
71     int m_projectTracks;
72     TrackPanelFunctionFactory m_factory;
73     DocumentTrack *m_panelUnderMouse;
74         /** The currently applied function. This lasts from mousePressed until mouseRelease. */
75     TrackPanelFunction *m_function;
76     QString m_editMode;
77     QGraphicsScene *m_scene;
78     uint m_currentZoom;
79
80
81     KdenliveDoc *m_doc;
82     QVBoxLayout *m_tracksLayout;
83     QVBoxLayout *m_headersLayout;
84     QScrollArea *m_scrollArea;
85     QFrame *m_scrollBox;
86     QVBoxLayout *m_tracksAreaLayout;
87     void parseDocument(QDomDocument doc);
88     int slotAddAudioTrack(int ix, QDomElement xml);
89     int slotAddVideoTrack(int ix, QDomElement xml);
90     void registerFunction(const QString & name, TrackPanelFunction * function);
91     TrackPanelFunction *getApplicableFunction(DocumentTrack * panel, const QString & editMode, QMouseEvent * event);
92
93   private slots:
94     void slotChangeZoom(int factor);
95     void slotCursorMoved(int pos, bool slotCursorMoved = false);
96     void slotZoomIn();
97     void slotZoomOut();
98     void setCursorPos(int pos);
99     void moveCursorPos(int pos);
100
101   signals:
102     void mousePosition(int);
103     void cursorMoved();
104 };
105
106 #endif