From a63e8c871931411b88871e39d7abee9bfe3dbd24 Mon Sep 17 00:00:00 2001 From: itsmattkc Date: Wed, 16 Oct 2019 22:33:52 +1100 Subject: [PATCH] added link support to blocks --- app/node/block/block.cpp | 38 +++++++++++++++++++++++++++++++++++++- app/node/block/block.h | 9 ++++++++- 2 files changed, 45 insertions(+), 2 deletions(-) diff --git a/app/node/block/block.cpp b/app/node/block/block.cpp index 6edf4a394..af7959b8c 100644 --- a/app/node/block/block.cpp +++ b/app/node/block/block.cpp @@ -135,7 +135,7 @@ void Block::EdgeRemovedSlot(NodeEdgePtr edge) } void Block::Refresh() -{ +{ // Set in point to the out point of the previous Node if (previous() != nullptr) { in_point_ = previous()->out(); @@ -228,3 +228,39 @@ void Block::CopyParameters(Block *source, Block *dest) dest->set_length(source->length()); dest->set_media_in(source->media_in()); } + +void Block::Link(Block *a, Block *b) +{ + if (a == b) { + return; + } + + // Assume both clips are already linked since Link() and Unlink() should be the only entry points to this array + if (a->linked_clips_.contains(b)) { + return; + } + + a->linked_clips_.append(b); + b->linked_clips_.append(a); +} + +void Block::Link(QList blocks) +{ + foreach (Block* a, blocks) { + foreach (Block* b, blocks) { + Link(a, b); + } + } +} + +void Block::Unlink(Block *a, Block *b) +{ + a->linked_clips_.removeOne(b); + b->linked_clips_.removeOne(a); +} + +const QVector &Block::linked_clips() +{ + return linked_clips_; +} + diff --git a/app/node/block/block.h b/app/node/block/block.h index 02ee4c519..dfcc02d85 100644 --- a/app/node/block/block.h +++ b/app/node/block/block.h @@ -71,6 +71,11 @@ public: const QString& block_name(); void set_block_name(const QString& name); + static void Link(Block* a, Block* b); + static void Link(QList blocks); + static void Unlink(Block* a, Block* b); + const QVector& linked_clips(); + public slots: /** * @brief Refreshes internal cache of in/out points up to date @@ -104,7 +109,7 @@ protected: static void CopyParameters(Block* source, Block* dest); -private: +private: NodeInput* previous_input_; NodeOutput* block_output_; @@ -121,6 +126,8 @@ private: QString block_name_; + QVector linked_clips_; + private slots: void EdgeAddedSlot(NodeEdgePtr edge);