MCPcopy Create free account
hub / github.com/NatronGitHub/Natron / doConnect

Method doConnect

Gui/NodeGraphUndoRedo.cpp:473–530  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

471} // redo
472
473void
474ConnectCommand::doConnect(const NodeGuiPtr &oldSrc,
475 const NodeGuiPtr &newSrc,
476 const NodeGuiPtr& dst,
477 int inputNb)
478{
479 NodePtr internalDst = dst->getNode();
480 NodePtr internalNewSrc = newSrc ? newSrc->getNode() : NodePtr();
481 NodePtr internalOldSrc = oldSrc ? oldSrc->getNode() : NodePtr();
482 ViewerInstance* isViewer = internalDst->isEffectViewer();
483
484
485 if (isViewer) {
486 ///if the node is an inspector disconnect any current connection between the inspector and the _newSrc
487 for (int i = 0; i < internalDst->getNInputs(); ++i) {
488 if ( (i != inputNb) && (internalDst->getInput(i) == internalNewSrc) ) {
489 internalDst->disconnectInput(i);
490 }
491 }
492 }
493 if (internalOldSrc && internalNewSrc) {
494 internalDst->replaceInput(internalNewSrc, inputNb);
495 } else {
496 if (internalOldSrc && internalNewSrc) {
497 Node::CanConnectInputReturnValue ret = internalDst->canConnectInput(internalNewSrc, inputNb);
498 bool connectionOk = ret == Node::eCanConnectInput_ok ||
499 ret == Node::eCanConnectInput_differentFPS ||
500 ret == Node::eCanConnectInput_differentPars;
501 if (connectionOk) {
502 internalDst->replaceInput(internalNewSrc, inputNb);
503 } else {
504 internalDst->disconnectInput( internalDst->getInputIndex( internalOldSrc.get() ) );
505 }
506 } else if (internalOldSrc && !internalNewSrc) {
507 internalDst->disconnectInput( internalDst->getInputIndex( internalOldSrc.get() ) );
508 } else if (!internalOldSrc && internalNewSrc) {
509 Node::CanConnectInputReturnValue ret = internalDst->canConnectInput(internalNewSrc, inputNb);
510 bool connectionOk = ret == Node::eCanConnectInput_ok ||
511 ret == Node::eCanConnectInput_differentFPS ||
512 ret == Node::eCanConnectInput_differentPars;
513 if (connectionOk) {
514 internalDst->connectInput(internalNewSrc, inputNb);
515 } else {
516 internalDst->disconnectInput( internalDst->getInputIndex( internalOldSrc.get() ) );
517 }
518 }
519 }
520
521 dst->refreshEdges();
522 dst->refreshEdgesVisility();
523
524 if (newSrc) {
525 newSrc->refreshEdgesVisility();
526 }
527 if (oldSrc) {
528 oldSrc->refreshEdgesVisility();
529 }
530} // ConnectCommand::doConnect

Callers

nothing calls this directly

Calls 11

replaceInputMethod · 0.80
getInputIndexMethod · 0.80
refreshEdgesMethod · 0.80
refreshEdgesVisilityMethod · 0.80
getNodeMethod · 0.45
getNInputsMethod · 0.45
getInputMethod · 0.45
disconnectInputMethod · 0.45
canConnectInputMethod · 0.45
getMethod · 0.45
connectInputMethod · 0.45

Tested by

no test coverage detected