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