X-Git-Url: https://bilbo.iut-bm.univ-fcomte.fr/and/gitweb/blast.git/blobdiff_plain/e5af659f87bcb199d6a5f10f09b311138351d0f3..7b1c7e44123b9b2626205a89e27b2a4712ea30c6:/BoxItem.cpp?ds=sidebyside diff --git a/BoxItem.cpp b/BoxItem.cpp index a107198..c473e6f 100644 --- a/BoxItem.cpp +++ b/BoxItem.cpp @@ -33,9 +33,9 @@ BoxItem::BoxItem(AbstractBlock *_refBlock, setZValue(100); setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable | QGraphicsItem::ItemSendsGeometryChanges); - initInterfaces(); + initInterfaceItems(); updateGeometry(InterfaceMove); - resetInterfacesPosition(); + resetInterfaceItemsPosition(); QPointF initPos = QPointF(0.0,0.0) - originPoint; setPos(initPos); //cout << "total size of block: " << totalWidth << "," << totalHeight << endl; @@ -173,7 +173,7 @@ bool BoxItem::updateGeometry(ChangeType type) { } } if (boxSizeChanged) { - updateInterfacesAndConnections(); + updateInterfaceAndConnectionItems(); } @@ -207,11 +207,18 @@ bool BoxItem::updateGeometry(ChangeType type) { return false; } -void BoxItem::interfaceRenamed() { +void BoxItem::nameChanged() { + + QFontMetrics fmId(params->defaultBlockFont); + nameWidth = fmId.width(refBlock->getName()); + nameHeight = fmId.height(); + if (updateGeometry(InterfaceMove)) { //cout << "must recompute group item geometry" << endl; (getScene()->getGroupItem())->updateShape(); - } + } + // force the update in case of size has not changed + update(); } void BoxItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event) { @@ -286,7 +293,7 @@ void BoxItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event) { } else if(params->editState == Parameters::EditInterfaceMove) { prepareGeometryChange(); - moveInterfaceTo(event->pos()); + moveInterfaceItemTo(event->pos()); // recompute the geometry of the block if (updateGeometry(InterfaceMove)) { //cout << "must recompute group item geometry" << endl; @@ -316,7 +323,7 @@ void BoxItem::mousePressEvent(QGraphicsSceneMouseEvent *event) { dispatcher->setCurrentGroupWidget(getScene()->getGroupWidget()); if ((mode == GroupScene::AddConnection) && (params->cursorState == Parameters::CursorOnInterface)) { - InterfaceItem *inter = getInterfaceFromCursor(x,y); + InterfaceItem *inter = getInterfaceItemFromCursor(x,y); if (inter != NULL) { if (params->editState == Parameters::EditNoOperation) { @@ -335,9 +342,9 @@ void BoxItem::mousePressEvent(QGraphicsSceneMouseEvent *event) { } } else if (mode == GroupScene::ItemEdition) { - setZValue(zValue()+100); + //setZValue(zValue()+100); if (params->cursorState == Parameters::CursorOnInterface) { - InterfaceItem *inter = getInterfaceFromCursor(x,y); + InterfaceItem *inter = getInterfaceItemFromCursor(x,y); if (inter != NULL) { if (inter == currentInterface) { params->setEditState(Parameters::EditInterfaceDeselect); @@ -366,7 +373,7 @@ void BoxItem::mousePressEvent(QGraphicsSceneMouseEvent *event) { void BoxItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) { - setZValue(zValue()-100); + //setZValue(zValue()-100); int mode = getScene()->getEditionMode(); @@ -387,10 +394,12 @@ void BoxItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) { else if (params->editState == Parameters::EditCloseConnection) { InterfaceItem* iface1 = getScene()->getSelectedInterface(1); InterfaceItem* iface2 = getScene()->getSelectedInterface(2); - bool ok = dispatcher->connect(iface1,iface2); + bool ok = dispatcher->createConnection(iface1,iface2); if (ok) { iface1->selected = false; - // no update needed since the whole scene will be repainted + update(iface1->boundingRect()); + iface2->selected = false; + update(iface2->boundingRect()); getScene()->setSelectedInterface(1,NULL); getScene()->setSelectedInterface(2,NULL); params->setEditState(Parameters::EditNoOperation); @@ -420,7 +429,7 @@ void BoxItem::hoverMoveEvent(QGraphicsSceneHoverEvent * event) { int mode = getScene()->getEditionMode(); if (mode == GroupScene::AddConnection) { - InterfaceItem* iface = getInterfaceFromCursor(x,y); + InterfaceItem* iface = getInterfaceItemFromCursor(x,y); if (iface != NULL) { params->cursorState = Parameters::CursorOnInterface; setCursor(Qt::PointingHandCursor); @@ -434,7 +443,7 @@ void BoxItem::hoverMoveEvent(QGraphicsSceneHoverEvent * event) { int marginE = 5; int marginS = 5; - InterfaceItem* iface = getInterfaceFromCursor(x,y); + InterfaceItem* iface = getInterfaceItemFromCursor(x,y); if (iface != NULL) { params->cursorState = Parameters::CursorOnInterface; setCursor(Qt::PointingHandCursor); @@ -476,27 +485,28 @@ void BoxItem::hoverMoveEvent(QGraphicsSceneHoverEvent * event) { } } } - QGraphicsItem::hoverMoveEvent(event); + //QGraphicsItem::hoverMoveEvent(event); + event->ignore(); } -void BoxItem::contextMenuEvent(QGraphicsSceneContextMenuEvent * event) { - +void BoxItem::contextMenuEvent(QGraphicsSceneContextMenuEvent * event) { + QMenu menu; QAction* titleAction = NULL; QAction* removeAction = NULL; QAction* duplicateAction = NULL; QAction* renameAction = NULL; - QAction* connectToGroup = NULL; - QAction* disconnectFromGroup = NULL; + QAction* connectToGroup = NULL; QAction* showProperties = NULL; QAction* cloneInterface = NULL; QAction* openWindow = NULL; QAction* showRstClkIface = NULL; QAction* showWishboneIface = NULL; QAction* showParameters = NULL; + QAction* showPatterns = NULL; - InterfaceItem* ifaceItem = getInterfaceFromCursor(event->pos().x(), event->pos().y()); + InterfaceItem* ifaceItem = getInterfaceItemFromCursor(event->pos().x(), event->pos().y()); // menu for interface if( ifaceItem != NULL){ @@ -512,7 +522,6 @@ void BoxItem::contextMenuEvent(QGraphicsSceneContextMenuEvent * event) { ConnectedInterface* ifaceGroup = NULL; bool canRemove = true; - if ((iface->getDirection() == AbstractInterface::Input) && (iface->getConnectedFrom() == NULL)) { connectToGroup = menu.addAction("Connect to group input"); } @@ -520,22 +529,14 @@ void BoxItem::contextMenuEvent(QGraphicsSceneContextMenuEvent * event) { connectToGroup = menu.addAction("Connect to group output"); } else if (iface->getConnectionFromParentGroup() != NULL) { - ifaceGroup = iface->getConnectionFromParentGroup(); - //if ((!ifaceGroup->isConnectedFrom()) || (!ifaceGroup->isConnectedTo())) { - if (!ifaceGroup->isConnectedFrom()) { - disconnectFromGroup = menu.addAction("Disconnect from group"); - } - else { + ifaceGroup = iface->getConnectionFromParentGroup(); + if (ifaceGroup->isConnectedFrom()) { canRemove = false; } } else if (iface->getConnectionToParentGroup() != NULL) { - ifaceGroup = iface->getConnectionToParentGroup(); - //if ((!ifaceGroup->isConnectedFrom()) || (!ifaceGroup->isConnectedTo())) { - if (!ifaceGroup->isConnectedTo()) { - disconnectFromGroup = menu.addAction("Disconnect from group"); - } - else { + ifaceGroup = iface->getConnectionToParentGroup(); + if (ifaceGroup->isConnectedTo()) { canRemove = false; } } @@ -550,6 +551,9 @@ void BoxItem::contextMenuEvent(QGraphicsSceneContextMenuEvent * event) { } } } + if ((iface->getAssociatedIface() != NULL) && (iface->getDirection() == AbstractInterface::Output)) { + showPatterns = menu.addAction("Show patterns"); + } } // menu for blocks (group or func) else { @@ -587,17 +591,24 @@ void BoxItem::contextMenuEvent(QGraphicsSceneContextMenuEvent * event) { dispatcher->removeFunctionalInterface(ifaceItem); } else { - dispatcher->removeBlock(this); + dispatcher->removeBoxItem(this); } } else if (selectedAction == duplicateAction) { - dispatcher->duplicateBlock(this); + dispatcher->duplicateBoxItem(this); } else if(selectedAction == renameAction){ - if(ifaceItem != NULL) + if(ifaceItem != NULL) { dispatcher->renameInterface(ifaceItem); - else - dispatcher->renameBlockOrGroup(this); + } + else { + if (refBlock->isFunctionalBlock()) { + dispatcher->renameFunctionalBlock(this); + } + else if (refBlock->isGroupBlock()) { + dispatcher->renameGroupBlock(childGroupItem); + } + } } else if(selectedAction == showProperties){ dispatcher->showProperties(ifaceItem); @@ -605,11 +616,8 @@ void BoxItem::contextMenuEvent(QGraphicsSceneContextMenuEvent * event) { else if (selectedAction == connectToGroup){ dispatcher->connectInterToGroup(ifaceItem); } - else if (selectedAction == disconnectFromGroup) { - dispatcher->disconnectInterFromGroup(ifaceItem); - } else if (selectedAction == cloneInterface){ - dispatcher->duplicateInterface(ifaceItem); + dispatcher->duplicateInterfaceItem(ifaceItem); } else if (selectedAction == openWindow){ dispatcher->showRaiseWindow(this); @@ -620,10 +628,14 @@ void BoxItem::contextMenuEvent(QGraphicsSceneContextMenuEvent * event) { else if(selectedAction == showWishboneIface) { dispatcher->showWishboneIface(this); } - else if(selectedAction == showParameters){ + else if(selectedAction == showParameters) { new ParametersWindow(refBlock, params, NULL); } + else if(selectedAction == showPatterns) { + dispatcher->showPatterns(ifaceItem); + } } + void BoxItem::loadFunctional(QDomElement funcElement) throw(Exception) { bool ok = false; @@ -676,7 +688,7 @@ void BoxItem::loadFunctional(QDomElement funcElement) throw(Exception) { } GroupBlock* parentGroupBlock = AB_TO_GRP(((GroupItem *)parentItem())->getRefBlock()); - FunctionalBlock* functionalBlock = params->getGraph()->addFunctionalBlock(parentGroupBlock, reference); + FunctionalBlock* functionalBlock = params->getGraph()->createFunctionalBlock(parentGroupBlock, reference); /* NB: addFunctionalBlock creates all interfaces from the reference, which is annoying when reading bif_iface tags. Thus interface are all removed. */ @@ -726,7 +738,7 @@ void BoxItem::loadFunctional(QDomElement funcElement) throw(Exception) { functionalBlock->addInterface(functionalInterface); // searching for control interface - QString ctlRefName = refName+"_ctl"; + QString ctlRefName = refName+"_enb"; ReferenceInterface* ctlRefIface = AI_TO_REF(reference->getIfaceFromName(ctlRefName)); if (ctlRefIface != NULL) { @@ -735,13 +747,13 @@ void BoxItem::loadFunctional(QDomElement funcElement) throw(Exception) { if (! ctlIface->setAssociatedIface(functionalInterface)) { throw(Exception(PROJECTFILE_CORRUPTED)); } - ctlIface->setName(name+"_ctl"); + ctlIface->setName(name+"_enb"); functionalBlock->addInterface(ctlIface); } } // creating InterfaceItem - initInterfaces(); + initInterfaceItems(); // setting them with saved values for(int i=0; isetId(id); interfaceItem->setOrientation(orientation); interfaceItem->setPositionRatio(position); @@ -817,7 +829,7 @@ void BoxItem::save(QXmlStreamWriter &writer) { writer.writeAttribute("id",QString::number(id)); writer.writeAttribute("inside_group",QString::number(childGroupItem->getId())); - QString attrPos = QString::number(pos().x()).append(",").append(QString::number(pos().y())); + QString attrPos = QString::number((int)(pos().x())).append(",").append(QString::number((int)(pos().y()))); writer.writeAttribute("position",attrPos); QString attrDim = QString::number(getWidth()).append(",").append(QString::number(getHeight())); writer.writeAttribute("dimension",attrDim);