Make widget deletion undoable
This commit is contained in:
@@ -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) {
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user