21 #include "models/multitrackmodel.h"
22 #include "models/markersmodel.h"
23 #include "docks/timelinedock.h"
24 #include "undohelper.h"
25 #include <QUndoCommand>
28 #include <MltTransition.h>
29 #include <MltProducer.h>
38 UndoIdTrimTransitionIn,
39 UndoIdTrimTransitionOut,
40 UndoIdAddTransitionByTrimIn,
41 UndoIdAddTransitionByTrimOut,
46 class AppendCommand :
public QUndoCommand
49 AppendCommand(MultitrackModel &model,
int trackIndex,
const QString &xml,
bool skipProxy =
false,
50 QUndoCommand *parent = 0);
54 MultitrackModel &m_model;
57 UndoHelper m_undoHelper;
61 class InsertCommand :
public QUndoCommand
64 InsertCommand(MultitrackModel &model, MarkersModel &markersModel,
int trackIndex,
int position,
65 const QString &xml,
bool seek =
true, QUndoCommand *parent = 0);
69 MultitrackModel &m_model;
70 MarkersModel &m_markersModel;
74 QStringList m_oldTracks;
75 UndoHelper m_undoHelper;
77 bool m_rippleAllTracks;
82 class OverwriteCommand :
public QUndoCommand
85 OverwriteCommand(MultitrackModel &model,
int trackIndex,
int position,
const QString &xml,
86 bool seek =
true, QUndoCommand *parent = 0);
90 MultitrackModel &m_model;
94 UndoHelper m_undoHelper;
98 class LiftCommand :
public QUndoCommand
101 LiftCommand(MultitrackModel &model,
int trackIndex,
int clipIndex, QUndoCommand *parent = 0);
105 MultitrackModel &m_model;
108 UndoHelper m_undoHelper;
111 class RemoveCommand :
public QUndoCommand
114 RemoveCommand(MultitrackModel &model, MarkersModel &markersModel,
int trackIndex,
int clipIndex,
115 QUndoCommand *parent = 0);
119 MultitrackModel &m_model;
120 MarkersModel &m_markersModel;
123 UndoHelper m_undoHelper;
124 bool m_rippleAllTracks;
125 bool m_rippleMarkers;
126 int m_markerRemoveStart;
127 int m_markerRemoveEnd;
128 QList<Markers::Marker> m_markers;
131 class NameTrackCommand :
public QUndoCommand
134 NameTrackCommand(MultitrackModel &model,
int trackIndex,
const QString &name,
135 QUndoCommand *parent = 0);
139 MultitrackModel &m_model;
145 class MergeCommand :
public QUndoCommand
148 MergeCommand(MultitrackModel &model,
int trackIndex,
int clipIndex, QUndoCommand *parent = 0);
152 MultitrackModel &m_model;
155 UndoHelper m_undoHelper;
158 class MuteTrackCommand :
public QUndoCommand
161 MuteTrackCommand(MultitrackModel &model,
int trackIndex, QUndoCommand *parent = 0);
165 MultitrackModel &m_model;
170 class HideTrackCommand :
public QUndoCommand
173 HideTrackCommand(MultitrackModel &model,
int trackIndex, QUndoCommand *parent = 0);
177 MultitrackModel &m_model;
182 class CompositeTrackCommand :
public QUndoCommand
185 CompositeTrackCommand(MultitrackModel &model,
int trackIndex,
bool value, QUndoCommand *parent = 0);
189 MultitrackModel &m_model;
195 class LockTrackCommand :
public QUndoCommand
198 LockTrackCommand(MultitrackModel &model,
int trackIndex,
bool value, QUndoCommand *parent = 0);
202 MultitrackModel &m_model;
208 class MoveClipCommand :
public QUndoCommand
211 MoveClipCommand(MultitrackModel &model, MarkersModel &markersModel,
int trackDelta,
bool ripple,
212 QUndoCommand *parent = 0);
215 QMultiMap<int, Mlt::Producer> &selection()
222 return UndoIdMoveClip;
224 bool mergeWith(
const QUndoCommand *other);
227 MultitrackModel &m_model;
228 MarkersModel &m_markersModel;
231 bool m_rippleAllTracks;
232 bool m_rippleMarkers;
233 UndoHelper m_undoHelper;
234 QMultiMap<int, Mlt::Producer> m_selection;
239 int m_markerOldStart;
240 int m_markerNewStart;
241 QList<Markers::Marker> m_markers;
244 class TrimCommand :
public QUndoCommand
247 explicit TrimCommand(QUndoCommand *parent = 0) : QUndoCommand(parent) {}
248 void setUndoHelper(UndoHelper *helper)
250 m_undoHelper.reset(helper);
254 QScopedPointer<UndoHelper> m_undoHelper;
257 class TrimClipInCommand :
public TrimCommand
260 TrimClipInCommand(MultitrackModel &model, MarkersModel &markersModel,
int trackIndex,
int clipIndex,
261 int delta,
bool ripple,
bool redo =
true, QUndoCommand *parent = 0);
267 return UndoIdTrimClipIn;
269 bool mergeWith(
const QUndoCommand *other);
271 MultitrackModel &m_model;
272 MarkersModel &m_markersModel;
277 bool m_rippleAllTracks;
278 bool m_rippleMarkers;
280 int m_markerRemoveStart;
281 int m_markerRemoveEnd;
282 QList<Markers::Marker> m_markers;
285 class TrimClipOutCommand :
public TrimCommand
288 TrimClipOutCommand(MultitrackModel &model, MarkersModel &markersModel,
int trackIndex,
289 int clipIndex,
int delta,
bool ripple,
bool redo =
true, QUndoCommand *parent = 0);
295 return UndoIdTrimClipOut;
297 bool mergeWith(
const QUndoCommand *other);
299 MultitrackModel &m_model;
300 MarkersModel &m_markersModel;
305 bool m_rippleAllTracks;
306 bool m_rippleMarkers;
308 int m_markerRemoveStart;
309 int m_markerRemoveEnd;
310 QList<Markers::Marker> m_markers;
313 class SplitCommand :
public QUndoCommand
316 SplitCommand(MultitrackModel &model,
int trackIndex,
int clipIndex,
int position,
317 QUndoCommand *parent = 0);
321 MultitrackModel &m_model;
325 UndoHelper m_undoHelper;
328 class FadeInCommand :
public QUndoCommand
331 FadeInCommand(MultitrackModel &model,
int trackIndex,
int clipIndex,
int duration,
332 QUndoCommand *parent = 0);
340 bool mergeWith(
const QUndoCommand *other);
342 MultitrackModel &m_model;
349 class FadeOutCommand :
public QUndoCommand
352 FadeOutCommand(MultitrackModel &model,
int trackIndex,
int clipIndex,
int duration,
353 QUndoCommand *parent = 0);
359 return UndoIdFadeOut;
361 bool mergeWith(
const QUndoCommand *other);
363 MultitrackModel &m_model;
370 class AddTransitionCommand :
public QUndoCommand
373 AddTransitionCommand(TimelineDock &timeline,
int trackIndex,
int clipIndex,
int position,
374 bool ripple, QUndoCommand *parent = 0);
377 int getTransitionIndex()
const
379 return m_transitionIndex;
382 TimelineDock &m_timeline;
383 MultitrackModel &m_model;
384 MarkersModel &m_markersModel;
388 int m_transitionIndex;
390 UndoHelper m_undoHelper;
391 bool m_rippleAllTracks;
392 bool m_rippleMarkers;
393 int m_markerOldStart;
394 int m_markerNewStart;
395 QList<Markers::Marker> m_markers;
398 class TrimTransitionInCommand :
public TrimCommand
401 TrimTransitionInCommand(MultitrackModel &model,
int trackIndex,
int clipIndex,
int delta,
402 bool redo =
true, QUndoCommand *parent = 0);
408 return UndoIdTrimTransitionIn;
410 bool mergeWith(
const QUndoCommand *other);
412 MultitrackModel &m_model;
420 class TrimTransitionOutCommand :
public TrimCommand
423 TrimTransitionOutCommand(MultitrackModel &model,
int trackIndex,
int clipIndex,
int delta,
424 bool redo =
true, QUndoCommand *parent = 0);
430 return UndoIdTrimTransitionOut;
432 bool mergeWith(
const QUndoCommand *other);
434 MultitrackModel &m_model;
442 class AddTransitionByTrimInCommand :
public TrimCommand
445 AddTransitionByTrimInCommand(TimelineDock &timeline,
int trackIndex,
int clipIndex,
int duration,
446 int trimDelta,
bool redo =
true, QUndoCommand *parent = 0);
452 return UndoIdAddTransitionByTrimIn;
454 bool mergeWith(
const QUndoCommand *other);
456 TimelineDock &m_timeline;
465 class RemoveTransitionByTrimInCommand :
public TrimCommand
468 RemoveTransitionByTrimInCommand(MultitrackModel &model,
int trackIndex,
int clipIndex,
int delta,
469 bool redo =
true, QUndoCommand *parent = 0);
473 MultitrackModel &m_model;
480 class RemoveTransitionByTrimOutCommand :
public TrimCommand
483 RemoveTransitionByTrimOutCommand(MultitrackModel &model,
int trackIndex,
int clipIndex,
int delta,
484 bool redo =
true, QUndoCommand *parent = 0);
488 MultitrackModel &m_model;
495 class AddTransitionByTrimOutCommand :
public TrimCommand
498 AddTransitionByTrimOutCommand(MultitrackModel &model,
int trackIndex,
int clipIndex,
int duration,
499 int trimDelta,
bool redo =
true, QUndoCommand *parent = 0);
505 return UndoIdAddTransitionByTrimOut;
507 bool mergeWith(
const QUndoCommand *other);
509 MultitrackModel &m_model;
518 class AddTrackCommand:
public QUndoCommand
521 AddTrackCommand(MultitrackModel &model,
bool isVideo, QUndoCommand *parent = 0);
525 MultitrackModel &m_model;
530 class InsertTrackCommand :
public QUndoCommand
533 InsertTrackCommand(MultitrackModel &model,
int trackIndex, TrackType trackType = PlaylistTrackType,
534 QUndoCommand *parent = 0);
538 MultitrackModel &m_model;
540 TrackType m_trackType;
543 class RemoveTrackCommand :
public QUndoCommand
546 RemoveTrackCommand(MultitrackModel &model,
int trackIndex, QUndoCommand *parent = 0);
550 MultitrackModel &m_model;
552 TrackType m_trackType;
554 UndoHelper m_undoHelper;
555 QScopedPointer<Mlt::Producer> m_filtersProducer;
558 class MoveTrackCommand :
public QUndoCommand
561 MoveTrackCommand(MultitrackModel &model,
int fromTrackIndex,
int toTrackIndex,
562 QUndoCommand *parent = 0);
566 MultitrackModel &m_model;
567 int m_fromTrackIndex;
571 class ChangeBlendModeCommand :
public QObject,
public QUndoCommand
575 ChangeBlendModeCommand(Mlt::Transition &transition,
const QString &propertyName,
576 const QString &mode, QUndoCommand *parent = 0);
580 void modeChanged(QString &mode);
582 Mlt::Transition m_transition;
583 QString m_propertyName;
588 class UpdateCommand :
public QUndoCommand
591 UpdateCommand(TimelineDock &timeline,
int trackIndex,
int clipIndex,
int position,
592 QUndoCommand *parent = 0);
593 void setXmlAfter(
const QString &xml);
594 void setPosition(
int trackIndex,
int clipIndex,
int position);
595 int trackIndex()
const
599 int clipIndex()
const
610 TimelineDock &m_timeline;
616 UndoHelper m_undoHelper;
620 class DetachAudioCommand:
public QUndoCommand
623 DetachAudioCommand(MultitrackModel &model,
int trackIndex,
int clipIndex,
int position,
624 const QString &xml, QUndoCommand *parent = 0);
628 MultitrackModel &m_model;
632 int m_targetTrackIndex;
634 UndoHelper m_undoHelper;
638 class ReplaceCommand :
public QUndoCommand
641 ReplaceCommand(MultitrackModel &model,
int trackIndex,
int clipIndex,
const QString &xml,
642 QUndoCommand *parent =
nullptr);
646 MultitrackModel &m_model;
651 UndoHelper m_undoHelper;
655 class AlignClipsCommand :
public QUndoCommand
658 AlignClipsCommand(MultitrackModel &model, QUndoCommand *parent = 0);
659 void addAlignment(QUuid uuid,
int offset,
double speedCompensation);
664 MultitrackModel &m_model;
665 UndoHelper m_undoHelper;
672 QVector<Alignment> m_alignments;