Olive
undo.h
1 #ifndef UNDO_H
2 #define UNDO_H
3 
4 class Media;
5 class QCheckBox;
6 class LabelSlider;
7 class Effect;
8 class SourceTable;
9 class EffectRow;
10 class EffectField;
11 class Transition;
12 class EffectGizmo;
13 class Clip;
14 struct Sequence;
15 struct Footage;
16 struct EffectMeta;
17 
18 #include "project/marker.h"
19 #include "project/selection.h"
20 #include "project/effectfield.h"
21 
22 #include <QUndoStack>
23 #include <QUndoCommand>
24 #include <QVector>
25 #include <QVariant>
26 #include <QModelIndex>
27 
28 namespace Olive {
29  extern QUndoStack UndoStack;
30 }
31 
32 class ComboAction : public QUndoCommand {
33 public:
34  ComboAction();
35  virtual ~ComboAction() override;
36  virtual void undo() override;
37  virtual void redo() override;
38  void append(QUndoCommand* u);
39  void appendPost(QUndoCommand* u);
40 private:
41  QVector<QUndoCommand*> commands;
42  QVector<QUndoCommand*> post_commands;
43 };
44 
45 class OliveAction : public QUndoCommand {
46 public:
47  OliveAction(bool iset_window_modified = true);
48  virtual ~OliveAction() override;
49 
50  virtual void undo() override;
51  virtual void redo() override;
52 
53  virtual void doUndo() = 0;
54  virtual void doRedo() = 0;
55 private:
60 
65 };
66 
67 class MoveClipAction : public OliveAction {
68 public:
69  MoveClipAction(Clip* c, long iin, long iout, long iclip_in, int itrack, bool irelative);
70  virtual void doUndo() override;
71  virtual void doRedo() override;
72 private:
73  Clip* clip;
74 
75  long old_in;
76  long old_out;
77  long old_clip_in;
78  int old_track;
79 
80  long new_in;
81  long new_out;
82  long new_clip_in;
83  int new_track;
84 
85  bool relative;
86 };
87 
88 class RippleAction : public OliveAction {
89 public:
90  RippleAction(Sequence *is, long ipoint, long ilength, const QVector<int>& iignore);
91  virtual void doUndo() override;
92  virtual void doRedo() override;
93 private:
94  Sequence *s;
95  long point;
96  long length;
97  QVector<int> ignore;
98  ComboAction* ca;
99 };
100 
102 public:
103  DeleteClipAction(Sequence* s, int clip);
104  virtual ~DeleteClipAction() override;
105  virtual void doUndo() override;
106  virtual void doRedo() override;
107 private:
108  Sequence* seq;
109  Clip* ref;
110  int index;
111 
112  int opening_transition;
113  int closing_transition;
114 
115  QVector<int> linkClipIndex;
116  QVector<int> linkLinkIndex;
117 };
118 
120 public:
122  virtual void doUndo() override;
123  virtual void doRedo() override;
124 private:
125  Sequence* old_sequence;
126  Sequence* new_sequence;
127 };
128 
130 public:
131  AddEffectCommand(Clip* c, Effect *e, const EffectMeta* m, int insert_pos = -1);
132  virtual ~AddEffectCommand() override;
133  virtual void doUndo() override;
134  virtual void doRedo() override;
135 private:
136  Clip* clip;
137  const EffectMeta* meta;
138  Effect* ref;
139  int pos;
140  bool done;
141 };
142 
144 public:
145  AddTransitionCommand(Clip* c, Clip* s, Transition *copy, const EffectMeta* itransition, int itype, int ilength);
146  virtual void doUndo() override;
147  virtual void doRedo() override;
148 private:
149  Clip* clip;
150  Clip* secondary;
151  Transition* transition_to_copy;
152  const EffectMeta* transition;
153  int type;
154  int length;
155  int old_ptransition;
156  int old_stransition;
157 };
158 
160 public:
161  ModifyTransitionCommand(Clip* c, int itype, long ilength);
162  virtual void doUndo() override;
163  virtual void doRedo() override;
164 private:
165  Clip* clip;
166  int type;
167  long new_length;
168  long old_length;
169 };
170 
172 public:
173  DeleteTransitionCommand(Sequence* s, int transition_index);
174  virtual ~DeleteTransitionCommand() override;
175  virtual void doUndo() override;
176  virtual void doRedo() override;
177 private:
178  Sequence* seq;
179  int index;
180  Transition* transition;
181  Clip* otc;
182  Clip* ctc;
183 };
184 
186 public:
187  SetTimelineInOutCommand(Sequence* s, bool enabled, long in, long out);
188  virtual void doUndo() override;
189  virtual void doRedo() override;
190 private:
191  Sequence* seq;
192 
193  bool old_enabled;
194  long old_in;
195  long old_out;
196 
197  bool new_enabled;
198  long new_in;
199  long new_out;
200 };
201 
203 public:
204  NewSequenceCommand(Media *s, Media* iparent);
205  virtual ~NewSequenceCommand() override;
206  virtual void doUndo() override;
207  virtual void doRedo() override;
208 private:
209  Media* seq;
210  Media* parent;
211  bool done;
212 };
213 
214 class AddMediaCommand : public OliveAction {
215 public:
216  AddMediaCommand(Media* iitem, Media* iparent);
217  virtual ~AddMediaCommand() override;
218  virtual void doUndo() override;
219  virtual void doRedo() override;
220 private:
221  Media* item;
222  Media* parent;
223  bool done;
224 };
225 
227 public:
229  virtual ~DeleteMediaCommand() override;
230  virtual void doUndo() override;
231  virtual void doRedo() override;
232 private:
233  Media* item;
234  Media* parent;
235  bool done;
236 };
237 
238 class AddClipCommand : public OliveAction {
239 public:
240  AddClipCommand(Sequence* s, QVector<Clip*>& add);
241  virtual ~AddClipCommand() override;
242  virtual void doUndo() override;
243  virtual void doRedo() override;
244 private:
245  Sequence* seq;
246  QVector<Clip*> clips;
247  QVector<Clip*> undone_clips;
248 };
249 
250 class LinkCommand : public OliveAction {
251 public:
252  LinkCommand();
253  virtual void doUndo() override;
254  virtual void doRedo() override;
255  Sequence* s;
256  QVector<int> clips;
257  bool link;
258 private:
259  QVector< QVector<int> > old_links;
260 };
261 
262 class CheckboxCommand : public OliveAction {
263 public:
264  CheckboxCommand(QCheckBox* b);
265  virtual ~CheckboxCommand() override;
266  virtual void doUndo() override;
267  virtual void doRedo() override;
268 private:
269  QCheckBox* box;
270  bool checked;
271  bool done;
272 };
273 
275 public:
276  ReplaceMediaCommand(Media*, QString);
277  virtual void doUndo() override;
278  virtual void doRedo() override;
279 private:
280  Media *item;
281  QString old_filename;
282  QString new_filename;
283  void replace(QString& filename);
284 };
285 
287 public:
288  ReplaceClipMediaCommand(Media *, Media *, bool);
289  virtual void doUndo() override;
290  virtual void doRedo() override;
291  QVector<Clip*> clips;
292 private:
293  Media* old_media;
294  Media* new_media;
295  bool preserve_clip_ins;
296  QVector<int> old_clip_ins;
297  void replace(bool undo);
298 };
299 
301 public:
303  virtual ~EffectDeleteCommand() override;
304  virtual void doUndo() override;
305  virtual void doRedo() override;
306  QVector<Clip*> clips;
307  QVector<int> fx;
308 private:
309  bool done;
310  QVector<Effect*> deleted_objects;
311 };
312 
313 class MediaMove : public OliveAction {
314 public:
315  MediaMove();
316  QVector<Media*> items;
317  Media* to;
318  virtual void doUndo() override;
319  virtual void doRedo() override;
320 private:
321  QVector<Media*> froms;
322 };
323 
324 class MediaRename : public OliveAction {
325 public:
326  MediaRename(Media* iitem, QString to);
327  virtual void doUndo() override;
328  virtual void doRedo() override;
329 private:
330  Media* item;
331  QString from;
332  QString to;
333 };
334 
335 class KeyframeDelete : public OliveAction {
336 public:
337  KeyframeDelete(EffectField* ifield, int iindex);
338  virtual void doUndo() override;
339  virtual void doRedo() override;
340 private:
341  EffectField* field;
342  int index;
343  bool done;
344  EffectKeyframe deleted_key;
345 };
346 
347 // a more modern version of the above, could probably replace it
348 // assumes the keyframe already exists
350 public:
351  KeyframeFieldSet(EffectField* ifield, int ii);
352  virtual void doUndo() override;
353  virtual void doRedo() override;
354 private:
355  EffectField* field;
356  int index;
357  EffectKeyframe key;
358  bool done;
359 };
360 
361 class EffectFieldUndo : public OliveAction {
362 public:
364  virtual void doUndo() override;
365  virtual void doRedo() override;
366 private:
367  EffectField* field;
368  QVariant old_val;
369  QVariant new_val;
370  bool done;
371 };
372 
374 public:
376  virtual void doUndo() override;
377  virtual void doRedo() override;
378  QVector<Clip*> clips;
379 };
380 
381 class AddMarkerAction : public OliveAction {
382 public:
383  AddMarkerAction(QVector<Marker>* m, long t, QString n);
384  virtual void doUndo() override;
385  virtual void doRedo() override;
386 private:
387  QVector<Marker>* active_array;
388  long time;
389  QString name;
390  QString old_name;
391  int index;
392 };
393 
395 public:
396  MoveMarkerAction(Marker* m, long o, long n);
397  virtual void doUndo() override;
398  virtual void doRedo() override;
399 private:
400  Marker* marker;
401  long old_time;
402  long new_time;
403 };
404 
406 public:
407  DeleteMarkerAction(QVector<Marker>* m);
408  virtual void doUndo() override;
409  virtual void doRedo() override;
410  QVector<int> markers;
411 private:
412  QVector<Marker>* active_array;
413  QVector<Marker> copies;
414  bool sorted;
415 };
416 
417 class SetSpeedAction : public OliveAction {
418 public:
419  SetSpeedAction(Clip* c, double speed);
420  virtual void doUndo() override;
421  virtual void doRedo() override;
422 private:
423  Clip* clip;
424  double old_speed;
425  double new_speed;
426 };
427 
428 class SetBool : public OliveAction {
429 public:
430  SetBool(bool* b, bool setting);
431  virtual void doUndo() override;
432  virtual void doRedo() override;
433 private:
434  bool* boolean;
435  bool old_setting;
436  bool new_setting;
437 };
438 
440 public:
442  virtual void doUndo() override;
443  virtual void doRedo() override;
444  QVector<Selection> old_data;
445  QVector<Selection> new_data;
446 private:
447  Sequence* seq;
448  bool done;
449 };
450 
452 public:
454  virtual void doUndo() override;
455  virtual void doRedo() override;
456  void update();
457 
458  QString name;
459  int width;
460  int height;
461  double frame_rate;
462  int audio_frequency;
463  int audio_layout;
464 private:
465  Media* item;
466  Sequence* seq;
467 
468  QString old_name;
469  int old_width;
470  int old_height;
471  double old_frame_rate;
472  int old_audio_frequency;
473  int old_audio_layout;
474 };
475 
476 class SetInt : public OliveAction {
477 public:
478  SetInt(int* pointer, int new_value);
479  virtual void doUndo() override;
480  virtual void doRedo() override;
481 private:
482  int* p;
483  int oldval;
484  int newval;
485 };
486 
487 class SetLong : public OliveAction {
488 public:
489  SetLong(long* pointer, long old_value, long new_value);
490  virtual void doUndo() override;
491  virtual void doRedo() override;
492 private:
493  long* p;
494  long oldval;
495  long newval;
496 };
497 
498 class SetDouble : public OliveAction {
499 public:
500  SetDouble(double* pointer, double old_value, double new_value);
501  virtual void doUndo() override;
502  virtual void doRedo() override;
503 private:
504  double* p;
505  double oldval;
506  double newval;
507 };
508 
509 class SetString : public OliveAction {
510 public:
511  SetString(QString* pointer, QString new_value);
512  virtual void doUndo() override;
513  virtual void doRedo() override;
514 private:
515  QString* p;
516  QString oldval;
517  QString newval;
518 };
519 
521 public:
522  virtual void doUndo() override;
523  virtual void doRedo() override;
524 };
525 
527 public:
529  virtual void doUndo() override;
530  virtual void doRedo() override;
531 private:
532  Media* item;
533 };
534 
536 public:
538  virtual void doUndo() override;
539  virtual void doRedo() override;
540  Clip* clip;
541  int from;
542  int to;
543 };
544 
546 public:
547  RemoveClipsFromClipboard(int index);
548  virtual ~RemoveClipsFromClipboard() override;
549  virtual void doUndo() override;
550  virtual void doRedo() override;
551 private:
552  int pos;
553  Clip* clip;
554  bool done;
555 };
556 
558 public:
560  QVector<Clip*> clips;
561  QString new_name;
562  virtual void doUndo() override;
563  virtual void doRedo() override;
564 private:
565  QVector<QString> old_names;
566 };
567 
568 class SetPointer : public OliveAction {
569 public:
570  SetPointer(void** pointer, void* data);
571  virtual void doUndo() override;
572  virtual void doRedo() override;
573 private:
574  bool old_changed;
575  void** p;
576  void* new_data;
577  void* old_data;
578 };
579 
581 public:
582  virtual void doUndo() override;
583  virtual void doRedo() override;
584 };
585 
586 class SetQVariant : public OliveAction {
587 public:
588  SetQVariant(QVariant* itarget, const QVariant& iold, const QVariant& inew);
589  virtual void doUndo() override;
590  virtual void doRedo() override;
591 private:
592  QVariant* target;
593  QVariant old_val;
594  QVariant new_val;
595 };
596 
597 class SetKeyframing : public OliveAction {
598 public:
599  SetKeyframing(EffectRow* irow, bool ib);
600  virtual void doUndo() override;
601  virtual void doRedo() override;
602 private:
603  EffectRow* row;
604  bool b;
605 };
606 
607 class RefreshClips : public OliveAction {
608 public:
609  RefreshClips(Media* m);
610  virtual void doUndo() override;
611  virtual void doRedo() override;
612 private:
613  Media* media;
614 };
615 
616 class UpdateViewer : public OliveAction {
617 public:
618  virtual void doUndo() override;
619  virtual void doRedo() override;
620 };
621 
622 class SetEffectData : public OliveAction {
623 public:
624  SetEffectData(Effect* e, const QByteArray &s);
625  virtual void doUndo() override;
626  virtual void doRedo() override;
627 private:
628  Effect* effect;
629  QByteArray data;
630  QByteArray old_data;
631 };
632 
633 #endif // UNDO_H
Definition: undo.h:535
Definition: undo.h:313
Definition: undo.h:498
Definition: sequence.h:13
Definition: undo.h:274
Definition: undo.h:214
Definition: undo.h:509
Definition: undo.h:586
Definition: undo.h:171
bool set_window_modified
Setting whether to change the windowModified state of MainWindow.
Definition: undo.h:59
Definition: marker.h:11
Definition: undo.h:405
Definition: undo.h:67
Definition: undo.h:417
Definition: undo.h:545
Definition: undo.h:324
Definition: undo.h:143
Definition: sourcetable.h:11
Definition: undo.h:129
Definition: undo.h:45
Definition: undo.h:616
Definition: undo.h:394
Definition: undo.h:32
Definition: undo.h:607
Definition: effect.h:146
Definition: undo.h:159
Definition: effect.h:27
Definition: undo.h:381
Definition: undo.h:262
Definition: undo.h:101
Definition: effectrow.h:17
Definition: undo.h:88
Definition: undo.h:286
Definition: media.h:20
bool old_window_modified
Cache previous window modified value to return to if the user undoes this action.
Definition: undo.h:64
Definition: undo.h:361
Definition: undo.h:428
Definition: undo.h:119
Definition: undo.h:439
Definition: undo.h:300
Definition: undo.h:580
Definition: undo.h:185
Definition: undo.h:597
Definition: effectgizmo.h:21
Definition: keyframe.h:8
Definition: undo.h:335
Definition: undo.h:451
Definition: undo.h:622
Definition: undo.h:202
Definition: undo.h:568
The LabelSlider class.
Definition: labelslider.h:20
Definition: undo.h:520
Definition: undo.h:487
Definition: clip.h:33
Definition: undo.h:557
Definition: effectfield.h:23
Definition: undo.h:226
Definition: undo.h:238
Definition: undo.h:373
Definition: transition.h:19
Definition: undo.h:476
Definition: undo.h:349
Definition: footage.h:46
Definition: undo.h:526