fixed ripple breaking dual transitions
This commit is contained in:
@@ -84,12 +84,12 @@ void SpeedDialog::run() {
|
||||
clip_percent = c->speed;
|
||||
if (c->track < 0) {
|
||||
bool process_video = true;
|
||||
if (c->media != NULL && c->media->get_type() == MEDIA_TYPE_FOOTAGE) {
|
||||
Footage* m = c->media->to_footage();
|
||||
FootageStream* ms = m->get_stream_from_file_index(true, c->media_stream);
|
||||
if (ms != NULL && ms->infinite_length) {
|
||||
process_video = false;
|
||||
}
|
||||
if (c->media != NULL && c->media->get_type() == MEDIA_TYPE_FOOTAGE) {
|
||||
Footage* m = c->media->to_footage();
|
||||
FootageStream* ms = m->get_stream_from_file_index(true, c->media_stream);
|
||||
if (ms != NULL && ms->infinite_length) {
|
||||
process_video = false;
|
||||
}
|
||||
}
|
||||
|
||||
if (process_video) {
|
||||
@@ -313,7 +313,7 @@ void set_speed(ComboAction* ca, Clip* c, double speed, bool ripple, long& ep, lo
|
||||
}
|
||||
ep = qMin(ep, c->timeline_out);
|
||||
lr = qMax(lr, proposed_out - c->timeline_out);
|
||||
move_clip(ca, c, c->timeline_in, proposed_out, c->clip_in * multiplier, c->track);
|
||||
move_clip(ca, c, c->timeline_in, proposed_out, c->clip_in * multiplier, c->track);
|
||||
|
||||
c->refactor_frame_rate(ca, multiplier, false);
|
||||
|
||||
@@ -345,7 +345,7 @@ void SpeedDialog::accept() {
|
||||
|
||||
if (reverse->checkState() != Qt::PartiallyChecked && c->reverse != reverse->isChecked()) {
|
||||
long new_clip_in = (c->getMaximumLength() - (c->getLength() + c->clip_in));
|
||||
move_clip(ca, c, c->timeline_in, c->timeline_out, new_clip_in, c->track);
|
||||
move_clip(ca, c, c->timeline_in, c->timeline_out, new_clip_in, c->track);
|
||||
c->clip_in = new_clip_in;
|
||||
ca->append(new SetBool(&c->reverse, reverse->isChecked()));
|
||||
}
|
||||
@@ -398,7 +398,7 @@ void SpeedDialog::accept() {
|
||||
}
|
||||
|
||||
if (ripple->isChecked()) {
|
||||
ca->append(new RippleCommand(clips.at(0)->sequence, earliest_point, longest_ripple));
|
||||
ripple_clips(ca, clips.at(0)->sequence, earliest_point, longest_ripple);
|
||||
}
|
||||
|
||||
sel_command->new_data = sequence->selections;
|
||||
|
||||
+18
-5
@@ -144,6 +144,19 @@ void Timeline::next_cut() {
|
||||
if (seek_enabled) panel_sequence_viewer->seek(n_cut);
|
||||
}
|
||||
|
||||
void ripple_clips(ComboAction* ca, Sequence *s, long point, long length, const QVector<int>& ignore) {
|
||||
for (int i=0;i<s->clips.size();i++) {
|
||||
if (!ignore.contains(i)) {
|
||||
Clip* c = s->clips.at(i);
|
||||
if (c != NULL) {
|
||||
if (c->timeline_in >= point) {
|
||||
move_clip(ca, c, c->timeline_in + length, c->timeline_out + length, c->clip_in, c->track, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Timeline::toggle_show_all() {
|
||||
showing_all = !showing_all;
|
||||
if (showing_all) {
|
||||
@@ -487,7 +500,7 @@ void Timeline::delete_in_out(bool ripple) {
|
||||
}
|
||||
ComboAction* ca = new ComboAction();
|
||||
delete_areas_and_relink(ca, areas);
|
||||
if (ripple) ca->append(new RippleCommand(sequence, sequence->workarea_in, sequence->workarea_in - sequence->workarea_out));
|
||||
if (ripple) ripple_clips(ca, sequence, sequence->workarea_in, sequence->workarea_in - sequence->workarea_out);
|
||||
ca->append(new SetTimelineInOutCommand(sequence, false, 0, 0));
|
||||
undo_stack.push(ca);
|
||||
update_ui(true);
|
||||
@@ -546,7 +559,7 @@ void Timeline::delete_selection(QVector<Selection>& selections, bool ripple_dele
|
||||
}
|
||||
|
||||
if (can_ripple) {
|
||||
ca->append(new RippleCommand(sequence, ripple_point, -ripple_length));
|
||||
ripple_clips(ca, sequence, ripple_point, -ripple_length);
|
||||
panel_sequence_viewer->seek(ripple_point-1);
|
||||
}
|
||||
}
|
||||
@@ -930,7 +943,7 @@ void Timeline::paste(bool insert) {
|
||||
if (insert) {
|
||||
split_cache.clear();
|
||||
split_all_clips_at_point(ca, sequence->playhead);
|
||||
ca->append(new RippleCommand(sequence, paste_start, paste_end - paste_start));
|
||||
ripple_clips(ca, sequence, paste_start, paste_end - paste_start);
|
||||
} else {
|
||||
delete_areas_and_relink(ca, delete_areas);
|
||||
}
|
||||
@@ -1095,7 +1108,7 @@ void Timeline::ripple_to_in_point(bool in, bool ripple) {
|
||||
|
||||
// trim and move clips around the in point
|
||||
delete_areas_and_relink(ca, areas);
|
||||
if (ripple) ca->append(new RippleCommand(sequence, in_point+1, -1));
|
||||
if (ripple) ripple_clips(ca, sequence, in_point+1, -1);
|
||||
} else {
|
||||
push_undo = false;
|
||||
}
|
||||
@@ -1114,7 +1127,7 @@ void Timeline::ripple_to_in_point(bool in, bool ripple) {
|
||||
|
||||
// trim and move clips around the in point
|
||||
delete_areas_and_relink(ca, areas);
|
||||
if (ripple) ca->append(new RippleCommand(sequence, in_point, (in) ? (in_point - sequence->playhead) : (sequence->playhead - in_point)));
|
||||
if (ripple) ripple_clips(ca, sequence, in_point, (in) ? (in_point - sequence->playhead) : (sequence->playhead - in_point));
|
||||
}
|
||||
|
||||
if (push_undo) {
|
||||
|
||||
@@ -41,6 +41,7 @@ long getFrameFromScreenPoint(double zoom, int x);
|
||||
void draw_selection_rectangle(QPainter& painter, const QRect& rect);
|
||||
bool selection_contains_transition(const Selection& s, Clip* c, int type);
|
||||
void move_clip(ComboAction *ca, Clip *c, long iin, long iout, long iclip_in, int itrack, bool verify_transitions = true);
|
||||
void ripple_clips(ComboAction *ca, Sequence* s, long point, long length, const QVector<int>& ignore = QVector<int>());
|
||||
|
||||
struct Ghost {
|
||||
int clip;
|
||||
|
||||
+281
-320
File diff suppressed because it is too large
Load Diff
+163
-177
@@ -28,48 +28,48 @@ extern QUndoStack undo_stack;
|
||||
|
||||
class ComboAction : public QUndoCommand {
|
||||
public:
|
||||
ComboAction();
|
||||
~ComboAction();
|
||||
void undo();
|
||||
void redo();
|
||||
void append(QUndoCommand* u);
|
||||
ComboAction();
|
||||
~ComboAction();
|
||||
void undo();
|
||||
void redo();
|
||||
void append(QUndoCommand* u);
|
||||
void appendPost(QUndoCommand* u);
|
||||
private:
|
||||
QVector<QUndoCommand*> commands;
|
||||
QVector<QUndoCommand*> commands;
|
||||
QVector<QUndoCommand*> post_commands;
|
||||
};
|
||||
|
||||
class MoveClipAction : public QUndoCommand {
|
||||
public:
|
||||
MoveClipAction(Clip* c, long iin, long iout, long iclip_in, int itrack);
|
||||
void undo();
|
||||
void redo();
|
||||
MoveClipAction(Clip* c, long iin, long iout, long iclip_in, int itrack);
|
||||
void undo();
|
||||
void redo();
|
||||
private:
|
||||
Clip* clip;
|
||||
Clip* clip;
|
||||
|
||||
long old_in;
|
||||
long old_out;
|
||||
long old_clip_in;
|
||||
int old_track;
|
||||
long old_in;
|
||||
long old_out;
|
||||
long old_clip_in;
|
||||
int old_track;
|
||||
|
||||
long new_in;
|
||||
long new_out;
|
||||
long new_clip_in;
|
||||
int new_track;
|
||||
long new_in;
|
||||
long new_out;
|
||||
long new_clip_in;
|
||||
int new_track;
|
||||
|
||||
bool old_project_changed;
|
||||
};
|
||||
|
||||
class DeleteClipAction : public QUndoCommand {
|
||||
public:
|
||||
DeleteClipAction(Sequence* s, int clip);
|
||||
~DeleteClipAction();
|
||||
void undo();
|
||||
void redo();
|
||||
DeleteClipAction(Sequence* s, int clip);
|
||||
~DeleteClipAction();
|
||||
void undo();
|
||||
void redo();
|
||||
private:
|
||||
Sequence* seq;
|
||||
Clip* ref;
|
||||
int index;
|
||||
Sequence* seq;
|
||||
Clip* ref;
|
||||
int index;
|
||||
|
||||
QVector<int> linkClipIndex;
|
||||
QVector<int> linkLinkIndex;
|
||||
@@ -79,207 +79,193 @@ private:
|
||||
|
||||
class ChangeSequenceAction : public QUndoCommand {
|
||||
public:
|
||||
ChangeSequenceAction(Sequence* s);
|
||||
void undo();
|
||||
void redo();
|
||||
ChangeSequenceAction(Sequence* s);
|
||||
void undo();
|
||||
void redo();
|
||||
private:
|
||||
Sequence* old_sequence;
|
||||
Sequence* new_sequence;
|
||||
Sequence* old_sequence;
|
||||
Sequence* new_sequence;
|
||||
};
|
||||
|
||||
class AddEffectCommand : public QUndoCommand {
|
||||
public:
|
||||
AddEffectCommand(Clip* c, Effect *e, const EffectMeta* m, int insert_pos = -1);
|
||||
~AddEffectCommand();
|
||||
void undo();
|
||||
void redo();
|
||||
AddEffectCommand(Clip* c, Effect *e, const EffectMeta* m, int insert_pos = -1);
|
||||
~AddEffectCommand();
|
||||
void undo();
|
||||
void redo();
|
||||
private:
|
||||
Clip* clip;
|
||||
Clip* clip;
|
||||
const EffectMeta* meta;
|
||||
Effect* ref;
|
||||
int pos;
|
||||
bool done;
|
||||
Effect* ref;
|
||||
int pos;
|
||||
bool done;
|
||||
bool old_project_changed;
|
||||
};
|
||||
|
||||
class AddTransitionCommand : public QUndoCommand {
|
||||
public:
|
||||
AddTransitionCommand(Clip* c, Clip* s, Transition *copy, const EffectMeta* itransition, int itype, int ilength);
|
||||
void undo();
|
||||
void redo();
|
||||
AddTransitionCommand(Clip* c, Clip* s, Transition *copy, const EffectMeta* itransition, int itype, int ilength);
|
||||
void undo();
|
||||
void redo();
|
||||
private:
|
||||
Clip* clip;
|
||||
Clip* secondary;
|
||||
Transition* transition_to_copy;
|
||||
Clip* clip;
|
||||
Clip* secondary;
|
||||
Transition* transition_to_copy;
|
||||
const EffectMeta* transition;
|
||||
int type;
|
||||
int length;
|
||||
int type;
|
||||
int length;
|
||||
bool old_project_changed;
|
||||
int old_ptransition;
|
||||
int old_stransition;
|
||||
int old_ptransition;
|
||||
int old_stransition;
|
||||
};
|
||||
|
||||
class ModifyTransitionCommand : public QUndoCommand {
|
||||
public:
|
||||
ModifyTransitionCommand(Clip* c, int itype, long ilength);
|
||||
void undo();
|
||||
void redo();
|
||||
ModifyTransitionCommand(Clip* c, int itype, long ilength);
|
||||
void undo();
|
||||
void redo();
|
||||
private:
|
||||
Clip* clip;
|
||||
int type;
|
||||
long new_length;
|
||||
long old_length;
|
||||
Clip* clip;
|
||||
int type;
|
||||
long new_length;
|
||||
long old_length;
|
||||
bool old_project_changed;
|
||||
};
|
||||
|
||||
class DeleteTransitionCommand : public QUndoCommand {
|
||||
public:
|
||||
DeleteTransitionCommand(Sequence* s, int transition_index);
|
||||
~DeleteTransitionCommand();
|
||||
void undo();
|
||||
void redo();
|
||||
DeleteTransitionCommand(Sequence* s, int transition_index);
|
||||
~DeleteTransitionCommand();
|
||||
void undo();
|
||||
void redo();
|
||||
private:
|
||||
Sequence* seq;
|
||||
int index;
|
||||
Transition* transition;
|
||||
Clip* otc;
|
||||
Clip* ctc;
|
||||
Sequence* seq;
|
||||
int index;
|
||||
Transition* transition;
|
||||
Clip* otc;
|
||||
Clip* ctc;
|
||||
bool old_project_changed;
|
||||
};
|
||||
|
||||
class SetTimelineInOutCommand : public QUndoCommand {
|
||||
public:
|
||||
SetTimelineInOutCommand(Sequence* s, bool enabled, long in, long out);
|
||||
void undo();
|
||||
void redo();
|
||||
SetTimelineInOutCommand(Sequence* s, bool enabled, long in, long out);
|
||||
void undo();
|
||||
void redo();
|
||||
private:
|
||||
Sequence* seq;
|
||||
Sequence* seq;
|
||||
|
||||
bool old_enabled;
|
||||
long old_in;
|
||||
long old_out;
|
||||
bool old_enabled;
|
||||
long old_in;
|
||||
long old_out;
|
||||
|
||||
bool new_enabled;
|
||||
long new_in;
|
||||
long new_out;
|
||||
bool new_enabled;
|
||||
long new_in;
|
||||
long new_out;
|
||||
|
||||
bool old_project_changed;
|
||||
};
|
||||
|
||||
class NewSequenceCommand : public QUndoCommand {
|
||||
public:
|
||||
NewSequenceCommand(Media *s, Media* iparent);
|
||||
~NewSequenceCommand();
|
||||
void undo();
|
||||
void redo();
|
||||
NewSequenceCommand(Media *s, Media* iparent);
|
||||
~NewSequenceCommand();
|
||||
void undo();
|
||||
void redo();
|
||||
private:
|
||||
Media* seq;
|
||||
Media* parent;
|
||||
bool done;
|
||||
Media* seq;
|
||||
Media* parent;
|
||||
bool done;
|
||||
bool old_project_changed;
|
||||
};
|
||||
|
||||
class AddMediaCommand : public QUndoCommand {
|
||||
public:
|
||||
AddMediaCommand(Media* iitem, Media* iparent);
|
||||
~AddMediaCommand();
|
||||
void undo();
|
||||
void redo();
|
||||
AddMediaCommand(Media* iitem, Media* iparent);
|
||||
~AddMediaCommand();
|
||||
void undo();
|
||||
void redo();
|
||||
private:
|
||||
Media* item;
|
||||
Media* parent;
|
||||
bool done;
|
||||
Media* item;
|
||||
Media* parent;
|
||||
bool done;
|
||||
bool old_project_changed;
|
||||
};
|
||||
|
||||
class DeleteMediaCommand : public QUndoCommand {
|
||||
public:
|
||||
DeleteMediaCommand(Media *i);
|
||||
~DeleteMediaCommand();
|
||||
void undo();
|
||||
void redo();
|
||||
DeleteMediaCommand(Media *i);
|
||||
~DeleteMediaCommand();
|
||||
void undo();
|
||||
void redo();
|
||||
private:
|
||||
Media* item;
|
||||
Media* parent;
|
||||
Media* item;
|
||||
Media* parent;
|
||||
bool old_project_changed;
|
||||
bool done;
|
||||
};
|
||||
|
||||
class RippleCommand : public QUndoCommand {
|
||||
public:
|
||||
RippleCommand(Sequence* s, long ipoint, long ilength);
|
||||
QVector<Clip*> ignore;
|
||||
void undo();
|
||||
void redo();
|
||||
private:
|
||||
Sequence* seq;
|
||||
long point;
|
||||
long length;
|
||||
QVector<Clip*> rippled;
|
||||
bool old_project_changed;
|
||||
};
|
||||
|
||||
class AddClipCommand : public QUndoCommand {
|
||||
public:
|
||||
AddClipCommand(Sequence* s, QVector<Clip*>& add);
|
||||
~AddClipCommand();
|
||||
void undo();
|
||||
void redo();
|
||||
AddClipCommand(Sequence* s, QVector<Clip*>& add);
|
||||
~AddClipCommand();
|
||||
void undo();
|
||||
void redo();
|
||||
private:
|
||||
Sequence* seq;
|
||||
QVector<Clip*> clips;
|
||||
Sequence* seq;
|
||||
QVector<Clip*> clips;
|
||||
QVector<Clip*> undone_clips;
|
||||
bool old_project_changed;
|
||||
};
|
||||
|
||||
class LinkCommand : public QUndoCommand {
|
||||
public:
|
||||
LinkCommand();
|
||||
void undo();
|
||||
LinkCommand();
|
||||
void undo();
|
||||
void redo();
|
||||
Sequence* s;
|
||||
QVector<int> clips;
|
||||
bool link;
|
||||
bool link;
|
||||
private:
|
||||
QVector< QVector<int> > old_links;
|
||||
QVector< QVector<int> > old_links;
|
||||
bool old_project_changed;
|
||||
};
|
||||
|
||||
class CheckboxCommand : public QUndoCommand {
|
||||
public:
|
||||
CheckboxCommand(QCheckBox* b);
|
||||
~CheckboxCommand();
|
||||
void undo();
|
||||
void redo();
|
||||
CheckboxCommand(QCheckBox* b);
|
||||
~CheckboxCommand();
|
||||
void undo();
|
||||
void redo();
|
||||
private:
|
||||
QCheckBox* box;
|
||||
bool checked;
|
||||
bool done;
|
||||
QCheckBox* box;
|
||||
bool checked;
|
||||
bool done;
|
||||
bool old_project_changed;
|
||||
};
|
||||
|
||||
class ReplaceMediaCommand : public QUndoCommand {
|
||||
public:
|
||||
ReplaceMediaCommand(Media*, QString);
|
||||
ReplaceMediaCommand(Media*, QString);
|
||||
void undo();
|
||||
void redo();
|
||||
private:
|
||||
Media *item;
|
||||
Media *item;
|
||||
QString old_filename;
|
||||
QString new_filename;
|
||||
bool old_project_changed;
|
||||
bool old_project_changed;
|
||||
void replace(QString& filename);
|
||||
};
|
||||
|
||||
class ReplaceClipMediaCommand : public QUndoCommand {
|
||||
public:
|
||||
ReplaceClipMediaCommand(Media *, Media *, bool);
|
||||
ReplaceClipMediaCommand(Media *, Media *, bool);
|
||||
void undo();
|
||||
void redo();
|
||||
QVector<Clip*> clips;
|
||||
private:
|
||||
Media* old_media;
|
||||
Media* new_media;
|
||||
Media* old_media;
|
||||
Media* new_media;
|
||||
bool preserve_clip_ins;
|
||||
bool old_project_changed;
|
||||
QVector<int> old_clip_ins;
|
||||
@@ -302,26 +288,26 @@ private:
|
||||
|
||||
class MediaMove : public QUndoCommand {
|
||||
public:
|
||||
MediaMove();
|
||||
QVector<Media*> items;
|
||||
Media* to;
|
||||
MediaMove();
|
||||
QVector<Media*> items;
|
||||
Media* to;
|
||||
void undo();
|
||||
void redo();
|
||||
private:
|
||||
QVector<Media*> froms;
|
||||
QVector<Media*> froms;
|
||||
bool old_project_changed;
|
||||
};
|
||||
|
||||
class MediaRename : public QUndoCommand {
|
||||
public:
|
||||
MediaRename(Media* iitem, QString to);
|
||||
void undo();
|
||||
void redo();
|
||||
MediaRename(Media* iitem, QString to);
|
||||
void undo();
|
||||
void redo();
|
||||
private:
|
||||
bool old_project_changed;
|
||||
Media* item;
|
||||
QString from;
|
||||
QString to;
|
||||
bool old_project_changed;
|
||||
Media* item;
|
||||
QString from;
|
||||
QString to;
|
||||
};
|
||||
|
||||
class KeyframeMove : public QUndoCommand {
|
||||
@@ -386,9 +372,9 @@ private:
|
||||
class SetAutoscaleAction : public QUndoCommand {
|
||||
public:
|
||||
SetAutoscaleAction();
|
||||
void undo();
|
||||
void redo();
|
||||
QVector<Clip*> clips;
|
||||
void undo();
|
||||
void redo();
|
||||
QVector<Clip*> clips;
|
||||
private:
|
||||
bool old_project_changed;
|
||||
};
|
||||
@@ -458,14 +444,14 @@ private:
|
||||
|
||||
class SetSelectionsCommand : public QUndoCommand {
|
||||
public:
|
||||
SetSelectionsCommand(Sequence *s);
|
||||
void undo();
|
||||
void redo();
|
||||
QVector<Selection> old_data;
|
||||
QVector<Selection> new_data;
|
||||
SetSelectionsCommand(Sequence *s);
|
||||
void undo();
|
||||
void redo();
|
||||
QVector<Selection> old_data;
|
||||
QVector<Selection> new_data;
|
||||
private:
|
||||
Sequence* seq;
|
||||
bool done;
|
||||
Sequence* seq;
|
||||
bool done;
|
||||
bool old_project_changed;
|
||||
};
|
||||
|
||||
@@ -483,7 +469,7 @@ private:
|
||||
|
||||
class EditSequenceCommand : public QUndoCommand {
|
||||
public:
|
||||
EditSequenceCommand(Media *i, Sequence* s);
|
||||
EditSequenceCommand(Media *i, Sequence* s);
|
||||
void undo();
|
||||
void redo();
|
||||
void update();
|
||||
@@ -495,7 +481,7 @@ public:
|
||||
int audio_frequency;
|
||||
int audio_layout;
|
||||
private:
|
||||
Media* item;
|
||||
Media* item;
|
||||
Sequence* seq;
|
||||
bool old_project_changed;
|
||||
|
||||
@@ -509,25 +495,25 @@ private:
|
||||
|
||||
class SetInt : public QUndoCommand {
|
||||
public:
|
||||
SetInt(int* pointer, int new_value);
|
||||
void undo();
|
||||
void redo();
|
||||
SetInt(int* pointer, int new_value);
|
||||
void undo();
|
||||
void redo();
|
||||
private:
|
||||
int* p;
|
||||
int oldval;
|
||||
int newval;
|
||||
int* p;
|
||||
int oldval;
|
||||
int newval;
|
||||
bool old_project_changed;
|
||||
};
|
||||
|
||||
class SetString : public QUndoCommand {
|
||||
public:
|
||||
SetString(QString* pointer, QString new_value);
|
||||
void undo();
|
||||
void redo();
|
||||
SetString(QString* pointer, QString new_value);
|
||||
void undo();
|
||||
void redo();
|
||||
private:
|
||||
QString* p;
|
||||
QString oldval;
|
||||
QString newval;
|
||||
QString* p;
|
||||
QString oldval;
|
||||
QString newval;
|
||||
bool old_project_changed;
|
||||
};
|
||||
|
||||
@@ -539,11 +525,11 @@ public:
|
||||
|
||||
class UpdateFootageTooltip : public QUndoCommand {
|
||||
public:
|
||||
UpdateFootageTooltip(Media* i);
|
||||
UpdateFootageTooltip(Media* i);
|
||||
void undo();
|
||||
void redo();
|
||||
private:
|
||||
Media* item;
|
||||
Media* item;
|
||||
};
|
||||
|
||||
class MoveEffectCommand : public QUndoCommand {
|
||||
@@ -585,20 +571,20 @@ private:
|
||||
|
||||
class SetPointer : public QUndoCommand {
|
||||
public:
|
||||
SetPointer(void** pointer, void* data);
|
||||
void undo();
|
||||
void redo();
|
||||
SetPointer(void** pointer, void* data);
|
||||
void undo();
|
||||
void redo();
|
||||
private:
|
||||
bool old_changed;
|
||||
void** p;
|
||||
void* new_data;
|
||||
void* old_data;
|
||||
bool old_changed;
|
||||
void** p;
|
||||
void* new_data;
|
||||
void* old_data;
|
||||
};
|
||||
|
||||
class ReloadEffectsCommand : public QUndoCommand {
|
||||
public:
|
||||
void undo();
|
||||
void redo();
|
||||
void undo();
|
||||
void redo();
|
||||
};
|
||||
|
||||
#endif // UNDO_H
|
||||
|
||||
+9
-14
@@ -429,7 +429,7 @@ void insert_clips(ComboAction* ca) {
|
||||
long earliest_new_point = LONG_MAX;
|
||||
long latest_new_point = LONG_MIN;
|
||||
|
||||
QVector<Clip*> ignore_clips;
|
||||
QVector<int> ignore_clips;
|
||||
for (int i=0;i<panel_timeline->ghosts.size();i++) {
|
||||
const Ghost& g = panel_timeline->ghosts.at(i);
|
||||
|
||||
@@ -439,7 +439,7 @@ void insert_clips(ComboAction* ca) {
|
||||
latest_new_point = qMax(latest_new_point, g.out);
|
||||
|
||||
if (g.clip >= 0) {
|
||||
ignore_clips.append(sequence->clips.at(g.clip));
|
||||
ignore_clips.append(g.clip);
|
||||
} else {
|
||||
// don't try to close old gap if importing
|
||||
ripple_old_point = false;
|
||||
@@ -467,7 +467,7 @@ void insert_clips(ComboAction* ca) {
|
||||
// determine if we should close the gap the old clips left behind
|
||||
if (ripple_old_point
|
||||
&& !((c->timeline_in < earliest_old_point && c->timeline_out <= earliest_old_point) || (c->timeline_in >= latest_old_point && c->timeline_out > latest_old_point))
|
||||
&& !ignore_clips.contains(c)) {
|
||||
&& !ignore_clips.contains(i)) {
|
||||
ripple_old_point = false;
|
||||
}
|
||||
}
|
||||
@@ -476,17 +476,13 @@ void insert_clips(ComboAction* ca) {
|
||||
|
||||
long ripple_length = (latest_new_point - earliest_new_point);
|
||||
|
||||
RippleCommand* rc = new RippleCommand(sequence, earliest_new_point, ripple_length);
|
||||
rc->ignore = ignore_clips;
|
||||
ca->append(rc);
|
||||
ripple_clips(ca, sequence, earliest_new_point, ripple_length, ignore_clips);
|
||||
|
||||
if (ripple_old_point) {
|
||||
// works for moving later clips earlier but not earlier to later
|
||||
long second_ripple_length = (earliest_old_point - latest_old_point);
|
||||
|
||||
RippleCommand* rc2 = new RippleCommand(sequence, latest_old_point, second_ripple_length);
|
||||
rc2->ignore = ignore_clips;
|
||||
ca->append(rc2);
|
||||
ripple_clips(ca, sequence, latest_old_point, second_ripple_length, ignore_clips);
|
||||
|
||||
if (earliest_old_point < earliest_new_point) {
|
||||
for (int i=0;i<panel_timeline->ghosts.size();i++) {
|
||||
@@ -886,13 +882,13 @@ void TimelineWidget::mouseReleaseEvent(QMouseEvent *event) {
|
||||
ripple_length = first_ghost.old_out - panel_timeline->ghosts.at(0).out;
|
||||
ripple_point = first_ghost.old_out;
|
||||
}
|
||||
QVector<Clip*> ignore_clips;
|
||||
QVector<int> ignore_clips;
|
||||
for (int i=0;i<panel_timeline->ghosts.size();i++) {
|
||||
const Ghost& g = panel_timeline->ghosts.at(i);
|
||||
|
||||
// push rippled clips forward if necessary
|
||||
if (panel_timeline->trim_in_point) {
|
||||
ignore_clips.append(sequence->clips.at(g.clip));
|
||||
ignore_clips.append(g.clip);
|
||||
panel_timeline->ghosts[i].in += ripple_length;
|
||||
panel_timeline->ghosts[i].out += ripple_length;
|
||||
}
|
||||
@@ -901,9 +897,8 @@ void TimelineWidget::mouseReleaseEvent(QMouseEvent *event) {
|
||||
ripple_point = qMin(ripple_point, comp_point);
|
||||
}
|
||||
if (!panel_timeline->trim_in_point) ripple_length = -ripple_length;
|
||||
RippleCommand* rc = new RippleCommand(sequence, ripple_point, ripple_length);
|
||||
rc->ignore = ignore_clips;
|
||||
ca->append(rc);
|
||||
|
||||
ripple_clips(ca, sequence, ripple_point, ripple_length, ignore_clips);
|
||||
}
|
||||
|
||||
if (panel_timeline->tool == TIMELINE_TOOL_POINTER
|
||||
|
||||
Reference in New Issue
Block a user