Make changing marker color undoable

This commit is contained in:
Thomas Wilshaw
2021-10-22 22:15:55 +01:00
parent 7af6f85a7c
commit 5c7073eab6
3 changed files with 45 additions and 1 deletions
+23
View File
@@ -66,4 +66,27 @@ void MarkerRemoveCommand::undo()
marker_list_->AddMarker(range_, name_, color_);
}
MarkerChangeColorCommand::MarkerChangeColorCommand(Project *project, TimelineMarker *marker, int new_color) :
project_(project),
marker_(marker),
old_color_(marker->color()),
new_color_(new_color)
{
}
Project* MarkerChangeColorCommand::GetRelevantProject() const
{
return project_;
}
void MarkerChangeColorCommand::redo()
{
marker_->set_color(new_color_);
}
void MarkerChangeColorCommand::undo()
{
marker_->set_color(old_color_);
}
}
+17
View File
@@ -61,6 +61,23 @@ class MarkerRemoveCommand : public UndoCommand {
int color_;
};
class MarkerChangeColorCommand : public UndoCommand {
public:
MarkerChangeColorCommand(Project* project, TimelineMarker* marker, int new_color);
virtual Project* GetRelevantProject() const override;
protected:
virtual void redo() override;
virtual void undo() override;
private:
Project* project_;
TimelineMarker* marker_;
int old_color_;
int new_color_;
};
}
#endif // TIMELINEUNDOTRACK_H
+5 -1
View File
@@ -232,9 +232,13 @@ void SeekableWidget::removeMarker(TimelineMarker *marker)
void SeekableWidget::SetMarkerColor(int c)
{
MultiUndoCommand *command = new MultiUndoCommand();
foreach(TimelineMarker* marker, GetActiveTimelineMarkers()) {
marker->set_color(c);
command->add_child(new MarkerChangeColorCommand(Core::instance()->GetActiveProject(), marker, c));
}
Core::instance()->undo_stack()->pushIfHasChildren(command);
}
void SeekableWidget::updateMarkerPositions()