X-Git-Url: https://bilbo.iut-bm.univ-fcomte.fr/and/gitweb/blast.git/blobdiff_plain/d111eaf49741a0a79d372445f97c314a637e331e..3bbc311e444c1ef9ac66dd6861fb0acb13ddb72a:/Dispatcher.cpp diff --git a/Dispatcher.cpp b/Dispatcher.cpp index e7846b4..238c7e5 100644 --- a/Dispatcher.cpp +++ b/Dispatcher.cpp @@ -81,12 +81,12 @@ void Dispatcher::closeCurrentProject() { sceneCounter = 0; } -bool Dispatcher::createConnectionItem(InterfaceItem *iface1, InterfaceItem *iface2) { +bool Dispatcher::createConnection(InterfaceItem *iface1, InterfaceItem *iface2) { ConnectedInterface* ref1 = iface1->refInter; ConnectedInterface* ref2 = iface2->refInter; - ConnectedInterface* asso1 = iface1->refInter->getAssociatedIface(); - ConnectedInterface* asso2 = iface2->refInter->getAssociatedIface(); + ConnectedInterface* asso1 = (ConnectedInterface*)(iface1->refInter->getAssociatedIface()); + ConnectedInterface* asso2 = (ConnectedInterface*)(iface2->refInter->getAssociatedIface()); // connect both interface bool ok1 = false; @@ -95,21 +95,25 @@ bool Dispatcher::createConnectionItem(InterfaceItem *iface1, InterfaceItem *ifac // test the ref1->ref2 connection if ((ref1->canConnectTo(ref2)) && (ref2->canConnectFrom(ref1))) { ref1->connectTo(ref2); + /* ref2->connectFrom(ref1); if ((asso1 != NULL) && (asso2 != NULL)) { asso1->connectTo(asso2); asso2->connectFrom(asso1); } + */ ok1 = true; } // if the frist one did not work, test ref2->ref1 if ((ok1 == false) && (ref2->canConnectTo(ref1)) && (ref1->canConnectFrom(ref2))) { ref2->connectTo(ref1); + /* ref1->connectFrom(ref2); if ((asso1 != NULL) && (asso2 != NULL)) { asso1->connectFrom(asso2); asso2->connectTo(asso1); } + */ ok2 = true; } if ((ok1 == true) || (ok2 == true)) { @@ -905,8 +909,7 @@ void Dispatcher::removeConnection(ConnectionItem *conn) { // process the special case source->group apart if (fromIfaceItem->getOwner()->isSourceItem()) { // remove from graph - fromInter->removeConnectedTo(toInter); - toInter->clearConnectedFrom(); + fromInter->disconnectTo(toInter); // remove from scene fromIfaceItem->removeConnectionItem(conn); toIfaceItem->removeConnectionItem(conn); @@ -931,16 +934,8 @@ void Dispatcher::removeConnection(ConnectionItem *conn) { #ifdef DEBUG cout << "removing connections from graph ..." ; #endif - if (fromInter->getDirection() == AbstractInterface::InOut) { - fromInter->clearConnectedTo(); - fromInter->clearConnectedFrom(); - toInter->clearConnectedTo(); - toInter->clearConnectedFrom(); - } - else { - fromInter->removeConnectedTo(toInter); - toInter->clearConnectedFrom(); - } + fromInter->disconnectTo(toInter); + #ifdef DEBUG cout << "done." << endl ; #endif @@ -958,6 +953,10 @@ void Dispatcher::removeConnection(ConnectionItem *conn) { #endif if (groupIfaceItem != NULL) { + + bool groupInterRemove = false; + if ((groupIfaceItem->nter->isConnectedTo() == false) && (groupInter->isConnectedFrom() == false)) groupInterRemove = true; + ConnectedInterface* groupInter = groupIfaceItem->refInter; groupItem->removeInterface(groupIfaceItem); @@ -1002,32 +1001,13 @@ void Dispatcher::connectInterToGroup(InterfaceItem *item){ // creating/adding the group control interface in the graph model GroupInterface *groupCtlInter = new GroupInterface(parentBlock,refInter->getName()+"_group_enb",refInter->getDirection(),AbstractInterface::Control); groupCtlInter->setAssociatedIface(groupInter); - parentItem->getRefBlock()->addInterface(groupCtlInter); - - // connect both interface - bool ok = true; - if (refInter->getDirection() == AbstractInterface::Output) { - ok = refInter->connectTo(groupInter); - ok = ok & groupInter->connectFrom(refInter); - } - else if (refInter->getDirection() == AbstractInterface::Input) { - ok = groupInter->connectTo(refInter); - ok = ok & refInter->connectFrom(groupInter); - } - else if (refInter->getDirection() == AbstractInterface::InOut) { - ok = refInter->connectTo(groupInter); - ok = ok & groupInter->connectFrom(refInter); - ok = ok & groupInter->connectTo(refInter); - ok = ok & refInter->connectFrom(groupInter); - } - if (!ok) { - cerr << "abnormal case while connecting a block iface to its parent group" << endl; - } + parentItem->getRefBlock()->addInterface(groupCtlInter); // creating/adding the group interface in the current scene model, and connection item InterfaceItem *groupIfaceItem = new InterfaceItem(0,item->getOrientation(),groupInter,parentItem,params); parentItem->addInterface(groupIfaceItem,true); - parentItem->getScene()->createConnectionItem(item, groupIfaceItem); + // creating the connection, in graph and with an item + createConnection(item, groupIfaceItem); // if groupItem is not topGroup, must also add a new interface to the parent BlockItem BoxItem* parent2Item = parentItem->getParentItem();