diff --git a/app/widget/timebased/timebasedwidget.cpp b/app/widget/timebased/timebasedwidget.cpp index 7357b46c4..fcc53161f 100644 --- a/app/widget/timebased/timebasedwidget.cpp +++ b/app/widget/timebased/timebasedwidget.cpp @@ -688,6 +688,31 @@ void TimeBasedWidget::MarkerAddCommand::undo() marker_list_->RemoveMarker(added_marker_); } +TimeBasedWidget::MarkerRemoveCommand::MarkerRemoveCommand(Project* project, TimelineMarker* marker, TimelineMarkerList* marker_list) : + project_(project), + marker_(marker), + marker_list_(marker_list), + range_(marker->time()), + name_(marker->name()), + color_(marker->color()) +{ +} + +Project *TimeBasedWidget::MarkerRemoveCommand::GetRelevantProject() const +{ + return project_; +} + +void TimeBasedWidget::MarkerRemoveCommand::redo() +{ + marker_list_->RemoveMarker(marker_); +} + +void TimeBasedWidget::MarkerRemoveCommand::undo() +{ + marker_list_->AddMarker(range_, name_, color_); +} + bool TimeBasedWidget::eventFilter(QObject *object, QEvent *event) { if (wheel_passthrough_objects_.contains(object) && event->type() == QEvent::Wheel) { diff --git a/app/widget/timebased/timebasedwidget.h b/app/widget/timebased/timebasedwidget.h index 9e588dfe0..ae6db3b56 100644 --- a/app/widget/timebased/timebasedwidget.h +++ b/app/widget/timebased/timebasedwidget.h @@ -54,6 +54,28 @@ public: virtual bool eventFilter(QObject* object, QEvent* event) override; + // Temp file location + class MarkerRemoveCommand : public UndoCommand { + public: + MarkerRemoveCommand(Project* project, TimelineMarker* marker, TimelineMarkerList* marker_list); + + virtual Project* GetRelevantProject() const override; + + protected: + virtual void redo() override; + virtual void undo() override; + + private: + Project* project_; + TimelineMarker* marker_; + TimelineMarkerList* marker_list_; + TimeRange range_; + QString name_; + int color_; + + TimelineMarker* removed_marker_; + }; + public slots: void SetTime(const rational &time); diff --git a/app/widget/timeruler/seekablewidget.cpp b/app/widget/timeruler/seekablewidget.cpp index 7a1b66726..0764ee80b 100644 --- a/app/widget/timeruler/seekablewidget.cpp +++ b/app/widget/timeruler/seekablewidget.cpp @@ -26,6 +26,7 @@ #include "common/qtutils.h" #include "core.h" +#include "widget/timebased/timebasedwidget.h" namespace olive { @@ -91,12 +92,13 @@ void SeekableWidget::SetSnapService(SnapService *service) } void SeekableWidget::DeleteSelected() { + MultiUndoCommand* command = new MultiUndoCommand(); + foreach (TimelineMarker *marker, GetActiveTimelineMarkers()) { - //marker_map_.value(marker)->deleteLater(); - //marker_map_.take(marker); - timeline_points()->markers()->RemoveMarker(marker); - // GetActiveMarkers().value(marker)->deleteLater(); + command->add_child(new TimeBasedWidget::MarkerRemoveCommand(Core::instance()->GetActiveProject(), marker, timeline_points_->markers())); } + + Core::instance()->undo_stack()->pushIfHasChildren(command); } const int &SeekableWidget::GetScroll() const