X-Git-Url: https://bilbo.iut-bm.univ-fcomte.fr/and/gitweb/blast.git/blobdiff_plain/6a0ffdb10d7344d99e04c5518fca2b8295df94be..HEAD:/GroupItem.cpp?ds=sidebyside diff --git a/GroupItem.cpp b/GroupItem.cpp index c165d02..d9e7459 100644 --- a/GroupItem.cpp +++ b/GroupItem.cpp @@ -5,7 +5,7 @@ #include "Dispatcher.h" #include "Parameters.h" #include "BoxItem.h" -#include "SourceItem.h" +#include "StimuliItem.h" #include "AbstractBlock.h" #include "AbstractInterface.h" #include "ConnectedInterface.h" @@ -88,6 +88,9 @@ void GroupItem::setParentItem(BoxItem *_parentItem) { } void GroupItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) { + + if (!visible) return; + if(boxWidth > 0 && boxHeight > 0){ if(selected) painter->setPen(Qt::red); @@ -430,7 +433,7 @@ void GroupItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event) { if (refBlock->isTopGroupBlock()) { QRectF rectGroup = boundingRectInScene(); rectGroup.moveTo(rectGroup.x()+gapX,rectGroup.y()+gapY); - foreach(SourceItem* source, getScene()->getSourceItems()) { + foreach(StimuliItem* source, getScene()->getSourceItems()) { QRectF rectSource = source->boundingRectInScene(); if (rectGroup.intersects(rectSource)) canMove = false; } @@ -683,6 +686,7 @@ void GroupItem::contextMenuEvent(QGraphicsSceneContextMenuEvent *event) { QAction* removeAction = NULL; QAction* renameAction = NULL; QAction* showParameters = NULL; + QAction* addExtClkAction = NULL; InterfaceItem* ifaceItem = getInterfaceItemFromCursor(event->pos().x(), event->pos().y()); @@ -713,6 +717,10 @@ void GroupItem::contextMenuEvent(QGraphicsSceneContextMenuEvent *event) { showParameters = menu.addAction("Show parameters"); } renameAction = menu.addAction("Rename"); + if (refBlock->isTopGroupBlock()) { + addExtClkAction = menu.addAction("Add new external clock/reset"); + } + } QAction* selectedAction = menu.exec(event->screenPos()); @@ -732,7 +740,13 @@ void GroupItem::contextMenuEvent(QGraphicsSceneContextMenuEvent *event) { } else if(selectedAction == showParameters) { new ParametersWindow(refBlock, params, NULL); - } + } + else if (selectedAction == addExtClkAction) { + bool ok = false; + double freq = QInputDialog::getDouble(NULL,"Adding a clkrstgen","External clock frequency (in MHz)",100,0,100000,1,&ok); + if (!ok) return; + dispatcher->addClkRstGenBlock(Dispatcher::Design, freq); + } } InterfaceItem* GroupItem::isHoverInterface(QPointF point) { @@ -802,16 +816,22 @@ void GroupItem::load(QDomElement groupElement) throw(Exception) { if(!ok) throw(Exception(PROJECTFILE_CORRUPTED)); GroupInterface *groupIface = new GroupInterface(groupBlock,name,direction,purpose); - GroupInterface *groupCtlIface = new GroupInterface(groupBlock,name+"_enb",direction,AbstractInterface::Control); - groupCtlIface->setAssociatedIface(groupIface); - - InterfaceItem *interfaceItem = new InterfaceItem(position,orientation,groupIface,this,params); - interfaceItem->setId(id); - groupBlock->addInterface(groupIface); - groupBlock->addInterface(groupCtlIface); + bool show = false; + if ((groupBlock->isTopGroupBlock()) && (purpose == AbstractInterface::Clock)) { + show = true; + } + + InterfaceItem *interfaceItem = new InterfaceItem(position,orientation,groupIface,this,params,show); + interfaceItem->setId(id); addInterfaceItem(interfaceItem, false); - cout << "interface add to " << groupBlock->getName().toStdString() << endl; + + if (purpose == AbstractInterface::Data) { + GroupInterface *groupCtlIface = new GroupInterface(groupBlock,name+"_enb",direction,AbstractInterface::Control); + groupCtlIface->setAssociatedIface(groupIface); + groupBlock->addInterface(groupCtlIface); + } + cout << "interface " << qPrintable(name) << " added to " << groupBlock->getName().toStdString() << endl; } }