19 #ifndef MULTITRACKMODEL_H 20 #define MULTITRACKMODEL_H 22 #include <QAbstractItemModel> 25 #include <MltTractor.h> 26 #include <MltPlaylist.h> 29 PlaylistTrackType = 0,
42 typedef QList<Track> TrackList;
44 class MultitrackModel :
public QAbstractItemModel
47 Q_PROPERTY(
int trackHeight READ trackHeight WRITE setTrackHeight NOTIFY trackHeightChanged)
48 Q_PROPERTY(
double scaleFactor READ scaleFactor WRITE setScaleFactor NOTIFY scaleFactorChanged)
49 Q_PROPERTY(
bool filtered READ isFiltered NOTIFY filteredChanged)
54 NameRole = Qt::UserRole + 1,
77 explicit MultitrackModel(QObject *parent = 0);
80 Mlt::Tractor* tractor()
const {
return m_tractor; }
81 const TrackList& trackList()
const {
return m_trackList; }
83 int rowCount(
const QModelIndex &parent)
const;
84 int columnCount(
const QModelIndex &parent)
const;
85 QVariant data(
const QModelIndex &index,
int role)
const;
86 QModelIndex index(
int row,
int column = 0,
87 const QModelIndex &parent = QModelIndex())
const;
88 QModelIndex makeIndex(
int trackIndex,
int clipIndex)
const;
89 QModelIndex parent(
const QModelIndex &index)
const;
90 QHash<int, QByteArray> roleNames()
const;
91 void audioLevelsReady(
const QModelIndex &index);
92 bool createIfNeeded();
93 void addBackgroundTrack();
96 void removeTrack(
int trackIndex);
98 Q_INVOKABLE
void reload();
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);
117 void seeked(
int position);
118 void trackHeightChanged();
119 void scaleFactorChanged();
120 void showStatusMessage(QString);
121 void durationChanged();
122 void filteredChanged();
125 void refreshTrackList();
126 void setTrackName(
int row,
const QString &value);
127 void setTrackMute(
int row,
bool mute);
128 void setTrackHidden(
int row,
bool hidden);
129 void setTrackComposite(
int row,
bool composite);
130 void setTrackLock(
int row,
bool lock);
131 int trimClipIn(
int trackIndex,
int clipIndex,
int delta,
bool ripple);
132 void notifyClipIn(
int trackIndex,
int clipIndex);
133 int trimClipOut(
int trackIndex,
int clipIndex,
int delta,
bool ripple);
134 void notifyClipOut(
int trackIndex,
int clipIndex);
135 bool moveClipValid(
int fromTrack,
int toTrack,
int clipIndex,
int position);
136 bool moveClip(
int fromTrack,
int toTrack,
int clipIndex,
int position);
137 int overwriteClip(
int trackIndex, Mlt::Producer& clip,
int position,
bool seek =
true);
138 QString overwrite(
int trackIndex, Mlt::Producer& clip,
int position,
bool seek =
true);
139 int insertClip(
int trackIndex, Mlt::Producer& clip,
int position);
140 int appendClip(
int trackIndex, Mlt::Producer &clip);
141 void removeClip(
int trackIndex,
int clipIndex);
142 void liftClip(
int trackIndex,
int clipIndex);
143 void splitClip(
int trackIndex,
int clipIndex,
int position);
144 void joinClips(
int trackIndex,
int clipIndex);
145 void appendFromPlaylist(Mlt::Playlist* playlist,
int trackIndex);
146 void overwriteFromPlaylist(Mlt::Playlist& playlist,
int trackIndex,
int position);
147 void fadeIn(
int trackIndex,
int clipIndex,
int duration);
148 void fadeOut(
int trackIndex,
int clipIndex,
int duration);
149 bool addTransitionValid(
int fromTrack,
int toTrack,
int clipIndex,
int position);
150 int addTransition(
int trackIndex,
int clipIndex,
int position);
151 void removeTransition(
int trackIndex,
int clipIndex);
152 void removeTransitionByTrimIn(
int trackIndex,
int clipIndex,
int delta);
153 void removeTransitionByTrimOut(
int trackIndex,
int clipIndex,
int delta);
154 bool trimTransitionInValid(
int trackIndex,
int clipIndex,
int delta);
155 void trimTransitionIn(
int trackIndex,
int clipIndex,
int delta);
156 bool trimTransitionOutValid(
int trackIndex,
int clipIndex,
int delta);
157 void trimTransitionOut(
int trackIndex,
int clipIndex,
int delta);
158 bool addTransitionByTrimInValid(
int trackIndex,
int clipIndex,
int delta);
159 void addTransitionByTrimIn(
int trackIndex,
int clipIndex,
int delta);
160 bool addTransitionByTrimOutValid(
int trackIndex,
int clipIndex,
int delta);
161 void addTransitionByTrimOut(
int trackIndex,
int clipIndex,
int delta);
162 bool removeTransitionByTrimInValid(
int trackIndex,
int clipIndex,
int delta);
163 bool removeTransitionByTrimOutValid(
int trackIndex,
int clipIndex,
int delta);
164 void filterAddedOrRemoved(Mlt::Producer *producer);
167 Mlt::Tractor* m_tractor;
168 TrackList m_trackList;
169 bool m_isMakingTransition;
171 bool moveClipToTrack(
int fromTrack,
int toTrack,
int clipIndex,
int position);
172 void moveClipToEnd(Mlt::Playlist& playlist,
int trackIndex,
int clipIndex,
int position);
173 void relocateClip(Mlt::Playlist& playlist,
int trackIndex,
int clipIndex,
int position);
174 void moveClipInBlank(Mlt::Playlist& playlist,
int trackIndex,
int clipIndex,
int position);
175 void consolidateBlanks(Mlt::Playlist& playlist,
int trackIndex);
176 void consolidateBlanksAllTracks();
177 void getAudioLevels();
178 void addBlackTrackIfNeeded();
179 void convertOldDoc();
180 Mlt::Transition* getTransition(
const QString& name,
int trackIndex)
const;
181 Mlt::Filter* getFilter(
const QString& name,
int trackIndex)
const;
182 Mlt::Filter* getFilter(
const QString& name, Mlt::Service* service)
const;
183 void removeBlankPlaceholder(Mlt::Playlist& playlist,
int trackIndex);
184 void retainPlaylist();
186 void removeRegion(
int trackIndex,
int position,
int length);
187 void clearMixReferences(
int trackIndex,
int clipIndex);
188 bool isFiltered(Mlt::Producer* producer = 0)
const;
190 friend class UndoHelper;
193 void adjustBackgroundDuration();
197 #endif // MULTITRACKMODEL_H