automatically store block connections in the transitionblock class

Convenience code that automatically returns valid blocks if they're connected.
This commit is contained in:
itsmattkc
2020-01-06 16:29:14 +11:00
parent 464dfb9be0
commit 8391a732b1
2 changed files with 36 additions and 0 deletions
+28
View File
@@ -6,10 +6,14 @@ TransitionBlock::TransitionBlock() :
{
out_block_input_ = new NodeInput("out_block_in", NodeParam::kBuffer);
out_block_input_->set_is_keyframable(false);
connect(out_block_input_, &NodeParam::EdgeAdded, this, &TransitionBlock::BlockConnected);
connect(out_block_input_, &NodeParam::EdgeRemoved, this, &TransitionBlock::BlockDisconnected);
AddInput(out_block_input_);
in_block_input_ = new NodeInput("in_block_in", NodeParam::kBuffer);
in_block_input_->set_is_keyframable(false);
connect(in_block_input_, &NodeParam::EdgeAdded, this, &TransitionBlock::BlockConnected);
connect(in_block_input_, &NodeParam::EdgeRemoved, this, &TransitionBlock::BlockDisconnected);
AddInput(in_block_input_);
}
@@ -43,3 +47,27 @@ rational TransitionBlock::out_offset() const
{
return 0;
}
void TransitionBlock::BlockConnected(NodeEdgePtr edge)
{
if (!edge->output()->parentNode()->IsBlock()) {
return;
}
Block* block = static_cast<Block*>(edge->output()->parentNode());
if (edge->input() == out_block_input_) {
connected_out_block_ = block;
} else {
connected_in_block_ = block;
}
}
void TransitionBlock::BlockDisconnected(NodeEdgePtr edge)
{
if (edge->input() == out_block_input_) {
connected_out_block_ = nullptr;
} else {
connected_in_block_ = nullptr;
}
}
+8
View File
@@ -18,6 +18,9 @@ public:
rational in_offset() const;
rational out_offset() const;
Block* connected_out_block() const;
Block* connected_in_block() const;
private:
NodeInput* out_block_input_;
@@ -27,6 +30,11 @@ private:
Block* connected_in_block_;
private slots:
void BlockConnected(NodeEdgePtr edge);
void BlockDisconnected(NodeEdgePtr edge);
};
#endif // TRANSITIONBLOCK_H