Make renaming markers undoable

This commit is contained in:
Thomas Wilshaw
2021-10-22 22:15:56 +01:00
parent 5c7073eab6
commit 87b66e0cbb
5 changed files with 53 additions and 1 deletions
+9
View File
@@ -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_;
+3
View File
@@ -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);
+23
View File
@@ -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_);
}
}
+17
View File
@@ -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
+1 -1
View File
@@ -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);