diff --git a/project/clip.cpp b/project/clip.cpp index 88258441f..883705b2f 100644 --- a/project/clip.cpp +++ b/project/clip.cpp @@ -309,25 +309,17 @@ void Clip::refactor_frame_rate(ComboAction* ca, double multiplier, bool change_t track); } - QVector key_rows; - QVector key_indices; - QVector key_old; - QVector key_new; - + // move keyframes for (int i=0;irow_count();j++) { EffectRow* r = e->row(j); - for (int k=0;kkeyframe_times.size();k++) { - key_rows.append(r); - key_indices.at(k); - key_old.append(r->keyframe_times.at(k)); - key_new.append(r->keyframe_times.at(k) * multiplier); + for (int l=0;lfieldCount();l++) { + EffectField* f = r->field(l); + for (int k=0;kkeyframes.size();k++) { + ca->append(new SetLong(&f->keyframes[k].time, f->keyframes[k].time, f->keyframes[k].time * multiplier)); + } } } } - - if (key_rows.size() > 0) { - ca->append(new KeyframeMove(key_rows, key_indices, key_old, key_new)); - } } diff --git a/project/undo.cpp b/project/undo.cpp index 963b02c32..b1a7caf04 100644 --- a/project/undo.cpp +++ b/project/undo.cpp @@ -737,28 +737,6 @@ void MediaRename::redo() { mainWindow->setWindowModified(true); } -KeyframeMove::KeyframeMove(const QVector& irows, const QVector& ikeyframes, const QVector& iold_values, const QVector& inew_values) : - rows(irows), - keyframes(ikeyframes), - old_values(iold_values), - new_values(inew_values), - old_project_changed(mainWindow->isWindowModified()) -{} - -void KeyframeMove::undo() { - for (int i=0;ikeyframe_times[keyframes.at(i)] = old_values.at(i); - } - mainWindow->setWindowModified(old_project_changed); -} - -void KeyframeMove::redo() { - for (int i=0;ikeyframe_times[keyframes.at(i)] = new_values.at(i); - } - mainWindow->setWindowModified(true); -} - KeyframeDelete::KeyframeDelete() : disable_keyframes_on_row(NULL), old_project_changed(mainWindow->isWindowModified()), @@ -1332,3 +1310,20 @@ void SetQVariant::undo() { void SetQVariant::redo() { *target = new_val; } + +SetLong::SetLong(long *pointer, long old_value, long new_value) : + p(pointer), + oldval(old_value), + newval(new_value), + old_project_changed(mainWindow->isWindowModified()) +{} + +void SetLong::undo() { + *p = oldval; + mainWindow->setWindowModified(old_project_changed); +} + +void SetLong::redo() { + *p = newval; + mainWindow->setWindowModified(true); +} diff --git a/project/undo.h b/project/undo.h index e74d09a25..1e9fde486 100644 --- a/project/undo.h +++ b/project/undo.h @@ -17,6 +17,7 @@ struct EffectMeta; #include "project/marker.h" #include "project/selection.h" +#include "project/effectfield.h" #include #include @@ -328,19 +329,6 @@ private: QString to; }; -class KeyframeMove : public QUndoCommand { -public: - KeyframeMove(const QVector& rows, const QVector& keyframes, const QVector& old_values, const QVector& new_values); - void undo(); - void redo(); -private: - QVector rows; - QVector keyframes; - QVector old_values; - QVector new_values; - bool old_project_changed; -}; - class KeyframeDelete : public QUndoCommand { public: KeyframeDelete(); @@ -351,9 +339,7 @@ public: void redo(); private: bool old_project_changed; - QVector deleted_keyframe_times; - QVector deleted_keyframe_types; - QVector deleted_keyframe_data; + QVector deleted_keyframe_times; bool sorted; }; @@ -524,6 +510,18 @@ private: bool old_project_changed; }; +class SetLong : public QUndoCommand { +public: + SetLong(long* pointer, long old_value, long new_value); + void undo(); + void redo(); +private: + long* p; + long oldval; + long newval; + bool old_project_changed; +}; + class SetDouble : public QUndoCommand { public: SetDouble(double* pointer, double new_value);