37 setText(QApplication::translate(
"VuoEditorWindow",
"Change Node"));
38 this->window = window;
41 this->oldNode = oldNode;
42 this->newNode = newNode;
46 this->operationInvolvesGenericPort =
false;
48 this->operationInvolvesGenericPort =
true;
51 removeStrandedAttachments();
84 if (operationInvolvesGenericPort)
100 if (operationInvolvesGenericPort)
110 void VuoCommandChangeNode::swapNodes()
118 for (vector<VuoRendererNode *>::iterator i = collapsedTypecasts.begin(); i != collapsedTypecasts.end(); ++i)
121 for (vector<pair<VuoPort *, VuoPublishedPort *> >::iterator i = revertedPublishedInternalExternalPortCombinations.begin(); i != revertedPublishedInternalExternalPortCombinations.end(); ++i)
123 bool unpublishIsolatedExternalPort =
false;
131 for (map<VuoPort *, string>::iterator i = constantValueForOriginalPort.begin(); i != constantValueForOriginalPort.end(); ++i)
133 VuoPort *oldInputPort = (*i).first;
134 VuoPort *newInputPort = updatedPortForOriginalPort[oldInputPort];
140 for (set<VuoCable *>::iterator i = outgoingCables.begin(); i != outgoingCables.end(); ++i)
143 updatedPortForOriginalPort[originalFromPortForCable[*i] ],
144 updatedPortForOriginalPort[originalToPortForCable[*i] ],
147 if (!cableCarriedData[*i] && (*i)->getRenderer()->effectivelyCarriesData() && (*i)->hasCompiler())
148 (*i)->getCompiler()->setAlwaysEventOnly(
true);
151 for (set<VuoCable *>::iterator i = incomingCables.begin(); i != incomingCables.end(); ++i)
154 updatedPortForOriginalPort[originalFromPortForCable[*i] ],
155 updatedPortForOriginalPort[originalToPortForCable[*i] ],
158 if (!cableCarriedData[*i] && (*i)->getRenderer()->effectivelyCarriesData() && (*i)->hasCompiler())
159 (*i)->getCompiler()->setAlwaysEventOnly(
true);
163 for (vector<pair<VuoPort *, VuoPublishedPort *> >::iterator i = revertedPublishedInternalExternalPortCombinations.begin(); i != revertedPublishedInternalExternalPortCombinations.end(); ++i)
165 if (updatedPortForOriginalPort[(*i).first])
167 bool forceEventOnlyPublication = !publishedConnectionCarriedData[(*i)];
169 updatedPublishedInternalExternalPortCombinations.push_back(make_pair(updatedPortForOriginalPort[(*i).first], updatedExternalPublishedPort));
170 publishedConnectionCarriedData[make_pair(updatedPortForOriginalPort[(*i).first], updatedExternalPublishedPort)] = publishedConnectionCarriedData[(*i)];
175 for (vector<VuoRendererNode *>::iterator i = collapsedTypecasts.begin(); i != collapsedTypecasts.end(); ++i)
177 if (updatedPortForOriginalPort[hostPortForTypecast[*i] ])
183 foreach (
VuoCable *cable, incomingCablesForTypecast[*i])
186 for (vector<pair<VuoPort *, VuoPublishedPort *> >::iterator j = publishedInternalExternalPortCombinationsForTypecast[*i].begin(); j != publishedInternalExternalPortCombinationsForTypecast[*i].end(); ++j)
188 bool unpublishIsolatedExternalPort =
false;
210 void VuoCommandChangeNode::createAllMappings()
214 for (vector<VuoPort *>::iterator inputPort = oldInputPorts.begin(); inputPort != oldInputPorts.end(); ++inputPort)
216 if ((*inputPort)->getRenderer()->getDataType())
217 constantValueForOriginalPort[*inputPort] = (*inputPort)->getRenderer()->getConstantAsString();
219 vector<VuoCable *> inputCables = (*inputPort)->getConnectedCables(
true);
220 foreach(
VuoCable *cable, inputCables)
226 this->revertedPublishedInternalExternalPortCombinations.push_back(make_pair(internalPublishedPort, externalPublishedPort));
232 this->incomingCables.insert(cable);
242 this->collapsedTypecasts.push_back(typecastNode);
248 foreach (
VuoCable *cable, typecastInputCables)
254 this->publishedInternalExternalPortCombinationsForTypecast[typecastNode].push_back(make_pair(internalPublishedPort, externalPublishedPort));
260 this->incomingCablesForTypecast[typecastNode].insert(cable);
261 originalFromPortForCable[cable] = cable->
getFromPort();
262 originalToPortForCable[cable] = cable->
getToPort();
267 hostPortForTypecast[typecastNode] = (*inputPort);
273 for(vector<VuoPort *>::iterator outputPort = oldOutputPorts.begin(); outputPort != oldOutputPorts.end(); ++outputPort)
275 vector<VuoCable *> outputCables = (*outputPort)->getConnectedCables(
true);
276 foreach(
VuoCable *cable, outputCables)
282 this->revertedPublishedInternalExternalPortCombinations.push_back(make_pair(internalPublishedPort, externalPublishedPort));
288 this->outgoingCables.insert(cable);
294 createAllPortMappings();
300 void VuoCommandChangeNode::createAllPortMappings()
303 for (set<VuoCable *>::iterator i = incomingCables.begin(); i != incomingCables.end(); ++i)
307 originalFromPortForCable[cable] = cable->
getFromPort();
308 originalToPortForCable[cable] = cable->
getToPort();
312 for (set<VuoCable *>::iterator i = outgoingCables.begin(); i != outgoingCables.end(); ++i)
316 originalFromPortForCable[cable] = cable->
getFromPort();
317 originalToPortForCable[cable] = cable->
getToPort();
322 createSwappedNodePortMappings();
330 void VuoCommandChangeNode::createSwappedNodePortMappings()
332 set<VuoPort *> newPortsClaimed;
347 if ((!oldDataType) ||
350 updatedPortForOriginalPort[oldPort->
getBase()] = newPort;
353 newPortsClaimed.insert(newPort);
370 if ((!oldDataType) ||
373 updatedPortForOriginalPort[oldPort->
getBase()] = newPort;
376 newPortsClaimed.insert(newPort);
388 if (updatedPortForOriginalPort.find(oldPort->
getBase()) != updatedPortForOriginalPort.end())
395 if (newPortsClaimed.find(newPort->
getBase()) != newPortsClaimed.end())
402 updatedPortForOriginalPort[oldPort->
getBase()] = newPort->
getBase();
403 newPortsClaimed.insert(newPort->
getBase());
415 if (updatedPortForOriginalPort.find(oldPort->
getBase()) != updatedPortForOriginalPort.end())
422 if (newPortsClaimed.find(newPort->
getBase()) != newPortsClaimed.end())
429 updatedPortForOriginalPort[oldPort->
getBase()] = newPort->
getBase();
430 newPortsClaimed.insert(newPort->
getBase());
443 if (updatedPortForOriginalPort.find(oldPort->
getBase()) != updatedPortForOriginalPort.end())
451 updatedPortForOriginalPort[oldPort->
getBase()] = newPort;
460 if (updatedPortForOriginalPort.find(oldPort->
getBase()) != updatedPortForOriginalPort.end())
468 updatedPortForOriginalPort[oldPort->
getBase()] = newPort;
477 if (updatedPortForOriginalPort.find(oldPort->
getBase()) != updatedPortForOriginalPort.end())
484 updatedPortForOriginalPort[oldPort->
getBase()] = newPort->
getBase();
491 if (updatedPortForOriginalPort.find(oldPort->
getBase()) != updatedPortForOriginalPort.end())
498 updatedPortForOriginalPort[oldPort->
getBase()] = newPort->
getBase();
510 if (updatedPortForOriginalPort.find(oldPort->
getBase()) != updatedPortForOriginalPort.end())
522 updatedPortForOriginalPort[oldPort->
getBase()] = newPort->
getBase();
535 if (updatedPortForOriginalPort.find(oldPort->
getBase()) != updatedPortForOriginalPort.end())
547 updatedPortForOriginalPort[oldPort->
getBase()] = newPort->
getBase();
562 if (updatedPortForOriginalPort.find(oldPort->
getBase()) != updatedPortForOriginalPort.end())
567 updatedPortForOriginalPort[oldPort->
getBase()] = newPort->
getBase();
577 if (updatedPortForOriginalPort.find(oldPort->
getBase()) != updatedPortForOriginalPort.end())
582 updatedPortForOriginalPort[oldPort->
getBase()] = newPort->
getBase();
590 void VuoCommandChangeNode::removeStrandedAttachments()
592 QList<QGraphicsItem *> strandedAttachments;
594 for(
unsigned int i = 0; i < inputPorts.size(); ++i)
596 if (updatedPortForOriginalPort.find(inputPorts[i]) == updatedPortForOriginalPort.end())
598 set<VuoRendererInputAttachment *> portUpstreamAttachments = inputPorts[i]->getRenderer()->getAllUnderlyingUpstreamInputAttachments();
600 strandedAttachments.append(attachment);
605 removeAttachments.redo();