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;
71 class AppendCommand :
public QUndoCommand
74 AppendCommand(MultitrackModel &model,
77 bool skipProxy =
false,
79 QUndoCommand *parent = 0);
84 MultitrackModel &m_model;
87 UndoHelper m_undoHelper;
92 class InsertCommand :
public QUndoCommand
95 InsertCommand(MultitrackModel &model,
96 MarkersModel &markersModel,
101 QUndoCommand *parent = 0);
106 MultitrackModel &m_model;
107 MarkersModel &m_markersModel;
111 QStringList m_oldTracks;
112 UndoHelper m_undoHelper;
114 bool m_rippleAllTracks;
115 bool m_rippleMarkers;
119 class OverwriteCommand :
public QUndoCommand
122 OverwriteCommand(MultitrackModel &model,
127 QUndoCommand *parent = 0);
132 MultitrackModel &m_model;
136 UndoHelper m_undoHelper;
140 class LiftCommand :
public QUndoCommand
143 LiftCommand(MultitrackModel &model,
int trackIndex,
int clipIndex, QUndoCommand *parent = 0);
148 MultitrackModel &m_model;
151 UndoHelper m_undoHelper;
154 class RemoveCommand :
public QUndoCommand
157 RemoveCommand(MultitrackModel &model,
158 MarkersModel &markersModel,
161 QUndoCommand *parent = 0);
166 MultitrackModel &m_model;
167 MarkersModel &m_markersModel;
170 UndoHelper m_undoHelper;
171 bool m_rippleAllTracks;
172 bool m_rippleMarkers;
173 int m_markerRemoveStart;
174 int m_markerRemoveEnd;
175 QList<Markers::Marker> m_markers;
178 class GroupCommand :
public QUndoCommand
181 GroupCommand(MultitrackModel &model, QUndoCommand *parent = 0);
182 void addToGroup(
int trackIndex,
int clipIndex);
187 MultitrackModel &m_model;
188 QList<ClipPosition> m_clips;
189 QMap<ClipPosition, int> m_prevGroups;
192 class UngroupCommand :
public QUndoCommand
195 UngroupCommand(MultitrackModel &model, QUndoCommand *parent = 0);
196 void removeFromGroup(
int trackIndex,
int clipIndex);
201 MultitrackModel &m_model;
202 QMap<ClipPosition, int> m_prevGroups;
205 class NameTrackCommand :
public QUndoCommand
208 NameTrackCommand(MultitrackModel &model,
211 QUndoCommand *parent = 0);
216 MultitrackModel &m_model;
222 class MergeCommand :
public QUndoCommand
225 MergeCommand(MultitrackModel &model,
int trackIndex,
int clipIndex, QUndoCommand *parent = 0);
230 MultitrackModel &m_model;
233 UndoHelper m_undoHelper;
236 class MuteTrackCommand :
public QUndoCommand
239 MuteTrackCommand(MultitrackModel &model,
int trackIndex, QUndoCommand *parent = 0);
244 MultitrackModel &m_model;
249 class HideTrackCommand :
public QUndoCommand
252 HideTrackCommand(MultitrackModel &model,
int trackIndex, QUndoCommand *parent = 0);
257 MultitrackModel &m_model;
262 class CompositeTrackCommand :
public QUndoCommand
265 CompositeTrackCommand(MultitrackModel &model,
268 QUndoCommand *parent = 0);
273 MultitrackModel &m_model;
279 class LockTrackCommand :
public QUndoCommand
282 LockTrackCommand(MultitrackModel &model,
int trackIndex,
bool value, QUndoCommand *parent = 0);
287 MultitrackModel &m_model;
293 class MoveClipCommand :
public QUndoCommand
296 MoveClipCommand(TimelineDock &timeline,
300 QUndoCommand *parent = 0);
301 void addClip(
int trackIndex,
int clipIndex);
306 int id()
const {
return UndoIdMoveClip; }
307 bool mergeWith(
const QUndoCommand *other);
312 TimelineDock &m_timeline;
313 MultitrackModel &m_model;
314 MarkersModel &m_markersModel;
339 bool m_rippleAllTracks;
340 bool m_rippleMarkers;
341 UndoHelper m_undoHelper;
342 QMultiMap<int, Info> m_clips;
345 QList<Markers::Marker> m_markers;
348 class TrimCommand :
public QUndoCommand
351 explicit TrimCommand(QUndoCommand *parent = 0)
352 : QUndoCommand(parent)
354 void setUndoHelper(UndoHelper *helper) { m_undoHelper.reset(helper); }
357 QScopedPointer<UndoHelper> m_undoHelper;
360 class TrimClipInCommand :
public TrimCommand
363 TrimClipInCommand(MultitrackModel &model,
364 MarkersModel &markersModel,
370 QUndoCommand *parent = 0);
375 int id()
const {
return UndoIdTrimClipIn; }
376 bool mergeWith(
const QUndoCommand *other);
379 MultitrackModel &m_model;
380 MarkersModel &m_markersModel;
385 bool m_rippleAllTracks;
386 bool m_rippleMarkers;
388 int m_markerRemoveStart;
389 int m_markerRemoveEnd;
390 QList<Markers::Marker> m_markers;
393 class TrimClipOutCommand :
public TrimCommand
396 TrimClipOutCommand(MultitrackModel &model,
397 MarkersModel &markersModel,
403 QUndoCommand *parent = 0);
408 int id()
const {
return UndoIdTrimClipOut; }
409 bool mergeWith(
const QUndoCommand *other);
412 MultitrackModel &m_model;
413 MarkersModel &m_markersModel;
418 bool m_rippleAllTracks;
419 bool m_rippleMarkers;
421 int m_markerRemoveStart;
422 int m_markerRemoveEnd;
423 QList<Markers::Marker> m_markers;
426 class SplitCommand :
public QUndoCommand
429 SplitCommand(MultitrackModel &model,
430 const std::vector<int> &trackIndex,
431 const std::vector<int> &clipIndex,
433 QUndoCommand *parent = 0);
438 MultitrackModel &m_model;
439 std::vector<int> m_trackIndex;
440 std::vector<int> m_clipIndex;
442 UndoHelper m_undoHelper;
445 class FadeInCommand :
public QUndoCommand
448 FadeInCommand(MultitrackModel &model,
452 QUndoCommand *parent = 0);
457 int id()
const {
return UndoIdFadeIn; }
458 bool mergeWith(
const QUndoCommand *other);
461 MultitrackModel &m_model;
468 class FadeOutCommand :
public QUndoCommand
471 FadeOutCommand(MultitrackModel &model,
475 QUndoCommand *parent = 0);
480 int id()
const {
return UndoIdFadeOut; }
481 bool mergeWith(
const QUndoCommand *other);
484 MultitrackModel &m_model;
491 class AddTransitionCommand :
public QUndoCommand
494 AddTransitionCommand(TimelineDock &timeline,
499 QUndoCommand *parent = 0);
502 int getTransitionIndex()
const {
return m_transitionIndex; }
505 TimelineDock &m_timeline;
506 MultitrackModel &m_model;
507 MarkersModel &m_markersModel;
511 int m_transitionIndex;
513 UndoHelper m_undoHelper;
514 bool m_rippleAllTracks;
515 bool m_rippleMarkers;
516 int m_markerOldStart;
517 int m_markerNewStart;
518 QList<Markers::Marker> m_markers;
521 class TrimTransitionInCommand :
public TrimCommand
524 TrimTransitionInCommand(MultitrackModel &model,
529 QUndoCommand *parent = 0);
534 int id()
const {
return UndoIdTrimTransitionIn; }
535 bool mergeWith(
const QUndoCommand *other);
538 MultitrackModel &m_model;
546 class TrimTransitionOutCommand :
public TrimCommand
549 TrimTransitionOutCommand(MultitrackModel &model,
554 QUndoCommand *parent = 0);
559 int id()
const {
return UndoIdTrimTransitionOut; }
560 bool mergeWith(
const QUndoCommand *other);
563 MultitrackModel &m_model;
571 class AddTransitionByTrimInCommand :
public TrimCommand
574 AddTransitionByTrimInCommand(TimelineDock &timeline,
580 QUndoCommand *parent = 0);
585 int id()
const {
return UndoIdAddTransitionByTrimIn; }
586 bool mergeWith(
const QUndoCommand *other);
589 TimelineDock &m_timeline;
598 class RemoveTransitionByTrimInCommand :
public TrimCommand
601 RemoveTransitionByTrimInCommand(MultitrackModel &model,
607 QUndoCommand *parent = 0);
612 MultitrackModel &m_model;
620 class RemoveTransitionByTrimOutCommand :
public TrimCommand
623 RemoveTransitionByTrimOutCommand(MultitrackModel &model,
629 QUndoCommand *parent = 0);
634 MultitrackModel &m_model;
642 class AddTransitionByTrimOutCommand :
public TrimCommand
645 AddTransitionByTrimOutCommand(MultitrackModel &model,
651 QUndoCommand *parent = 0);
656 int id()
const {
return UndoIdAddTransitionByTrimOut; }
657 bool mergeWith(
const QUndoCommand *other);
660 MultitrackModel &m_model;
669 class AddTrackCommand :
public QUndoCommand
672 AddTrackCommand(MultitrackModel &model,
bool isVideo, QUndoCommand *parent = 0);
677 MultitrackModel &m_model;
683 class InsertTrackCommand :
public QUndoCommand
686 InsertTrackCommand(MultitrackModel &model,
688 TrackType trackType = PlaylistTrackType,
689 QUndoCommand *parent = 0);
694 MultitrackModel &m_model;
696 TrackType m_trackType;
700 class RemoveTrackCommand :
public QUndoCommand
703 RemoveTrackCommand(MultitrackModel &model,
int trackIndex, QUndoCommand *parent = 0);
708 MultitrackModel &m_model;
710 TrackType m_trackType;
712 UndoHelper m_undoHelper;
713 QScopedPointer<Mlt::Producer> m_filtersProducer;
717 class MoveTrackCommand :
public QUndoCommand
720 MoveTrackCommand(MultitrackModel &model,
723 QUndoCommand *parent = 0);
728 MultitrackModel &m_model;
729 int m_fromTrackIndex;
733 class ChangeBlendModeCommand :
public QObject,
public QUndoCommand
737 ChangeBlendModeCommand(Mlt::Transition &transition,
738 const QString &propertyName,
740 QUndoCommand *parent = 0);
744 void modeChanged(QString &mode);
747 Mlt::Transition m_transition;
748 QString m_propertyName;
753 class UpdateCommand :
public QUndoCommand
756 UpdateCommand(TimelineDock &timeline,
760 QUndoCommand *parent = 0);
761 void setXmlAfter(
const QString &xml);
762 void setPosition(
int trackIndex,
int clipIndex,
int position);
763 void setRippleAllTracks(
bool);
764 int trackIndex()
const {
return m_trackIndex; }
765 int clipIndex()
const {
return m_clipIndex; }
766 int position()
const {
return m_position; }
771 TimelineDock &m_timeline;
777 UndoHelper m_undoHelper;
779 bool m_rippleAllTracks;
782 class DetachAudioCommand :
public QUndoCommand
785 DetachAudioCommand(TimelineDock &timeline,
790 QUndoCommand *parent = 0);
795 TimelineDock &m_timeline;
799 int m_targetTrackIndex;
801 UndoHelper m_undoHelper;
806 class ReplaceCommand :
public QUndoCommand
809 ReplaceCommand(MultitrackModel &model,
813 QUndoCommand *parent =
nullptr);
818 MultitrackModel &m_model;
823 UndoHelper m_undoHelper;
826 class AlignClipsCommand :
public QUndoCommand
829 AlignClipsCommand(MultitrackModel &model, QUndoCommand *parent = 0);
830 void addAlignment(QUuid uuid,
int offset,
double speedCompensation);
835 MultitrackModel &m_model;
836 UndoHelper m_undoHelper;
844 QVector<Alignment> m_alignments;
847 class ApplyFiltersCommand :
public QUndoCommand
850 ApplyFiltersCommand(MultitrackModel &model,
851 const QString &filterProducerXml,
852 QUndoCommand *parent = 0);
853 void addClip(
int trackIndex,
int clipIndex);
858 MultitrackModel &m_model;
860 QMap<ClipPosition, QString> m_prevFilters;