X-Git-Url: https://bilbo.iut-bm.univ-fcomte.fr/and/gitweb/blast.git/blobdiff_plain/d30c9cf675ad7141d1c8e31d2e72315267d45cf2..1b7818e18ed7bcf3464e307b97c6e0e6d72cc69b:/GroupScene.cpp?ds=sidebyside diff --git a/GroupScene.cpp b/GroupScene.cpp index daf6bf1..0eaa8a1 100644 --- a/GroupScene.cpp +++ b/GroupScene.cpp @@ -5,6 +5,7 @@ #include "GroupWidget.h" #include "GroupItem.h" #include "BoxItem.h" +#include "SourceItem.h" #include "ConnectionItem.h" #include "InterfaceItem.h" #include "AbstractBlock.h" @@ -27,11 +28,27 @@ GroupScene::GroupScene(GroupScene *_parentScene, GroupWidget *_window, Dispatche } GroupScene::~GroupScene() { - blockItems.clear(); + static QString fctName = "GroupScene::~GroupScene()"; +#ifdef DEBUG_FCTNAME + cout << "call to " << qPrintable(fctName) << endl; +#endif + + boxItems.clear(); connectionItems.clear(); groupItem = NULL; } +/* +void GroupScene::mouseMoveEvent(QGraphicsSceneMouseEvent *event) { + + //QGraphicsScene::mouseMoveEvent(event); + + QPointF p = event->scenePos(); + cout << p.x() << "," << p.y() << endl; + +} +*/ + void GroupScene::setSelectedInterface(int id, InterfaceItem* iface) { if ((id < 1)|| (id > 2)) return; selectedInterfaces[id-1] = iface; @@ -44,7 +61,7 @@ InterfaceItem* GroupScene::getSelectedInterface(int id) { QList GroupScene::getSelectedBlocks() { QList lst; - foreach(BoxItem *item, blockItems){ + foreach(BoxItem *item, boxItems){ if (item->isSelected()){ lst.append(item); } @@ -55,7 +72,12 @@ QList GroupScene::getSelectedBlocks() { int GroupScene::setItemsId(int countInit) { int counter = countInit; groupItem->setId(counter++); - foreach(BoxItem *item, blockItems){ + if (isTopScene()) { + foreach(SourceItem *item, sourceItems){ + item->setId(counter++); + } + } + foreach(BoxItem *item, boxItems){ item->setId(counter++); } return counter; @@ -66,7 +88,14 @@ int GroupScene::setInterfacesId(int countInit) { foreach(InterfaceItem* inter, groupItem->getInterfaces()){ inter->setId(counter++); } - foreach(BoxItem *item, blockItems){ + if (isTopScene()) { + foreach(SourceItem *item, sourceItems){ + foreach(InterfaceItem* inter, item->getInterfaces()){ + inter->setId(counter++); + } + } + } + foreach(BoxItem *item, boxItems){ foreach(InterfaceItem* inter, item->getInterfaces()){ inter->setId(counter++); } @@ -74,48 +103,94 @@ int GroupScene::setInterfacesId(int countInit) { return counter; } -QList GroupScene::getGroupAndBlocks() { +BoxItem *GroupScene::createBoxItem(AbstractBlock *block, BoxItem::Position hPos, BoxItem::Position vPos, AbstractBoxItem::LockType lock, BoxItem::SpanType span) { - QList lst; - lst.append(groupItem); - foreach(BoxItem *item, blockItems){ - lst.append(item); + BoxItem* item = new BoxItem(block,dispatcher,params,groupItem, lock, span); + item->setZValue(1); + // add item from the QList + boxItems.append(item); + // repainting the group + groupItem->updateShape(); + // center the new block + double x,y; + if (hPos == BoxItem::Left) { + x = 0; } - return lst; -} - -BoxItem *GroupScene::createBlockItem(AbstractBlock *block) { + else if (hPos == BoxItem::Center) { + x = (groupItem->getWidth()-item->getTotalWidth())/2.0; + } + else if (hPos == BoxItem::Right) { + x = groupItem->getWidth()-item->getTotalWidth(); + } + if (vPos == BoxItem::Top) { + y = 0; + } + else if (vPos == BoxItem::Center) { + y = (groupItem->getHeight()-item->getTotalHeight())/2.0; + } + else if (vPos == BoxItem::Bottom) { + y = groupItem->getHeight()-item->getTotalHeight(); + } + QPointF newPos(x,y); + newPos = newPos-item->getOriginPoint(); + item->moveTo(newPos); - BoxItem* blockItem = new BoxItem(block,dispatcher,params,groupItem); - blockItem->setZValue(1); - addBlockItem(blockItem); - return blockItem; + return item; } -void GroupScene::addBlockItem(BoxItem* item) { - // add item from the viewport - //addItem(item); +void GroupScene::addBoxItem(BoxItem* item) { // add item from the QList - blockItems.append(item); + boxItems.append(item); + // repainting the group + groupItem->updateShape(); +} + +void GroupScene::removeBoxItem(BoxItem* item) { + // remove item from the viewport + removeItem(item); + // remove item from the QList + boxItems.removeAll(item); // repainting the group groupItem->updateShape(); +} + +SourceItem *GroupScene::createSourceItem(AbstractBlock *block) { + + SourceItem* item = new SourceItem(block,dispatcher,params); + // adding item to the scene + addItem(item); + item->setZValue(1); + // add item from the QList + sourceItems.append(item); // center the new block - QPointF newPos((groupItem->getWidth()-item->getTotalWidth())/2.0, (groupItem->getHeight()-item->getTotalHeight())/2.0); + QPointF groupPos = groupItem->pos(); + QPointF newPos(groupPos.x()-item->getTotalWidth()-50, groupPos.y()); newPos = newPos-item->getOriginPoint(); - item->moveTo(newPos); + item->moveTo(newPos); + return item; +} + +void GroupScene::addSourceItem(SourceItem* item) { + // adding item to the scene + addItem(item); + item->setZValue(1); + // add item from the QList + sourceItems.append(item); } -void GroupScene::removeBlockItem(BoxItem* item) { +void GroupScene::removeSourceItem(SourceItem* item) { // remove item from the viewport removeItem(item); // remove item from the QList - blockItems.removeAll(item); - // repainting the group - groupItem->updateShape(); + sourceItems.removeAll(item); } -void GroupScene::createConnectionItem(InterfaceItem *iface1, InterfaceItem *iface2) { - ConnectionItem* conn = new ConnectionItem(iface1,iface2, dispatcher, params, groupItem); +void GroupScene::createConnectionItem(InterfaceItem *iface1, InterfaceItem *iface2, bool visible) { + ConnectionItem* conn = NULL; + + conn = new ConnectionItem(iface1,iface2, dispatcher, params); + conn->setVisible(visible); + addItem(conn); addConnectionItem(conn); } @@ -126,6 +201,7 @@ ConnectionItem* GroupScene::searchConnectionItem(InterfaceItem *iface1, Interfac return conn; } } + return NULL; } void GroupScene::addConnectionItem(ConnectionItem* item) { @@ -136,6 +212,13 @@ void GroupScene::addConnectionItem(ConnectionItem* item) { } void GroupScene::removeConnectionItem(ConnectionItem* item) { + + // remove connection from/to InterfaceItem + InterfaceItem* fromIfaceItem = item->getFromInterfaceItem(); + InterfaceItem* toIfaceItem = item->getToInterfaceItem(); + fromIfaceItem->removeConnectionItem(item); + toIfaceItem->removeConnectionItem(item); + // remove item from the viewport removeItem(item); // remove item from the QList @@ -155,25 +238,15 @@ void GroupScene::removeGroupItem() { groupItem = NULL; } -QList GroupScene::getInterfaceConnections(InterfaceItem *item) { - QList list; - foreach(ConnectionItem *conn, connectionItems){ - if(conn->getFromInterfaceItem() == item || conn->getToInterfaceItem() == item){ - list.append(conn); - } - } - return list; -} - void GroupScene::unselecteInterfaces() { if (selectedInterfaces[0] != NULL) { selectedInterfaces[0]->selected = false; - selectedInterfaces[0] == NULL; + selectedInterfaces[0] = NULL; } if (selectedInterfaces[1] != NULL) { selectedInterfaces[1]->selected = false; - selectedInterfaces[1] == NULL; + selectedInterfaces[1] = NULL; } } @@ -187,14 +260,28 @@ void GroupScene::updateConnectionItemsShape() { void GroupScene::save(QXmlStreamWriter &writer) { writer.writeStartElement("scene"); writer.writeAttribute("id",QString::number(id)); + if (parentScene == NULL) { + writer.writeAttribute("upper_scene",QString::number(-1)); + } + else { + writer.writeAttribute("upper_scene",QString::number(parentScene->getId())); + } groupItem->save(writer); + if (isTopScene()) { + writer.writeStartElement("source_items"); + writer.writeAttribute("count",QString::number(sourceItems.length())); + foreach(SourceItem* item, sourceItems) { + item->save(writer); + } + writer.writeEndElement(); // source_items + } writer.writeStartElement("block_items"); QList functionalBlocks; QList groupBlocks; - foreach(BoxItem *item, blockItems){ + foreach(BoxItem *item, boxItems){ if(item->getRefBlock()->isFunctionalBlock()){ functionalBlocks.append(item); } else if(item->getRefBlock()->isGroupBlock()){