36 setText(QApplication::translate(
"VuoEditorWindow",
"Change Node"));
37 this->window = window;
40 this->oldNode = oldNode;
41 this->newNode = newNode;
45 this->operationInvolvesGenericPort =
false;
47 this->operationInvolvesGenericPort =
true;
50 removeStrandedAttachments();
83 if (operationInvolvesGenericPort)
99 if (operationInvolvesGenericPort)
109 void VuoCommandChangeNode::swapNodes()
117 for (vector<VuoRendererNode *>::iterator i = collapsedTypecasts.begin(); i != collapsedTypecasts.end(); ++i)
120 for (vector<pair<VuoPort *, VuoPublishedPort *> >::iterator i = revertedPublishedInternalExternalPortCombinations.begin(); i != revertedPublishedInternalExternalPortCombinations.end(); ++i)
122 bool unpublishIsolatedExternalPort =
false;
130 for (map<VuoPort *, string>::iterator i = constantValueForOriginalPort.begin(); i != constantValueForOriginalPort.end(); ++i)
132 VuoPort *oldInputPort = (*i).first;
133 VuoPort *newInputPort = updatedPortForOriginalPort[oldInputPort];
139 for (set<VuoCable *>::iterator i = outgoingCables.begin(); i != outgoingCables.end(); ++i)
142 updatedPortForOriginalPort[originalFromPortForCable[*i] ],
143 updatedPortForOriginalPort[originalToPortForCable[*i] ],
147 for (set<VuoCable *>::iterator i = incomingCables.begin(); i != incomingCables.end(); ++i)
150 updatedPortForOriginalPort[originalFromPortForCable[*i] ],
151 updatedPortForOriginalPort[originalToPortForCable[*i] ],
156 for (vector<pair<VuoPort *, VuoPublishedPort *> >::iterator i = revertedPublishedInternalExternalPortCombinations.begin(); i != revertedPublishedInternalExternalPortCombinations.end(); ++i)
158 if (updatedPortForOriginalPort[(*i).first])
160 bool forceEventOnlyPublication = !publishedConnectionCarriedData[(*i)];
162 updatedPublishedInternalExternalPortCombinations.push_back(make_pair(updatedPortForOriginalPort[(*i).first], updatedExternalPublishedPort));
163 publishedConnectionCarriedData[make_pair(updatedPortForOriginalPort[(*i).first], updatedExternalPublishedPort)] = publishedConnectionCarriedData[(*i)];
168 for (vector<VuoRendererNode *>::iterator i = collapsedTypecasts.begin(); i != collapsedTypecasts.end(); ++i)
170 if (updatedPortForOriginalPort[hostPortForTypecast[*i] ])
176 foreach (
VuoCable *cable, incomingCablesForTypecast[*i])
179 for (vector<pair<VuoPort *, VuoPublishedPort *> >::iterator j = publishedInternalExternalPortCombinationsForTypecast[*i].begin(); j != publishedInternalExternalPortCombinationsForTypecast[*i].end(); ++j)
181 bool unpublishIsolatedExternalPort =
false;
203 void VuoCommandChangeNode::createAllMappings()
207 for (vector<VuoPort *>::iterator inputPort = oldInputPorts.begin(); inputPort != oldInputPorts.end(); ++inputPort)
209 if ((*inputPort)->getRenderer()->getDataType())
210 constantValueForOriginalPort[*inputPort] = (*inputPort)->getRenderer()->getConstantAsString();
212 vector<VuoCable *> inputCables = (*inputPort)->getConnectedCables(
true);
213 foreach(
VuoCable *cable, inputCables)
219 this->revertedPublishedInternalExternalPortCombinations.push_back(make_pair(internalPublishedPort, externalPublishedPort));
224 this->incomingCables.insert(cable);
232 this->collapsedTypecasts.push_back(typecastNode);
238 foreach (
VuoCable *cable, typecastInputCables)
244 this->publishedInternalExternalPortCombinationsForTypecast[typecastNode].push_back(make_pair(internalPublishedPort, externalPublishedPort));
250 this->incomingCablesForTypecast[typecastNode].insert(cable);
251 originalFromPortForCable[cable] = cable->
getFromPort();
252 originalToPortForCable[cable] = cable->
getToPort();
256 hostPortForTypecast[typecastNode] = (*inputPort);
262 for(vector<VuoPort *>::iterator outputPort = oldOutputPorts.begin(); outputPort != oldOutputPorts.end(); ++outputPort)
264 vector<VuoCable *> outputCables = (*outputPort)->getConnectedCables(
true);
265 foreach(
VuoCable *cable, outputCables)
271 this->revertedPublishedInternalExternalPortCombinations.push_back(make_pair(internalPublishedPort, externalPublishedPort));
276 this->outgoingCables.insert(cable);
280 createAllPortMappings();
286 void VuoCommandChangeNode::createAllPortMappings()
289 for (set<VuoCable *>::iterator i = incomingCables.begin(); i != incomingCables.end(); ++i)
293 originalFromPortForCable[cable] = cable->
getFromPort();
294 originalToPortForCable[cable] = cable->
getToPort();
298 for (set<VuoCable *>::iterator i = outgoingCables.begin(); i != outgoingCables.end(); ++i)
302 originalFromPortForCable[cable] = cable->
getFromPort();
303 originalToPortForCable[cable] = cable->
getToPort();
308 createSwappedNodePortMappings();
316 void VuoCommandChangeNode::createSwappedNodePortMappings()
318 set<VuoPort *> newPortsClaimed;
333 if ((!oldDataType) ||
336 updatedPortForOriginalPort[oldPort->
getBase()] = newPort;
339 newPortsClaimed.insert(newPort);
356 if ((!oldDataType) ||
359 updatedPortForOriginalPort[oldPort->
getBase()] = newPort;
362 newPortsClaimed.insert(newPort);
374 if (updatedPortForOriginalPort.find(oldPort->
getBase()) != updatedPortForOriginalPort.end())
381 if (newPortsClaimed.find(newPort->
getBase()) != newPortsClaimed.end())
388 updatedPortForOriginalPort[oldPort->
getBase()] = newPort->
getBase();
389 newPortsClaimed.insert(newPort->
getBase());
401 if (updatedPortForOriginalPort.find(oldPort->
getBase()) != updatedPortForOriginalPort.end())
408 if (newPortsClaimed.find(newPort->
getBase()) != newPortsClaimed.end())
415 updatedPortForOriginalPort[oldPort->
getBase()] = newPort->
getBase();
416 newPortsClaimed.insert(newPort->
getBase());
429 if (updatedPortForOriginalPort.find(oldPort->
getBase()) != updatedPortForOriginalPort.end())
437 updatedPortForOriginalPort[oldPort->
getBase()] = newPort;
446 if (updatedPortForOriginalPort.find(oldPort->
getBase()) != updatedPortForOriginalPort.end())
454 updatedPortForOriginalPort[oldPort->
getBase()] = newPort;
463 if (updatedPortForOriginalPort.find(oldPort->
getBase()) != updatedPortForOriginalPort.end())
470 updatedPortForOriginalPort[oldPort->
getBase()] = newPort->
getBase();
477 if (updatedPortForOriginalPort.find(oldPort->
getBase()) != updatedPortForOriginalPort.end())
484 updatedPortForOriginalPort[oldPort->
getBase()] = newPort->
getBase();
496 if (updatedPortForOriginalPort.find(oldPort->
getBase()) != updatedPortForOriginalPort.end())
508 updatedPortForOriginalPort[oldPort->
getBase()] = newPort->
getBase();
521 if (updatedPortForOriginalPort.find(oldPort->
getBase()) != updatedPortForOriginalPort.end())
533 updatedPortForOriginalPort[oldPort->
getBase()] = newPort->
getBase();
548 if (updatedPortForOriginalPort.find(oldPort->
getBase()) != updatedPortForOriginalPort.end())
553 updatedPortForOriginalPort[oldPort->
getBase()] = newPort->
getBase();
563 if (updatedPortForOriginalPort.find(oldPort->
getBase()) != updatedPortForOriginalPort.end())
568 updatedPortForOriginalPort[oldPort->
getBase()] = newPort->
getBase();
576 void VuoCommandChangeNode::removeStrandedAttachments()
578 QList<QGraphicsItem *> strandedAttachments;
580 for(
unsigned int i = 0; i < inputPorts.size(); ++i)
582 if (updatedPortForOriginalPort.find(inputPorts[i]) == updatedPortForOriginalPort.end())
584 set<VuoRendererInputAttachment *> portUpstreamAttachments = inputPorts[i]->getRenderer()->getAllUnderlyingUpstreamInputAttachments();
586 strandedAttachments.append(attachment);
591 removeAttachments.redo();