diff --git a/app/timeline/timelinemarker.cpp b/app/timeline/timelinemarker.cpp index 79a31623c..bece44e0f 100644 --- a/app/timeline/timelinemarker.cpp +++ b/app/timeline/timelinemarker.cpp @@ -22,6 +22,8 @@ #include "common/xmlutils.h" #include "config/config.h" +#include "core.h" +#include "widget/marker/markerundo.h" namespace olive { @@ -55,6 +57,13 @@ void TimelineMarker::set_name(const QString &name) emit NameChanged(name_); } +void TimelineMarker::set_name_undo(QString name) +{ + UndoCommand *command = new MarkerChangeNameCommand(Core::instance()->GetActiveProject(), this, name); + + Core::instance()->undo_stack()->push(command); +} + int TimelineMarker::color() { return color_; diff --git a/app/timeline/timelinemarker.h b/app/timeline/timelinemarker.h index f63a1f3d3..70b3a53b2 100644 --- a/app/timeline/timelinemarker.h +++ b/app/timeline/timelinemarker.h @@ -50,6 +50,9 @@ public: void Load(QXmlStreamReader* reader); void Save(QXmlStreamWriter* writer) const; +public slots: + void set_name_undo(QString name); + signals: void TimeChanged(const TimeRange& time); diff --git a/app/widget/marker/markerundo.cpp b/app/widget/marker/markerundo.cpp index 8a78efcb0..17ff46df1 100644 --- a/app/widget/marker/markerundo.cpp +++ b/app/widget/marker/markerundo.cpp @@ -89,4 +89,27 @@ void MarkerChangeColorCommand::undo() marker_->set_color(old_color_); } +MarkerChangeNameCommand::MarkerChangeNameCommand(Project *project, TimelineMarker *marker, QString new_name) : + project_(project), + marker_(marker), + old_name_(marker->name()), + new_name_(new_name) +{ +} + +Project* MarkerChangeNameCommand::GetRelevantProject() const +{ + return project_; +} + +void MarkerChangeNameCommand::redo() +{ + marker_->set_name(new_name_); +} + +void MarkerChangeNameCommand::undo() +{ + marker_->set_name(old_name_); +} + } diff --git a/app/widget/marker/markerundo.h b/app/widget/marker/markerundo.h index 370723b8a..5dd4d4cbf 100644 --- a/app/widget/marker/markerundo.h +++ b/app/widget/marker/markerundo.h @@ -78,6 +78,23 @@ class MarkerChangeColorCommand : public UndoCommand { int new_color_; }; +class MarkerChangeNameCommand : public UndoCommand { + public: + MarkerChangeNameCommand(Project* project, TimelineMarker* marker, QString name); + + virtual Project* GetRelevantProject() const override; + + protected: + virtual void redo() override; + virtual void undo() override; + + private: + Project* project_; + TimelineMarker* marker_; + QString old_name_; + QString new_name_; +}; + } #endif // TIMELINEUNDOTRACK_H diff --git a/app/widget/timeruler/seekablewidget.cpp b/app/widget/timeruler/seekablewidget.cpp index 77b04cd7b..3602c4d50 100644 --- a/app/widget/timeruler/seekablewidget.cpp +++ b/app/widget/timeruler/seekablewidget.cpp @@ -211,7 +211,7 @@ void SeekableWidget::addMarker(TimelineMarker* marker) connect(marker_widget, &Marker::ActiveChanged, marker, &TimelineMarker::set_active); connect(marker, &TimelineMarker::ActiveChanged, marker_widget, &Marker::SetActive); - connect(marker_widget, &Marker::NameChanged, marker, &TimelineMarker::set_name); + connect(marker_widget, &Marker::NameChanged, marker, &TimelineMarker::set_name_undo); connect(marker, &TimelineMarker::NameChanged, marker_widget, &Marker::SetName); connect(marker_widget, &Marker::TimeChanged, marker, &TimelineMarker::set_time);