Make moving a marker undoable

This commit is contained in:
Thomas Wilshaw
2021-10-22 22:15:56 +01:00
parent d04d165451
commit c8552ad184
5 changed files with 50 additions and 1 deletions
+6
View File
@@ -46,6 +46,12 @@ void TimelineMarker::set_time(const TimeRange &time)
emit TimeChanged(time_);
}
void TimelineMarker::set_time_undo(TimeRange time) {
UndoCommand *command = new MarkerChangeTimeCommand(Core::instance()->GetActiveProject(), this, time);
Core::instance()->undo_stack()->push(command);
}
const QString &TimelineMarker::name() const
{
return name_;
+1
View File
@@ -52,6 +52,7 @@ public:
public slots:
void set_name_undo(QString name);
void set_time_undo(TimeRange time);
signals:
void TimeChanged(const TimeRange& time);
+23
View File
@@ -112,4 +112,27 @@ void MarkerChangeNameCommand::undo()
marker_->set_name(old_name_);
}
MarkerChangeTimeCommand::MarkerChangeTimeCommand(Project* project, TimelineMarker* marker, TimeRange time) :
project_(project),
marker_(marker),
old_time_(marker->time()),
new_time_(time)
{
}
Project* MarkerChangeTimeCommand::GetRelevantProject() const
{
return project_;
}
void MarkerChangeTimeCommand::redo()
{
marker_->set_time(new_time_);
}
void MarkerChangeTimeCommand::undo()
{
marker_->set_time(old_time_);
}
}
+19
View File
@@ -95,6 +95,25 @@ class MarkerChangeNameCommand : public UndoCommand {
QString new_name_;
};
class MarkerChangeTimeCommand : public UndoCommand {
public:
MarkerChangeTimeCommand(Project* project, TimelineMarker* marker, TimeRange time);
virtual Project* GetRelevantProject() const override;
protected:
virtual void redo() override;
virtual void undo() override;
private:
Project* project_;
TimelineMarker* marker_;
TimeRange old_time_;
TimeRange new_time_;
};
}
#endif // TIMELINEUNDOTRACK_H
+1 -1
View File
@@ -220,7 +220,7 @@ void SeekableWidget::addMarker(TimelineMarker* marker)
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);
connect(marker_widget, &Marker::TimeChanged, marker, &TimelineMarker::set_time_undo);
connect(marker, &TimelineMarker::TimeChanged, marker_widget, &Marker::SetTime);
marker_widget->move(TimeToScreen(marker->time().in())-2, text_height_);