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

Private GIT Repository
correcting bugs but still exsitings
authorStéphane Domas <sdomas@prodigy.iut-bm.univ-fcomte.fr>
Wed, 26 Apr 2017 16:52:17 +0000 (18:52 +0200)
committerStéphane Domas <sdomas@prodigy.iut-bm.univ-fcomte.fr>
Wed, 26 Apr 2017 16:52:17 +0000 (18:52 +0200)
19 files changed:
AbstractBoxItem.cpp
AbstractBoxItem.h
BlockLibraryWidget.cpp
BlockLibraryWidget.h
BoxItem.cpp
ConnectionItem.cpp
ConnectionItem.h
Dispatcher.cpp
Dispatcher.h
GroupItem.cpp
GroupScene.cpp
GroupScene.h
GroupWidget.cpp
MainWindow.cpp
MainWindow.h
Makefile.in
Parameters.h
blast.creator.user
object-files.txt

index 0afbe29a6f0fa18978c627b63cbe2c5b96fd652d..ec791fb9587cfe062ab7e77fe48ce17130a6ed3e 100644 (file)
@@ -98,7 +98,7 @@ InterfaceItem* AbstractBoxItem::searchInterfaceByRef(ConnectedInterface *ref) {
 void AbstractBoxItem::addInterface(InterfaceItem *i, bool resetPosition) {
   interfaces.append(i);
   if (resetPosition) resetInterfacesPosition();
 void AbstractBoxItem::addInterface(InterfaceItem *i, bool resetPosition) {
   interfaces.append(i);
   if (resetPosition) resetInterfacesPosition();
-  updateGeometry();
+  updateGeometry(InterfaceMove);
   update();
 }
 
   update();
 }
 
@@ -108,7 +108,7 @@ void AbstractBoxItem::removeInterface(InterfaceItem *i) {
   delete i;
 
   //resetInterfacesPosition();
   delete i;
 
   //resetInterfacesPosition();
-  updateGeometry();
+  updateGeometry(InterfaceMove);
   update();
 }
 
   update();
 }
 
@@ -158,7 +158,7 @@ void AbstractBoxItem::resetInterfacesPosition() {
   }
 }
 
   }
 }
 
-void AbstractBoxItem::deplaceInterface(QPointF pos) {
+void AbstractBoxItem::moveInterfaceTo(QPointF pos) {
   double positionRatio;
   if(currentInterface->getOrientation() == Parameters::North || currentInterface->getOrientation() == Parameters::South){
     if(pos.x() < 0){
   double positionRatio;
   if(currentInterface->getOrientation() == Parameters::North || currentInterface->getOrientation() == Parameters::South){
     if(pos.x() < 0){
@@ -226,11 +226,12 @@ void AbstractBoxItem::updateInterfacesAndConnections() {
   foreach(InterfaceItem *item, interfaces){
     item->updatePosition();
   }
   foreach(InterfaceItem *item, interfaces){
     item->updatePosition();
   }
+  // NB: dunno the utility of this test !!
   if (getScene() != NULL) {
     // update all connections from/to this block
     foreach(ConnectionItem *item, getScene()->getConnectionItems()){
       if ((item->getFromInterfaceItem()->getOwner() == this) || (item->getToInterfaceItem()->getOwner() == this)) {
   if (getScene() != NULL) {
     // update all connections from/to this block
     foreach(ConnectionItem *item, getScene()->getConnectionItems()){
       if ((item->getFromInterfaceItem()->getOwner() == this) || (item->getToInterfaceItem()->getOwner() == this)) {
-        item->setPathes();
+        item->setPath();
       }
     }
   }
       }
     }
   }
index 6eeb46c011f04b5d313df596c58338a5da850bd3..375e9dcabad9706b433285199d31816e30da8ba1 100644 (file)
@@ -58,7 +58,28 @@ public:
   void addInterface(InterfaceItem* i, bool resetPosition = false);
   void removeInterface(InterfaceItem* i);
   void resetInterfacesPosition();
   void addInterface(InterfaceItem* i, bool resetPosition = false);
   void removeInterface(InterfaceItem* i);
   void resetInterfacesPosition();
-  void deplaceInterface(QPointF pos);
+  /*!
+   * \brief moveInterfaceTo
+   * \param pos the new position (in scene) of the interface
+   *
+   * This method is called when user moves an InterfaceItem.
+   * see BoxItem::mouseMoveEvent() and GroupItem::mouseMoveEvent()
+   */
+  void moveInterfaceTo(QPointF pos);
+  /*!
+   * \brief updateInterfacesAndConnections
+   *
+   * This method allows to recompute the absolute position of the interfaces of this box
+   * taking into account their relative position (see positionRatio atribute) in the width/height
+   * of the box border they are located on. It allows update the shape of all ConnectionItem
+   * connected to this box.
+   *
+   * CAUTION: this method supposes that before its call, a call to prepareGeometryChange() hase been
+   * done for the BoxItem that owns this InterfaceItem, so that the scene will readraw automatically
+   * the BoxItem. For the connections, the call to prepareGeometryChange() is done within setPath()
+   * that is called in this method. Thus, there is no need to call update() after the termination of
+   * this method.
+   */
   void updateInterfacesAndConnections();
 
   InterfaceItem *searchInterfaceByName(QString name);
   void updateInterfacesAndConnections();
 
   InterfaceItem *searchInterfaceByName(QString name);
index 0aa9ed14faf203eb2bca833ded49d193b8f2ac86..544a1d1d33953da520fc33a606be94c5a657afca 100644 (file)
@@ -10,10 +10,16 @@ BlockLibraryWidget::BlockLibraryWidget(Dispatcher* _dispatcher,
   params = _params;
 
   // creating the widget : tree, buttons, ...
   params = _params;
 
   // creating the widget : tree, buttons, ...
-  layout = new QBoxLayout(QBoxLayout::TopToBottom, this);
+  QBoxLayout* layout = new QBoxLayout(QBoxLayout::TopToBottom, this);
   tree = new QTreeWidget(this);
   tree = new QTreeWidget(this);
-  buttonAdd = new QPushButton("add", this);
+
+  buttonAdd = new QPushButton("add to", this);
   buttonAdd->setEnabled(false);
   buttonAdd->setEnabled(false);
+  comboScenes = new QComboBox();
+
+  QHBoxLayout* layBottom = new QHBoxLayout;
+  layBottom->addWidget(buttonAdd);
+  layBottom->addWidget(comboScenes);
 
   connect(tree, SIGNAL(itemClicked(QTreeWidgetItem*,int)), this, SLOT(clicked()));
   connect(tree, SIGNAL(itemDoubleClicked(QTreeWidgetItem*,int)), this, SLOT(doubleClicked()));
 
   connect(tree, SIGNAL(itemClicked(QTreeWidgetItem*,int)), this, SLOT(clicked()));
   connect(tree, SIGNAL(itemDoubleClicked(QTreeWidgetItem*,int)), this, SLOT(doubleClicked()));
@@ -24,11 +30,10 @@ BlockLibraryWidget::BlockLibraryWidget(Dispatcher* _dispatcher,
   QTreeWidgetItem* item = tree->invisibleRootItem();
   tree->setHeaderLabel("Blocks list");
 
   QTreeWidgetItem* item = tree->invisibleRootItem();
   tree->setHeaderLabel("Blocks list");
 
-
   addChild(cat,item);
 
   layout->addWidget(tree);
   addChild(cat,item);
 
   layout->addWidget(tree);
-  layout->addWidget(buttonAdd);
+  layout->addLayout(layBottom);
   this->setLayout(layout);
 
   this->setFixedSize(300,230);
   this->setLayout(layout);
 
   this->setFixedSize(300,230);
@@ -81,7 +86,9 @@ void BlockLibraryWidget::addClicked() {
   if(item->data(1,Qt::DisplayRole).isValid() && item->data(2,Qt::DisplayRole).isValid()){
     int idParent = item->data(1,Qt::DisplayRole).toInt();
     int idBlock = item->data(2,Qt::DisplayRole).toInt();
   if(item->data(1,Qt::DisplayRole).isValid() && item->data(2,Qt::DisplayRole).isValid()){
     int idParent = item->data(1,Qt::DisplayRole).toInt();
     int idBlock = item->data(2,Qt::DisplayRole).toInt();
-    dispatcher->addBlock(idParent, idBlock);
+    QVariant v = comboScenes->currentData();
+    cout << "adding block to scene " << v.toInt() << endl;
+    dispatcher->addBlock(idParent, idBlock, v.toInt());
   }
 
   // only take the first selected
   }
 
   // only take the first selected
@@ -89,9 +96,7 @@ void BlockLibraryWidget::addClicked() {
   // calling dispatcher addBlock() method.
 }
 
   // calling dispatcher addBlock() method.
 }
 
-
-void BlockLibraryWidget::clicked()
-{
+void BlockLibraryWidget::clicked() {
   if(tree->selectedItems().length() > 0){
     QTreeWidgetItem *item = tree->selectedItems().at(0);
     if(item->data(1,Qt::DisplayRole).isValid())
   if(tree->selectedItems().length() > 0){
     QTreeWidgetItem *item = tree->selectedItems().at(0);
     if(item->data(1,Qt::DisplayRole).isValid())
@@ -101,7 +106,16 @@ void BlockLibraryWidget::clicked()
   }
 }
 
   }
 }
 
-void BlockLibraryWidget::doubleClicked()
-{
+void BlockLibraryWidget::doubleClicked() {
   addClicked();
 }
   addClicked();
 }
+
+void BlockLibraryWidget::updateComboScene() {
+  comboScenes->clear();
+  QMap<int,QString> list = dispatcher->getAllGroupNames();
+  QMapIterator<int,QString> iter(list);
+  while (iter.hasNext()) {
+    iter.next();
+    comboScenes->addItem(iter.value(),QVariant(iter.key()));
+  }
+}
index f07be4d25f71a3512aba9ef26e91190f889126c7..43ed5fc0931e5220edfa171ea4db8f8d6ff1a920 100644 (file)
@@ -23,6 +23,9 @@ public:
   explicit BlockLibraryWidget(Dispatcher* _dispatcher, Parameters* _params, QWidget *parent = 0);
   ~BlockLibraryWidget();
 
   explicit BlockLibraryWidget(Dispatcher* _dispatcher, Parameters* _params, QWidget *parent = 0);
   ~BlockLibraryWidget();
 
+public slots:
+  void updateComboScene();
+
 private slots:
     void addClicked();
     void clicked();
 private slots:
     void addClicked();
     void clicked();
@@ -34,7 +37,7 @@ private:
   Dispatcher* dispatcher;
   QTreeWidget* tree;
   QPushButton* buttonAdd;
   Dispatcher* dispatcher;
   QTreeWidget* tree;
   QPushButton* buttonAdd;
-  QBoxLayout *layout;
+  QComboBox* comboScenes;
   // other attributes
   
   void addChild(BlockCategory *catParent, QTreeWidgetItem* itemParent);
   // other attributes
   
   void addChild(BlockCategory *catParent, QTreeWidgetItem* itemParent);
index 77e9533be3c44d7fd729bb678d8718ad51e74b1e..0b1cd034bda7230e0ba92901800c37e9f54699af 100644 (file)
@@ -33,7 +33,7 @@ BoxItem::BoxItem(AbstractBlock *_refBlock,
   setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable | QGraphicsItem::ItemSendsGeometryChanges);
 
   initInterfaces();
   setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable | QGraphicsItem::ItemSendsGeometryChanges);
 
   initInterfaces();
-  updateGeometry();
+  updateGeometry(InterfaceMove);
   resetInterfacesPosition();
   QPointF initPos = QPointF(0.0,0.0) - originPoint;
   setPos(initPos);
   resetInterfacesPosition();
   QPointF initPos = QPointF(0.0,0.0) - originPoint;
   setPos(initPos);
@@ -133,27 +133,29 @@ bool BoxItem::updateGeometry(ChangeType type) {
 
   bool boxSizeChanged = false;
 
 
   bool boxSizeChanged = false;
 
-  if ((type == Resize) || (type == InterfaceMove)) {
-    updateMinimumSize();
-  }
+  // whatever the change, the minimum size may ahve changed
+  updateMinimumSize();
 
   if (type == Resize) {
 
   if (type == Resize) {
-    prepareGeometryChange();
-    updateInterfacesAndConnections();
+    // resize implies to move interfaces and to update connections
     boxSizeChanged = true;
   }
     boxSizeChanged = true;
   }
-  if (boxWidth < minimumBoxWidth) {
-    boxWidth = minimumBoxWidth;
-    boxSizeChanged = true;
-  }
-  if (boxHeight < minimumBoxHeight) {
-    boxHeight = minimumBoxHeight;
-     boxSizeChanged = true;
+  else if (type == InterfaceMove) {
+    // if an interface moves, it may change the box size
+    if (boxWidth < minimumBoxWidth) {
+      boxWidth = minimumBoxWidth;
+      boxSizeChanged = true;
+    }
+    if (boxHeight < minimumBoxHeight) {
+      boxHeight = minimumBoxHeight;
+      boxSizeChanged = true;
+    }
   }
   if (boxSizeChanged) {
     updateInterfacesAndConnections();
   }
 
   }
   if (boxSizeChanged) {
     updateInterfacesAndConnections();
   }
 
+
   double x = 0.0;
   double y = 0.0;
   totalWidth = boxWidth;
   double x = 0.0;
   double y = 0.0;
   totalWidth = boxWidth;
@@ -208,7 +210,7 @@ void BoxItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event) {
     // update all connections from/to this block
     foreach(ConnectionItem *item, getScene()->getConnectionItems()){
       if ((item->getFromInterfaceItem()->getOwner() == this) || (item->getToInterfaceItem()->getOwner() == this)) {
     // update all connections from/to this block
     foreach(ConnectionItem *item, getScene()->getConnectionItems()){
       if ((item->getFromInterfaceItem()->getOwner() == this) || (item->getToInterfaceItem()->getOwner() == this)) {
-        item->setPathes();
+        item->setPath();
       }
     }
     cursorPosition = event->scenePos();
       }
     }
     cursorPosition = event->scenePos();
@@ -248,7 +250,7 @@ void BoxItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event) {
       break;
     }
     // recompute the geometry of the block and possibly the group item
       break;
     }
     // recompute the geometry of the block and possibly the group item
-    if (updateGeometry()) {
+    if (updateGeometry(Resize)) {
       (getScene()->getGroupItem())->updateShape();
     }
 
       (getScene()->getGroupItem())->updateShape();
     }
 
@@ -256,16 +258,16 @@ void BoxItem::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
-    if (updateGeometry()) {
+    if (updateGeometry(InterfaceMove)) {
       cout << "must recompute group item geometry" << endl;
       (getScene()->getGroupItem())->updateShape();
     }
     // update connection from/to the selected interface
     foreach(ConnectionItem *item, getScene()->getConnectionItems()){
       if ((item->getFromInterfaceItem() == currentInterface) || (item->getToInterfaceItem() == currentInterface)) {
       cout << "must recompute group item geometry" << endl;
       (getScene()->getGroupItem())->updateShape();
     }
     // update connection from/to the selected interface
     foreach(ConnectionItem *item, getScene()->getConnectionItems()){
       if ((item->getFromInterfaceItem() == currentInterface) || (item->getToInterfaceItem() == currentInterface)) {
-        item->setPathes();
+        item->setPath();
       }
     }    
   }
       }
     }    
   }
@@ -468,14 +470,26 @@ void BoxItem::contextMenuEvent(QGraphicsSceneContextMenuEvent * event) {
     showProperties = menu.addAction("Show properties");
 
     ConnectedInterface* iface = ifaceItem->refInter;
     showProperties = menu.addAction("Show properties");
 
     ConnectedInterface* iface = ifaceItem->refInter;
+    ConnectedInterface* ifaceGroup = NULL;
+
+
     if ((iface->getDirection() == AbstractInterface::Input) && (iface->getConnectedFrom() == NULL)) {
         connectToGroup = menu.addAction("Connect to group input");
     }
     else if ((iface->getDirection() == AbstractInterface::Output) && (!iface->isConnectedTo())) {
       connectToGroup = menu.addAction("Connect to group output");
     }
     if ((iface->getDirection() == AbstractInterface::Input) && (iface->getConnectedFrom() == NULL)) {
         connectToGroup = menu.addAction("Connect to group input");
     }
     else if ((iface->getDirection() == AbstractInterface::Output) && (!iface->isConnectedTo())) {
       connectToGroup = menu.addAction("Connect to group output");
     }
-    else if ((iface->getConnectionFromParentGroup() != NULL) || (iface->getConnectionToParentGroup() != NULL)) {
-      disconnectFromGroup = menu.addAction("Disconnect from group");
+    else if (iface->getConnectionFromParentGroup() != NULL) {
+      ifaceGroup = iface->getConnectionFromParentGroup();
+      if ((!ifaceGroup->isConnectedFrom()) || (!ifaceGroup->isConnectedTo())) {
+        disconnectFromGroup = menu.addAction("Disconnect from group");
+      }
+    }
+    else if (iface->getConnectionToParentGroup() != NULL) {
+      ifaceGroup = iface->getConnectionToParentGroup();
+      if ((!ifaceGroup->isConnectedFrom()) || (!ifaceGroup->isConnectedTo())) {
+        disconnectFromGroup = menu.addAction("Disconnect from group");
+      }
     }
 
     if (iface->isFunctionalInterface()) {
     }
 
     if (iface->isFunctionalInterface()) {
index dee71ba7e16d8d6ad552edae85086edf0a218867..b6d99a5a42083a0e6dcc5d630786caa7a35e6468 100644 (file)
@@ -85,7 +85,7 @@ ConnectionItem::ConnectionItem(InterfaceItem* _iface1,
   setCursor(Qt::PointingHandCursor);
   setZValue(0);
 
   setCursor(Qt::PointingHandCursor);
   setZValue(0);
 
-  setPathes();
+  setPath();
 }
 
 
 }
 
 
@@ -145,8 +145,9 @@ void ConnectionItem::addInterPoint(QPointF point) {
 
 }
 
 
 }
 
-void ConnectionItem::setPathes() {
+void ConnectionItem::setPath() {
 
 
+  // signals to the scene that this connection is going to change of shape.
   prepareGeometryChange();
 
   pointFrom = fromInterfaceItem->getEndPointInGroup();
   prepareGeometryChange();
 
   pointFrom = fromInterfaceItem->getEndPointInGroup();
index 567a31d4e83edcb2b0252b5b33e21fca4761754f..867e8110d145e38c72484bac002ed7e61620f701 100644 (file)
@@ -14,9 +14,9 @@ class InterfaceItem;
 using namespace std;
 using namespace Qt;
 
 using namespace std;
 using namespace Qt;
 
-/* NOTES :
+/*! \brief ConnectionItem class
 
 
-   A connection item represent a graphical link between two interface items.
+   A ConnectionItem represents a graphical link between two interface items.
    Even if it links two in/out interfaces, it is always oriented.
    The orientation depends on the type and direction of linked interfaces :
 
    Even if it links two in/out interfaces, it is always oriented.
    The orientation depends on the type and direction of linked interfaces :
 
@@ -61,7 +61,19 @@ public:
   void setSelected(bool selected);
 
   void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0);
   void setSelected(bool selected);
 
   void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0);
-  void setPathes();
+
+  /*!
+   * \brief setPath
+   * setPath() allows to compute the graphical shape of the ConnectionItem
+   * taking into account the position/direction of from and to interface items.
+   * Depending on their vlaue, it calls on of the dedicated methods.
+   *
+   * CAUTION: this method calls prepareGeometryChange() so that the scene
+   * can automatically updates and redraw the ConnectionItem. Thus, there is
+   * no need to call update() after the termination of this method.
+   *
+   */
+  void setPath();
   void addInterPoint(QPointF point);
 
   static int counter;
   void addInterPoint(QPointF point);
 
   static int counter;
index a85b942eaf972f95b88302e0d697410aaf4884bf..810396ef52e4ac45564c3cf48c233e7bbfb85d91 100644 (file)
@@ -24,6 +24,7 @@
 
 #include "InterfacePropertiesWindow.h"
 
 
 #include "InterfacePropertiesWindow.h"
 
+int Dispatcher::sceneCounter = 0;
 
 Dispatcher::Dispatcher(Parameters* _params, MainWindow* _window) {
   params = _params;
 
 Dispatcher::Dispatcher(Parameters* _params, MainWindow* _window) {
   params = _params;
@@ -48,6 +49,7 @@ GroupWidget *Dispatcher::loadProject(const QString& filename) {
   currentGroup = topGroup;
   // getting the newly created scene
   GroupScene *scene = topGroup->getScene();
   currentGroup = topGroup;
   // getting the newly created scene
   GroupScene *scene = topGroup->getScene();
+
   params->setTopScene(scene);
   params->setCurrentScene(scene);
 
   params->setTopScene(scene);
   params->setCurrentScene(scene);
 
@@ -61,6 +63,7 @@ GroupWidget *Dispatcher::loadProject(const QString& filename) {
     return NULL;
   }
 
     return NULL;
   }
 
+  groupList.append(topGroup);
   return topGroup;
 }
 
   return topGroup;
 }
 
@@ -194,6 +197,8 @@ void Dispatcher::rename(AbstractBoxItem *item){
           currentGroup->setWindowTitle("blast - "+text);
         }
       }
           currentGroup->setWindowTitle("blast - "+text);
         }
       }
+
+      mainWindow->getLibrary()->updateComboScene();
     }
     else {
       QMessageBox::warning(NULL,"Error in given name",
     }
     else {
       QMessageBox::warning(NULL,"Error in given name",
@@ -221,6 +226,7 @@ void Dispatcher::rename(InterfaceItem *item){
       item->refInter->setName(text);
     }
     item->setName(text);
       item->refInter->setName(text);
     }
     item->setName(text);
+
   }
   else {
     QMessageBox::warning(NULL,"Error in given name",
   }
   else {
     QMessageBox::warning(NULL,"Error in given name",
@@ -270,9 +276,9 @@ void Dispatcher::duplicateInterface(InterfaceItem *item){
 }
 
 
 }
 
 
-void Dispatcher::addBlock(int idCategory, int idBlock) {
+void Dispatcher::addBlock(int idCategory, int idBlock, int idScene) {
 
 
-  GroupScene *scene = params->getCurrentScene();
+  GroupScene *scene = searchSceneById(idScene);
   FunctionalBlock* newOne = params->addFunctionalBlock(idCategory, idBlock);  
   scene->createBlockItem(newOne);
 }
   FunctionalBlock* newOne = params->addFunctionalBlock(idCategory, idBlock);  
   scene->createBlockItem(newOne);
 }
@@ -292,6 +298,7 @@ GroupWidget *Dispatcher::createTopScene(){
   currentGroup = topGroup;
   // getting the newly created scene
   GroupScene *scene = topGroup->getScene();
   currentGroup = topGroup;
   // getting the newly created scene
   GroupScene *scene = topGroup->getScene();
+  scene->setId(sceneCounter++);
   params->setTopScene(scene);
   params->setCurrentScene(scene);
   // creating the view part of the group
   params->setTopScene(scene);
   params->setCurrentScene(scene);
   // creating the view part of the group
@@ -303,26 +310,29 @@ GroupWidget *Dispatcher::createTopScene(){
 
   scene->setGroupItem(group);
 
 
   scene->setGroupItem(group);
 
+  groupList.append(topGroup);
   return topGroup;
 }
 
 GroupWidget *Dispatcher::createChildScene(GroupWidget* parentWidget, BoxItem *upperItemOfGroupItem) {
 
   return topGroup;
 }
 
 GroupWidget *Dispatcher::createChildScene(GroupWidget* parentWidget, BoxItem *upperItemOfGroupItem) {
 
-  GroupBlock* parentBlock = NULL;
+  // getting back the goup block already created
+  GroupBlock* groupBlock = NULL;
   if (upperItemOfGroupItem != NULL) {
   if (upperItemOfGroupItem != NULL) {
-    parentBlock = AB_TO_GRP(upperItemOfGroupItem->getRefBlock());
-  }
-  // creating the model part of the group
-  GroupBlock *groupBlock = new GroupBlock(parentBlock);
-  groupBlock->setName("no name");
+    groupBlock = AB_TO_GRP(upperItemOfGroupItem->getRefBlock());
+  }  
   // creating the view part of the group
   GroupItem *groupItem = new GroupItem(upperItemOfGroupItem,groupBlock,this,params);
   // creating the group widget
   GroupWidget* group = new GroupWidget(parentWidget, this, params);
   // getting the newly created scene
   GroupScene *scene = group->getScene();
   // creating the view part of the group
   GroupItem *groupItem = new GroupItem(upperItemOfGroupItem,groupBlock,this,params);
   // creating the group widget
   GroupWidget* group = new GroupWidget(parentWidget, this, params);
   // getting the newly created scene
   GroupScene *scene = group->getScene();
+  scene->setId(sceneCounter++);
   // affecting group item to the scene
   scene->setGroupItem(groupItem);
   // affecting group item to the scene
   scene->setGroupItem(groupItem);
+  groupList.append(group);
+
+  mainWindow->getLibrary()->updateComboScene();
 
   return group;
 }
 
   return group;
 }
@@ -610,7 +620,9 @@ void Dispatcher::connectInterToGroup(InterfaceItem *item){
 
   // getting the GroupBlock and GroupItem that are parent of the block that owns item
   ConnectedInterface *refInter = item->refInter;
 
   // getting the GroupBlock and GroupItem that are parent of the block that owns item
   ConnectedInterface *refInter = item->refInter;
+  cout << "owner of iface = " << qPrintable(refInter->getOwner()->getName()) << endl;
   GroupBlock* parentBlock = AB_TO_GRP(refInter->getOwner()->getParent());
   GroupBlock* parentBlock = AB_TO_GRP(refInter->getOwner()->getParent());
+  cout << "create iface for parent group = " << qPrintable(parentBlock->getName()) << endl;
   GroupItem *parentItem = item->getOwner()->getScene()->getGroupItem();
 
   // creating/adding the group interface in the graph model
   GroupItem *parentItem = item->getOwner()->getScene()->getGroupItem();
 
   // creating/adding the group interface in the graph model
@@ -775,6 +787,15 @@ void Dispatcher::removeGroupInterface(InterfaceItem *item) {
   }
 }
 
   }
 }
 
+QMap<int, QString> Dispatcher::getAllGroupNames() {
+
+  QMap<int, QString> list;
+  foreach(GroupWidget *group, groupList) {
+    list.insert(group->getScene()->getId(), group->getScene()->getGroupItem()->getRefBlock()->getName());
+  }
+  return list;
+}
+
 GroupScene* Dispatcher::searchSceneById(int id) {
   foreach(GroupWidget *group, groupList){
     if(group->getScene()->getId() == id)
 GroupScene* Dispatcher::searchSceneById(int id) {
   foreach(GroupWidget *group, groupList){
     if(group->getScene()->getId() == id)
index 4475518c5cc96e66b4b5365291abd9ce8430061c..fa773600d4e7356a9368838c3768811750126a1d 100644 (file)
@@ -43,6 +43,7 @@ public:
   GroupWidget* createChildScene(GroupWidget* parentWidget, BoxItem* upperItemOfGroupItem = NULL);
   void showRaiseWindow(AbstractBoxItem *item);
   void showRstClkInter(AbstractBoxItem *item);
   GroupWidget* createChildScene(GroupWidget* parentWidget, BoxItem* upperItemOfGroupItem = NULL);
   void showRaiseWindow(AbstractBoxItem *item);
   void showRstClkInter(AbstractBoxItem *item);
+  void addNewEmptyGroup();
   void addNewFullGroup();  
 
   inline GroupWidget* getCurrentGroup() { return currentGroup; }
   void addNewFullGroup();  
 
   inline GroupWidget* getCurrentGroup() { return currentGroup; }
@@ -50,8 +51,9 @@ public:
   bool isCurrentProject;
 
 public slots:
   bool isCurrentProject;
 
 public slots:
-
+  QMap<int, QString> getAllGroupNames();
   GroupScene* searchSceneById(int id);
   GroupScene* searchSceneById(int id);
+  GroupScene* searchSceneByName(QString name);
   BoxItem* searchBlockItemById(int id);
   GroupItem* searchGroupItemById(int id);
   InterfaceItem* searchInterfaceItemById(int id);
   BoxItem* searchBlockItemById(int id);
   GroupItem* searchGroupItemById(int id);
   InterfaceItem* searchInterfaceItemById(int id);
@@ -59,7 +61,7 @@ public slots:
   void removeBlock(AbstractBoxItem* item);
   void duplicateBlock(BoxItem* item);
   void duplicateInterface(InterfaceItem* item);
   void removeBlock(AbstractBoxItem* item);
   void duplicateBlock(BoxItem* item);
   void duplicateInterface(InterfaceItem* item);
-  void addBlock(int idCategory, int idBlock);
+  void addBlock(int idCategory, int idBlock, int idScene);
   ConnectionItem *addConnection(InterfaceItem *input, InterfaceItem *output);
   void removeAllBlockConnections(AbstractBoxItem *block);
   void removeConnection(ConnectionItem *conn);
   ConnectionItem *addConnection(InterfaceItem *input, InterfaceItem *output);
   void removeAllBlockConnections(AbstractBoxItem *block);
   void removeConnection(ConnectionItem *conn);
@@ -84,6 +86,8 @@ private:
   QList<GroupWidget*> groupList;
   GroupWidget* currentGroup;
   GroupWidget *topGroup;
   QList<GroupWidget*> groupList;
   GroupWidget* currentGroup;
   GroupWidget *topGroup;
+
+  static int sceneCounter;
 };
 
 #endif // __DISPATCHER_H__
 };
 
 #endif // __DISPATCHER_H__
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();
   }
 }
 
   }
 }
 
index 7ba8c9d1310bcd0efe6d88aab80e3a37be0635ed..daf6bf1e2102d782f883655dd708b8b899786169 100644 (file)
@@ -84,11 +84,12 @@ QList<AbstractBoxItem*> GroupScene::getGroupAndBlocks() {
   return lst;
 }
 
   return lst;
 }
 
-void GroupScene::createBlockItem(AbstractBlock *block) {
+BoxItem *GroupScene::createBlockItem(AbstractBlock *block) {
 
   BoxItem* blockItem = new BoxItem(block,dispatcher,params,groupItem);
   blockItem->setZValue(1);
   addBlockItem(blockItem);
 
   BoxItem* blockItem = new BoxItem(block,dispatcher,params,groupItem);
   blockItem->setZValue(1);
   addBlockItem(blockItem);
+  return blockItem;
 }
 
 void GroupScene::addBlockItem(BoxItem* item) {
 }
 
 void GroupScene::addBlockItem(BoxItem* item) {
@@ -179,7 +180,7 @@ void GroupScene::unselecteInterfaces() {
 void GroupScene::updateConnectionItemsShape() {
 
   foreach(ConnectionItem* conn, connectionItems){
 void GroupScene::updateConnectionItemsShape() {
 
   foreach(ConnectionItem* conn, connectionItems){
-    conn->setPathes();
+    conn->setPath();
   }
 }
 
   }
 }
 
index 8561482f085cc7a3f039d6c20c6acec6b078ec17..307830529e078d645c8759ae020e7933b743882a 100644 (file)
@@ -68,7 +68,7 @@ public:
 
 
   // others  
 
 
   // others  
-  void createBlockItem(AbstractBlock* block);
+  BoxItem* createBlockItem(AbstractBlock* block);
   void addBlockItem(BoxItem* item);
   void removeBlockItem(BoxItem* item);
   void createConnectionItem(InterfaceItem* iface1, InterfaceItem* iface2);
   void addBlockItem(BoxItem* item);
   void removeBlockItem(BoxItem* item);
   void createConnectionItem(InterfaceItem* iface1, InterfaceItem* iface2);
index 1446a137536f1fff029935bbb83e9a4e0c0ae2f5..043561e28c34495b6651725286860d3375335530 100644 (file)
@@ -223,11 +223,14 @@ void GroupWidget::updateBlockButton() {
 void GroupWidget::slotNewEmptyGroup() {
 
   // creating the GroupBlock in graph model
 void GroupWidget::slotNewEmptyGroup() {
 
   // creating the GroupBlock in graph model
-  GroupBlock* groupBlock = params->addGroupBlock();
-  // creating the BlockItem in the inner scene
-  BoxItem* block = new BoxItem(groupBlock, dispatcher, params, scene->getGroupItem());
-
-  GroupWidget* child = dispatcher->createChildScene(this,block);
+  GroupBlock* parent = AB_TO_GRP(scene->getGroupItem()->getRefBlock());
+  cout << "new group : parent = "<< qPrintable(parent->getName()) << endl;
+  GroupBlock* groupBlock = params->getGraph()->createChildBlock(parent);
+  cout << "new group : child = "<< qPrintable(groupBlock->getName()) << ", child of " << qPrintable(groupBlock->getParent()->getName()) << endl;
+  // creating the BlockItem in the scene
+  BoxItem* newItem = scene->createBlockItem(groupBlock);
+
+  GroupWidget* child = dispatcher->createChildScene(this,newItem);
   child->show();
 }
 
   child->show();
 }
 
index 01c23c1132473159895185ebf7efffc4f525f7ab..1f8c1c0375c158f6dcfe356258fe3850da186166 100644 (file)
@@ -60,7 +60,7 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) {
 
   // creating block library
   library = new BlockLibraryWidget(dispatcher,params);
 
   // creating block library
   library = new BlockLibraryWidget(dispatcher,params);
-  isCurrentProject = false;
+  params->isCurrentProject = false;
 
   QLabel* labDefault = new QLabel("BLAST: BLock ASsembler Tool");
   stackedWidget = new QStackedWidget;
 
   QLabel* labDefault = new QLabel("BLAST: BLock ASsembler Tool");
   stackedWidget = new QStackedWidget;
@@ -270,6 +270,7 @@ void MainWindow::slotLoadProject(){
     GroupWidget* topGroup = dispatcher->loadProject(absoluteFilename);
     if (topGroup != NULL) {
       addTopGroup(topGroup);
     GroupWidget* topGroup = dispatcher->loadProject(absoluteFilename);
     if (topGroup != NULL) {
       addTopGroup(topGroup);
+      library->updateComboScene();
     }
     else {
       QMessageBox msgBox;
     }
     else {
       QMessageBox msgBox;
@@ -289,7 +290,7 @@ void MainWindow::slotNewProject(){
   enableProjectActions(true, PROJECT_CLOSE | PROJECT_SAVE | PROJECT_SAVEAS | PROJECT_LIB, OP_RAZ);
   GroupWidget* topGroup = dispatcher->createTopScene();
   addTopGroup(topGroup);
   enableProjectActions(true, PROJECT_CLOSE | PROJECT_SAVE | PROJECT_SAVEAS | PROJECT_LIB, OP_RAZ);
   GroupWidget* topGroup = dispatcher->createTopScene();
   addTopGroup(topGroup);
-
+  library->updateComboScene();
 }
 
 void MainWindow::slotCloseProject(){
 }
 
 void MainWindow::slotCloseProject(){
@@ -302,7 +303,7 @@ void MainWindow::slotCloseProject(){
   dispatcher->closeCurrentProject();
 
 
   dispatcher->closeCurrentProject();
 
 
-  isCurrentProject = false;
+  params->isCurrentProject = false;
   params->unsaveModif = false;
   absoluteFilename = QString();
 
   params->unsaveModif = false;
   absoluteFilename = QString();
 
@@ -323,7 +324,7 @@ void MainWindow::slotSaveProject(){
 }
 
 void MainWindow::slotSaveAsProject(){
 }
 
 void MainWindow::slotSaveAsProject(){
-  if(isCurrentProject){
+  if(params->isCurrentProject){
     QFileDialog dial(0, "Select a file", "save/");
     dial.setDefaultSuffix(".xml");
     dial.setAcceptMode(QFileDialog::AcceptSave);
     QFileDialog dial(0, "Select a file", "save/");
     dial.setDefaultSuffix(".xml");
     dial.setAcceptMode(QFileDialog::AcceptSave);
@@ -357,7 +358,7 @@ void MainWindow::removeTopGroup() {
 }
 
 void MainWindow::closeEvent(QCloseEvent *event){
 }
 
 void MainWindow::closeEvent(QCloseEvent *event){
-  if(isCurrentProject){
+  if(params->isCurrentProject){
     QMessageBox msgBox;
     msgBox.setText("The project has been modified.");
     msgBox.setInformativeText("Do you want to save your changes?");
     QMessageBox msgBox;
     msgBox.setText("The project has been modified.");
     msgBox.setInformativeText("Do you want to save your changes?");
index ee51e4cb9e4ed8262827bb468dce7f45c80f4f28..28feaffdbb9f4a8e614b3509896999ba9d91854b 100644 (file)
@@ -72,7 +72,6 @@ private:
   Parameters *params;  
   BlockLibraryWidget *library;
 
   Parameters *params;  
   BlockLibraryWidget *library;
 
-  bool isCurrentProject;
   QString absoluteFilename;
 
   QString checkNewVersion;
   QString absoluteFilename;
 
   QString checkNewVersion;
index e18672ce4e592db36c9bd8f0b1e32507b7c7c6dc..0801e938a8c3f583b1bb591a34cfc5fb7d3002ad 100644 (file)
@@ -176,10 +176,10 @@ $(BUILDPATH)/%.o : %.cpp
        $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
 
 moc_%.cpp : %.h
        $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
 
 moc_%.cpp : %.h
-       moc -qt=$(QTVER) $(DEFINES) $(INCPATH) $< -o $@
+       /usr/bin/moc -qt=$(QTVER) $(DEFINES) $(INCPATH) -o $@ $<
 
 rcc_%.cpp : %.qrc
 
 rcc_%.cpp : %.qrc
-       rcc -qt=$(QTVER) $< -o $@ -name $*
+       /usr/bin/rcc -qt=$(QTVER) $< -o $@ -name $*
 
 ### DEPENDENCIES OF EACH SOURCE FILE (auto-added by configure) ###
 
 
 ### DEPENDENCIES OF EACH SOURCE FILE (auto-added by configure) ###
 
index 8393a79deea8cda901fccaec8e38ccdca5b63074..69887a9b19f50efa91532fef58378ee43eb7306f 100644 (file)
@@ -104,6 +104,7 @@ public :
   /***************************************************\r
    attributes that are specific for the current project\r
   ****************************************************/\r
   /***************************************************\r
    attributes that are specific for the current project\r
   ****************************************************/\r
+  bool isCurrentProject; // true if a projet is currently open\r
   int sceneMode; // takes values from MODE_XXX\r
   CursorState cursorState;\r
   EditState editState; // takes values from EDIT_STATE_XXX\r
   int sceneMode; // takes values from MODE_XXX\r
   CursorState cursorState;\r
   EditState editState; // takes values from EDIT_STATE_XXX\r
index 9b8a007e0a9d282fc44f619c4056dc57f248f7e7..868e2d3cc45ba9cb5fddc2d362acc32e231ef5ec 100755 (executable)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE QtCreatorProject>
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE QtCreatorProject>
-<!-- Written by QtCreator 3.2.1, 2017-04-26T13:47:31. -->
+<!-- Written by QtCreator 3.2.1, 2017-04-26T18:51:42. -->
 <qtcreator>
  <data>
   <variable>EnvironmentId</variable>
 <qtcreator>
  <data>
   <variable>EnvironmentId</variable>
@@ -65,7 +65,7 @@
    <value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
    <value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
    <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
    <value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
    <value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
    <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
-    <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/sdomas/Projet/Blast/code/v0.2</value>
+    <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/sdomas/Projet/Blast/code/blast</value>
     <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
      <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
       <valuelist type="QVariantList" key="GenericProjectManager.GenericMakeStep.BuildTargets">
     <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
      <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
       <valuelist type="QVariantList" key="GenericProjectManager.GenericMakeStep.BuildTargets">
index 841a36912fe8d8a176b8d5118442d2b8522871bf..806c34661bbef98a3898ff1997602e32650575fd 100644 (file)
@@ -30,7 +30,6 @@ COMMON-OBJ = $(BUILDPATH)/AbstractBlock.o \
           $(BUILDPATH)/MainWindow.o \
           $(BUILDPATH)/moc_MainWindow.o \
           $(BUILDPATH)/ArithmeticEvaluator.o \
           $(BUILDPATH)/MainWindow.o \
           $(BUILDPATH)/moc_MainWindow.o \
           $(BUILDPATH)/ArithmeticEvaluator.o \
-          $(BUILDPATH)/moc_ArithmeticEvaluator.o \
           $(BUILDPATH)/BlockWidget.o \
           $(BUILDPATH)/moc_BlockWidget.o \
           $(BUILDPATH)/GroupWidget.o \
           $(BUILDPATH)/BlockWidget.o \
           $(BUILDPATH)/moc_BlockWidget.o \
           $(BUILDPATH)/GroupWidget.o \