X-Git-Url: https://bilbo.iut-bm.univ-fcomte.fr/and/gitweb/blast.git/blobdiff_plain/0d3590739ff5a4ca9e87c052ac142f5d1d3a68ab..df84660fd98b39737692d57b68c8b2c2d34af0f1:/AbstractBoxItem.cpp?ds=sidebyside diff --git a/AbstractBoxItem.cpp b/AbstractBoxItem.cpp index 8ef607a..925cd6f 100644 --- a/AbstractBoxItem.cpp +++ b/AbstractBoxItem.cpp @@ -99,7 +99,7 @@ void AbstractBoxItem::setRstClkVisible(bool b) { ifaceItem->visible = b; } } - resetInterfacesPosition(); + resetInterfaceItemsPosition(); updateGeometry(InterfaceMove); update(); getScene()->updateConnectionItemsShape(); @@ -114,7 +114,7 @@ void AbstractBoxItem::setWishboneVisible(bool b) { ifaceItem->visible = b; } } - resetInterfacesPosition(); + resetInterfaceItemsPosition(); updateGeometry(InterfaceMove); update(); getScene()->updateConnectionItemsShape(); @@ -128,30 +128,30 @@ void AbstractBoxItem::setRefBlock(AbstractBlock* _refBlock) { nameHeight = fmId.height(); } -void AbstractBoxItem::initInterfaces() { +void AbstractBoxItem::initInterfaceItems() { /* TO DO : creating all needed InterfaceItem, with by default, input at west and output at east */ int orientation = Parameters::West; foreach(AbstractInterface *inter, refBlock->getInterfaces()){ - /* NB: create InterfaceItem for every interfaces, even if they do not have a graphical representation - It will allow to save them in the XML project file and thus to create their equivalent - in the graph while the file is loaded. + /* NB: does not create InterfaceItem for control interfaces. */ - InterfaceItem *item; - if(inter->getDirection() == AbstractInterface::Input){ - orientation = Parameters::West; - } else if(inter->getDirection() == AbstractInterface::Output){ - orientation = Parameters::East; - } else if(inter->getDirection() == AbstractInterface::InOut){ - orientation = Parameters::North; + if (inter->getPurpose() != AbstractInterface::Control) { + InterfaceItem *item; + if(inter->getDirection() == AbstractInterface::Input){ + orientation = Parameters::West; + } else if(inter->getDirection() == AbstractInterface::Output){ + orientation = Parameters::East; + } else if(inter->getDirection() == AbstractInterface::InOut){ + orientation = Parameters::North; + } + item = new InterfaceItem(0.0 , orientation, (ConnectedInterface *)inter, this, params); + interfaces.append(item); } - item = new InterfaceItem(0.0 , orientation, (ConnectedInterface *)inter, this, params); - interfaces.append(item); } } -InterfaceItem* AbstractBoxItem::searchInterfaceByName(QString name) { +InterfaceItem* AbstractBoxItem::searchInterfaceItemByName(QString name) { foreach(InterfaceItem *inter, interfaces){ if(inter->getName() == name) return inter; @@ -159,7 +159,7 @@ InterfaceItem* AbstractBoxItem::searchInterfaceByName(QString name) { return NULL; } -InterfaceItem* AbstractBoxItem::searchInterfaceByRef(ConnectedInterface *ref) { +InterfaceItem* AbstractBoxItem::searchInterfaceItemByRef(ConnectedInterface *ref) { foreach(InterfaceItem *inter, interfaces){ if(inter->refInter == ref) { return inter; @@ -168,16 +168,16 @@ InterfaceItem* AbstractBoxItem::searchInterfaceByRef(ConnectedInterface *ref) { return NULL; } -void AbstractBoxItem::addInterface(InterfaceItem *i, bool resetPosition) { +void AbstractBoxItem::addInterfaceItem(InterfaceItem *i, bool resetPosition) { interfaces.append(i); - if (resetPosition) resetInterfacesPosition(); + if (resetPosition) resetInterfaceItemsPosition(); updateGeometry(InterfaceMove); update(); } -void AbstractBoxItem::removeInterface(InterfaceItem *i) { +void AbstractBoxItem::removeInterfaceItem(InterfaceItem *i) { // NB : removing from model is done in dispatcher - interfaces.removeOne(i); + interfaces.removeAll(i); delete i; //resetInterfacesPosition(); @@ -186,7 +186,7 @@ void AbstractBoxItem::removeInterface(InterfaceItem *i) { } -void AbstractBoxItem::resetInterfacesPosition() { +void AbstractBoxItem::resetInterfaceItemsPosition() { int nbNorth=0, nbSouth=0, nbEast=0, nbWest=0; double cntNorth=1.0,cntSouth=1.0,cntEast=1.0,cntWest=1.0; @@ -231,7 +231,7 @@ void AbstractBoxItem::resetInterfacesPosition() { } } -void AbstractBoxItem::moveInterfaceTo(QPointF pos) { +void AbstractBoxItem::moveInterfaceItemTo(QPointF pos) { double positionRatio; if(currentInterface->getOrientation() == Parameters::North || currentInterface->getOrientation() == Parameters::South){ if(pos.x() < 0){ @@ -269,11 +269,26 @@ void AbstractBoxItem::moveInterfaceTo(QPointF pos) { QRectF AbstractBoxItem::boundingRect() const { // returns a QRectF that contains the block (i.e the main rectangle, interfaces, title, ...) - QPointF p = originPoint - QPointF(nameHeight,nameHeight); - QSizeF s(totalWidth+2*nameHeight,totalHeight+2*nameHeight); + QPointF p = originPoint; + QSizeF s(totalWidth,totalHeight); return QRectF(p,s); } +QRectF AbstractBoxItem::boundingRectInScene() { + /* returns a QRectF in scene coordinates, that contains the block plus + a margin of size arrowWidth+arrowLineLength + */ + int marginConn = params->arrowLineLength+params->arrowWidth; + + QPointF posBox = scenePos(); + posBox.setX(posBox.x()+originPoint.x()-marginConn); + posBox.setY(posBox.y()+originPoint.y()-marginConn); + + QSizeF sizeBox(totalWidth+2*marginConn,totalHeight+2*marginConn); + + return QRectF(posBox,sizeBox); +} + /* isInterface() : return true if there are some interfaces with the given orientation (N,S,E,O) @@ -293,7 +308,7 @@ int AbstractBoxItem::nbInterfacesByOrientation(int orientation) { return nb; } -void AbstractBoxItem::updateInterfacesAndConnections() { +void AbstractBoxItem::updateInterfaceAndConnectionItems() { // update all interfaces positions foreach(InterfaceItem *item, interfaces){ @@ -315,7 +330,7 @@ void AbstractBoxItem::setDimension(int x, int y) { boxHeight = y; } -InterfaceItem* AbstractBoxItem::getInterfaceFromCursor(qreal x, qreal y) { +InterfaceItem* AbstractBoxItem::getInterfaceItemFromCursor(qreal x, qreal y) { foreach(InterfaceItem* inter, interfaces) { if(x > inter->boundingRect().x() && x < (inter->boundingRect().x() + inter->boundingRect().width())){