undo: wrapped redo/undo functions to ensure prepare is called

This commit is contained in:
itsmattkc
2021-07-17 00:14:24 -07:00
parent 84e639606f
commit 52c5617159
29 changed files with 174 additions and 103 deletions
+1
View File
@@ -115,6 +115,7 @@ private:
virtual Project* GetRelevantProject() const override;
protected:
virtual void redo() override;
virtual void undo() override;
+3 -3
View File
@@ -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
View File
@@ -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;
+2 -2
View File
@@ -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));
+2
View File
@@ -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;
+2 -2
View File
@@ -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;
}
+2 -2
View File
@@ -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();
+17 -7
View File
@@ -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();
}
}
+8 -4
View File
@@ -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;
+8 -6
View File
@@ -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_;
+2 -2
View File
@@ -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();
}
}
+13 -4
View File
@@ -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_;
+1
View File
@@ -148,6 +148,7 @@ private:
virtual Project* GetRelevantProject() const override;
protected:
virtual void redo() override;
virtual void undo() override;
+3 -2
View File
@@ -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_);
+6 -4
View File
@@ -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_;
+30 -30
View File
@@ -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);