#include "GroupScene.h"\r
#include "GroupItem.h"\r
#include "BoxItem.h"\r
+#include "SourceItem.h"\r
#include "InterfaceItem.h"\r
#include "ConnectionItem.h"\r
\r
isRstClkShown = false;\r
\r
projectPath = QDir::currentPath();\r
+ \r
+ validityExtension = "_enb";\r
}\r
\r
Parameters::~Parameters() {\r
}\r
\r
\r
-FunctionalBlock* Parameters::duplicateFunctionalBlock(FunctionalBlock *block) {\r
-\r
- ReferenceBlock* ref = block->getReference();\r
- GroupBlock* group = AB_TO_GRP(block->getParent());\r
-\r
- // adding to the graph\r
- FunctionalBlock* newBlock = graph->addFunctionalBlock(group,ref);\r
- return newBlock;\r
-}\r
\r
void Parameters::validateXmlFile(const QString& xmlFileName, const QString& xsdFileName, XmlFileType fileType) throw(Exception) {\r
// opening configFile\r
if (idUpperScene != -1) {\r
groupWidget->setWindowTitle(groupBlock->getName());\r
groupWidget->show();\r
+ cout << qPrintable(groupItem->getRefBlock()->getName()) << " has upper box item in " << qPrintable(groupItem->getParentItem()->getScene()->getGroupItem()->getRefBlock()->getName()) << endl;\r
} \r
}\r
dispatcher->setSceneCounter(maxIdScene+1);\r
GroupScene *currentScene = searchSceneById(idScene,topScene);\r
\r
if(currentScene == NULL) throw(Exception(PROJECTFILE_CORRUPTED));\r
-\r
+ /**********************************************************\r
+ 2.1 : getting sources if it is top scene\r
+ ***********************************************************/\r
+ if (currentScene->isTopScene()) {\r
+ QDomNodeList sourceNodes = currentSceneNode.elementsByTagName("source_item");\r
+ cout << "top scene has " << sourceNodes.length() << " sources" << endl;\r
+ for(int j=0; j<sourceNodes.length(); j++) {\r
+ QDomElement currentSBNode = sourceNodes.at(j).toElement(); \r
+ SourceItem* sourceItem = new SourceItem(dispatcher,this);\r
+ try {\r
+ sourceItem->load(currentSBNode);\r
+ }\r
+ catch(Exception err) {\r
+ throw(err);\r
+ }\r
+ cout << "source item has been read, add it to the scene" << endl;\r
+ // add the block to the GroupScene\r
+ currentScene->addSourceItem(sourceItem);\r
+ } \r
+ }\r
+ /**********************************************************\r
+ 2.2 : getting functional blocks\r
+ ***********************************************************/\r
QDomNodeList functionalBlockNodes = currentSceneNode.elementsByTagName("bi_functional");\r
\r
for(int j=0; j<functionalBlockNodes.length(); j++) {\r
throw(err);\r
}\r
// add the block to the GroupScene\r
- currentScene->addBlockItem(funcItem);\r
+ currentScene->addBoxItem(funcItem);\r
}\r
}\r
cout << "functional blocks loaded and created succefully!" << endl;\r
// get the GroupItem already created and set at phase 1\r
GroupItem *insideGroup = searchGroupItemById(idGroup, topScene);\r
BoxItem* upperItem = NULL;\r
- if(insideGroup == NULL) cout << "group null" << endl;\r
+ if(insideGroup == NULL) cout << "group null" << endl; \r
// now search within the scene which BoxItem has a childItem that is = to insideGroup\r
- QList<BoxItem *> lst = currentScene->getBlockItems();\r
+ QList<BoxItem *> lst = currentScene->getBoxItems();\r
foreach(BoxItem* item, lst) {\r
if (item->getChildGroupItem() == insideGroup) {\r
upperItem = item;\r
double position = currentInterfaceNode.attribute("position","none").toDouble(&ok);\r
if(!ok) throw(Exception(PROJECTFILE_CORRUPTED));\r
\r
- ConnectedInterface *refInter = insideGroup->searchInterfaceByName(refName)->refInter;\r
+ ConnectedInterface *refInter = insideGroup->searchInterfaceItemByName(refName)->refInter;\r
InterfaceItem *ifaceItem = new InterfaceItem(position, orientation, refInter, upperItem, this);\r
ifaceItem->setId(id);\r
- upperItem->addInterface(ifaceItem);\r
+ upperItem->addInterfaceItem(ifaceItem);\r
}\r
}\r
}\r
InterfaceItem *iface2 = searchInterfaceItemById(to,topScene);\r
\r
if(iface1 != NULL && iface2 != NULL){\r
- dispatcher->connect(iface1,iface2);\r
+ dispatcher->createConnection(iface1,iface2);\r
} else {\r
cout << "interfaces not found, connect canceled!" << endl;\r
}\r
\r
blockXML.close();\r
try {\r
- validateXmlFile(fileName,"block.xsd",Reference);\r
+ validateXmlFile(fileName,"reference.xsd",Reference);\r
}\r
catch(Exception err) {\r
throw(err);\r
implXML.close();\r
cout << "OK" << endl;\r
cout << "reading " << qPrintable(fileName) << " content ...";\r
- /*\r
+\r
try {\r
- validateXmlFile(fileName,"block.xsd",Implementation);\r
+ validateXmlFile(fileName,"implementation.xsd",Implementation);\r
}\r
catch(Exception e) {\r
throw(e);\r
}\r
- */\r
+\r
// reading in into QDomDocument\r
QDomDocument document ("FileXML");\r
if (!implXML.open(QIODevice::ReadOnly)) {\r
QString refXml = implRoot.attribute("ref_name","none");\r
QString refMd5 = implRoot.attribute("ref_md5","none");\r
BlockImplementation* impl = new BlockImplementation(fileName,refXml,refMd5);\r
+ try {\r
+ impl->loadPatterns(implRoot);\r
+ }\r
+ catch(int err) {\r
+ throw(err);\r
+ }\r
availableImplementations.append(impl);\r
\r
ReferenceBlock* ref = NULL;\r
}\r
if (ref == NULL) {\r
cout << "Cannot find a reference block for impl :" << qPrintable(fileName) << endl;\r
- }\r
- ref->addImplementation(impl);\r
- impl->setReference(ref);\r
+ } \r
+ else { \r
+ ref->addImplementation(impl);\r
+ impl->setReference(ref);\r
+ if (! impl->checkPatterns()) throw(Exception(IMPLFILE_CORRUPTED));\r
+ } \r
cout << "OK" << endl;\r
}\r
}\r
if (ref == NULL) {\r
cout << "Cannot find a reference block for impl :" << qPrintable(impl->getXmlFile()) << endl;\r
}\r
- ref->addImplementation(impl);\r
- impl->setReference(ref);\r
+ else { \r
+ ref->addImplementation(impl);\r
+ impl->setReference(ref);\r
+ if (! impl->checkPatterns()) throw(Exception(IMPLFILE_CORRUPTED));\r
+ }\r
}\r
libFile.close();\r
}\r
\r
\r
void Parameters::updateToolbar() {\r
- int nb = currentScene->getBlockItems().length();\r
+ int nb = currentScene->getBoxItems().length();\r
for(int i = 0; i<nb; i++){\r
- if(currentScene->getBlockItems().at(i)->isSelected()){\r
+ if(currentScene->getBoxItems().at(i)->isSelected()){\r
currentScene->getGroupWidget()->enableGroupButton(true);\r
return;\r
}\r
\r
BoxItem* Parameters::searchBlockItemById(int id, GroupScene *scene) {\r
\r
- foreach(BoxItem *item, scene->getBlockItems()){\r
+ foreach(BoxItem *item, scene->getBoxItems()){\r
if(item->getId() == id){\r
return item;\r
}\r
return item;\r
}\r
}\r
- foreach(BoxItem *block, scene->getBlockItems()){\r
+ if (scene->isTopScene()) {\r
+ foreach(SourceItem *block, scene->getSourceItems()){\r
+ foreach(InterfaceItem *item, block->getInterfaces()){\r
+ if(item->getId() == id){\r
+ return item;\r
+ }\r
+ }\r
+ } \r
+ }\r
+ foreach(BoxItem *block, scene->getBoxItems()){\r
foreach(InterfaceItem *item, block->getInterfaces()){\r
if(item->getId() == id){\r
return item;\r