undo: wrapped redo/undo functions to ensure prepare is called
This commit is contained in:
@@ -115,6 +115,7 @@ private:
|
||||
|
||||
virtual Project* GetRelevantProject() const override;
|
||||
|
||||
protected:
|
||||
virtual void redo() override;
|
||||
virtual void undo() override;
|
||||
|
||||
|
||||
+3
-3
@@ -927,7 +927,7 @@ void Node::InputArrayResize(const QString &id, int size, bool undoable)
|
||||
if (undoable) {
|
||||
Core::instance()->undo_stack()->push(c);
|
||||
} else {
|
||||
c->redo();
|
||||
c->redo_now();
|
||||
delete c;
|
||||
}
|
||||
}
|
||||
@@ -2277,7 +2277,7 @@ void NodeSetPositionAndShiftSurroundingsCommand::redo()
|
||||
if (commands_.isEmpty()) {
|
||||
// Move first node
|
||||
NodeSetPositionCommand* set_pos_command = new NodeSetPositionCommand(node_, relative_, position_, move_dependencies_);
|
||||
set_pos_command->redo();
|
||||
set_pos_command->redo_now();
|
||||
commands_.append(set_pos_command);
|
||||
|
||||
// Get bounding rect
|
||||
@@ -2308,7 +2308,7 @@ void NodeSetPositionAndShiftSurroundingsCommand::redo()
|
||||
}
|
||||
} else {
|
||||
for (int i=0; i<commands_.size(); i++) {
|
||||
commands_.at(i)->redo();
|
||||
commands_.at(i)->redo_now();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+12
-3
@@ -1009,6 +1009,7 @@ private:
|
||||
|
||||
virtual Project* GetRelevantProject() const override;
|
||||
|
||||
protected:
|
||||
virtual void redo() override
|
||||
{
|
||||
node_->InputArrayInsert(input_, index_, false);
|
||||
@@ -1035,6 +1036,9 @@ private:
|
||||
size_(size)
|
||||
{}
|
||||
|
||||
virtual Project* GetRelevantProject() const override;
|
||||
|
||||
protected:
|
||||
virtual void redo() override
|
||||
{
|
||||
old_size_ = node_->InputArraySize(input_);
|
||||
@@ -1067,8 +1071,6 @@ private:
|
||||
node_->ArrayResizeInternal(input_, old_size_);
|
||||
}
|
||||
|
||||
virtual Project* GetRelevantProject() const override;
|
||||
|
||||
private:
|
||||
Node* node_;
|
||||
QString input_;
|
||||
@@ -1311,6 +1313,7 @@ public:
|
||||
return node_->project();
|
||||
}
|
||||
|
||||
protected:
|
||||
virtual void redo() override;
|
||||
|
||||
virtual void undo() override;
|
||||
@@ -1346,12 +1349,13 @@ public:
|
||||
return node_->project();
|
||||
}
|
||||
|
||||
protected:
|
||||
virtual void redo() override;
|
||||
|
||||
virtual void undo() override
|
||||
{
|
||||
for (int i=commands_.size()-1; i>=0; i--) {
|
||||
commands_.at(i)->undo();
|
||||
commands_.at(i)->undo_now();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1392,6 +1396,7 @@ public:
|
||||
return node_->project();
|
||||
}
|
||||
|
||||
protected:
|
||||
virtual void redo() override;
|
||||
|
||||
virtual void undo() override
|
||||
@@ -1423,6 +1428,7 @@ public:
|
||||
return parent_->project();
|
||||
}
|
||||
|
||||
protected:
|
||||
virtual void redo() override;
|
||||
|
||||
virtual void undo() override;
|
||||
@@ -1447,6 +1453,7 @@ public:
|
||||
return node_->project();
|
||||
}
|
||||
|
||||
protected:
|
||||
virtual void redo() override;
|
||||
|
||||
virtual void undo() override;
|
||||
@@ -1474,6 +1481,7 @@ public:
|
||||
return node_->project();
|
||||
}
|
||||
|
||||
protected:
|
||||
virtual void redo() override;
|
||||
|
||||
virtual void undo() override;
|
||||
@@ -1502,6 +1510,7 @@ public:
|
||||
return node_->project();
|
||||
}
|
||||
|
||||
protected:
|
||||
virtual void redo() override;
|
||||
|
||||
virtual void undo() override;
|
||||
|
||||
@@ -141,14 +141,14 @@ void FolderAddChild::redo()
|
||||
if (!position_command_) {
|
||||
position_command_ = new NodeSetPositionAsChildCommand(child_, folder_, folder_->project()->root(), array_index, array_index+1, true);
|
||||
}
|
||||
position_command_->redo();
|
||||
position_command_->redo_now();
|
||||
}
|
||||
}
|
||||
|
||||
void FolderAddChild::undo()
|
||||
{
|
||||
if (position_command_) {
|
||||
position_command_->undo();
|
||||
position_command_->undo_now();
|
||||
}
|
||||
|
||||
Node::DisconnectEdge(child_, NodeInput(folder_, Folder::kChildInput, folder_->InputArraySize(Folder::kChildInput)-1));
|
||||
|
||||
@@ -135,6 +135,7 @@ public:
|
||||
return folder_->project();
|
||||
}
|
||||
|
||||
protected:
|
||||
virtual void redo() override;
|
||||
|
||||
virtual void undo() override
|
||||
@@ -209,6 +210,7 @@ public:
|
||||
|
||||
virtual Project * GetRelevantProject() const override;
|
||||
|
||||
protected:
|
||||
virtual void redo() override;
|
||||
|
||||
virtual void undo() override;
|
||||
|
||||
@@ -64,8 +64,8 @@ void Sequence::add_default_nodes(MultiUndoCommand* command)
|
||||
command->add_child(video_track_command);
|
||||
command->add_child(audio_track_command);
|
||||
} else {
|
||||
video_track_command->redo();
|
||||
audio_track_command->redo();
|
||||
video_track_command->redo_now();
|
||||
audio_track_command->redo_now();
|
||||
delete video_track_command;
|
||||
delete audio_track_command;
|
||||
}
|
||||
|
||||
@@ -87,7 +87,7 @@ bool LoadOTIOTask::Run()
|
||||
Sequence* sequence = new Sequence();
|
||||
sequence->SetLabel(QString::fromStdString(timeline->name()));
|
||||
sequence->setParent(project_);
|
||||
FolderAddChild(project_->root(), sequence).redo();
|
||||
FolderAddChild(project_->root(), sequence).redo_now();
|
||||
|
||||
// FIXME: As far as I know, OTIO doesn't store video/audio parameters?
|
||||
sequence->set_default_parameters();
|
||||
@@ -111,7 +111,7 @@ bool LoadOTIOTask::Run()
|
||||
|
||||
// Create track
|
||||
TimelineAddTrackCommand t(sequence->track_list(type));
|
||||
t.redo();
|
||||
t.redo_now();
|
||||
track = t.track();
|
||||
} else {
|
||||
qWarning() << "Found unknown track type:" << otio_track->kind().c_str();
|
||||
|
||||
@@ -56,12 +56,7 @@ UndoCommand::UndoCommand()
|
||||
|
||||
void UndoCommand::redo_and_set_modified()
|
||||
{
|
||||
if (!prepared_) {
|
||||
prepare();
|
||||
prepared_ = true;
|
||||
}
|
||||
|
||||
redo();
|
||||
redo_now();
|
||||
|
||||
project_ = GetRelevantProject();
|
||||
if (project_) {
|
||||
@@ -72,11 +67,26 @@ void UndoCommand::redo_and_set_modified()
|
||||
|
||||
void UndoCommand::undo_and_set_modified()
|
||||
{
|
||||
undo();
|
||||
undo_now();
|
||||
|
||||
if (project_) {
|
||||
project_->set_modified(modified_);
|
||||
}
|
||||
}
|
||||
|
||||
void UndoCommand::redo_now()
|
||||
{
|
||||
if (!prepared_) {
|
||||
prepare();
|
||||
prepared_ = true;
|
||||
}
|
||||
|
||||
redo();
|
||||
}
|
||||
|
||||
void UndoCommand::undo_now()
|
||||
{
|
||||
undo();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -40,13 +40,12 @@ public:
|
||||
|
||||
DISABLE_COPY_MOVE(UndoCommand)
|
||||
|
||||
virtual void prepare(){}
|
||||
virtual void redo() = 0;
|
||||
virtual void undo() = 0;
|
||||
|
||||
bool has_prepared() const {return prepared_;}
|
||||
void set_prepared(bool e) {prepared_ = true;}
|
||||
|
||||
void redo_now();
|
||||
void undo_now();
|
||||
|
||||
void redo_and_set_modified();
|
||||
void undo_and_set_modified();
|
||||
|
||||
@@ -62,6 +61,11 @@ public:
|
||||
name_ = name;
|
||||
}
|
||||
|
||||
protected:
|
||||
virtual void prepare(){}
|
||||
virtual void redo() = 0;
|
||||
virtual void undo() = 0;
|
||||
|
||||
private:
|
||||
bool modified_;
|
||||
|
||||
|
||||
@@ -32,6 +32,7 @@ public:
|
||||
|
||||
virtual Project* GetRelevantProject() const override;
|
||||
|
||||
protected:
|
||||
virtual void redo() override;
|
||||
virtual void undo() override;
|
||||
|
||||
@@ -51,6 +52,7 @@ public:
|
||||
|
||||
virtual Project* GetRelevantProject() const override;
|
||||
|
||||
protected:
|
||||
virtual void redo() override;
|
||||
virtual void undo() override;
|
||||
|
||||
|
||||
@@ -35,6 +35,7 @@ public:
|
||||
|
||||
virtual Project* GetRelevantProject() const override;
|
||||
|
||||
protected:
|
||||
virtual void redo() override;
|
||||
virtual void undo() override;
|
||||
|
||||
@@ -51,6 +52,7 @@ public:
|
||||
|
||||
virtual Project* GetRelevantProject() const override;
|
||||
|
||||
protected:
|
||||
virtual void redo() override;
|
||||
virtual void undo() override;
|
||||
|
||||
@@ -70,6 +72,7 @@ public:
|
||||
|
||||
virtual Project* GetRelevantProject() const override;
|
||||
|
||||
protected:
|
||||
virtual void redo() override;
|
||||
virtual void undo() override;
|
||||
|
||||
@@ -90,6 +93,7 @@ public:
|
||||
|
||||
virtual Project* GetRelevantProject() const override;
|
||||
|
||||
protected:
|
||||
virtual void redo() override;
|
||||
virtual void undo() override;
|
||||
|
||||
@@ -109,6 +113,7 @@ public:
|
||||
|
||||
virtual Project* GetRelevantProject() const override;
|
||||
|
||||
protected:
|
||||
virtual void redo() override;
|
||||
virtual void undo() override;
|
||||
|
||||
@@ -128,6 +133,7 @@ public:
|
||||
|
||||
virtual Project* GetRelevantProject() const override;
|
||||
|
||||
protected:
|
||||
virtual void redo() override;
|
||||
virtual void undo() override;
|
||||
|
||||
@@ -146,6 +152,7 @@ public:
|
||||
|
||||
virtual Project* GetRelevantProject() const override;
|
||||
|
||||
protected:
|
||||
virtual void redo() override;
|
||||
|
||||
virtual void undo() override;
|
||||
|
||||
@@ -143,12 +143,13 @@ private:
|
||||
public:
|
||||
NodeViewAttachNodesToCursor(NodeView* view, const QVector<Node*>& nodes);
|
||||
|
||||
virtual Project * GetRelevantProject() const override;
|
||||
|
||||
protected:
|
||||
virtual void redo() override;
|
||||
|
||||
virtual void undo() override;
|
||||
|
||||
virtual Project * GetRelevantProject() const override;
|
||||
|
||||
private:
|
||||
NodeView* view_;
|
||||
|
||||
@@ -174,15 +175,16 @@ private:
|
||||
new_prevent_removing_(prevent_removing)
|
||||
{}
|
||||
|
||||
virtual void redo() override;
|
||||
|
||||
virtual void undo() override;
|
||||
|
||||
virtual Project * GetRelevantProject() const override
|
||||
{
|
||||
return node_->project();
|
||||
}
|
||||
|
||||
protected:
|
||||
virtual void redo() override;
|
||||
|
||||
virtual void undo() override;
|
||||
|
||||
private:
|
||||
NodeView *view_;
|
||||
Node *node_;
|
||||
|
||||
@@ -43,7 +43,7 @@ void NodeEdgeAddCommand::redo()
|
||||
remove_command_ = new NodeEdgeRemoveCommand(input_.GetConnectedOutput(), input_);
|
||||
}
|
||||
|
||||
remove_command_->redo();
|
||||
remove_command_->redo_now();
|
||||
}
|
||||
|
||||
Node::ConnectEdge(output_, input_);
|
||||
@@ -54,7 +54,7 @@ void NodeEdgeAddCommand::undo()
|
||||
Node::DisconnectEdge(output_, input_);
|
||||
|
||||
if (remove_command_) {
|
||||
remove_command_->undo();
|
||||
remove_command_->undo_now();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -39,6 +39,7 @@ public:
|
||||
|
||||
virtual Project* GetRelevantProject() const override;
|
||||
|
||||
protected:
|
||||
virtual void redo() override;
|
||||
virtual void undo() override;
|
||||
|
||||
@@ -61,6 +62,7 @@ public:
|
||||
|
||||
virtual Project* GetRelevantProject() const override;
|
||||
|
||||
protected:
|
||||
virtual void redo() override;
|
||||
virtual void undo() override;
|
||||
|
||||
@@ -80,6 +82,7 @@ public:
|
||||
|
||||
virtual Project* GetRelevantProject() const override;
|
||||
|
||||
protected:
|
||||
virtual void redo() override;
|
||||
virtual void undo() override;
|
||||
|
||||
@@ -109,6 +112,7 @@ public:
|
||||
return dynamic_cast<Project*>(graph_);
|
||||
}
|
||||
|
||||
protected:
|
||||
virtual void prepare() override;
|
||||
|
||||
virtual void redo() override
|
||||
@@ -159,6 +163,7 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
protected:
|
||||
virtual void prepare() override
|
||||
{
|
||||
command_ = new MultiUndoCommand();
|
||||
@@ -194,12 +199,13 @@ public:
|
||||
Node* dest,
|
||||
bool include_connections);
|
||||
|
||||
virtual Project* GetRelevantProject() const override {return nullptr;}
|
||||
|
||||
protected:
|
||||
virtual void redo() override;
|
||||
|
||||
virtual void undo() override {}
|
||||
|
||||
virtual Project* GetRelevantProject() const override {return nullptr;}
|
||||
|
||||
private:
|
||||
const Node* src_;
|
||||
|
||||
@@ -223,6 +229,7 @@ public:
|
||||
return a_->project();
|
||||
}
|
||||
|
||||
protected:
|
||||
virtual void redo() override
|
||||
{
|
||||
if (link_) {
|
||||
@@ -263,6 +270,7 @@ public:
|
||||
return node_->project();
|
||||
}
|
||||
|
||||
protected:
|
||||
virtual void redo() override
|
||||
{
|
||||
unlinked_ = node_->links();
|
||||
@@ -319,12 +327,13 @@ public:
|
||||
|
||||
void AddNode(Node* node, const QString& new_name);
|
||||
|
||||
virtual Project * GetRelevantProject() const override;
|
||||
|
||||
protected:
|
||||
virtual void redo() override;
|
||||
|
||||
virtual void undo() override;
|
||||
|
||||
virtual Project * GetRelevantProject() const override;
|
||||
|
||||
private:
|
||||
QVector<Node*> nodes_;
|
||||
|
||||
|
||||
@@ -148,6 +148,7 @@ private:
|
||||
|
||||
virtual Project* GetRelevantProject() const override;
|
||||
|
||||
protected:
|
||||
virtual void redo() override;
|
||||
virtual void undo() override;
|
||||
|
||||
|
||||
@@ -214,6 +214,9 @@ public:
|
||||
{
|
||||
}
|
||||
|
||||
virtual Project* GetRelevantProject() const override {return nullptr;}
|
||||
|
||||
protected:
|
||||
virtual void redo() override
|
||||
{
|
||||
timeline_->SetSelections(now_);
|
||||
@@ -224,8 +227,6 @@ public:
|
||||
timeline_->SetSelections(old_);
|
||||
}
|
||||
|
||||
virtual Project* GetRelevantProject() const override {return nullptr;}
|
||||
|
||||
private:
|
||||
TimelineWidget* timeline_;
|
||||
TimelineWidgetSelections old_;
|
||||
|
||||
@@ -39,7 +39,7 @@ inline UndoCommand* CreateRemoveCommand(Node* n)
|
||||
inline UndoCommand* CreateAndRunRemoveCommand(Node* n)
|
||||
{
|
||||
UndoCommand* command = CreateRemoveCommand(n);
|
||||
command->redo();
|
||||
command->redo_now();
|
||||
return command;
|
||||
}
|
||||
|
||||
|
||||
@@ -249,14 +249,14 @@ void TransitionRemoveCommand::redo()
|
||||
remove_command_ = CreateRemoveCommand(block_);
|
||||
}
|
||||
|
||||
remove_command_->redo();
|
||||
remove_command_->redo_now();
|
||||
}
|
||||
}
|
||||
|
||||
void TransitionRemoveCommand::undo()
|
||||
{
|
||||
if (remove_from_graph_) {
|
||||
remove_command_->undo();
|
||||
remove_command_->undo_now();
|
||||
}
|
||||
|
||||
track_->BeginOperation();
|
||||
@@ -446,7 +446,7 @@ void TrackReplaceBlockWithGapCommand::redo()
|
||||
CreateRemoveTransitionCommandIfNecessary(true);
|
||||
}
|
||||
for (auto it=transition_remove_commands_.cbegin(); it!=transition_remove_commands_.cend(); it++) {
|
||||
(*it)->redo();
|
||||
(*it)->redo_now();
|
||||
}
|
||||
|
||||
if (block_->next()) {
|
||||
@@ -500,7 +500,7 @@ void TrackReplaceBlockWithGapCommand::redo()
|
||||
if (!position_command_) {
|
||||
position_command_ = new NodeSetPositionAsChildCommand(our_gap_, track_, track_, our_gap_->index(), track_->Blocks().size(), true);
|
||||
}
|
||||
position_command_->redo();
|
||||
position_command_->redo_now();
|
||||
}
|
||||
|
||||
track_->EndOperation();
|
||||
@@ -533,7 +533,7 @@ void TrackReplaceBlockWithGapCommand::undo()
|
||||
track_->ReplaceBlock(our_gap_, block_);
|
||||
our_gap_->setParent(&memory_manager_);
|
||||
|
||||
position_command_->undo();
|
||||
position_command_->undo_now();
|
||||
|
||||
} else {
|
||||
|
||||
@@ -583,7 +583,7 @@ void TrackReplaceBlockWithGapCommand::undo()
|
||||
}
|
||||
|
||||
for (auto it=transition_remove_commands_.crbegin(); it!=transition_remove_commands_.crend(); it++) {
|
||||
(*it)->undo();
|
||||
(*it)->undo_now();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -44,6 +44,7 @@ public:
|
||||
return block_->project();
|
||||
}
|
||||
|
||||
protected:
|
||||
virtual void redo() override;
|
||||
virtual void undo() override;
|
||||
|
||||
@@ -67,6 +68,7 @@ public:
|
||||
return block_->project();
|
||||
}
|
||||
|
||||
protected:
|
||||
virtual void redo();
|
||||
virtual void undo();
|
||||
|
||||
@@ -90,6 +92,7 @@ public:
|
||||
return block_->project();
|
||||
}
|
||||
|
||||
protected:
|
||||
virtual void redo();
|
||||
virtual void undo();
|
||||
|
||||
@@ -138,6 +141,7 @@ public:
|
||||
return timeline_->parent()->project();
|
||||
}
|
||||
|
||||
protected:
|
||||
virtual void redo() override;
|
||||
|
||||
virtual void undo() override;
|
||||
@@ -172,6 +176,7 @@ public:
|
||||
return track_->project();
|
||||
}
|
||||
|
||||
protected:
|
||||
virtual void redo() override;
|
||||
|
||||
virtual void undo() override;
|
||||
@@ -211,6 +216,7 @@ public:
|
||||
return block_->project();
|
||||
}
|
||||
|
||||
protected:
|
||||
virtual void redo() override;
|
||||
|
||||
virtual void undo() override;
|
||||
@@ -248,6 +254,7 @@ public:
|
||||
return block_->project();
|
||||
}
|
||||
|
||||
protected:
|
||||
virtual void redo() override
|
||||
{
|
||||
block_->set_enabled(new_enabled_);
|
||||
@@ -287,6 +294,7 @@ public:
|
||||
return track_list_->parent()->project();
|
||||
}
|
||||
|
||||
protected:
|
||||
virtual void prepare() override;
|
||||
|
||||
virtual void redo() override;
|
||||
|
||||
@@ -68,7 +68,7 @@ void BlockTrimCommand::redo()
|
||||
if (!deleted_adjacent_command_) {
|
||||
deleted_adjacent_command_ = CreateAndRunRemoveCommand(adjacent_);
|
||||
} else {
|
||||
deleted_adjacent_command_->redo();
|
||||
deleted_adjacent_command_->redo_now();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
@@ -110,7 +110,7 @@ void BlockTrimCommand::undo()
|
||||
if (we_removed_adjacent_) {
|
||||
if (deleted_adjacent_command_) {
|
||||
// We deleted adjacent, restore it now
|
||||
deleted_adjacent_command_->undo();
|
||||
deleted_adjacent_command_->undo_now();
|
||||
}
|
||||
|
||||
if (mode_ == Timeline::kTrimIn) {
|
||||
@@ -216,7 +216,7 @@ void TrackSlideCommand::redo()
|
||||
in_adjacent_remove_command_ = CreateRemoveCommand(in_adjacent_);
|
||||
}
|
||||
|
||||
in_adjacent_remove_command_->redo();
|
||||
in_adjacent_remove_command_->redo_now();
|
||||
}
|
||||
} else {
|
||||
// Simply resize adjacent
|
||||
@@ -238,7 +238,7 @@ void TrackSlideCommand::redo()
|
||||
out_adjacent_remove_command_ = CreateRemoveCommand(out_adjacent_);
|
||||
}
|
||||
|
||||
out_adjacent_remove_command_->redo();
|
||||
out_adjacent_remove_command_->redo_now();
|
||||
}
|
||||
} else {
|
||||
// Simply resize adjacent
|
||||
@@ -269,7 +269,7 @@ void TrackSlideCommand::undo()
|
||||
in_adjacent_->setParent(&memory_manager_);
|
||||
} else if (in_adjacent_remove_command_) {
|
||||
// We removed this, so we can restore it now
|
||||
in_adjacent_remove_command_->undo();
|
||||
in_adjacent_remove_command_->undo_now();
|
||||
} else {
|
||||
// Simply resize adjacent
|
||||
in_adjacent_->set_length_and_media_out(in_adjacent_->length() - movement_);
|
||||
@@ -281,7 +281,7 @@ void TrackSlideCommand::undo()
|
||||
track_->RippleRemoveBlock(out_adjacent_);
|
||||
out_adjacent_->setParent(&memory_manager_);
|
||||
} else if (out_adjacent_remove_command_) {
|
||||
out_adjacent_remove_command_->undo();
|
||||
out_adjacent_remove_command_->undo_now();
|
||||
} else {
|
||||
out_adjacent_->set_length_and_media_in(out_adjacent_->length() + movement_);
|
||||
}
|
||||
@@ -343,7 +343,7 @@ void TrackPlaceBlockCommand::redo()
|
||||
}
|
||||
|
||||
for (int i=0; i<add_track_commands_.size(); i++) {
|
||||
add_track_commands_.at(i)->redo();
|
||||
add_track_commands_.at(i)->redo_now();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -382,7 +382,7 @@ void TrackPlaceBlockCommand::redo()
|
||||
|
||||
}
|
||||
|
||||
ripple_remove_command_->redo();
|
||||
ripple_remove_command_->redo_now();
|
||||
track->InsertBlockAfter(insert_, ripple_remove_command_->GetInsertionIndex());
|
||||
|
||||
if (position_commands_.isEmpty()) {
|
||||
@@ -399,14 +399,14 @@ void TrackPlaceBlockCommand::redo()
|
||||
}
|
||||
|
||||
for (int i=0; i<position_commands_.size(); i++) {
|
||||
position_commands_.at(i)->redo();
|
||||
position_commands_.at(i)->redo_now();
|
||||
}
|
||||
}
|
||||
|
||||
void TrackPlaceBlockCommand::undo()
|
||||
{
|
||||
for (int i=position_commands_.size()-1; i>=0; i--) {
|
||||
position_commands_.at(i)->undo();
|
||||
position_commands_.at(i)->undo_now();
|
||||
}
|
||||
|
||||
Track* t = timeline_->GetTrackAt(track_index_);
|
||||
@@ -419,7 +419,7 @@ void TrackPlaceBlockCommand::undo()
|
||||
|
||||
if (ripple_remove_command_) {
|
||||
// If we ripple removed, just undo that
|
||||
ripple_remove_command_->undo();
|
||||
ripple_remove_command_->undo_now();
|
||||
} else if (gap_) {
|
||||
t->RippleRemoveBlock(gap_);
|
||||
gap_->setParent(&memory_manager_);
|
||||
@@ -432,7 +432,7 @@ void TrackPlaceBlockCommand::undo()
|
||||
|
||||
// Remove tracks if we added them
|
||||
for (int i=add_track_commands_.size()-1; i>=0; i--) {
|
||||
add_track_commands_.at(i)->undo();
|
||||
add_track_commands_.at(i)->undo_now();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -82,6 +82,7 @@ public:
|
||||
remove_block_from_graph_ = e;
|
||||
}
|
||||
|
||||
protected:
|
||||
virtual void prepare() override;
|
||||
virtual void redo() override;
|
||||
virtual void undo() override;
|
||||
@@ -134,6 +135,7 @@ public:
|
||||
return track_->project();
|
||||
}
|
||||
|
||||
protected:
|
||||
virtual void prepare() override;
|
||||
|
||||
virtual void redo() override;
|
||||
@@ -182,6 +184,7 @@ public:
|
||||
return timeline_->parent()->project();
|
||||
}
|
||||
|
||||
protected:
|
||||
virtual void redo() override;
|
||||
|
||||
virtual void undo() override;
|
||||
|
||||
@@ -141,7 +141,7 @@ void TrackRippleRemoveAreaCommand::redo()
|
||||
}
|
||||
|
||||
foreach (UndoCommand* c, remove_block_commands_) {
|
||||
c->redo();
|
||||
c->redo_now();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -169,7 +169,7 @@ void TrackRippleRemoveAreaCommand::undo()
|
||||
|
||||
// Un-remove any blocks
|
||||
for (int i=remove_block_commands_.size()-1; i>=0; i--) {
|
||||
remove_block_commands_.at(i)->undo();
|
||||
remove_block_commands_.at(i)->undo_now();
|
||||
}
|
||||
|
||||
foreach (auto op, removals_) {
|
||||
@@ -219,7 +219,7 @@ void TrackListRippleRemoveAreaCommand::redo()
|
||||
}
|
||||
|
||||
foreach (TrackRippleRemoveAreaCommand* c, commands_) {
|
||||
c->redo();
|
||||
c->redo_now();
|
||||
}
|
||||
|
||||
if (all_tracks_unlocked_) {
|
||||
@@ -246,7 +246,7 @@ void TrackListRippleRemoveAreaCommand::undo()
|
||||
}
|
||||
|
||||
foreach (TrackRippleRemoveAreaCommand* c, commands_) {
|
||||
c->undo();
|
||||
c->undo_now();
|
||||
}
|
||||
|
||||
if (all_tracks_unlocked_) {
|
||||
@@ -496,7 +496,7 @@ void TimelineRippleDeleteGapsAtRegionsCommand::redo()
|
||||
}
|
||||
|
||||
foreach (UndoCommand* c, commands_) {
|
||||
c->redo();
|
||||
c->redo_now();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -66,6 +66,7 @@ public:
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
protected:
|
||||
virtual void prepare() override;
|
||||
|
||||
virtual void redo() override;
|
||||
@@ -115,6 +116,7 @@ public:
|
||||
return list_->parent()->project();
|
||||
}
|
||||
|
||||
protected:
|
||||
virtual void redo() override;
|
||||
|
||||
virtual void undo() override;
|
||||
@@ -163,6 +165,7 @@ public:
|
||||
return track_list_->parent()->project();
|
||||
}
|
||||
|
||||
protected:
|
||||
virtual void redo() override
|
||||
{
|
||||
ripple(true);
|
||||
@@ -215,12 +218,13 @@ public:
|
||||
return timeline_->project();
|
||||
}
|
||||
|
||||
protected:
|
||||
virtual void redo() override;
|
||||
|
||||
virtual void undo() override
|
||||
{
|
||||
for (int i=commands_.size()-1;i>=0;i--) {
|
||||
commands_.at(i)->undo();
|
||||
commands_.at(i)->undo_now();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -60,7 +60,7 @@ void BlockSplitCommand::redo()
|
||||
if (!position_command_) {
|
||||
position_command_ = new NodeSetPositionAsChildCommand(new_block(), track, track, new_block()->index(), track->Blocks().size(), true);
|
||||
}
|
||||
position_command_->redo();
|
||||
position_command_->redo_now();
|
||||
|
||||
// If the block had an out transition, we move it to the new block
|
||||
moved_transition_ = NodeInput();
|
||||
@@ -91,7 +91,7 @@ void BlockSplitCommand::undo()
|
||||
Node::ConnectEdge(block_, moved_transition_);
|
||||
}
|
||||
|
||||
position_command_->undo();
|
||||
position_command_->undo_now();
|
||||
|
||||
block_->set_length_and_media_out(old_length_);
|
||||
track->RippleRemoveBlock(new_block());
|
||||
@@ -152,7 +152,7 @@ void BlockSplitPreservingLinksCommand::redo()
|
||||
|
||||
foreach (const QVector<Block*>& split_list, split_blocks) {
|
||||
NodeLinkCommand* blc = new NodeLinkCommand(split_list.at(i), split_list.at(j), true);
|
||||
blc->redo();
|
||||
blc->redo_now();
|
||||
commands_.append(blc);
|
||||
}
|
||||
}
|
||||
@@ -160,7 +160,7 @@ void BlockSplitPreservingLinksCommand::redo()
|
||||
}
|
||||
} else {
|
||||
for (int i=0; i<commands_.size(); i++) {
|
||||
commands_.at(i)->redo();
|
||||
commands_.at(i)->redo_now();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -97,7 +97,7 @@ public:
|
||||
virtual void undo() override
|
||||
{
|
||||
for (int i=commands_.size()-1; i>=0; i--) {
|
||||
commands_.at(i)->undo();
|
||||
commands_.at(i)->undo_now();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -134,14 +134,14 @@ public:
|
||||
virtual void redo() override
|
||||
{
|
||||
if (command_) {
|
||||
command_->redo();
|
||||
command_->redo_now();
|
||||
}
|
||||
}
|
||||
|
||||
virtual void undo() override
|
||||
{
|
||||
if (command_) {
|
||||
command_->undo();
|
||||
command_->undo_now();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -39,6 +39,7 @@ public:
|
||||
return track_->project();
|
||||
}
|
||||
|
||||
protected:
|
||||
virtual void redo() override
|
||||
{
|
||||
before_ = block_->previous();
|
||||
@@ -73,6 +74,7 @@ public:
|
||||
return track_->project();
|
||||
}
|
||||
|
||||
protected:
|
||||
virtual void redo() override
|
||||
{
|
||||
track_->PrependBlock(block_);
|
||||
@@ -103,6 +105,7 @@ public:
|
||||
return block_->project();
|
||||
}
|
||||
|
||||
protected:
|
||||
virtual void redo() override
|
||||
{
|
||||
track_->InsertBlockAfter(block_, before_);
|
||||
@@ -141,6 +144,7 @@ public:
|
||||
return track_->project();
|
||||
}
|
||||
|
||||
protected:
|
||||
virtual void redo() override
|
||||
{
|
||||
track_->ReplaceBlock(old_, replace_);
|
||||
|
||||
@@ -41,6 +41,7 @@ public:
|
||||
return project_;
|
||||
}
|
||||
|
||||
protected:
|
||||
virtual void redo() override
|
||||
{
|
||||
points_->workarea()->set_enabled(new_enabled_);
|
||||
@@ -77,6 +78,7 @@ public:
|
||||
return project_;
|
||||
}
|
||||
|
||||
protected:
|
||||
virtual void redo() override
|
||||
{
|
||||
points_->workarea()->set_range(new_range_);
|
||||
|
||||
@@ -32,12 +32,13 @@ public:
|
||||
sequence_(sequence)
|
||||
{}
|
||||
|
||||
virtual Project* GetRelevantProject() const override {return nullptr;}
|
||||
|
||||
protected:
|
||||
virtual void redo() override;
|
||||
|
||||
virtual void undo() override;
|
||||
|
||||
virtual Project* GetRelevantProject() const override {return nullptr;}
|
||||
|
||||
private:
|
||||
Sequence* sequence_;
|
||||
|
||||
@@ -50,12 +51,13 @@ public:
|
||||
sequence_(sequence)
|
||||
{}
|
||||
|
||||
virtual Project* GetRelevantProject() const override {return nullptr;}
|
||||
|
||||
protected:
|
||||
virtual void redo() override;
|
||||
|
||||
virtual void undo() override;
|
||||
|
||||
virtual Project* GetRelevantProject() const override {return nullptr;}
|
||||
|
||||
private:
|
||||
Sequence* sequence_;
|
||||
|
||||
|
||||
@@ -135,14 +135,14 @@ OLIVE_ADD_TEST(Trim)
|
||||
{
|
||||
// Trim out point of second block
|
||||
BlockTrimCommand command(track, block2, 1, Timeline::kTrimOut);
|
||||
command.redo();
|
||||
command.redo_now();
|
||||
|
||||
// No block should have been added
|
||||
OLIVE_ASSERT(track->Blocks().size() == 2);
|
||||
OLIVE_ASSERT(block2->length() == 1);
|
||||
OLIVE_ASSERT(block1->length() == 2);
|
||||
|
||||
command.undo();
|
||||
command.undo_now();
|
||||
|
||||
OLIVE_ASSERT(track->Blocks().size() == 2);
|
||||
OLIVE_ASSERT(block2->length() == 2);
|
||||
@@ -152,7 +152,7 @@ OLIVE_ADD_TEST(Trim)
|
||||
{
|
||||
// Trim in point of second block
|
||||
BlockTrimCommand command(track, block2, 1, Timeline::kTrimIn);
|
||||
command.redo();
|
||||
command.redo_now();
|
||||
|
||||
// Gap should be inserted in between
|
||||
OLIVE_ASSERT(track->Blocks().size() == 3);
|
||||
@@ -164,7 +164,7 @@ OLIVE_ADD_TEST(Trim)
|
||||
OLIVE_ASSERT(block1->next() == gap);
|
||||
OLIVE_ASSERT(block2->previous() == gap);
|
||||
|
||||
command.undo();
|
||||
command.undo_now();
|
||||
|
||||
OLIVE_ASSERT(track->Blocks().size() == 2);
|
||||
OLIVE_ASSERT(block2->length() == 2);
|
||||
@@ -174,7 +174,7 @@ OLIVE_ADD_TEST(Trim)
|
||||
{
|
||||
// Trim out point of first block
|
||||
BlockTrimCommand command(track, block1, 1, Timeline::kTrimOut);
|
||||
command.redo();
|
||||
command.redo_now();
|
||||
|
||||
// Gap should be inserted in between
|
||||
OLIVE_ASSERT(track->Blocks().size() == 3);
|
||||
@@ -186,7 +186,7 @@ OLIVE_ADD_TEST(Trim)
|
||||
OLIVE_ASSERT(block1->next() == gap);
|
||||
OLIVE_ASSERT(block2->previous() == gap);
|
||||
|
||||
command.undo();
|
||||
command.undo_now();
|
||||
|
||||
OLIVE_ASSERT(track->Blocks().size() == 2);
|
||||
OLIVE_ASSERT(block2->length() == 2);
|
||||
@@ -196,7 +196,7 @@ OLIVE_ADD_TEST(Trim)
|
||||
{
|
||||
// Trim in point of first block
|
||||
BlockTrimCommand command(track, block1, 1, Timeline::kTrimIn);
|
||||
command.redo();
|
||||
command.redo_now();
|
||||
|
||||
// Gap should be prepended to the start
|
||||
OLIVE_ASSERT(track->Blocks().size() == 3);
|
||||
@@ -208,7 +208,7 @@ OLIVE_ADD_TEST(Trim)
|
||||
OLIVE_ASSERT(block1->next() == block2);
|
||||
OLIVE_ASSERT(block1->previous() == gap);
|
||||
|
||||
command.undo();
|
||||
command.undo_now();
|
||||
|
||||
OLIVE_ASSERT(track->Blocks().size() == 2);
|
||||
OLIVE_ASSERT(block2->length() == 2);
|
||||
@@ -241,7 +241,7 @@ OLIVE_ADD_TEST(ReplaceBlockWithGap_ClipsOnly)
|
||||
{
|
||||
// Replace clip C with a gap
|
||||
TrackReplaceBlockWithGapCommand command(track, c);
|
||||
command.redo();
|
||||
command.redo_now();
|
||||
|
||||
// Clip should be removed without any gap actually taking its place, since the clip is at the
|
||||
// end of the track
|
||||
@@ -249,7 +249,7 @@ OLIVE_ADD_TEST(ReplaceBlockWithGap_ClipsOnly)
|
||||
OLIVE_ASSERT(track->Blocks().at(0) == a);
|
||||
OLIVE_ASSERT(track->Blocks().at(1) == b);
|
||||
|
||||
command.undo();
|
||||
command.undo_now();
|
||||
|
||||
OLIVE_ASSERT(track->Blocks().size() == 3);
|
||||
OLIVE_ASSERT(track->Blocks().at(0) == a);
|
||||
@@ -260,7 +260,7 @@ OLIVE_ADD_TEST(ReplaceBlockWithGap_ClipsOnly)
|
||||
{
|
||||
// Replace clip B with a gap
|
||||
TrackReplaceBlockWithGapCommand command(track, b);
|
||||
command.redo();
|
||||
command.redo_now();
|
||||
|
||||
// B should be replaced with a gap
|
||||
OLIVE_ASSERT(track->Blocks().size() == 3);
|
||||
@@ -270,7 +270,7 @@ OLIVE_ADD_TEST(ReplaceBlockWithGap_ClipsOnly)
|
||||
OLIVE_ASSERT(track->Blocks().at(1)->length() == b->length());
|
||||
OLIVE_ASSERT(track->Blocks().at(2) == c);
|
||||
|
||||
command.undo();
|
||||
command.undo_now();
|
||||
|
||||
OLIVE_ASSERT(track->Blocks().size() == 3);
|
||||
OLIVE_ASSERT(track->Blocks().at(0) == a);
|
||||
@@ -312,7 +312,7 @@ OLIVE_ADD_TEST(ReplaceBlockWithGap_ClipsAndGaps)
|
||||
{
|
||||
// Replace clip E with a gap
|
||||
TrackReplaceBlockWithGapCommand command(track, e);
|
||||
command.redo();
|
||||
command.redo_now();
|
||||
|
||||
// Both clips D and E should be removed because this command should remove any trailing gaps
|
||||
OLIVE_ASSERT(track->Blocks().size() == 3);
|
||||
@@ -321,7 +321,7 @@ OLIVE_ADD_TEST(ReplaceBlockWithGap_ClipsAndGaps)
|
||||
OLIVE_ASSERT(track->Blocks().at(2) == c);
|
||||
|
||||
// Test undo
|
||||
command.undo();
|
||||
command.undo_now();
|
||||
|
||||
OLIVE_ASSERT(track->Blocks().size() == 5);
|
||||
OLIVE_ASSERT(track->Blocks().at(0) == a);
|
||||
@@ -337,7 +337,7 @@ OLIVE_ADD_TEST(ReplaceBlockWithGap_ClipsAndGaps)
|
||||
rational original_length_of_b = b->length();
|
||||
|
||||
TrackReplaceBlockWithGapCommand command(track, a);
|
||||
command.redo();
|
||||
command.redo_now();
|
||||
|
||||
// A should be removed and B should take its place
|
||||
OLIVE_ASSERT(track->Blocks().size() == 4);
|
||||
@@ -349,7 +349,7 @@ OLIVE_ADD_TEST(ReplaceBlockWithGap_ClipsAndGaps)
|
||||
OLIVE_ASSERT(b->length() == original_length_of_a + original_length_of_b);
|
||||
|
||||
// Test undo
|
||||
command.undo();
|
||||
command.undo_now();
|
||||
|
||||
OLIVE_ASSERT(track->Blocks().size() == 5);
|
||||
OLIVE_ASSERT(track->Blocks().at(0) == a);
|
||||
@@ -368,7 +368,7 @@ OLIVE_ADD_TEST(ReplaceBlockWithGap_ClipsAndGaps)
|
||||
rational original_length_of_d = d->length();
|
||||
|
||||
TrackReplaceBlockWithGapCommand command(track, c);
|
||||
command.redo();
|
||||
command.redo_now();
|
||||
|
||||
// C and D should be removed, and B should take both of their places
|
||||
OLIVE_ASSERT(track->Blocks().size() == 3);
|
||||
@@ -378,7 +378,7 @@ OLIVE_ADD_TEST(ReplaceBlockWithGap_ClipsAndGaps)
|
||||
OLIVE_ASSERT(b->length() == original_length_of_b + original_length_of_c + original_length_of_d);
|
||||
|
||||
// Test undo
|
||||
command.undo();
|
||||
command.undo_now();
|
||||
|
||||
OLIVE_ASSERT(track->Blocks().size() == 5);
|
||||
OLIVE_ASSERT(track->Blocks().at(0) == a);
|
||||
@@ -401,7 +401,7 @@ OLIVE_ADD_TEST(ReplaceBlockWithGap_ClipsAndGaps)
|
||||
TrackReplaceBlockWithGapCommand command(track, e);
|
||||
rational original_length_of_d = d->length();
|
||||
rational original_length_of_e = e->length();
|
||||
command.redo();
|
||||
command.redo_now();
|
||||
|
||||
// E should be removed and D should have taken its place
|
||||
OLIVE_ASSERT(track->Blocks().size() == 5);
|
||||
@@ -412,7 +412,7 @@ OLIVE_ADD_TEST(ReplaceBlockWithGap_ClipsAndGaps)
|
||||
OLIVE_ASSERT(track->Blocks().at(4) == f);
|
||||
OLIVE_ASSERT(d->length() == original_length_of_d + original_length_of_e);
|
||||
|
||||
command.undo();
|
||||
command.undo_now();
|
||||
|
||||
OLIVE_ASSERT(track->Blocks().size() == 6);
|
||||
OLIVE_ASSERT(track->Blocks().at(0) == a);
|
||||
@@ -466,7 +466,7 @@ OLIVE_ADD_TEST(ReplaceBlockWithGap_ClipsAndTransitions)
|
||||
{
|
||||
// Replace A with gap
|
||||
TrackReplaceBlockWithGapCommand command(track, a);
|
||||
command.redo();
|
||||
command.redo_now();
|
||||
|
||||
// A should be replaced with a gap and so should A_IN since A was the only clip connected to it.
|
||||
// Also A_TO_B should only be connected to B now
|
||||
@@ -476,7 +476,7 @@ OLIVE_ADD_TEST(ReplaceBlockWithGap_ClipsAndTransitions)
|
||||
OLIVE_ASSERT(track->Blocks().at(2) == b);
|
||||
OLIVE_ASSERT(track->Blocks().at(3) == b_out);
|
||||
|
||||
command.undo();
|
||||
command.undo_now();
|
||||
|
||||
OLIVE_ASSERT(track->Blocks().size() == 5);
|
||||
OLIVE_ASSERT(track->Blocks().at(0) == a_in);
|
||||
@@ -518,7 +518,7 @@ OLIVE_ADD_TEST(InsertGaps_SingleTrack)
|
||||
{
|
||||
// Insert gap at the start of the track, all blocks should be unsplit and shifted to the right
|
||||
TrackListInsertGaps command(list, 0, 2);
|
||||
command.redo();
|
||||
command.redo_now();
|
||||
|
||||
OLIVE_ASSERT(track->Blocks().size() == 4);
|
||||
OLIVE_ASSERT(dynamic_cast<GapBlock *>(track->Blocks().at(0)));
|
||||
@@ -527,7 +527,7 @@ OLIVE_ADD_TEST(InsertGaps_SingleTrack)
|
||||
OLIVE_ASSERT(track->Blocks().at(2) == b);
|
||||
OLIVE_ASSERT(track->Blocks().at(3) == c);
|
||||
|
||||
command.undo();
|
||||
command.undo_now();
|
||||
|
||||
OLIVE_ASSERT(track->Blocks().size() == 3);
|
||||
OLIVE_ASSERT(track->Blocks().at(0) == a);
|
||||
@@ -538,7 +538,7 @@ OLIVE_ADD_TEST(InsertGaps_SingleTrack)
|
||||
{
|
||||
// Insert gap in the middle of block A, block A should be halved with a copy at 2 and the gap at 1
|
||||
TrackListInsertGaps command(list, rational(1, 2), 2);
|
||||
command.redo();
|
||||
command.redo_now();
|
||||
|
||||
OLIVE_ASSERT(track->Blocks().size() == 5);
|
||||
OLIVE_ASSERT(track->Blocks().at(0) == a);
|
||||
@@ -548,7 +548,7 @@ OLIVE_ADD_TEST(InsertGaps_SingleTrack)
|
||||
OLIVE_ASSERT(track->Blocks().at(3) == b);
|
||||
OLIVE_ASSERT(track->Blocks().at(4) == c);
|
||||
|
||||
command.undo();
|
||||
command.undo_now();
|
||||
|
||||
OLIVE_ASSERT(track->Blocks().size() == 3);
|
||||
OLIVE_ASSERT(track->Blocks().at(0) == a);
|
||||
@@ -560,7 +560,7 @@ OLIVE_ADD_TEST(InsertGaps_SingleTrack)
|
||||
{
|
||||
// Insert gap between block A and B, blocks should be unsplit with a gap at 1
|
||||
TrackListInsertGaps command(list, 1, 2);
|
||||
command.redo();
|
||||
command.redo_now();
|
||||
|
||||
OLIVE_ASSERT(track->Blocks().size() == 4);
|
||||
OLIVE_ASSERT(track->Blocks().at(0) == a);
|
||||
@@ -568,7 +568,7 @@ OLIVE_ADD_TEST(InsertGaps_SingleTrack)
|
||||
OLIVE_ASSERT(track->Blocks().at(2) == b);
|
||||
OLIVE_ASSERT(track->Blocks().at(3) == c);
|
||||
|
||||
command.undo();
|
||||
command.undo_now();
|
||||
|
||||
OLIVE_ASSERT(track->Blocks().size() == 3);
|
||||
OLIVE_ASSERT(track->Blocks().at(0) == a);
|
||||
@@ -579,14 +579,14 @@ OLIVE_ADD_TEST(InsertGaps_SingleTrack)
|
||||
{
|
||||
// Insert gap at end, nothing should be added
|
||||
TrackListInsertGaps command(list, 3, 2);
|
||||
command.redo();
|
||||
command.redo_now();
|
||||
|
||||
OLIVE_ASSERT(track->Blocks().size() == 3);
|
||||
OLIVE_ASSERT(track->Blocks().at(0) == a);
|
||||
OLIVE_ASSERT(track->Blocks().at(1) == b);
|
||||
OLIVE_ASSERT(track->Blocks().at(2) == c);
|
||||
|
||||
command.undo();
|
||||
command.undo_now();
|
||||
|
||||
OLIVE_ASSERT(track->Blocks().size() == 3);
|
||||
OLIVE_ASSERT(track->Blocks().at(0) == a);
|
||||
|
||||
Reference in New Issue
Block a user