CuteLogger
Fast and simple logging solution for Qt based applications
timelinedock.h
1 /*
2  * Copyright (c) 2013-2017 Meltytech, LLC
3  * Author: Dan Dennedy <dan@dennedy.org>
4  *
5  * This program is free software: you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation, either version 3 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program. If not, see <http://www.gnu.org/licenses/>.
17  */
18 
19 #ifndef TIMELINEDOCK_H
20 #define TIMELINEDOCK_H
21 
22 #include <QDockWidget>
23 #include <QQuickWidget>
24 #include <QApplication>
25 #include "models/multitrackmodel.h"
26 #include "sharedframe.h"
27 
28 namespace Ui {
29 class TimelineDock;
30 }
31 namespace Timeline {
32 class UpdateCommand;
33 class TrimCommand;
34 }
35 class UndoHelper;
36 
37 class TimelineDock : public QDockWidget
38 {
39  Q_OBJECT
40  Q_PROPERTY(int position READ position WRITE setPosition NOTIFY positionChanged)
41  Q_PROPERTY(int currentTrack READ currentTrack WRITE setCurrentTrack NOTIFY currentTrackChanged)
42  Q_PROPERTY(QList<int> selection READ selection WRITE setSelection NOTIFY selectionChanged)
43 
44 public:
45  explicit TimelineDock(QWidget *parent = 0);
46  ~TimelineDock();
47 
48  enum TrimLocation {
49  TrimInPoint,
50  TrimOutPoint
51  };
52 
53  MultitrackModel* model() { return &m_model; }
54  int position() const { return m_position; }
55  void setPosition(int position);
56  Q_INVOKABLE QString timecode(int frames);
57  Mlt::ClipInfo* getClipInfo(int trackIndex, int clipIndex);
58  Mlt::Producer* producerForClip(int trackIndex, int clipIndex);
59  int clipIndexAtPlayhead(int trackIndex = -1);
60  int clipIndexAtPosition(int trackIndex, int position);
61  void chooseClipAtPosition(int position, int * trackIndex, int * clipIndex);
62  void setCurrentTrack(int currentTrack);
63  int currentTrack() const;
64  int clipCount(int trackIndex) const;
65  void zoomIn();
66  void zoomOut();
67  void resetZoom();
68  void makeTracksShorter();
69  void makeTracksTaller();
70  void setSelection(QList<int> selection = QList<int>(), int trackIndex = -1, bool isMultitrack = false);
71  QList<int> selection() const;
72  void saveAndClearSelection();
73  void restoreSelection();
74  void selectClipUnderPlayhead();
75  int centerOfClip(int trackIndex, int clipIndex);
76  bool isTrackLocked(int trackIndex) const;
77  void trimClipAtPlayhead(TrimLocation location, bool ripple);
78  bool isRipple() const;
79  Q_INVOKABLE bool isMultitrackSelected() const { return m_selection.isMultitrackSelected; }
80  Q_INVOKABLE int selectedTrack() const { return m_selection.selectedTrack; }
81 
82 signals:
83  void currentTrackChanged();
84  void selectionChanged();
85  void seeked(int position);
86  void positionChanged();
87  void clipOpened(Mlt::Producer* producer);
88  void dragging(const QPointF& pos, int duration);
89  void dropped();
90  void dropAccepted(const QString &xml);
91  void fadeInChanged(int duration);
92  void fadeOutChanged(int duration);
93  void selected(Mlt::Producer* producer);
94  void clipClicked();
95  void showStatusMessage(QString);
96  void clipCopied();
97  void clipMoved(int fromTrack, int toTrack, int clipIndex, int position);
98  void filteredClicked();
99 
100 public slots:
101  void addAudioTrack();
102  void addVideoTrack();
103  void onShowFrame(const SharedFrame& frame);
104  void onSeeked(int position);
105  void append(int trackIndex);
106  void remove(int trackIndex, int clipIndex);
107  bool mergeClipWithNext(int trackIndex, int clipIndex, bool dryrun);
108  void lift(int trackIndex, int clipIndex);
109  void removeSelection(bool withCopy = false);
110  void liftSelection();
111  void selectTrack(int by);
112  void selectTrackHead(int trackIndex);
113  void selectMultitrack();
114  void copyClip(int trackIndex, int clipIndex);
115  void setTrackName(int trackIndex, const QString& value);
116  void toggleTrackMute(int trackIndex);
117  void toggleTrackHidden(int trackIndex);
118  void setTrackComposite(int trackIndex, bool composite);
119  void setTrackLock(int trackIndex, bool lock);
120  bool moveClip(int fromTrack, int toTrack, int clipIndex, int position);
121  void onClipMoved(int fromTrack, int toTrack, int clipIndex, int position);
122  bool trimClipIn(int trackIndex, int clipIndex, int delta, bool ripple);
123  bool trimClipOut(int trackIndex, int clipIndex, int delta, bool ripple);
124  void insert(int trackIndex, int position = -1, const QString &xml = QString());
125  void overwrite(int trackIndex, int position = -1, const QString &xml = QString());
126  void appendFromPlaylist(Mlt::Playlist* playlist);
127  void splitClip(int trackIndex = -1, int clipIndex = -1);
128  void fadeIn(int trackIndex, int clipIndex = -1, int duration = -1);
129  void fadeOut(int trackIndex, int clipIndex = -1, int duration = -1);
130  void seekPreviousEdit();
131  void seekNextEdit();
132  void seekInPoint(int clipIndex);
133  void clearSelectionIfInvalid();
134  void insertTrack();
135  void removeTrack();
136  void onProducerChanged(Mlt::Producer*);
137  void emitSelectedFromSelection();
138  void remakeAudioLevels(int trackIndex, int clipIndex, bool force = true);
139  void commitTrimCommand();
140 
141 protected:
142  void dragEnterEvent(QDragEnterEvent* event);
143  void dragMoveEvent(QDragMoveEvent* event);
144  void dragLeaveEvent(QDragLeaveEvent* event);
145  void dropEvent(QDropEvent* event);
146  bool event(QEvent *event);
147 
148 private:
149  bool isBlank(int trackIndex, int clipIndex);
150  void pulseLockButtonOnTrack(int trackIndex);
151  void load(bool force = false);
152 
153  Ui::TimelineDock *ui;
154  QQuickWidget m_quickView;
155  MultitrackModel m_model;
156  int m_position;
157  Timeline::UpdateCommand* m_updateCommand;
158  bool m_ignoreNextPositionChange;
159  struct Selection {
160  QList<int> selectedClips;
161  int selectedTrack;
162  bool isMultitrackSelected;
163  };
164  Selection m_selection;
165  Selection m_savedSelection;
166  QScopedPointer<Timeline::TrimCommand> m_trimCommand;
167  QScopedPointer<UndoHelper> m_undoHelper;
168  int m_trimDelta;
169 
170 private slots:
171  void onVisibilityChanged(bool visible);
172 };
173 
174 #endif // TIMELINEDOCK_H
Definition: addencodepresetdialog.h:24
Definition: timelinecommands.cpp:25
The SharedFrame provides thread safe access to Mlt::Frame data.
Definition: sharedframe.h:48