21#include "models/multitrackmodel.h"
22#include "models/markersmodel.h"
23#include "docks/timelinedock.h"
24#include "undohelper.h"
25#include <QUndoCommand>
29#include <MltTransition.h>
30#include <MltProducer.h>
37 UndoIdTrimClipIn = 100,
41 UndoIdTrimTransitionIn,
42 UndoIdTrimTransitionOut,
43 UndoIdAddTransitionByTrimIn,
44 UndoIdAddTransitionByTrimOut,
50 ClipPosition(
int track,
int clip)
56 bool operator < (
const ClipPosition &rhs)
const
58 if (trackIndex == rhs.trackIndex) {
59 return clipIndex < rhs.clipIndex;
61 return trackIndex < rhs.trackIndex;
69class AppendCommand :
public QUndoCommand
72 AppendCommand(MultitrackModel &model,
int trackIndex,
const QString &xml,
bool skipProxy =
false,
73 bool seek =
true, QUndoCommand *parent = 0);
77 MultitrackModel &m_model;
80 UndoHelper m_undoHelper;
85class InsertCommand :
public QUndoCommand
88 InsertCommand(MultitrackModel &model, MarkersModel &markersModel,
int trackIndex,
int position,
89 const QString &xml,
bool seek =
true, QUndoCommand *parent = 0);
93 MultitrackModel &m_model;
94 MarkersModel &m_markersModel;
98 QStringList m_oldTracks;
99 UndoHelper m_undoHelper;
101 bool m_rippleAllTracks;
102 bool m_rippleMarkers;
106class OverwriteCommand :
public QUndoCommand
109 OverwriteCommand(MultitrackModel &model,
int trackIndex,
int position,
const QString &xml,
110 bool seek =
true, QUndoCommand *parent = 0);
114 MultitrackModel &m_model;
118 UndoHelper m_undoHelper;
122class LiftCommand :
public QUndoCommand
125 LiftCommand(MultitrackModel &model,
int trackIndex,
int clipIndex, QUndoCommand *parent = 0);
129 MultitrackModel &m_model;
132 UndoHelper m_undoHelper;
135class RemoveCommand :
public QUndoCommand
138 RemoveCommand(MultitrackModel &model, MarkersModel &markersModel,
int trackIndex,
int clipIndex,
139 QUndoCommand *parent = 0);
143 MultitrackModel &m_model;
144 MarkersModel &m_markersModel;
147 UndoHelper m_undoHelper;
148 bool m_rippleAllTracks;
149 bool m_rippleMarkers;
150 int m_markerRemoveStart;
151 int m_markerRemoveEnd;
152 QList<Markers::Marker> m_markers;
155class GroupCommand :
public QUndoCommand
158 GroupCommand(MultitrackModel &model, QUndoCommand *parent = 0);
159 void addToGroup(
int trackIndex,
int clipIndex);
163 MultitrackModel &m_model;
164 QList<ClipPosition> m_clips;
165 QMap<ClipPosition, int> m_prevGroups;
168class UngroupCommand :
public QUndoCommand
171 UngroupCommand(MultitrackModel &model, QUndoCommand *parent = 0);
172 void removeFromGroup(
int trackIndex,
int clipIndex);
176 MultitrackModel &m_model;
177 QMap<ClipPosition, int> m_prevGroups;
180class NameTrackCommand :
public QUndoCommand
183 NameTrackCommand(MultitrackModel &model,
int trackIndex,
const QString &name,
184 QUndoCommand *parent = 0);
188 MultitrackModel &m_model;
194class MergeCommand :
public QUndoCommand
197 MergeCommand(MultitrackModel &model,
int trackIndex,
int clipIndex, QUndoCommand *parent = 0);
201 MultitrackModel &m_model;
204 UndoHelper m_undoHelper;
207class MuteTrackCommand :
public QUndoCommand
210 MuteTrackCommand(MultitrackModel &model,
int trackIndex, QUndoCommand *parent = 0);
214 MultitrackModel &m_model;
219class HideTrackCommand :
public QUndoCommand
222 HideTrackCommand(MultitrackModel &model,
int trackIndex, QUndoCommand *parent = 0);
226 MultitrackModel &m_model;
231class CompositeTrackCommand :
public QUndoCommand
234 CompositeTrackCommand(MultitrackModel &model,
int trackIndex,
bool value, QUndoCommand *parent = 0);
238 MultitrackModel &m_model;
244class LockTrackCommand :
public QUndoCommand
247 LockTrackCommand(MultitrackModel &model,
int trackIndex,
bool value, QUndoCommand *parent = 0);
251 MultitrackModel &m_model;
257class MoveClipCommand :
public QUndoCommand
260 MoveClipCommand(TimelineDock &timeline,
int trackDelta,
int positionDelta,
bool ripple,
261 QUndoCommand *parent = 0);
262 void addClip(
int trackIndex,
int clipIndex);
268 return UndoIdMoveClip;
270 bool mergeWith(
const QUndoCommand *other);
274 TimelineDock &m_timeline;
275 MultitrackModel &m_model;
276 MarkersModel &m_markersModel;
300 bool m_rippleAllTracks;
301 bool m_rippleMarkers;
302 UndoHelper m_undoHelper;
303 QMultiMap<int, Info> m_clips;
306 QList<Markers::Marker> m_markers;
309class TrimCommand :
public QUndoCommand
312 explicit TrimCommand(QUndoCommand *parent = 0) : QUndoCommand(parent) {}
313 void setUndoHelper(UndoHelper *helper)
315 m_undoHelper.reset(helper);
319 QScopedPointer<UndoHelper> m_undoHelper;
322class TrimClipInCommand :
public TrimCommand
325 TrimClipInCommand(MultitrackModel &model, MarkersModel &markersModel,
int trackIndex,
int clipIndex,
326 int delta,
bool ripple,
bool redo =
true, QUndoCommand *parent = 0);
332 return UndoIdTrimClipIn;
334 bool mergeWith(
const QUndoCommand *other);
336 MultitrackModel &m_model;
337 MarkersModel &m_markersModel;
342 bool m_rippleAllTracks;
343 bool m_rippleMarkers;
345 int m_markerRemoveStart;
346 int m_markerRemoveEnd;
347 QList<Markers::Marker> m_markers;
350class TrimClipOutCommand :
public TrimCommand
353 TrimClipOutCommand(MultitrackModel &model, MarkersModel &markersModel,
int trackIndex,
354 int clipIndex,
int delta,
bool ripple,
bool redo =
true, QUndoCommand *parent = 0);
360 return UndoIdTrimClipOut;
362 bool mergeWith(
const QUndoCommand *other);
364 MultitrackModel &m_model;
365 MarkersModel &m_markersModel;
370 bool m_rippleAllTracks;
371 bool m_rippleMarkers;
373 int m_markerRemoveStart;
374 int m_markerRemoveEnd;
375 QList<Markers::Marker> m_markers;
378class SplitCommand :
public QUndoCommand
381 SplitCommand(MultitrackModel &model,
const std::vector<int> &trackIndex,
382 const std::vector<int> &clipIndex,
384 QUndoCommand *parent = 0);
388 MultitrackModel &m_model;
389 std::vector<int> m_trackIndex;
390 std::vector<int> m_clipIndex;
392 UndoHelper m_undoHelper;
395class FadeInCommand :
public QUndoCommand
398 FadeInCommand(MultitrackModel &model,
int trackIndex,
int clipIndex,
int duration,
399 QUndoCommand *parent = 0);
407 bool mergeWith(
const QUndoCommand *other);
409 MultitrackModel &m_model;
416class FadeOutCommand :
public QUndoCommand
419 FadeOutCommand(MultitrackModel &model,
int trackIndex,
int clipIndex,
int duration,
420 QUndoCommand *parent = 0);
426 return UndoIdFadeOut;
428 bool mergeWith(
const QUndoCommand *other);
430 MultitrackModel &m_model;
437class AddTransitionCommand :
public QUndoCommand
440 AddTransitionCommand(TimelineDock &timeline,
int trackIndex,
int clipIndex,
int position,
441 bool ripple, QUndoCommand *parent = 0);
444 int getTransitionIndex()
const
446 return m_transitionIndex;
449 TimelineDock &m_timeline;
450 MultitrackModel &m_model;
451 MarkersModel &m_markersModel;
455 int m_transitionIndex;
457 UndoHelper m_undoHelper;
458 bool m_rippleAllTracks;
459 bool m_rippleMarkers;
460 int m_markerOldStart;
461 int m_markerNewStart;
462 QList<Markers::Marker> m_markers;
465class TrimTransitionInCommand :
public TrimCommand
468 TrimTransitionInCommand(MultitrackModel &model,
int trackIndex,
int clipIndex,
int delta,
469 bool redo =
true, QUndoCommand *parent = 0);
475 return UndoIdTrimTransitionIn;
477 bool mergeWith(
const QUndoCommand *other);
479 MultitrackModel &m_model;
487class TrimTransitionOutCommand :
public TrimCommand
490 TrimTransitionOutCommand(MultitrackModel &model,
int trackIndex,
int clipIndex,
int delta,
491 bool redo =
true, QUndoCommand *parent = 0);
497 return UndoIdTrimTransitionOut;
499 bool mergeWith(
const QUndoCommand *other);
501 MultitrackModel &m_model;
509class AddTransitionByTrimInCommand :
public TrimCommand
512 AddTransitionByTrimInCommand(TimelineDock &timeline,
int trackIndex,
int clipIndex,
int duration,
513 int trimDelta,
bool redo =
true, QUndoCommand *parent = 0);
519 return UndoIdAddTransitionByTrimIn;
521 bool mergeWith(
const QUndoCommand *other);
523 TimelineDock &m_timeline;
532class RemoveTransitionByTrimInCommand :
public TrimCommand
535 RemoveTransitionByTrimInCommand(MultitrackModel &model,
int trackIndex,
int clipIndex,
int delta,
536 QString xml,
bool redo =
true, QUndoCommand *parent = 0);
540 MultitrackModel &m_model;
548class RemoveTransitionByTrimOutCommand :
public TrimCommand
551 RemoveTransitionByTrimOutCommand(MultitrackModel &model,
int trackIndex,
int clipIndex,
int delta,
552 QString xml,
bool redo =
true, QUndoCommand *parent = 0);
556 MultitrackModel &m_model;
564class AddTransitionByTrimOutCommand :
public TrimCommand
567 AddTransitionByTrimOutCommand(MultitrackModel &model,
int trackIndex,
int clipIndex,
int duration,
568 int trimDelta,
bool redo =
true, QUndoCommand *parent = 0);
574 return UndoIdAddTransitionByTrimOut;
576 bool mergeWith(
const QUndoCommand *other);
578 MultitrackModel &m_model;
587class AddTrackCommand:
public QUndoCommand
590 AddTrackCommand(MultitrackModel &model,
bool isVideo, QUndoCommand *parent = 0);
594 MultitrackModel &m_model;
600class InsertTrackCommand :
public QUndoCommand
603 InsertTrackCommand(MultitrackModel &model,
int trackIndex, TrackType trackType = PlaylistTrackType,
604 QUndoCommand *parent = 0);
608 MultitrackModel &m_model;
610 TrackType m_trackType;
614class RemoveTrackCommand :
public QUndoCommand
617 RemoveTrackCommand(MultitrackModel &model,
int trackIndex, QUndoCommand *parent = 0);
621 MultitrackModel &m_model;
623 TrackType m_trackType;
625 UndoHelper m_undoHelper;
626 QScopedPointer<Mlt::Producer> m_filtersProducer;
630class MoveTrackCommand :
public QUndoCommand
633 MoveTrackCommand(MultitrackModel &model,
int fromTrackIndex,
int toTrackIndex,
634 QUndoCommand *parent = 0);
638 MultitrackModel &m_model;
639 int m_fromTrackIndex;
643class ChangeBlendModeCommand :
public QObject,
public QUndoCommand
647 ChangeBlendModeCommand(Mlt::Transition &transition,
const QString &propertyName,
648 const QString &mode, QUndoCommand *parent = 0);
652 void modeChanged(QString &mode);
654 Mlt::Transition m_transition;
655 QString m_propertyName;
660class UpdateCommand :
public QUndoCommand
663 UpdateCommand(TimelineDock &timeline,
int trackIndex,
int clipIndex,
int position,
664 QUndoCommand *parent = 0);
665 void setXmlAfter(
const QString &xml);
666 void setPosition(
int trackIndex,
int clipIndex,
int position);
667 void setRippleAllTracks(
bool);
668 int trackIndex()
const
672 int clipIndex()
const
683 TimelineDock &m_timeline;
689 UndoHelper m_undoHelper;
691 bool m_rippleAllTracks;
694class DetachAudioCommand:
public QUndoCommand
697 DetachAudioCommand(TimelineDock &timeline,
int trackIndex,
int clipIndex,
int position,
698 const QString &xml, QUndoCommand *parent = 0);
702 TimelineDock &m_timeline;
706 int m_targetTrackIndex;
708 UndoHelper m_undoHelper;
713class ReplaceCommand :
public QUndoCommand
716 ReplaceCommand(MultitrackModel &model,
int trackIndex,
int clipIndex,
const QString &xml,
717 QUndoCommand *parent =
nullptr);
721 MultitrackModel &m_model;
726 UndoHelper m_undoHelper;
730class AlignClipsCommand :
public QUndoCommand
733 AlignClipsCommand(MultitrackModel &model, QUndoCommand *parent = 0);
734 void addAlignment(QUuid uuid,
int offset,
double speedCompensation);
739 MultitrackModel &m_model;
740 UndoHelper m_undoHelper;
747 QVector<Alignment> m_alignments;
750class ApplyFiltersCommand :
public QUndoCommand
753 ApplyFiltersCommand(MultitrackModel &model,
const QString &filterProducerXml,
754 QUndoCommand *parent = 0);
755 void addClip(
int trackIndex,
int clipIndex);
760 MultitrackModel &m_model;
762 QMap<ClipPosition, QString> m_prevFilters;