diff --git a/panels/timeline.cpp b/panels/timeline.cpp index 4e78bbb5c..849d637ab 100644 --- a/panels/timeline.cpp +++ b/panels/timeline.cpp @@ -145,16 +145,7 @@ void Timeline::next_cut() { } void ripple_clips(ComboAction* ca, Sequence *s, long point, long length, const QVector& ignore) { - for (int i=0;iclips.size();i++) { - if (!ignore.contains(i)) { - Clip* c = s->clips.at(i); - if (c != NULL) { - if (c->timeline_in >= point) { - move_clip(ca, c, length, length, 0, 0, true, true); - } - } - } - } + ca->append(new RippleAction(s, point, length, ignore)); } void Timeline::toggle_show_all() { diff --git a/project/undo.cpp b/project/undo.cpp index ba111ee18..e67c38941 100644 --- a/project/undo.cpp +++ b/project/undo.cpp @@ -1268,3 +1268,30 @@ void ReloadEffectsCommand::undo() { void ReloadEffectsCommand::redo() { panel_effect_controls->reload_clips(); } + +RippleAction::RippleAction(Sequence *is, long ipoint, long ilength, const QVector &iignore) : + s(is), + point(ipoint), + length(ilength), + ignore(iignore) +{} + +void RippleAction::undo() { + ca->undo(); + delete ca; +} + +void RippleAction::redo() { + ca = new ComboAction(); + for (int i=0;iclips.size();i++) { + if (!ignore.contains(i)) { + Clip* c = s->clips.at(i); + if (c != NULL) { + if (c->timeline_in >= point) { + move_clip(ca, c, length, length, 0, 0, true, true); + } + } + } + } + ca->redo(); +} diff --git a/project/undo.h b/project/undo.h index b25c7669d..a1f79212f 100644 --- a/project/undo.h +++ b/project/undo.h @@ -62,6 +62,19 @@ private: bool old_project_changed; }; +class RippleAction : public QUndoCommand { +public: + RippleAction(Sequence *is, long ipoint, long ilength, const QVector& iignore); + void undo(); + void redo(); +private: + Sequence *s; + long point; + long length; + QVector ignore; + ComboAction* ca; +}; + class DeleteClipAction : public QUndoCommand { public: DeleteClipAction(Sequence* s, int clip); diff --git a/ui/timelinewidget.cpp b/ui/timelinewidget.cpp index ad845174b..507a97530 100644 --- a/ui/timelinewidget.cpp +++ b/ui/timelinewidget.cpp @@ -146,13 +146,13 @@ void TimelineWidget::show_context_menu(const QPoint& pos) { connect(pasteAction, SIGNAL(triggered(bool)), mainWindow, SLOT(paste())); menu.addSeparator(); QAction* speedAction = menu.addAction("&Speed/Duration"); - connect(speedAction, SIGNAL(triggered(bool)), mainWindow, SLOT(openSpeedDialog())); + connect(speedAction, SIGNAL(triggered(bool)), mainWindow, SLOT(open_speed_dialog())); QAction* autoscaleAction = menu.addAction("Auto-s&cale"); autoscaleAction->setCheckable(true); connect(autoscaleAction, SIGNAL(triggered(bool)), this, SLOT(toggle_autoscale())); QAction* nestAction = menu.addAction("&Nest"); - connect(nestAction, SIGNAL(triggered(bool)), mainWindow, SLOT(on_actionNest_triggered())); + connect(nestAction, SIGNAL(triggered(bool)), mainWindow, SLOT(nest())); // stabilizer option int video_clip_count = 0;