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

Private GIT Repository
finished testbench generation
[blast.git] / Parameters.cpp
index d7621d232a1afa54f59d2a4078eeba3bac0f521b..ecf69d9924142ad9b26d6459b61aa43ce070fec8 100644 (file)
@@ -78,6 +78,7 @@ Graph* Parameters::initGraph(bool createTopGroupIfaces) {
 \r
 void Parameters::destroyGraph() {\r
   delete graph;\r
+  graph = new Graph();\r
 }\r
 \r
 ReferenceBlock* Parameters::getReferenceBlock(int idCategory, int idBlock) {\r
@@ -97,71 +98,6 @@ ReferenceBlock* Parameters::getHiddenReferenceBlock(QString blockName) {
   return ref;\r
 }\r
 \r
-double Parameters::getFeedingClockFrequency(AbstractInterface *iface) {\r
-\r
-  int idClock = 0;\r
-\r
-  if (iface->isReferenceInterface()) return 0.0;\r
-\r
-  if (iface->getClockIfaceType() == AbstractInterface::ParameterName) {\r
-    BlockParameter* param = iface->getOwner()->getParameterFromName(iface->getClockIfaceString());\r
-    if (!param->isUserParameter()) return 0.0;\r
-    bool ok;\r
-    double freq = param->getDoubleValue(&ok);\r
-    if (!ok) {\r
-      cerr << "Abnormal case: cannot retrieve clock id from parameter  " << qPrintable(param->getName()) << endl;\r
-    }\r
-    return freq;\r
-  }\r
-  else if ( (iface->getClockIfaceType() == AbstractInterface::ClockName) || ((iface->getDirection() == AbstractInterface::Input) && (iface->getPurpose() == AbstractInterface::Clock))) {\r
-\r
-    // if iface is not clock, retrieve the clock related to it\r
-    if (iface->getClockIfaceType() == AbstractInterface::ClockName) {\r
-      iface = iface->getClockIface();\r
-    }\r
-    // if iface is a group interface, then iface name is ext_clk_X, thus extract the X\r
-    if (iface->isGroupInterface()) {\r
-      QString name = iface->getName();\r
-      name.remove(0,8);\r
-      bool ok;\r
-      idClock = name.toInt(&ok);\r
-      if (!ok) {\r
-        cerr << "Abnormal case: cannot retrieve clock id from iface name " << qPrintable(iface->getName()) << endl;\r
-        return 0.0;\r
-      }\r
-    }\r
-    // if iface is a functional interface, it is connected to clkrstgen_X (in top group) or to ext_clk_X (in subgroup)\r
-    else if (iface->isFunctionalInterface()) {\r
-      FunctionalInterface* funIface = AI_TO_FUN(iface);\r
-      ConnectedInterface* connFrom = funIface->getConnectedFrom();\r
-      if (connFrom == NULL) {\r
-        cerr << "Abnormal case: input clock " << qPrintable(iface->getName()) << " is not connected" << endl;\r
-        return 0.0;\r
-      }\r
-      if (iface->getOwner()->isTopGroupBlock()) {\r
-        QString name = connFrom->getOwner()->getName();\r
-        name.remove(0,10);\r
-        bool ok;\r
-        idClock = name.toInt(&ok);\r
-        if (!ok) {\r
-          cerr << "Abnormal case: cannot retrieve clock id for " << qPrintable(iface->getName()) << endl;\r
-          return 0.0;\r
-        }\r
-      }\r
-      else {\r
-        QString name = connFrom->getName();\r
-        name.remove(0,8);\r
-        bool ok;\r
-        idClock = name.toInt(&ok);\r
-        if (!ok) {\r
-          cerr << "Abnormal case: cannot retrieve clock id for " << qPrintable(iface->getName()) << endl;\r
-          return 0.0;\r
-        }\r
-      }\r
-    }\r
-  }\r
-  return graph->getClock(idClock);\r
-}\r
 \r
 void Parameters::createDelayBlock() {\r
   delayRef = new ReferenceBlock("no.xml");\r
@@ -325,6 +261,64 @@ GroupWidget *Parameters::loadProject(QDomElement root) throw(Exception) {
     }\r
     cout << "project path set to " << qPrintable(projectPath) << endl;\r
   }\r
+\r
+  /**********************************************************\r
+   0 : getting parameters\r
+  ***********************************************************/\r
+  int width = 0;\r
+  int height = 0;\r
+  int lineLength = 0;\r
+  int gapLength = 0;\r
+  QString fontName="";\r
+  int fontSize;\r
+  QString autoConn="";\r
+  QDomNode paramsNode = root.elementsByTagName("parameters").at(0);\r
+\r
+  QDomElement blocksElt = paramsNode.firstChildElement("block_view");\r
+  width = blocksElt.attribute("width","none").toInt(&ok);\r
+  if(!ok) throw(Exception(PROJECTFILE_CORRUPTED));\r
+  height = blocksElt.attribute("height","none").toInt(&ok);\r
+  if(!ok) throw(Exception(PROJECTFILE_CORRUPTED));\r
+  fontName = blocksElt.attribute("font","none");\r
+  if(fontName == "none") throw(Exception(PROJECTFILE_CORRUPTED));\r
+  fontSize = blocksElt.attribute("font_size","none").toInt(&ok);\r
+  if(!ok) throw(Exception(PROJECTFILE_CORRUPTED));\r
+  defaultBlockWidth = width;\r
+  defaultBlockHeight = height;\r
+  defaultBlockFontName = fontName;\r
+  defaultBlockFontSize = fontSize;\r
+  defaultBlockFont = QFont(defaultBlockFontName, defaultBlockFontSize);\r
+\r
+  QDomElement ifacesElt = paramsNode.firstChildElement("interface_view");\r
+  lineLength = ifacesElt.attribute("line_length","none").toInt(&ok);\r
+  if(!ok) throw(Exception(PROJECTFILE_CORRUPTED));\r
+  width = ifacesElt.attribute("width","none").toInt(&ok);\r
+  if(!ok) throw(Exception(PROJECTFILE_CORRUPTED));\r
+  height = ifacesElt.attribute("height","none").toInt(&ok);\r
+  if(!ok) throw(Exception(PROJECTFILE_CORRUPTED));\r
+  fontName = ifacesElt.attribute("font","none");\r
+  if(fontName == "none") throw(Exception(PROJECTFILE_CORRUPTED));\r
+  fontSize = ifacesElt.attribute("font_size","none").toInt(&ok);\r
+  if(!ok) throw(Exception(PROJECTFILE_CORRUPTED));\r
+  arrowLineLength = lineLength;\r
+  arrowWidth = width;\r
+  arrowHeight = height;\r
+  defaultIfaceFontName = fontName;\r
+  defaultIfaceFontSize = fontSize;\r
+  defaultIfaceFont = QFont(defaultIfaceFontName, defaultIfaceFontSize);\r
+\r
+  QDomElement connsElt = paramsNode.firstChildElement("connection_view");\r
+  gapLength = connsElt.attribute("gap_length","none").toInt(&ok);\r
+  if(!ok) throw(Exception(PROJECTFILE_CORRUPTED));\r
+  autoConn = connsElt.attribute("auto_conn","none");\r
+  if (autoConn == "false") {\r
+    autoConnMainClk = false;\r
+  }\r
+  else {\r
+    autoConnMainClk = true;\r
+  }\r
+  connGapLength = gapLength;\r
+\r
   /**********************************************************\r
    1 : getting scene and creating associated group widgets\r
   ***********************************************************/\r
@@ -340,6 +334,14 @@ GroupWidget *Parameters::loadProject(QDomElement root) throw(Exception) {
     if(!ok) throw(Exception(PROJECTFILE_CORRUPTED));\r
 \r
     if (idUpperScene == -1) {\r
+      QString clkList = currentSceneNode.attribute("clklist","none");\r
+      if (clkList == "none") throw(Exception(PROJECTFILE_CORRUPTED));\r
+      QStringList clks = clkList.split(",");\r
+      for(int j=0;j<clks.size();j++) {\r
+        double freq = clks.at(j).toDouble(&ok);\r
+        if(!ok) throw(Exception(PROJECTFILE_CORRUPTED));\r
+        graph->addClock(freq);\r
+      }\r
       topGroup = dispatcher->createTopScene(Dispatcher::Load);\r
       topScene->setId(idScene);\r
       groupItem = topScene->getGroupItem();      \r
@@ -525,12 +527,16 @@ GroupWidget *Parameters::loadProject(QDomElement root) throw(Exception) {
     int to = currentConnectionNode.attribute("to","none").toInt(&ok);\r
     if(!ok) throw(Exception(PROJECTFILE_CORRUPTED));\r
 \r
-\r
+    bool showConn = true;\r
+    QString visStr = currentConnectionNode.attribute("visible","none");\r
+    if (visStr == "false") {\r
+      showConn = false;\r
+    }\r
     InterfaceItem *iface1 = searchInterfaceItemById(from,topScene);\r
     InterfaceItem *iface2 = searchInterfaceItemById(to,topScene);\r
 \r
     if(iface1 != NULL && iface2 != NULL){\r
-      dispatcher->createConnection(Dispatcher::Load, iface1,iface2);\r
+      dispatcher->createConnection(Dispatcher::Load, iface1,iface2,showConn);\r
     } else {\r
       cout << "interfaces not found, connect canceled!" << endl;\r
     }\r
@@ -691,7 +697,7 @@ void Parameters::loadBlastConfiguration(QString confFile) throw(Exception) {
   attributeStr = eltInterfaces.attribute("height", "none");\r
   arrowHeight = attributeStr.toInt(&ok);\r
   if (!ok || arrowHeight < 1) throw(Exception(CONFIGFILE_CORRUPTED));\r
-  attributeStr = eltInterfaces.attribute("linelength", "none");\r
+  attributeStr = eltInterfaces.attribute("line_length", "none");\r
   arrowLineLength = attributeStr.toInt(&ok);\r
   if (!ok || arrowLineLength < 1) throw(Exception(CONFIGFILE_CORRUPTED));\r
   attributeStr = eltInterfaces.attribute("font_size", "none");\r
@@ -703,7 +709,7 @@ void Parameters::loadBlastConfiguration(QString confFile) throw(Exception) {
   defaultIfaceFont = QFont(defaultIfaceFontName, defaultIfaceFontSize);\r
 \r
   QDomElement eltConnections = eltInterfaces.nextSiblingElement("connections");\r
-  attributeStr = eltConnections.attribute("gaplength", "none");\r
+  attributeStr = eltConnections.attribute("gap_length", "none");\r
   connGapLength = attributeStr.toInt(&ok);\r
   if (!ok || connGapLength < 1) throw(Exception(CONFIGFILE_CORRUPTED));\r
 }\r
@@ -1209,6 +1215,33 @@ void Parameters::save(QString confFile) {
     writer.writeStartDocument();\r
 \r
     writer.writeStartElement("blast_project");\r
+\r
+    writer.writeStartElement("parameters");\r
+    writer.writeStartElement("block_view");\r
+    writer.writeAttribute("width",QString::number(defaultBlockWidth));\r
+    writer.writeAttribute("height",QString::number(defaultBlockHeight));\r
+    writer.writeAttribute("font",defaultBlockFontName);\r
+    writer.writeAttribute("font_size",QString::number(defaultBlockFontSize));\r
+    writer.writeEndElement();    //</blocks>\r
+    writer.writeStartElement("interface_view");\r
+    writer.writeAttribute("line_length",QString::number(arrowLineLength));\r
+    writer.writeAttribute("width",QString::number(arrowWidth));\r
+    writer.writeAttribute("height",QString::number(arrowHeight));\r
+    writer.writeAttribute("font",defaultIfaceFontName);\r
+    writer.writeAttribute("font_size",QString::number(defaultIfaceFontSize));\r
+    writer.writeEndElement();    //</interfaces>\r
+    writer.writeStartElement("connection_view");\r
+    writer.writeAttribute("gap_length",QString::number(connGapLength));\r
+    if (autoConnMainClk) {\r
+      writer.writeAttribute("auto_conn","true");\r
+    }\r
+    else {\r
+      writer.writeAttribute("auto_conn","false");\r
+    }\r
+    writer.writeEndElement();    //</connections>\r
+\r
+    writer.writeEndElement();    //</parameters>\r
+\r
     writer.writeStartElement("scenes");\r
 \r
     writer.writeAttribute("count",QString::number(dispatcher->getNumberOfScenes()));\r
@@ -1238,7 +1271,9 @@ void Parameters::save(QString confFile) {
 \r
       writer.writeAttribute("from",QString::number(item->getFromInterfaceItem()->getId()));\r
       writer.writeAttribute("to", QString::number(item->getToInterfaceItem()->getId()));\r
-\r
+      if (!item->isVisible()) {\r
+        writer.writeAttribute("visible","false");\r
+      }\r
       writer.writeEndElement();\r
     }\r
 \r