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

Private GIT Repository
finished VHDL gen. (but have to test further
[blast.git] / BoxItem.cpp
index 53d56ec46f1601accdda63d3f8139e84694dd146..9ff42a88f7feb96f3f4d7ac413f870c2fe778e73 100644 (file)
@@ -514,6 +514,9 @@ void BoxItem::contextMenuEvent(QGraphicsSceneContextMenuEvent * event) {
   QAction* showWishboneIface = NULL;
   QAction* showParameters = NULL;
   QAction* showPatterns = NULL;
   QAction* showWishboneIface = NULL;
   QAction* showParameters = NULL;
   QAction* showPatterns = NULL;
+  QAction* showModifier = NULL;
+  QAction* removeModifier = NULL;
+  QAction* generateVHDL = NULL;
 
   InterfaceItem* ifaceItem = getInterfaceItemFromCursor(event->pos().x(), event->pos().y());
   // menu for interface
 
   InterfaceItem* ifaceItem = getInterfaceItemFromCursor(event->pos().x(), event->pos().y());
   // menu for interface
@@ -560,9 +563,25 @@ void BoxItem::contextMenuEvent(QGraphicsSceneContextMenuEvent * event) {
         }
       }      
     }
         }
       }      
     }
-    if ((iface->getAssociatedIface() != NULL) && (iface->getDirection() == AbstractInterface::Output)) {
-      showPatterns = menu.addAction("Show patterns");
+    if (iface->getAssociatedIface() != NULL) {
+      if (iface->getDirection() == AbstractInterface::Output) {
+        showPatterns = menu.addAction("Show output pattern");
+      }
+      else if (iface->getDirection() == AbstractInterface::Input) {
+        showPatterns = menu.addAction("Show input pattern");
+      }
+    }    
+
+    if (iface->getAssociatedIface() != NULL) {
+      ConnectedInterface* assoIface = AI_TO_CON(iface->getAssociatedIface());
+      if (assoIface->getInputModifier() != NULL) {
+        removeModifier = menu.addAction("Remove input modifier");
+      }
+      if (assoIface->getInputModifier() != NULL) {
+        showModifier = menu.addAction("Show input modifier parameters");
+      }
     }
     }
+
   }
   // menu for blocks (group or func)
   else {
   }
   // menu for blocks (group or func)
   else {
@@ -588,6 +607,7 @@ void BoxItem::contextMenuEvent(QGraphicsSceneContextMenuEvent * event) {
       showWishboneIface->setChecked(wishboneVisible);
     }
     removeAction = menu.addAction("Remove");
       showWishboneIface->setChecked(wishboneVisible);
     }
     removeAction = menu.addAction("Remove");
+    generateVHDL = menu.addAction("Generate VHDL");
   }
 
   QAction* selectedAction = NULL;
   }
 
   QAction* selectedAction = NULL;
@@ -643,6 +663,16 @@ void BoxItem::contextMenuEvent(QGraphicsSceneContextMenuEvent * event) {
   else if(selectedAction == showPatterns) {    
     dispatcher->showPatterns(ifaceItem);
   }
   else if(selectedAction == showPatterns) {    
     dispatcher->showPatterns(ifaceItem);
   }
+  else if(selectedAction == removeModifier) {
+    dispatcher->removeModifier(ifaceItem);
+  }
+  else if(selectedAction == showModifier) {
+    dispatcher->showModifier(ifaceItem);
+  }
+  else if(selectedAction == generateVHDL) {
+    dispatcher->generateBlockVHDL(this);
+  }
+
 }
 
 void BoxItem::loadFunctional(QDomElement funcElement) throw(Exception) {
 }
 
 void BoxItem::loadFunctional(QDomElement funcElement) throw(Exception) {
@@ -690,7 +720,7 @@ void BoxItem::loadFunctional(QDomElement funcElement) throw(Exception) {
     throw(Exception(PROJECTFILE_CORRUPTED));
   }
   if (referenceMd5 != referenceXml) {
     throw(Exception(PROJECTFILE_CORRUPTED));
   }
   if (referenceMd5 != referenceXml) {
-    throw(Exception(PROJECTFILE_CORRUPTED));
+    reference = referenceXml;
   }
   else {
     reference = referenceMd5;
   }
   else {
     reference = referenceMd5;
@@ -703,6 +733,7 @@ void BoxItem::loadFunctional(QDomElement funcElement) throw(Exception) {
   */
   functionalBlock->setName(name);
   setRefBlock(functionalBlock);
   */
   functionalBlock->setName(name);
   setRefBlock(functionalBlock);
+  params->blockToItem.insert(functionalBlock,this);
 
   setPos(posX,posY);
   setDimension(dimX,dimY);
 
   setPos(posX,posY);
   setDimension(dimX,dimY);
@@ -760,6 +791,17 @@ void BoxItem::loadFunctional(QDomElement funcElement) throw(Exception) {
       functionalBlock->addInterface(ctlIface);
     }    
   }
       functionalBlock->addInterface(ctlIface);
     }    
   }
+  // connect clk and rst to group clk/rst or to clkrstgen
+  if ((name != "clkrstgen") && (parentGroupBlock != NULL)) {
+    try {
+      functionalBlock->connectClkReset();
+    }
+    catch(Exception e) {
+      AbstractBlock* source = (AbstractBlock *)(e.getSource());
+      cerr << qPrintable(source->getName()) << ":" << qPrintable(e.getMessage()) << endl;
+      throw(e);
+    }
+  }
   
   // creating InterfaceItem
   initInterfaceItems();
   
   // creating InterfaceItem
   initInterfaceItems();