Make moving a marker undoable
This commit is contained in:
@@ -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_;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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_);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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_);
|
||||
|
||||
Reference in New Issue
Block a user