diff --git a/app/project/projectviewmodel.cpp b/app/project/projectviewmodel.cpp index 5b90fde71..0947a6635 100644 --- a/app/project/projectviewmodel.cpp +++ b/app/project/projectviewmodel.cpp @@ -642,15 +642,15 @@ void ProjectViewModel::OfflineFootageCommand::undo_internal() } } -ProjectViewModel::DeleteFootageCommand::DeleteFootageCommand(ProjectViewModel* model, ItemPtr item, - QList blocks, QUndoCommand* parent) : +ProjectViewModel::DeleteFootageCommand::DeleteFootageCommand(ProjectViewModel *model, ItemPtr item, + QMap nodes, QUndoCommand *parent) + : UndoCommand(parent), model_(model), item_(item), - blocks_(blocks) + nodes_(nodes) { deleteCommand_ = new QUndoCommand(); - removalCommand_ = new QUndoCommand(); } Project *ProjectViewModel::DeleteFootageCommand::GetRelevantProject() const @@ -660,16 +660,32 @@ Project *ProjectViewModel::DeleteFootageCommand::GetRelevantProject() const void ProjectViewModel::DeleteFootageCommand::redo_internal() { + QList sequences = model_->project()->get_items_of_type(Item::kSequence); + + blocks_.clear(); + + foreach (ItemPtr seq, sequences) { + Sequence *s = static_cast(seq.get()); + // Loop through nodes in sequence + foreach (Node *node, s->nodes()) { + // For each Block see if it is linked to one of the Footage nodes add it to the delete list + if (node->IsBlock()) { + foreach (Node *input, nodes_.keys()) { + if (node->GetExclusiveDependencies().contains(input)) blocks_.append(static_cast(node)); + } + } + } + } TimelineWidget::ReplaceBlocksWithGaps(blocks_, true, deleteCommand_); Core::instance()->undo_stack()->pushIfHasChildren(deleteCommand_); - new ProjectViewModel::RemoveItemCommand(model_, item_, removalCommand_); - Core::instance()->undo_stack()->pushIfHasChildren(removalCommand_); + parent_ = item_->parent(); + model_->RemoveChild(parent_, item_.get()); } void ProjectViewModel::DeleteFootageCommand::undo_internal() { - removalCommand_->undo(); + model_->AddChild(parent_, item_); deleteCommand_->undo(); } diff --git a/app/project/projectviewmodel.h b/app/project/projectviewmodel.h index 16e56fffa..05c2671c8 100644 --- a/app/project/projectviewmodel.h +++ b/app/project/projectviewmodel.h @@ -218,7 +218,8 @@ public: class DeleteFootageCommand : public UndoCommand { public: - DeleteFootageCommand(ProjectViewModel* model, ItemPtr item, QList blocks, QUndoCommand* parent = nullptr); + DeleteFootageCommand(ProjectViewModel* model, ItemPtr item, QMap nodes, + QUndoCommand* parent = nullptr); virtual Project* GetRelevantProject() const override; @@ -232,11 +233,13 @@ public: ItemPtr item_; + Item* parent_; + + QMap nodes_; + QList blocks_; QUndoCommand* deleteCommand_; - - QUndoCommand* removalCommand_; }; private: diff --git a/app/widget/projectexplorer/projectexplorer.cpp b/app/widget/projectexplorer/projectexplorer.cpp index dfdaa7228..e666ddf1d 100644 --- a/app/widget/projectexplorer/projectexplorer.cpp +++ b/app/widget/projectexplorer/projectexplorer.cpp @@ -650,7 +650,11 @@ void ProjectExplorer::DeleteSelected() } } } - new ProjectViewModel::DeleteFootageCommand(&model_, item_ptr, blocks, command); + //new ProjectViewModel::DeleteFootageCommand(&model_, item_ptr, blocks, command); + + QUndoCommand* deleteCommand = new QUndoCommand(command); + TimelineWidget::ReplaceBlocksWithGaps(blocks, true, deleteCommand); + //Core::instance()->undo_stack()->pushIfHasChildren(deleteCommand); } if (response == kCancel) {