diff --git a/app/dialog/sequence/sequence.h b/app/dialog/sequence/sequence.h index 9e3ac5362..ad9036be4 100644 --- a/app/dialog/sequence/sequence.h +++ b/app/dialog/sequence/sequence.h @@ -115,6 +115,7 @@ private: virtual Project* GetRelevantProject() const override; + protected: virtual void redo() override; virtual void undo() override; diff --git a/app/node/node.cpp b/app/node/node.cpp index 62818716e..23f022641 100644 --- a/app/node/node.cpp +++ b/app/node/node.cpp @@ -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; iredo(); + commands_.at(i)->redo_now(); } } } diff --git a/app/node/node.h b/app/node/node.h index 24727d39d..31c144d8f 100644 --- a/app/node/node.h +++ b/app/node/node.h @@ -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; diff --git a/app/node/project/folder/folder.cpp b/app/node/project/folder/folder.cpp index 336feb6bc..91fda055f 100644 --- a/app/node/project/folder/folder.cpp +++ b/app/node/project/folder/folder.cpp @@ -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)); diff --git a/app/node/project/folder/folder.h b/app/node/project/folder/folder.h index e131adec3..ce71033b6 100644 --- a/app/node/project/folder/folder.h +++ b/app/node/project/folder/folder.h @@ -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; diff --git a/app/node/project/sequence/sequence.cpp b/app/node/project/sequence/sequence.cpp index 4d13704b2..5773e42c5 100644 --- a/app/node/project/sequence/sequence.cpp +++ b/app/node/project/sequence/sequence.cpp @@ -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; } diff --git a/app/task/project/loadotio/loadotio.cpp b/app/task/project/loadotio/loadotio.cpp index dd4428613..1d672ace4 100644 --- a/app/task/project/loadotio/loadotio.cpp +++ b/app/task/project/loadotio/loadotio.cpp @@ -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(); diff --git a/app/undo/undocommand.cpp b/app/undo/undocommand.cpp index 4cf60da80..075348c15 100644 --- a/app/undo/undocommand.cpp +++ b/app/undo/undocommand.cpp @@ -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(); +} + } diff --git a/app/undo/undocommand.h b/app/undo/undocommand.h index f7fb98579..f63ae745e 100644 --- a/app/undo/undocommand.h +++ b/app/undo/undocommand.h @@ -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_; diff --git a/app/widget/keyframeview/keyframeviewundo.h b/app/widget/keyframeview/keyframeviewundo.h index e8fc3aa55..c994d6f1a 100644 --- a/app/widget/keyframeview/keyframeviewundo.h +++ b/app/widget/keyframeview/keyframeviewundo.h @@ -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; diff --git a/app/widget/nodeparamview/nodeparamviewundo.h b/app/widget/nodeparamview/nodeparamviewundo.h index ffc2f5b99..2e9623652 100644 --- a/app/widget/nodeparamview/nodeparamviewundo.h +++ b/app/widget/nodeparamview/nodeparamviewundo.h @@ -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; diff --git a/app/widget/nodeview/nodeview.h b/app/widget/nodeview/nodeview.h index e4337769e..dafb58812 100644 --- a/app/widget/nodeview/nodeview.h +++ b/app/widget/nodeview/nodeview.h @@ -143,12 +143,13 @@ private: public: NodeViewAttachNodesToCursor(NodeView* view, const QVector& 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_; diff --git a/app/widget/nodeview/nodeviewundo.cpp b/app/widget/nodeview/nodeviewundo.cpp index f62f2a497..0197dcf94 100644 --- a/app/widget/nodeview/nodeviewundo.cpp +++ b/app/widget/nodeview/nodeviewundo.cpp @@ -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(); } } diff --git a/app/widget/nodeview/nodeviewundo.h b/app/widget/nodeview/nodeviewundo.h index b661ce8da..c2f5aae8e 100644 --- a/app/widget/nodeview/nodeviewundo.h +++ b/app/widget/nodeview/nodeviewundo.h @@ -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(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 nodes_; diff --git a/app/widget/timebased/timebasedwidget.h b/app/widget/timebased/timebasedwidget.h index 1f27300cc..e0cc79b41 100644 --- a/app/widget/timebased/timebasedwidget.h +++ b/app/widget/timebased/timebasedwidget.h @@ -148,6 +148,7 @@ private: virtual Project* GetRelevantProject() const override; + protected: virtual void redo() override; virtual void undo() override; diff --git a/app/widget/timelinewidget/timelinewidget.h b/app/widget/timelinewidget/timelinewidget.h index 6b5ddc7d8..971e57866 100644 --- a/app/widget/timelinewidget/timelinewidget.h +++ b/app/widget/timelinewidget/timelinewidget.h @@ -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_; diff --git a/app/widget/timelinewidget/undo/timelineundocommon.h b/app/widget/timelinewidget/undo/timelineundocommon.h index d25de0679..3a0d28f19 100644 --- a/app/widget/timelinewidget/undo/timelineundocommon.h +++ b/app/widget/timelinewidget/undo/timelineundocommon.h @@ -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; } diff --git a/app/widget/timelinewidget/undo/timelineundogeneral.cpp b/app/widget/timelinewidget/undo/timelineundogeneral.cpp index 6deb5586d..e9b2cda64 100644 --- a/app/widget/timelinewidget/undo/timelineundogeneral.cpp +++ b/app/widget/timelinewidget/undo/timelineundogeneral.cpp @@ -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(); } } diff --git a/app/widget/timelinewidget/undo/timelineundogeneral.h b/app/widget/timelinewidget/undo/timelineundogeneral.h index f1dd6075f..b47587ff5 100644 --- a/app/widget/timelinewidget/undo/timelineundogeneral.h +++ b/app/widget/timelinewidget/undo/timelineundogeneral.h @@ -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; diff --git a/app/widget/timelinewidget/undo/timelineundopointer.cpp b/app/widget/timelinewidget/undo/timelineundopointer.cpp index 0bac3b4af..0954cd41c 100644 --- a/app/widget/timelinewidget/undo/timelineundopointer.cpp +++ b/app/widget/timelinewidget/undo/timelineundopointer.cpp @@ -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; iredo(); + 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; iredo(); + 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(); } } diff --git a/app/widget/timelinewidget/undo/timelineundopointer.h b/app/widget/timelinewidget/undo/timelineundopointer.h index d3abf3a6f..fc7cf6566 100644 --- a/app/widget/timelinewidget/undo/timelineundopointer.h +++ b/app/widget/timelinewidget/undo/timelineundopointer.h @@ -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; diff --git a/app/widget/timelinewidget/undo/timelineundoripple.cpp b/app/widget/timelinewidget/undo/timelineundoripple.cpp index d8716c2e2..4d8ff9fb3 100644 --- a/app/widget/timelinewidget/undo/timelineundoripple.cpp +++ b/app/widget/timelinewidget/undo/timelineundoripple.cpp @@ -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(); } } diff --git a/app/widget/timelinewidget/undo/timelineundoripple.h b/app/widget/timelinewidget/undo/timelineundoripple.h index c98cdc03b..9164ce9f3 100644 --- a/app/widget/timelinewidget/undo/timelineundoripple.h +++ b/app/widget/timelinewidget/undo/timelineundoripple.h @@ -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(); } } diff --git a/app/widget/timelinewidget/undo/timelineundosplit.cpp b/app/widget/timelinewidget/undo/timelineundosplit.cpp index aff11d099..637b1e0a7 100644 --- a/app/widget/timelinewidget/undo/timelineundosplit.cpp +++ b/app/widget/timelinewidget/undo/timelineundosplit.cpp @@ -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& 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; iredo(); + commands_.at(i)->redo_now(); } } } diff --git a/app/widget/timelinewidget/undo/timelineundosplit.h b/app/widget/timelinewidget/undo/timelineundosplit.h index 6e0c1e6d6..82b57ebca 100644 --- a/app/widget/timelinewidget/undo/timelineundosplit.h +++ b/app/widget/timelinewidget/undo/timelineundosplit.h @@ -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(); } } diff --git a/app/widget/timelinewidget/undo/timelineundotrack.h b/app/widget/timelinewidget/undo/timelineundotrack.h index 8e6706f7c..ca2587b5a 100644 --- a/app/widget/timelinewidget/undo/timelineundotrack.h +++ b/app/widget/timelinewidget/undo/timelineundotrack.h @@ -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_); diff --git a/app/widget/timelinewidget/undo/timelineundoworkarea.h b/app/widget/timelinewidget/undo/timelineundoworkarea.h index b44437a47..c431178ec 100644 --- a/app/widget/timelinewidget/undo/timelineundoworkarea.h +++ b/app/widget/timelinewidget/undo/timelineundoworkarea.h @@ -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_); diff --git a/app/window/mainwindow/mainwindowundo.h b/app/window/mainwindow/mainwindowundo.h index 6e048f283..51bc52c64 100644 --- a/app/window/mainwindow/mainwindowundo.h +++ b/app/window/mainwindow/mainwindowundo.h @@ -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_; diff --git a/tests/timeline/timeline-tests.cpp b/tests/timeline/timeline-tests.cpp index 17df4ee03..0f0c266b9 100644 --- a/tests/timeline/timeline-tests.cpp +++ b/tests/timeline/timeline-tests.cpp @@ -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(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);