18 #ifndef MULTITRACKMODEL_H
19 #define MULTITRACKMODEL_H
21 #include <QAbstractItemModel>
24 #include <MltTractor.h>
25 #include <MltPlaylist.h>
28 PlaylistTrackType = 0,
41 typedef QList<Track> TrackList;
43 class MultitrackModel :
public QAbstractItemModel
46 Q_PROPERTY(
int trackHeight READ trackHeight WRITE setTrackHeight NOTIFY trackHeightChanged)
47 Q_PROPERTY(
double scaleFactor READ scaleFactor WRITE setScaleFactor NOTIFY scaleFactorChanged)
48 Q_PROPERTY(
bool filtered READ isFiltered NOTIFY filteredChanged)
53 NameRole = Qt::UserRole + 1,
78 explicit MultitrackModel(QObject *parent = 0);
81 Mlt::Tractor* tractor()
const {
return m_tractor; }
82 const TrackList& trackList()
const {
return m_trackList; }
84 int rowCount(
const QModelIndex &parent = QModelIndex())
const;
85 int columnCount(
const QModelIndex &parent)
const;
86 QVariant data(
const QModelIndex &index,
int role)
const;
87 QModelIndex index(
int row,
int column = 0,
88 const QModelIndex &parent = QModelIndex())
const;
89 QModelIndex makeIndex(
int trackIndex,
int clipIndex)
const;
90 QModelIndex parent(
const QModelIndex &index)
const;
91 QHash<int, QByteArray> roleNames()
const;
92 Q_INVOKABLE
void audioLevelsReady(
const QModelIndex &index);
93 bool createIfNeeded();
94 void addBackgroundTrack();
97 void removeTrack(
int trackIndex);
100 int clipIndex(
int trackIndex,
int position);
101 bool trimClipInValid(
int trackIndex,
int clipIndex,
int delta,
bool ripple);
102 bool trimClipOutValid(
int trackIndex,
int clipIndex,
int delta,
bool ripple);
103 int trackHeight()
const;
104 void setTrackHeight(
int height);
105 double scaleFactor()
const;
106 void setScaleFactor(
double scale);
107 bool isTransition(Mlt::Playlist& playlist,
int clipIndex)
const;
108 void insertTrack(
int trackIndex, TrackType type = VideoTrackType);
109 void insertOrAdjustBlankAt(QList<int> tracks,
int position,
int length);
110 bool mergeClipWithNext(
int trackIndex,
int clipIndex,
bool dryrun);
111 void adjustClipFilters(Mlt::Producer& producer,
int in,
int out,
int inDelta,
int outDelta);
112 Mlt::ClipInfo *findClipByUuid(
const QUuid& uuid,
int& trackIndex,
int& clipIndex);
119 void seeked(
int position,
bool seekPlayer =
true);
120 void trackHeightChanged();
121 void scaleFactorChanged();
122 void showStatusMessage(QString);
123 void durationChanged();
124 void filteredChanged();
125 void filterInChanged(
int delta, Mlt::Filter*);
126 void filterOutChanged(
int delta, Mlt::Filter*);
127 void reloadRequested();
128 void appended(
int trackIndex,
int clipIndex);
129 void inserted(
int trackIndex,
int clipIndex);
130 void overWritten(
int trackIndex,
int clipIndex);
133 void refreshTrackList();
134 void setTrackName(
int row,
const QString &value);
135 void setTrackMute(
int row,
bool mute);
136 void setTrackHidden(
int row,
bool hidden);
137 void setTrackComposite(
int row,
bool composite);
138 void setTrackLock(
int row,
bool lock);
139 int trimClipIn(
int trackIndex,
int clipIndex,
int delta,
bool ripple,
bool rippleAllTracks);
140 void notifyClipIn(
int trackIndex,
int clipIndex);
141 int trimClipOut(
int trackIndex,
int clipIndex,
int delta,
bool ripple,
bool rippleAllTracks);
142 void notifyClipOut(
int trackIndex,
int clipIndex);
143 bool moveClip(
int fromTrack,
int toTrack,
int clipIndex,
int position,
bool ripple,
bool rippleAllTracks);
144 int overwriteClip(
int trackIndex, Mlt::Producer& clip,
int position,
bool seek =
true);
145 QString overwrite(
int trackIndex, Mlt::Producer& clip,
int position,
bool seek =
true);
146 int insertClip(
int trackIndex, Mlt::Producer& clip,
int position,
bool rippleAllTracks,
bool seek =
true);
147 int appendClip(
int trackIndex, Mlt::Producer &clip);
148 void removeClip(
int trackIndex,
int clipIndex,
bool rippleAllTracks);
149 void liftClip(
int trackIndex,
int clipIndex);
150 void splitClip(
int trackIndex,
int clipIndex,
int position);
151 void joinClips(
int trackIndex,
int clipIndex);
152 void fadeIn(
int trackIndex,
int clipIndex,
int duration);
153 void fadeOut(
int trackIndex,
int clipIndex,
int duration);
154 bool addTransitionValid(
int fromTrack,
int toTrack,
int clipIndex,
int position,
bool ripple);
155 int addTransition(
int trackIndex,
int clipIndex,
int position,
bool ripple,
bool rippleAllTracks);
156 void removeTransition(
int trackIndex,
int clipIndex);
157 void removeTransitionByTrimIn(
int trackIndex,
int clipIndex,
int delta);
158 void removeTransitionByTrimOut(
int trackIndex,
int clipIndex,
int delta);
159 bool trimTransitionInValid(
int trackIndex,
int clipIndex,
int delta);
160 void trimTransitionIn(
int trackIndex,
int clipIndex,
int delta);
161 bool trimTransitionOutValid(
int trackIndex,
int clipIndex,
int delta);
162 void trimTransitionOut(
int trackIndex,
int clipIndex,
int delta);
163 bool addTransitionByTrimInValid(
int trackIndex,
int clipIndex,
int delta);
164 int addTransitionByTrimIn(
int trackIndex,
int clipIndex,
int delta);
165 bool addTransitionByTrimOutValid(
int trackIndex,
int clipIndex,
int delta);
166 void addTransitionByTrimOut(
int trackIndex,
int clipIndex,
int delta);
167 bool removeTransitionByTrimInValid(
int trackIndex,
int clipIndex,
int delta);
168 bool removeTransitionByTrimOutValid(
int trackIndex,
int clipIndex,
int delta);
169 void filterAddedOrRemoved(Mlt::Producer *producer);
170 void onFilterChanged(Mlt::Filter* filter);
171 void reload(
bool asynchronous =
false);
172 void replace(
int trackIndex,
int clipIndex, Mlt::Producer& clip,
bool copyFilters =
true);
175 Mlt::Tractor* m_tractor;
176 TrackList m_trackList;
177 bool m_isMakingTransition;
179 void moveClipToEnd(Mlt::Playlist& playlist,
int trackIndex,
int clipIndex,
int position,
bool ripple,
bool rippleAllTracks);
180 void moveClipInBlank(Mlt::Playlist& playlist,
int trackIndex,
int clipIndex,
int position,
bool ripple,
bool rippleAllTracks,
int duration = 0);
181 void consolidateBlanks(Mlt::Playlist& playlist,
int trackIndex);
182 void consolidateBlanksAllTracks();
183 void getAudioLevels();
184 void addBlackTrackIfNeeded();
185 void convertOldDoc();
186 Mlt::Transition* getTransition(
const QString& name,
int trackIndex)
const;
187 Mlt::Filter* getFilter(
const QString& name,
int trackIndex)
const;
188 Mlt::Filter* getFilter(
const QString& name, Mlt::Service* service)
const;
189 void removeBlankPlaceholder(Mlt::Playlist& playlist,
int trackIndex);
190 void retainPlaylist();
192 void removeRegion(
int trackIndex,
int position,
int length);
193 void clearMixReferences(
int trackIndex,
int clipIndex);
194 bool isFiltered(Mlt::Producer* producer = 0)
const;
196 void adjustServiceFilterDurations(Mlt::Service& service,
int duration);
197 bool warnIfInvalid(Mlt::Service& service);
199 friend class UndoHelper;
202 void adjustBackgroundDuration();
203 void adjustTrackFilters();