]> AND Private Git Repository - blast.git/blobdiff - GroupItem.cpp
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
correcting bugs but still exsitings
[blast.git] / GroupItem.cpp
index 04d7bca0aae011f4960492661bc68ad021951f0a..bb26e53b17c42e64995373dfa6f75c91ede37caa 100644 (file)
@@ -36,7 +36,8 @@ GroupItem::GroupItem(BoxItem *_parentItem,
 
   setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable | QGraphicsItem::ItemSendsGeometryChanges);  
 
 
   setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable | QGraphicsItem::ItemSendsGeometryChanges);  
 
-  updateGeometry();
+
+  updateGeometry(InterfaceMove);
   QPointF initPos = QPointF(0.0,0.0) - originPoint;
   setPos(initPos);
   cout << "total size of group: " << totalWidth << "," << totalHeight << endl;
   QPointF initPos = QPointF(0.0,0.0) - originPoint;
   setPos(initPos);
   cout << "total size of group: " << totalWidth << "," << totalHeight << endl;
@@ -155,7 +156,7 @@ void GroupItem::updateMinimumSize() {
 }
 
 void GroupItem::updateShape() {
 }
 
 void GroupItem::updateShape() {
-  updateGeometry();
+  updateGeometry(InterfaceMove);
 }
 
 bool GroupItem::updateGeometry(ChangeType type) {
 }
 
 bool GroupItem::updateGeometry(ChangeType type) {
@@ -163,20 +164,29 @@ bool GroupItem::updateGeometry(ChangeType type) {
   QPointF oldOrigin = originPoint;
   QSize oldSize(totalWidth,totalHeight);
 
   QPointF oldOrigin = originPoint;
   QSize oldSize(totalWidth,totalHeight);
 
-  updateMinimumSize();
   bool boxSizeChanged = false;
   bool boxSizeChanged = false;
+
+  // whatever the change, the minimum size may have changed
+  updateMinimumSize();
+
+  if (type == Resize) {
+    boxSizeChanged = true;
+  }
+  // if an internal block has moved, the actual box size may be inadequate
   if (boxWidth < minimumBoxWidth) {
     boxWidth = minimumBoxWidth;
     boxSizeChanged = true;
   }
   if (boxHeight < minimumBoxHeight) {
     boxHeight = minimumBoxHeight;
   if (boxWidth < minimumBoxWidth) {
     boxWidth = minimumBoxWidth;
     boxSizeChanged = true;
   }
   if (boxHeight < minimumBoxHeight) {
     boxHeight = minimumBoxHeight;
-     boxSizeChanged = true;
+    boxSizeChanged = true;
   }
   }
+
   if (boxSizeChanged) {
     updateInterfacesAndConnections();
   }
 
   if (boxSizeChanged) {
     updateInterfacesAndConnections();
   }
 
+
   // compute the max. width of interfaces' name for 4 orientations.  
   int maxSouth = 0;
   int maxNorth = 0;
   // compute the max. width of interfaces' name for 4 orientations.  
   int maxSouth = 0;
   int maxNorth = 0;
@@ -221,7 +231,7 @@ bool GroupItem::updateGeometry(ChangeType type) {
   originPoint.setY(y);
 
   if ((boxSizeChanged) || (newSize != oldSize) || (originPoint != oldOrigin)) {
   originPoint.setY(y);
 
   if ((boxSizeChanged) || (newSize != oldSize) || (originPoint != oldOrigin)) {
-    //cout << "must change group item shape" << endl;
+    cout << "must change group item shape" << endl;
     prepareGeometryChange();
     return true;
   }
     prepareGeometryChange();
     return true;
   }
@@ -283,7 +293,7 @@ void GroupItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event) {
       cout << "abnormal case while resizing block" << endl;
       break;
     }
       cout << "abnormal case while resizing block" << endl;
       break;
     }
-    updateGeometry();
+    updateGeometry(Resize);
     /*
     // recompute the geometry of the block
     updateGeometry();
     /*
     // recompute the geometry of the block
     updateGeometry();
@@ -302,16 +312,16 @@ void GroupItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event) {
   }
   else if(params->editState == Parameters::EditInterfaceMove) {
     prepareGeometryChange();
   }
   else if(params->editState == Parameters::EditInterfaceMove) {
     prepareGeometryChange();
-    deplaceInterface(event->pos());
+    moveInterfaceTo(event->pos());
     // recompute the geometry of the block
     // recompute the geometry of the block
-    updateGeometry();
+    updateGeometry(InterfaceMove);
     // update connection from/to the selected interface
     foreach(ConnectionItem *item, getScene()->getConnectionItems()){
       if ((item->getFromInterfaceItem() == currentInterface) || (item->getToInterfaceItem() == currentInterface)) {
     // update connection from/to the selected interface
     foreach(ConnectionItem *item, getScene()->getConnectionItems()){
       if ((item->getFromInterfaceItem() == currentInterface) || (item->getToInterfaceItem() == currentInterface)) {
-        item->setPathes();
+        item->setPath();
       }
     }
       }
     }
-    update();
+    //update();
   }
 }
 
   }
 }