Make widget deletion undoable

This commit is contained in:
Thomas Wilshaw
2021-10-22 22:15:52 +01:00
parent c445dc46a9
commit 6e77606c30
3 changed files with 53 additions and 4 deletions
+25
View File
@@ -688,6 +688,31 @@ void TimeBasedWidget::MarkerAddCommand::undo()
marker_list_->RemoveMarker(added_marker_);
}
TimeBasedWidget::MarkerRemoveCommand::MarkerRemoveCommand(Project* project, TimelineMarker* marker, TimelineMarkerList* marker_list) :
project_(project),
marker_(marker),
marker_list_(marker_list),
range_(marker->time()),
name_(marker->name()),
color_(marker->color())
{
}
Project *TimeBasedWidget::MarkerRemoveCommand::GetRelevantProject() const
{
return project_;
}
void TimeBasedWidget::MarkerRemoveCommand::redo()
{
marker_list_->RemoveMarker(marker_);
}
void TimeBasedWidget::MarkerRemoveCommand::undo()
{
marker_list_->AddMarker(range_, name_, color_);
}
bool TimeBasedWidget::eventFilter(QObject *object, QEvent *event)
{
if (wheel_passthrough_objects_.contains(object) && event->type() == QEvent::Wheel) {
+22
View File
@@ -54,6 +54,28 @@ public:
virtual bool eventFilter(QObject* object, QEvent* event) override;
// Temp file location
class MarkerRemoveCommand : public UndoCommand {
public:
MarkerRemoveCommand(Project* project, TimelineMarker* marker, TimelineMarkerList* marker_list);
virtual Project* GetRelevantProject() const override;
protected:
virtual void redo() override;
virtual void undo() override;
private:
Project* project_;
TimelineMarker* marker_;
TimelineMarkerList* marker_list_;
TimeRange range_;
QString name_;
int color_;
TimelineMarker* removed_marker_;
};
public slots:
void SetTime(const rational &time);
+6 -4
View File
@@ -26,6 +26,7 @@
#include "common/qtutils.h"
#include "core.h"
#include "widget/timebased/timebasedwidget.h"
namespace olive {
@@ -91,12 +92,13 @@ void SeekableWidget::SetSnapService(SnapService *service)
}
void SeekableWidget::DeleteSelected() {
MultiUndoCommand* command = new MultiUndoCommand();
foreach (TimelineMarker *marker, GetActiveTimelineMarkers()) {
//marker_map_.value(marker)->deleteLater();
//marker_map_.take(marker);
timeline_points()->markers()->RemoveMarker(marker);
// GetActiveMarkers().value(marker)->deleteLater();
command->add_child(new TimeBasedWidget::MarkerRemoveCommand(Core::instance()->GetActiveProject(), marker, timeline_points_->markers()));
}
Core::instance()->undo_stack()->pushIfHasChildren(command);
}
const int &SeekableWidget::GetScroll() const