enhancements to node edge creation

This commit is contained in:
itsmattkc
2019-04-13 10:12:36 +10:00
parent 8cd96eae64
commit e20b1d35c2
8 changed files with 154 additions and 31 deletions
+66 -11
View File
@@ -53,12 +53,58 @@ void NodeEditor::LoadEvent()
node_ui->setPos(effect_ui->GetEffect()->pos());
nodes_.append(node_ui);
}
}
}
LoadEdges();
}
void NodeEditor::ClearEvent()
{
foreach (NodeUI* node, nodes_) {
scene_.removeItem(node);
}
nodes_.clear();
ClearEdges();
}
void NodeEditor::ClearEdges()
{
foreach (NodeEdgeUI* edge, edges_) {
scene_.removeItem(edge);
}
edges_.clear();
DisconnectAllRows();
}
void NodeEditor::LoadEdges()
{
if (!open_effects_.isEmpty()) {
QVector<NodeEdge*> added_edges;
Clip* first_clip = open_effects_.first()->GetEffect()->parent_clip;
for (int i=0;i<open_effects_.size();i++) {
Node* n = open_effects_.at(i)->GetEffect();
if (n->parent_clip == first_clip) {
// Connect all rows to this
for (int j=0;j<n->row_count();j++) {
ConnectRow(n->row(j));
}
// Get node edges
QVector<NodeEdge*> edges = open_effects_.at(i)->GetEffect()->GetAllEdges();
QVector<NodeEdgePtr> edges = n->GetAllEdges();
for (int j=0;j<edges.size();j++) {
NodeEdge* edge = edges.at(j);
NodeEdge* edge = edges.at(j).get();
if (!added_edges.contains(edge)) {
NodeEdgeUI* edge_ui = new NodeEdgeUI(edge);
@@ -75,19 +121,20 @@ void NodeEditor::LoadEvent()
}
}
void NodeEditor::ClearEvent()
void NodeEditor::ConnectRow(EffectRow *row)
{
foreach (NodeUI* node, nodes_) {
scene_.removeItem(node);
if (!connected_rows_.contains(row)) {
connect(row, SIGNAL(EdgesChanged()), this, SLOT(ReloadEdges()));
connected_rows_.append(row);
}
}
nodes_.clear();
foreach (NodeEdgeUI* edge, edges_) {
scene_.removeItem(edge);
void NodeEditor::DisconnectAllRows()
{
for (int i=0;i<connected_rows_.size();i++) {
disconnect(connected_rows_.at(i), SIGNAL(EdgesChanged()), this, SLOT(ReloadEdges()));
}
edges_.clear();
connected_rows_.clear();
}
void NodeEditor::ItemsChanged()
@@ -100,3 +147,11 @@ void NodeEditor::ItemsChanged()
node->Widget()->GetEffect()->SetPos(node->pos());
}
}
void NodeEditor::ReloadEdges()
{
qDebug() << "reload edges called";
ClearEdges();
LoadEdges();
}