| 471 | } // redo |
| 472 | |
| 473 | void |
| 474 | ConnectCommand::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 |
nothing calls this directly
no test coverage detected