21#include "docks/timelinedock.h"
22#include "models/markersmodel.h"
23#include "models/multitrackmodel.h"
24#include "undohelper.h"
26#include <MltProducer.h>
27#include <MltTransition.h>
30#include <QUndoCommand>
38 UndoIdTrimClipIn = 100,
42 UndoIdTrimTransitionIn,
43 UndoIdTrimTransitionOut,
44 UndoIdAddTransitionByTrimIn,
45 UndoIdAddTransitionByTrimOut,
52 ClipPosition(
int track,
int clip)
58 bool operator<(
const ClipPosition &rhs)
const
60 if (trackIndex == rhs.trackIndex) {
61 return clipIndex < rhs.clipIndex;
63 return trackIndex < rhs.trackIndex;
71class AppendCommand :
public QUndoCommand
74 AppendCommand(MultitrackModel &model,
77 bool skipProxy =
false,
79 QUndoCommand *parent = 0);
84 MultitrackModel &m_model;
87 UndoHelper m_undoHelper;
90 QVector<QUuid> m_uuids;
93class InsertCommand :
public QUndoCommand
96 InsertCommand(MultitrackModel &model,
97 MarkersModel &markersModel,
102 QUndoCommand *parent = 0);
107 MultitrackModel &m_model;
108 MarkersModel &m_markersModel;
112 QStringList m_oldTracks;
113 UndoHelper m_undoHelper;
115 bool m_rippleAllTracks;
116 bool m_rippleMarkers;
118 QVector<QUuid> m_uuids;
121class OverwriteCommand :
public QUndoCommand
124 OverwriteCommand(MultitrackModel &model,
129 QUndoCommand *parent = 0);
134 MultitrackModel &m_model;
138 UndoHelper m_undoHelper;
140 QVector<QUuid> m_uuids;
143class LiftCommand :
public QUndoCommand
146 LiftCommand(MultitrackModel &model,
int trackIndex,
int clipIndex, QUndoCommand *parent = 0);
151 MultitrackModel &m_model;
154 UndoHelper m_undoHelper;
157class RemoveCommand :
public QUndoCommand
160 RemoveCommand(MultitrackModel &model,
161 MarkersModel &markersModel,
164 QUndoCommand *parent = 0);
169 MultitrackModel &m_model;
170 MarkersModel &m_markersModel;
173 UndoHelper m_undoHelper;
174 bool m_rippleAllTracks;
175 bool m_rippleMarkers;
176 int m_markerRemoveStart;
177 int m_markerRemoveEnd;
178 QList<Markers::Marker> m_markers;
181class GroupCommand :
public QUndoCommand
184 GroupCommand(MultitrackModel &model, QUndoCommand *parent = 0);
185 void addToGroup(
int trackIndex,
int clipIndex);
190 MultitrackModel &m_model;
191 QList<ClipPosition> m_clips;
192 QMap<ClipPosition, int> m_prevGroups;
195class UngroupCommand :
public QUndoCommand
198 UngroupCommand(MultitrackModel &model, QUndoCommand *parent = 0);
199 void removeFromGroup(
int trackIndex,
int clipIndex);
204 MultitrackModel &m_model;
205 QMap<ClipPosition, int> m_prevGroups;
208class NameTrackCommand :
public QUndoCommand
211 NameTrackCommand(MultitrackModel &model,
214 QUndoCommand *parent = 0);
219 MultitrackModel &m_model;
225class MergeCommand :
public QUndoCommand
228 MergeCommand(MultitrackModel &model,
int trackIndex,
int clipIndex, QUndoCommand *parent = 0);
233 MultitrackModel &m_model;
236 UndoHelper m_undoHelper;
239class MuteTrackCommand :
public QUndoCommand
242 MuteTrackCommand(MultitrackModel &model,
int trackIndex, QUndoCommand *parent = 0);
247 MultitrackModel &m_model;
252class HideTrackCommand :
public QUndoCommand
255 HideTrackCommand(MultitrackModel &model,
int trackIndex, QUndoCommand *parent = 0);
260 MultitrackModel &m_model;
265class CompositeTrackCommand :
public QUndoCommand
268 CompositeTrackCommand(MultitrackModel &model,
271 QUndoCommand *parent = 0);
276 MultitrackModel &m_model;
282class LockTrackCommand :
public QUndoCommand
285 LockTrackCommand(MultitrackModel &model,
int trackIndex,
bool value, QUndoCommand *parent = 0);
290 MultitrackModel &m_model;
296class MoveClipCommand :
public QUndoCommand
299 MoveClipCommand(TimelineDock &timeline,
303 QUndoCommand *parent = 0);
304 void addClip(
int trackIndex,
int clipIndex);
309 int id()
const {
return UndoIdMoveClip; }
310 bool mergeWith(
const QUndoCommand *other);
315 TimelineDock &m_timeline;
316 MultitrackModel &m_model;
317 MarkersModel &m_markersModel;
342 bool m_rippleAllTracks;
343 bool m_rippleMarkers;
344 UndoHelper m_undoHelper;
345 QMultiMap<int, Info> m_clips;
348 QList<Markers::Marker> m_markers;
351class TrimCommand :
public QUndoCommand
354 explicit TrimCommand(QUndoCommand *parent = 0)
355 : QUndoCommand(parent)
357 void setUndoHelper(UndoHelper *helper) { m_undoHelper.reset(helper); }
360 QScopedPointer<UndoHelper> m_undoHelper;
363class TrimClipInCommand :
public TrimCommand
366 TrimClipInCommand(MultitrackModel &model,
367 MarkersModel &markersModel,
373 QUndoCommand *parent = 0);
378 int id()
const {
return UndoIdTrimClipIn; }
379 bool mergeWith(
const QUndoCommand *other);
382 MultitrackModel &m_model;
383 MarkersModel &m_markersModel;
388 bool m_rippleAllTracks;
389 bool m_rippleMarkers;
391 int m_markerRemoveStart;
392 int m_markerRemoveEnd;
393 QList<Markers::Marker> m_markers;
396class TrimClipOutCommand :
public TrimCommand
399 TrimClipOutCommand(MultitrackModel &model,
400 MarkersModel &markersModel,
406 QUndoCommand *parent = 0);
411 int id()
const {
return UndoIdTrimClipOut; }
412 bool mergeWith(
const QUndoCommand *other);
415 MultitrackModel &m_model;
416 MarkersModel &m_markersModel;
421 bool m_rippleAllTracks;
422 bool m_rippleMarkers;
424 int m_markerRemoveStart;
425 int m_markerRemoveEnd;
426 QList<Markers::Marker> m_markers;
429class SplitCommand :
public QUndoCommand
432 SplitCommand(MultitrackModel &model,
433 const std::vector<int> &trackIndex,
434 const std::vector<int> &clipIndex,
436 QUndoCommand *parent = 0);
441 MultitrackModel &m_model;
442 std::vector<int> m_trackIndex;
443 std::vector<int> m_clipIndex;
445 UndoHelper m_undoHelper;
448class FadeInCommand :
public QUndoCommand
451 FadeInCommand(MultitrackModel &model,
455 QUndoCommand *parent = 0);
460 int id()
const {
return UndoIdFadeIn; }
461 bool mergeWith(
const QUndoCommand *other);
464 MultitrackModel &m_model;
471class FadeOutCommand :
public QUndoCommand
474 FadeOutCommand(MultitrackModel &model,
478 QUndoCommand *parent = 0);
483 int id()
const {
return UndoIdFadeOut; }
484 bool mergeWith(
const QUndoCommand *other);
487 MultitrackModel &m_model;
494class AddTransitionCommand :
public QUndoCommand
497 AddTransitionCommand(TimelineDock &timeline,
502 QUndoCommand *parent = 0);
505 int getTransitionIndex()
const {
return m_transitionIndex; }
508 TimelineDock &m_timeline;
509 MultitrackModel &m_model;
510 MarkersModel &m_markersModel;
514 int m_transitionIndex;
516 UndoHelper m_undoHelper;
517 bool m_rippleAllTracks;
518 bool m_rippleMarkers;
519 int m_markerOldStart;
520 int m_markerNewStart;
521 QList<Markers::Marker> m_markers;
524class TrimTransitionInCommand :
public TrimCommand
527 TrimTransitionInCommand(MultitrackModel &model,
532 QUndoCommand *parent = 0);
537 int id()
const {
return UndoIdTrimTransitionIn; }
538 bool mergeWith(
const QUndoCommand *other);
541 MultitrackModel &m_model;
549class TrimTransitionOutCommand :
public TrimCommand
552 TrimTransitionOutCommand(MultitrackModel &model,
557 QUndoCommand *parent = 0);
562 int id()
const {
return UndoIdTrimTransitionOut; }
563 bool mergeWith(
const QUndoCommand *other);
566 MultitrackModel &m_model;
574class AddTransitionByTrimInCommand :
public TrimCommand
577 AddTransitionByTrimInCommand(TimelineDock &timeline,
583 QUndoCommand *parent = 0);
588 int id()
const {
return UndoIdAddTransitionByTrimIn; }
589 bool mergeWith(
const QUndoCommand *other);
592 TimelineDock &m_timeline;
601class RemoveTransitionByTrimInCommand :
public TrimCommand
604 RemoveTransitionByTrimInCommand(MultitrackModel &model,
610 QUndoCommand *parent = 0);
615 MultitrackModel &m_model;
623class RemoveTransitionByTrimOutCommand :
public TrimCommand
626 RemoveTransitionByTrimOutCommand(MultitrackModel &model,
632 QUndoCommand *parent = 0);
637 MultitrackModel &m_model;
645class AddTransitionByTrimOutCommand :
public TrimCommand
648 AddTransitionByTrimOutCommand(MultitrackModel &model,
654 QUndoCommand *parent = 0);
659 int id()
const {
return UndoIdAddTransitionByTrimOut; }
660 bool mergeWith(
const QUndoCommand *other);
663 MultitrackModel &m_model;
672class AddTrackCommand :
public QUndoCommand
675 AddTrackCommand(MultitrackModel &model,
bool isVideo, QUndoCommand *parent = 0);
680 MultitrackModel &m_model;
686class InsertTrackCommand :
public QUndoCommand
689 InsertTrackCommand(MultitrackModel &model,
691 TrackType trackType = PlaylistTrackType,
692 QUndoCommand *parent = 0);
697 MultitrackModel &m_model;
699 TrackType m_trackType;
703class RemoveTrackCommand :
public QUndoCommand
706 RemoveTrackCommand(MultitrackModel &model,
int trackIndex, QUndoCommand *parent = 0);
711 MultitrackModel &m_model;
713 TrackType m_trackType;
715 UndoHelper m_undoHelper;
716 QScopedPointer<Mlt::Producer> m_filtersProducer;
720class MoveTrackCommand :
public QUndoCommand
723 MoveTrackCommand(MultitrackModel &model,
726 QUndoCommand *parent = 0);
731 MultitrackModel &m_model;
732 int m_fromTrackIndex;
736class ChangeBlendModeCommand :
public QObject,
public QUndoCommand
740 ChangeBlendModeCommand(Mlt::Transition &transition,
741 const QString &propertyName,
743 QUndoCommand *parent = 0);
747 void modeChanged(QString &mode);
750 Mlt::Transition m_transition;
751 QString m_propertyName;
756class UpdateCommand :
public QUndoCommand
759 UpdateCommand(TimelineDock &timeline,
763 QUndoCommand *parent = 0);
764 void setXmlAfter(
const QString &xml);
765 void setPosition(
int trackIndex,
int clipIndex,
int position);
766 void setRippleAllTracks(
bool);
767 int trackIndex()
const {
return m_trackIndex; }
768 int clipIndex()
const {
return m_clipIndex; }
769 int position()
const {
return m_position; }
774 TimelineDock &m_timeline;
780 UndoHelper m_undoHelper;
782 bool m_rippleAllTracks;
785class DetachAudioCommand :
public QUndoCommand
788 DetachAudioCommand(TimelineDock &timeline,
793 QUndoCommand *parent = 0);
798 TimelineDock &m_timeline;
802 int m_targetTrackIndex;
804 UndoHelper m_undoHelper;
809class ReplaceCommand :
public QUndoCommand
812 ReplaceCommand(MultitrackModel &model,
816 QUndoCommand *parent =
nullptr);
821 MultitrackModel &m_model;
826 UndoHelper m_undoHelper;
829class AlignClipsCommand :
public QUndoCommand
832 AlignClipsCommand(MultitrackModel &model, QUndoCommand *parent = 0);
833 void addAlignment(QUuid uuid,
int offset,
double speedCompensation);
838 MultitrackModel &m_model;
839 UndoHelper m_undoHelper;
847 QVector<Alignment> m_alignments;
850class ApplyFiltersCommand :
public QUndoCommand
853 ApplyFiltersCommand(MultitrackModel &model,
854 const QString &filterProducerXml,
855 QUndoCommand *parent = 0);
856 void addClip(
int trackIndex,
int clipIndex);
861 MultitrackModel &m_model;
863 QMap<ClipPosition, QString> m_prevFilters;