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,
53 ClipPosition(
int track,
int clip)
59 bool operator<(
const ClipPosition &rhs)
const
61 if (trackIndex == rhs.trackIndex) {
62 return clipIndex < rhs.clipIndex;
64 return trackIndex < rhs.trackIndex;
72class AppendCommand :
public QUndoCommand
75 AppendCommand(MultitrackModel &model,
78 bool skipProxy =
false,
80 QUndoCommand *parent = 0);
85 MultitrackModel &m_model;
88 UndoHelper m_undoHelper;
91 QVector<QUuid> m_uuids;
94class InsertCommand :
public QUndoCommand
97 InsertCommand(MultitrackModel &model,
98 MarkersModel &markersModel,
103 QUndoCommand *parent = 0);
108 MultitrackModel &m_model;
109 MarkersModel &m_markersModel;
113 QStringList m_oldTracks;
114 UndoHelper m_undoHelper;
116 bool m_rippleAllTracks;
117 bool m_rippleMarkers;
119 QVector<QUuid> m_uuids;
122class OverwriteCommand :
public QUndoCommand
125 OverwriteCommand(MultitrackModel &model,
130 QUndoCommand *parent = 0);
135 MultitrackModel &m_model;
139 UndoHelper m_undoHelper;
141 QVector<QUuid> m_uuids;
144class LiftCommand :
public QUndoCommand
147 LiftCommand(MultitrackModel &model,
int trackIndex,
int clipIndex, QUndoCommand *parent = 0);
152 MultitrackModel &m_model;
155 UndoHelper m_undoHelper;
158class RemoveCommand :
public QUndoCommand
161 RemoveCommand(MultitrackModel &model,
162 MarkersModel &markersModel,
165 QUndoCommand *parent = 0);
170 MultitrackModel &m_model;
171 MarkersModel &m_markersModel;
174 UndoHelper m_undoHelper;
175 bool m_rippleAllTracks;
176 bool m_rippleMarkers;
177 int m_markerRemoveStart;
178 int m_markerRemoveEnd;
179 QList<Markers::Marker> m_markers;
182class GroupCommand :
public QUndoCommand
185 GroupCommand(MultitrackModel &model, QUndoCommand *parent = 0);
186 void addToGroup(
int trackIndex,
int clipIndex);
191 MultitrackModel &m_model;
192 QList<ClipPosition> m_clips;
193 QMap<ClipPosition, int> m_prevGroups;
196class UngroupCommand :
public QUndoCommand
199 UngroupCommand(MultitrackModel &model, QUndoCommand *parent = 0);
200 void removeFromGroup(
int trackIndex,
int clipIndex);
205 MultitrackModel &m_model;
206 QMap<ClipPosition, int> m_prevGroups;
209class NameTrackCommand :
public QUndoCommand
212 NameTrackCommand(MultitrackModel &model,
215 QUndoCommand *parent = 0);
220 MultitrackModel &m_model;
226class MergeCommand :
public QUndoCommand
229 MergeCommand(MultitrackModel &model,
int trackIndex,
int clipIndex, QUndoCommand *parent = 0);
234 MultitrackModel &m_model;
237 UndoHelper m_undoHelper;
240class MuteTrackCommand :
public QUndoCommand
243 MuteTrackCommand(MultitrackModel &model,
int trackIndex, QUndoCommand *parent = 0);
248 MultitrackModel &m_model;
253class HideTrackCommand :
public QUndoCommand
256 HideTrackCommand(MultitrackModel &model,
int trackIndex, QUndoCommand *parent = 0);
261 MultitrackModel &m_model;
266class CompositeTrackCommand :
public QUndoCommand
269 CompositeTrackCommand(MultitrackModel &model,
272 QUndoCommand *parent = 0);
277 MultitrackModel &m_model;
283class LockTrackCommand :
public QUndoCommand
286 LockTrackCommand(MultitrackModel &model,
int trackIndex,
bool value, QUndoCommand *parent = 0);
291 MultitrackModel &m_model;
297class MoveClipCommand :
public QUndoCommand
300 MoveClipCommand(TimelineDock &timeline,
304 QUndoCommand *parent = 0);
305 void addClip(
int trackIndex,
int clipIndex);
310 int id()
const {
return UndoIdMoveClip; }
311 bool mergeWith(
const QUndoCommand *other);
316 TimelineDock &m_timeline;
317 MultitrackModel &m_model;
318 MarkersModel &m_markersModel;
343 bool m_rippleAllTracks;
344 bool m_rippleMarkers;
345 UndoHelper m_undoHelper;
346 QMultiMap<int, Info> m_clips;
349 QList<Markers::Marker> m_markers;
352class TrimCommand :
public QUndoCommand
355 explicit TrimCommand(QUndoCommand *parent = 0)
356 : QUndoCommand(parent)
358 void setUndoHelper(UndoHelper *helper) { m_undoHelper.reset(helper); }
361 QScopedPointer<UndoHelper> m_undoHelper;
364class TrimClipInCommand :
public TrimCommand
367 TrimClipInCommand(MultitrackModel &model,
368 MarkersModel &markersModel,
374 QUndoCommand *parent = 0);
379 int id()
const {
return UndoIdTrimClipIn; }
380 bool mergeWith(
const QUndoCommand *other);
383 MultitrackModel &m_model;
384 MarkersModel &m_markersModel;
389 bool m_rippleAllTracks;
390 bool m_rippleMarkers;
392 int m_markerRemoveStart;
393 int m_markerRemoveEnd;
394 QList<Markers::Marker> m_markers;
397class TrimClipOutCommand :
public TrimCommand
400 TrimClipOutCommand(MultitrackModel &model,
401 MarkersModel &markersModel,
407 QUndoCommand *parent = 0);
412 int id()
const {
return UndoIdTrimClipOut; }
413 bool mergeWith(
const QUndoCommand *other);
416 MultitrackModel &m_model;
417 MarkersModel &m_markersModel;
422 bool m_rippleAllTracks;
423 bool m_rippleMarkers;
425 int m_markerRemoveStart;
426 int m_markerRemoveEnd;
427 QList<Markers::Marker> m_markers;
430class SplitCommand :
public QUndoCommand
433 SplitCommand(MultitrackModel &model,
434 const std::vector<int> &trackIndex,
435 const std::vector<int> &clipIndex,
437 QUndoCommand *parent = 0);
442 MultitrackModel &m_model;
443 std::vector<int> m_trackIndex;
444 std::vector<int> m_clipIndex;
446 UndoHelper m_undoHelper;
449class FadeInCommand :
public QUndoCommand
452 FadeInCommand(MultitrackModel &model,
456 QUndoCommand *parent = 0);
461 int id()
const {
return UndoIdFadeIn; }
462 bool mergeWith(
const QUndoCommand *other);
465 MultitrackModel &m_model;
472class FadeOutCommand :
public QUndoCommand
475 FadeOutCommand(MultitrackModel &model,
479 QUndoCommand *parent = 0);
484 int id()
const {
return UndoIdFadeOut; }
485 bool mergeWith(
const QUndoCommand *other);
488 MultitrackModel &m_model;
495class AddTransitionCommand :
public QUndoCommand
498 AddTransitionCommand(TimelineDock &timeline,
503 QUndoCommand *parent = 0);
506 int getTransitionIndex()
const {
return m_transitionIndex; }
509 TimelineDock &m_timeline;
510 MultitrackModel &m_model;
511 MarkersModel &m_markersModel;
515 int m_transitionIndex;
517 UndoHelper m_undoHelper;
518 bool m_rippleAllTracks;
519 bool m_rippleMarkers;
520 int m_markerOldStart;
521 int m_markerNewStart;
522 QList<Markers::Marker> m_markers;
525class TrimTransitionInCommand :
public TrimCommand
528 TrimTransitionInCommand(MultitrackModel &model,
533 QUndoCommand *parent = 0);
538 int id()
const {
return UndoIdTrimTransitionIn; }
539 bool mergeWith(
const QUndoCommand *other);
542 MultitrackModel &m_model;
550class TrimTransitionOutCommand :
public TrimCommand
553 TrimTransitionOutCommand(MultitrackModel &model,
558 QUndoCommand *parent = 0);
563 int id()
const {
return UndoIdTrimTransitionOut; }
564 bool mergeWith(
const QUndoCommand *other);
567 MultitrackModel &m_model;
575class AddTransitionByTrimInCommand :
public TrimCommand
578 AddTransitionByTrimInCommand(TimelineDock &timeline,
584 QUndoCommand *parent = 0);
589 int id()
const {
return UndoIdAddTransitionByTrimIn; }
590 bool mergeWith(
const QUndoCommand *other);
593 TimelineDock &m_timeline;
602class RemoveTransitionByTrimInCommand :
public TrimCommand
605 RemoveTransitionByTrimInCommand(MultitrackModel &model,
611 QUndoCommand *parent = 0);
616 MultitrackModel &m_model;
624class RemoveTransitionByTrimOutCommand :
public TrimCommand
627 RemoveTransitionByTrimOutCommand(MultitrackModel &model,
633 QUndoCommand *parent = 0);
638 MultitrackModel &m_model;
646class AddTransitionByTrimOutCommand :
public TrimCommand
649 AddTransitionByTrimOutCommand(MultitrackModel &model,
655 QUndoCommand *parent = 0);
660 int id()
const {
return UndoIdAddTransitionByTrimOut; }
661 bool mergeWith(
const QUndoCommand *other);
664 MultitrackModel &m_model;
673class AddTrackCommand :
public QUndoCommand
676 AddTrackCommand(MultitrackModel &model,
bool isVideo, QUndoCommand *parent = 0);
681 MultitrackModel &m_model;
687class InsertTrackCommand :
public QUndoCommand
690 InsertTrackCommand(MultitrackModel &model,
692 TrackType trackType = PlaylistTrackType,
693 QUndoCommand *parent = 0);
698 MultitrackModel &m_model;
700 TrackType m_trackType;
704class RemoveTrackCommand :
public QUndoCommand
707 RemoveTrackCommand(MultitrackModel &model,
int trackIndex, QUndoCommand *parent = 0);
712 MultitrackModel &m_model;
714 TrackType m_trackType;
716 UndoHelper m_undoHelper;
717 QScopedPointer<Mlt::Producer> m_filtersProducer;
721class MoveTrackCommand :
public QUndoCommand
724 MoveTrackCommand(MultitrackModel &model,
727 QUndoCommand *parent = 0);
732 MultitrackModel &m_model;
733 int m_fromTrackIndex;
737class ChangeBlendModeCommand :
public QObject,
public QUndoCommand
741 ChangeBlendModeCommand(Mlt::Transition &transition,
742 const QString &propertyName,
744 QUndoCommand *parent = 0);
748 void modeChanged(QString &mode);
751 Mlt::Transition m_transition;
752 QString m_propertyName;
757class UpdateCommand :
public QUndoCommand
760 UpdateCommand(TimelineDock &timeline,
764 QUndoCommand *parent = 0);
765 void setXmlAfter(
const QString &xml);
766 void setPosition(
int trackIndex,
int clipIndex,
int position);
767 void setRippleAllTracks(
bool);
768 int trackIndex()
const {
return m_trackIndex; }
769 int clipIndex()
const {
return m_clipIndex; }
770 int position()
const {
return m_position; }
775 TimelineDock &m_timeline;
781 UndoHelper m_undoHelper;
783 bool m_rippleAllTracks;
786class DetachAudioCommand :
public QUndoCommand
789 DetachAudioCommand(TimelineDock &timeline,
794 QUndoCommand *parent = 0);
799 TimelineDock &m_timeline;
803 int m_targetTrackIndex;
805 UndoHelper m_undoHelper;
810class ReplaceCommand :
public QUndoCommand
813 ReplaceCommand(MultitrackModel &model,
817 QUndoCommand *parent =
nullptr);
822 MultitrackModel &m_model;
827 UndoHelper m_undoHelper;
830class AlignClipsCommand :
public QUndoCommand
833 AlignClipsCommand(MultitrackModel &model, QUndoCommand *parent = 0);
834 void addAlignment(QUuid uuid,
int offset,
double speedCompensation);
839 MultitrackModel &m_model;
840 UndoHelper m_undoHelper;
848 QVector<Alignment> m_alignments;
851class ApplyFiltersCommand :
public QUndoCommand
854 ApplyFiltersCommand(MultitrackModel &model,
855 const QString &filterProducerXml,
856 QUndoCommand *parent = 0);
857 void addClip(
int trackIndex,
int clipIndex);
862 MultitrackModel &m_model;
864 QMap<ClipPosition, QString> m_prevFilters;
867class ChangeGainCommand :
public QUndoCommand
870 ChangeGainCommand(MultitrackModel &model,
874 QUndoCommand *parent = 0);
879 int id()
const {
return UndoIdChangeGain; }
880 bool mergeWith(
const QUndoCommand *other);
883 MultitrackModel &m_model;