#include "Dispatcher.h"
#include "Parameters.h"
#include "BoxItem.h"
+#include "SourceItem.h"
#include "AbstractBlock.h"
#include "AbstractInterface.h"
#include "ConnectedInterface.h"
selected = false;
- setZValue(-100);
+ setZValue(100);
setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable | QGraphicsItem::ItemSendsGeometryChanges);
parentItem = NULL;
rectTitle = QRectF(0,-(nameHeight+2*nameMargin),nameWidth+2*nameMargin,nameHeight+2*nameMargin);
selected = false;
- setZValue(-100);
+ setZValue(100);
setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable | QGraphicsItem::ItemSendsGeometryChanges);
updateGeometry(InterfaceMove);
}
if (boxSizeChanged) {
- updateInterfacesAndConnections();
+ updateInterfaceAndConnectionItems();
}
originPoint.setY(y);
if ((boxSizeChanged) || (newSize != oldSize) || (originPoint != oldOrigin)) {
- cout << "GroupItem: must change group item shape" << endl;
+ //cout << "GroupItem: must change group item shape" << endl;
prepareGeometryChange();
return true;
}
void GroupItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event) {
- if(params->editState == Parameters::EditGroupMove) {
- QPointF absPos = currentPosition + originPoint;
+ if(params->editState == Parameters::EditGroupMove) {
int gapX = event->scenePos().x() - cursorPosition.x();
int gapY = event->scenePos().y() - cursorPosition.y();
- //cout << "block abs. pos: " << absPos.x() << "," << absPos.y() << " | ";
- //cout << "block current. pos: " << currentPosition.x() << "," << currentPosition.y() << " | ";
-/*
- if (absPos.x()+gapX < 0) {
- gapX = -absPos.x();
+ bool canMove = true;
+ if (refBlock->isTopGroupBlock()) {
+ QRectF rectGroup = boundingRectInScene();
+ rectGroup.moveTo(rectGroup.x()+gapX,rectGroup.y()+gapY);
+ foreach(SourceItem* source, getScene()->getSourceItems()) {
+ QRectF rectSource = source->boundingRectInScene();
+ if (rectGroup.intersects(rectSource)) canMove = false;
+ }
}
- if (absPos.y()+gapY < 0) {
- gapY = -absPos.y();
+
+ if (canMove) {
+ QPointF gap(gapX,gapY);
+ currentPosition = currentPosition+gap;
+ setPos(currentPosition);
+
+ // updating all connections of the scene.
+ getScene()->updateConnectionItemsShape();
}
- */
- //cout << "gap: " << gapX << "," << gapY << " | ";
- //cout << "scene: " << getScene()->sceneRect().x() << "," << getScene()->sceneRect().y() << endl;
- QPointF gap(gapX,gapY);
- currentPosition = currentPosition+gap;
- setPos(currentPosition);
cursorPosition = event->scenePos();
}
else if(params->editState == Parameters::EditGroupResize) {
}
else if(params->editState == Parameters::EditInterfaceMove) {
prepareGeometryChange();
- moveInterfaceTo(event->pos());
+ moveInterfaceItemTo(event->pos());
// recompute the geometry of the block
updateGeometry(InterfaceMove);
// update connection from/to the selected interface
dispatcher->setCurrentGroupWidget(getScene()->getGroupWidget());
- /* NOTE : commneted because group interface are normally
- created and the connected directly to a block within
- the group. Furthermore, there can be a single connection
- from a groupe interface.
-
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) {
}
}
}
- }
- */
- if (mode == GroupScene::ItemEdition) {
+ }
+ else if (mode == GroupScene::ItemEdition) {
if (params->cursorState == Parameters::CursorOnInterface) {
- InterfaceItem *inter = getInterfaceFromCursor(x,y);
+ InterfaceItem *inter = getInterfaceItemFromCursor(x,y);
if (inter != NULL) {
currentInterface = inter;
params->setEditState(Parameters::EditInterfaceMove);
int mode = getScene()->getEditionMode();
- /* NOTE : commneted because group interface are normally
- created and the connected directly to a block within
- the group. Furthermore, there can be a single connection
- from a groupe interface.
-
if (mode == GroupScene::AddConnection) {
if (params->editState == Parameters::EditStartConnection) {
}
else if (params->editState == Parameters::EditCloseConnection) {
InterfaceItem* iface1 = getScene()->getSelectedInterface(1);
- InterfaceItem* iface2 = getScene()->getSelectedInterface(2);
- bool ok = dispatcher->connect(iface1,iface2);
+ InterfaceItem* iface2 = getScene()->getSelectedInterface(2);
+ bool ok = dispatcher->createConnection(iface1,iface2);
if (ok) {
iface1->selected = false;
update(iface1->boundingRect());
+ iface2->selected = false;
+ update(iface2->boundingRect());
getScene()->setSelectedInterface(1,NULL);
getScene()->setSelectedInterface(2,NULL);
params->setEditState(Parameters::EditNoOperation);
}
+ else {
+ //QMessageBox::warning(NULL,"Error","Cannot connect selected interfaces", QMessageBox::Ok);
+ getScene()->setSelectedInterface(2,NULL);
+ params->setEditState(Parameters::EditStartConnection);
+ }
}
- }
- */
- if (mode == GroupScene::ItemEdition) {
+ }
+ else if (mode == GroupScene::ItemEdition) {
currentInterface = NULL;
setFlag(ItemIsMovable, true);
params->editState = Parameters::EditNoOperation;
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);
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);
}
}
}
- QGraphicsItem::hoverMoveEvent(event);
+ //QGraphicsItem::hoverMoveEvent(event);
+ event->ignore();
}
void GroupItem::contextMenuEvent(QGraphicsSceneContextMenuEvent *event) {
QAction* renameAction = NULL;
QAction* showParameters = 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) {
}
else if(selectedAction == showParameters) {
new ParametersWindow(refBlock, params, NULL);
- }
+ }
}
InterfaceItem* GroupItem::isHoverInterface(QPointF point) {
interfaceItem->setId(id);
groupBlock->addInterface(groupInterface);
- addInterface(interfaceItem, false);
+ addInterfaceItem(interfaceItem, false);
cout << "interface add to " << groupBlock->getName().toStdString() << endl;
}