X-Git-Url: https://bilbo.iut-bm.univ-fcomte.fr/and/gitweb/blast.git/blobdiff_plain/14cd6d834ab531525a51c6a6992583b3e9143e02..3fb762e7042d9b4a1cf78556ad9ed7f117cc53ba:/Dispatcher.cpp?ds=inline diff --git a/Dispatcher.cpp b/Dispatcher.cpp index b9e09a9..b162559 100644 --- a/Dispatcher.cpp +++ b/Dispatcher.cpp @@ -18,7 +18,7 @@ #include "GroupScene.h" #include "GroupItem.h" #include "BoxItem.h" -#include "SourceItem.h" +#include "StimuliItem.h" #include "InterfaceItem.h" #include "ConnectionItem.h" @@ -29,7 +29,9 @@ #include "DelayInputModifier.h" -#include "InterfacePropertiesWindow.h" +#include "InterfacePropertiesDialog.h" + +#include int Dispatcher::sceneCounter = 0; @@ -37,8 +39,8 @@ Dispatcher::Dispatcher(Parameters* _params, MainWindow* _window) { params = _params; mainWindow =_window; params->setDispatcher(this); - currentGroup = NULL; - topGroup = NULL; + currentGroupWidget = NULL; + topGroupWidget = NULL; } GroupWidget *Dispatcher::loadProject(const QString& filename) { @@ -62,7 +64,7 @@ GroupWidget *Dispatcher::loadProject(const QString& filename) { params->setCurrentScene(scene); */ try { - topGroup = params->loadProject(root); + topGroupWidget = params->loadProject(root); } catch(Exception e){ cerr << qPrintable(e.getDefaultMessage()) << endl; @@ -75,8 +77,8 @@ GroupWidget *Dispatcher::loadProject(const QString& filename) { params->projectPath = info.absolutePath(); params->projectName = info.baseName(); cout << "project path = " << qPrintable(params->projectPath) << endl; - groupList.append(topGroup); - return topGroup; + groupList.append(topGroupWidget); + return topGroupWidget; } void Dispatcher::closeCurrentProject() { @@ -86,12 +88,18 @@ void Dispatcher::closeCurrentProject() { } groupList.clear(); params->destroyGraph(); - topGroup = NULL; - currentGroup = NULL; + topGroupWidget = NULL; + currentGroupWidget = NULL; sceneCounter = 0; } -bool Dispatcher::createConnection(InterfaceItem *iface1, InterfaceItem *iface2, bool visible) { +void Dispatcher::setSceneCounter(Context context, int value) { + + if (context != Load) return; + sceneCounter = value; +} + +bool Dispatcher::createConnection(Context context, InterfaceItem *iface1, InterfaceItem *iface2, bool visible) { ConnectedInterface* ref1 = iface1->refInter; ConnectedInterface* ref2 = iface2->refInter; @@ -105,7 +113,7 @@ bool Dispatcher::createConnection(InterfaceItem *iface1, InterfaceItem *iface2, ref1->connectTo(ref2); ok1 = true; } - // if the frist one did not work, test ref2->ref1 + // if the first one did not work, test ref2->ref1 if ((ok1 == false) && (ref2->canConnectTo(ref1)) && (ref1->canConnectFrom(ref2))) { ref2->connectTo(ref1); ok2 = true; @@ -114,7 +122,7 @@ bool Dispatcher::createConnection(InterfaceItem *iface1, InterfaceItem *iface2, iface1->getOwner()->getScene()->createConnectionItem(iface1,iface2, visible); - unselectAllItems(); + unselectAllItems(context); params->unsaveModif = true; cout << "created a connection from " << qPrintable(ref1->getName()) << " to " << qPrintable(ref2->getName()) << endl; return true; @@ -123,7 +131,7 @@ bool Dispatcher::createConnection(InterfaceItem *iface1, InterfaceItem *iface2, } -void Dispatcher::unselectAllItems(int direction){ +void Dispatcher::unselectAllItems(Context context, int direction){ GroupScene *scene = params->getCurrentScene(); @@ -135,14 +143,14 @@ void Dispatcher::unselectAllItems(int direction){ scene->update(); } -void Dispatcher::setCurrentGroupWidget(GroupWidget *win){ +void Dispatcher::setCurrentGroupWidget(Context context, GroupWidget *win){ win->setFocus(); win->changeConnectionMode(-1); - currentGroup = win; + currentGroupWidget = win; params->setCurrentScene(win->getScene()); } -void Dispatcher::changeConnectionMode(int mode){ +void Dispatcher::changeConnectionMode(Context context, int mode){ /* foreach(GroupWidget* win, groupList){ @@ -177,7 +185,7 @@ void Dispatcher::changeConnectionMode(int mode){ */ } -void Dispatcher::generateVHDL() throw(Exception) { +void Dispatcher::generateVHDL(Context context) throw(Exception) { static QString fctName = "Dispatcher::generateVHDL()"; #ifdef DEBUG_FCTNAME cout << "call to " << qPrintable(fctName) << endl; @@ -256,15 +264,22 @@ void Dispatcher::generateVHDL() throw(Exception) { } out << endl; out << "VL_SRC := ${XILINX}/verilog/src/glbl.v" << endl << endl; - out << "TB_SRC := $(TB_DIR)/$(PROJECT_NAME)_tb.vhd" << endl << endl; + out << "TB_SRC := $(TB_DIR)/read_csv.vhd \\" << endl; + out << "\t$(TB_DIR)/$(PROJECT_NAME)_tb.vhd" << endl << endl; out << "SIMU_EXE := $(PROJECT_NAME)_tb" << endl << endl; paramFile.close(); + QString msg = "VHDL generation completed successfully. Go to "; + msg += params->projectPath+" and type the following commands to launch a simulation:\n"; + msg += "\tmake clean\n"; + msg += "\tmake\n"; + msg += "\tmake view\n"; + QMessageBox::information(mainWindow,"VHDL generation", msg, QMessageBox::Ok); } -void Dispatcher::generateBlockVHDL(BoxItem *item){ +void Dispatcher::generateBlockVHDL(Context context, BoxItem *item){ static QString fctName = "Dispatcher::generateBlockVHDL()"; #ifdef DEBUG_FCTNAME cout << "call to " << qPrintable(fctName) << endl; @@ -281,7 +296,7 @@ void Dispatcher::generateBlockVHDL(BoxItem *item){ } } -void Dispatcher::renameFunctionalBlock(BoxItem *item){ +void Dispatcher::renameFunctionalBlock(Context context, BoxItem *item){ static QString fctName = "Dispatcher::renameFunctionalBlock()"; #ifdef DEBUG_FCTNAME cout << "call to " << qPrintable(fctName) << endl; @@ -320,7 +335,7 @@ void Dispatcher::renameFunctionalBlock(BoxItem *item){ item->nameChanged(); } -void Dispatcher::renameGroupBlock(GroupItem *item){ +void Dispatcher::renameGroupBlock(Context context, GroupItem *item){ static QString fctName = "Dispatcher::renameGroupBlock()"; #ifdef DEBUG_FCTNAME cout << "call to " << qPrintable(fctName) << endl; @@ -366,8 +381,8 @@ void Dispatcher::renameGroupBlock(GroupItem *item){ mainWindow->getLibrary()->updateComboScene(); } -void Dispatcher::renameSourceBlock(SourceItem *item){ - static QString fctName = "Dispatcher::renameSourceBlock()"; +void Dispatcher::renameStimuliItem(Context context, StimuliItem *item){ + static QString fctName = "Dispatcher::renameStimuliItem()"; #ifdef DEBUG_FCTNAME cout << "call to " << qPrintable(fctName) << endl; #endif @@ -377,7 +392,7 @@ void Dispatcher::renameSourceBlock(SourceItem *item){ bool ok = false; QString text = ""; while (!ok) { - text = QInputDialog::getText(win, "Rename a source", + text = QInputDialog::getText(win, "Rename a stimuli", "New name:", QLineEdit::Normal, item->getRefBlock()->getName(), &ok); if (!ok) return; @@ -391,10 +406,10 @@ void Dispatcher::renameSourceBlock(SourceItem *item){ ok = false; } else { - FunctionalBlock* block = params->getGraph()->getSourceBlockByName(text); + FunctionalBlock* block = params->getGraph()->getStimuliBlockByName(text); if (block != NULL) { QMessageBox::warning(win,"Error in given name", - "the name provided is similar to that of another source block within the top group", + "the name provided is similar to that of another stimuli block within the top group", QMessageBox::Ok); ok = false; } @@ -406,7 +421,7 @@ void Dispatcher::renameSourceBlock(SourceItem *item){ } -void Dispatcher::renameInterface(InterfaceItem *item) { +void Dispatcher::renameInterface(Context context, InterfaceItem *item) { static QString fctName = "Dispatcher::renameInterface()"; #ifdef DEBUG_FCTNAME cout << "call to " << qPrintable(fctName) << endl; @@ -450,7 +465,7 @@ void Dispatcher::renameInterface(InterfaceItem *item) { item->getOwner()->nameChanged(); } -void Dispatcher::showPatterns(InterfaceItem *item) { +void Dispatcher::showPatterns(Context context, InterfaceItem *item) { static QString fctName = "Dispatcher::showPatterns()"; #ifdef DEBUG_FCTNAME cout << "call to " << qPrintable(fctName) << endl; @@ -494,7 +509,7 @@ void Dispatcher::showPatterns(InterfaceItem *item) { QMessageBox::information(NULL,"Interface pattern",msg,QMessageBox::Ok,QMessageBox::Ok); } -void Dispatcher::showModifier(InterfaceItem *item) { +void Dispatcher::showModifier(Context context, InterfaceItem *item) { static QString fctName = "Dispatcher::showModifier()"; #ifdef DEBUG_FCTNAME cout << "call to " << qPrintable(fctName) << endl; @@ -515,7 +530,7 @@ void Dispatcher::showModifier(InterfaceItem *item) { QMessageBox::information(NULL,"Interface pattern",msg,QMessageBox::Ok,QMessageBox::Ok); } -void Dispatcher::removeModifier(InterfaceItem *item) { +void Dispatcher::removeModifier(Context context, InterfaceItem *item) { static QString fctName = "Dispatcher::showModifier()"; #ifdef DEBUG_FCTNAME cout << "call to " << qPrintable(fctName) << endl; @@ -526,7 +541,7 @@ void Dispatcher::removeModifier(InterfaceItem *item) { } -void Dispatcher::duplicateBoxItem(BoxItem *item){ +void Dispatcher::duplicateBoxItem(Context context, BoxItem *item){ static QString fctName = "Dispatcher::duplicateBoxItem()"; #ifdef DEBUG_FCTNAME cout << "call to " << qPrintable(fctName) << endl; @@ -549,8 +564,8 @@ void Dispatcher::duplicateBoxItem(BoxItem *item){ } } -void Dispatcher::duplicateSourceItem(SourceItem *item) { - static QString fctName = "Dispatcher::duplicateSourceItem()"; +void Dispatcher::duplicateStimuliItem(Context context, StimuliItem *item) { + static QString fctName = "Dispatcher::duplicateStimuliItem()"; #ifdef DEBUG_FCTNAME cout << "call to " << qPrintable(fctName) << endl; #endif @@ -564,15 +579,15 @@ void Dispatcher::duplicateSourceItem(SourceItem *item) { // adding to the model FunctionalBlock* funBlock = (FunctionalBlock*)block; - newBlock = params->getGraph()->duplicateSourceBlock(funBlock); + newBlock = params->getGraph()->duplicateStimuliBlock(funBlock); // adding to the view - scene->createSourceItem(newBlock); + scene->createStimuliItem(newBlock); params->unsaveModif = true; } } -void Dispatcher::duplicateInterfaceItem(InterfaceItem *item) { +void Dispatcher::duplicateInterfaceItem(Context context, InterfaceItem *item) { static QString fctName = "Dispatcher::duplicateInterfaceItem()"; #ifdef DEBUG_FCTNAME cout << "call to " << qPrintable(fctName) << endl; @@ -608,104 +623,191 @@ void Dispatcher::duplicateInterfaceItem(InterfaceItem *item) { } -BoxItem* Dispatcher::addBlock(int idCategory, int idBlock, int idScene) { +BoxItem* Dispatcher::addBlock(Context context, int idCategory, int idBlock, int idScene, QHash clkRstToGen) { static QString fctName = "Dispatcher::addBlock()"; #ifdef DEBUG_FCTNAME cout << "call to " << qPrintable(fctName) << endl; #endif - bool newSource = false; + bool newStimuli = false; BoxItem* item = NULL; - GroupScene *scene = getSceneById(idScene); - ReferenceBlock* ref = params->getReferenceBlock(idCategory,idBlock); - // if block has no inputs, propose to add it as a source to top scene - if ((scene->isTopScene()) && (ref->isGeneratorBlock())) { - int ret = QMessageBox::question(NULL,"Adding a block to top scene","Selected block may be used as a source for the top scene. Do you want to add it as a source ?"); - if (ret == QMessageBox::Yes) { - newSource = true; - } - } - if (newSource) { - FunctionalBlock* newOne = params->getGraph()->createSourceBlock(ref); - scene->createSourceItem(newOne); + + /* For now, this method is only used while designing and not loading */ + if (context == Design) { + GroupScene *scene = getSceneById(idScene); + ReferenceBlock* ref = params->getReferenceBlock(idCategory,idBlock); + // if block has no inputs, propose to add it as a source to top scene + if ((scene->isTopScene()) && (ref->isSourceBlock())) { + int ret = QMessageBox::question(NULL,"Adding a block to top scene","Selected block may be used as a stimuli for the top scene. Do you want to add it as a stimuli ?"); + if (ret == QMessageBox::Yes) { + newStimuli = true; + } + } + if (newStimuli) { + FunctionalBlock* newOne = params->getGraph()->createStimuliBlock(ref, true); + scene->createStimuliItem(newOne); + } + else { + + GroupBlock* group = AB_TO_GRP(scene->getGroupItem()->getRefBlock()); + FunctionalBlock* newOne = params->getGraph()->createFunctionalBlock(group, ref, true); + + // creating the box item + item = scene->createBoxItem(newOne); + if (params->autoConnMainClk) { + // for now just use the first one + QHashIterator iter(clkRstToGen); + while (iter.hasNext()) { + iter.next(); + AbstractInterface* iface = newOne->getIfaceFromName(iter.key()); + if (iface->getPurpose() == AbstractInterface::Clock) { + newOne->connectClock(iface->getName(), iter.value()); + } + else if (iface->getPurpose() == AbstractInterface::Reset) { + newOne->connectReset(iface->getName(), iter.value()); + } + } + } + params->blockToItem.insert(newOne,item); + } + params->unsaveModif = true; } - else { - GroupBlock* group = AB_TO_GRP(scene->getGroupItem()->getRefBlock()); - FunctionalBlock* newOne = params->getGraph()->createFunctionalBlock(group, ref); - item = scene->createBoxItem(newOne); + + return item; +} + +void Dispatcher::addClkRstGenBlock(Context context, double frequency) { + static QString fctName = "Dispatcher::addClkRstGenBlock()"; +#ifdef DEBUG_FCTNAME + cout << "call to " << qPrintable(fctName) << endl; +#endif + + + if (context == Design) { + + params->getGraph()->addClock(frequency); + + // get the top group + GroupBlock *group = params->getGraph()->getTopGroup(); + GroupScene *scene = topGroupWidget->getScene(); + + // creating the clkrstgen block + ReferenceBlock* ref = params->getHiddenReferenceBlock("clkrstgen"); + FunctionalBlock* newOne = params->getGraph()->createFunctionalBlock(group, ref, true); + + QString name = "clkrstgen_"; + name += QString::number(params->getGraph()->getClocks().size()-1); + newOne->setName(name); + + // creating the box item + BoxItem* item = scene->createBoxItem(newOne, BoxItem::Left, AbstractBoxItem::Dimension); + item->setVisible(false); + + ConnectedInterface* fromIfaceClk = NULL; + ConnectedInterface* fromIfaceReset = NULL; + QString clkName = "ext_clk_"+QString::number(params->getGraph()->getClocks().size()-1); + QString rstName = "ext_reset_"+QString::number(params->getGraph()->getClocks().size()-1); + fromIfaceClk = new GroupInterface(group,clkName, AbstractInterface::Input, AbstractInterface::Clock); + fromIfaceReset = new GroupInterface(group,rstName, AbstractInterface::Input, AbstractInterface::Reset); + group->addInterface(fromIfaceClk); + group->addInterface(fromIfaceReset); + // creating top group ext_clk iface item + GroupItem* groupItem = scene->getGroupItem(); + InterfaceItem* fromIfaceItemClk = new InterfaceItem(0.5 , Parameters::West, fromIfaceClk, groupItem, params, true); + groupItem->addInterfaceItem(fromIfaceItemClk,true); + // creating top group ext_reset iface item + InterfaceItem* fromIfaceItemReset = new InterfaceItem(0.5 , Parameters::West, fromIfaceReset, groupItem, params, false); + groupItem->addInterfaceItem(fromIfaceItemReset,true); + // connecting ext_clk iface items + InterfaceItem* toIfaceItemClk = item->searchInterfaceItemByName("ext_clk"); + if (toIfaceItemClk == NULL) { + cerr << "Abnormal case while connecting top group ext_clk to clkrstgen" << endl; + } + createConnection(context,fromIfaceItemClk, toIfaceItemClk, false); + // connecting ext_reset iface items + InterfaceItem* toIfaceItemReset = item->searchInterfaceItemByName("ext_reset"); + if (toIfaceItemReset == NULL) { + cerr << "Abnormal case while connecting top group ext_reset to clkrstgen" << endl; + } + createConnection(context,fromIfaceItemReset, toIfaceItemReset, false); + params->blockToItem.insert(newOne,item); + params->unsaveModif = true; } - params->unsaveModif = true; - return item; } -GroupWidget *Dispatcher::createTopScene(){ + +GroupWidget *Dispatcher::createTopScene(Context context, double mainClock){ static QString fctName = "Dispatcher::createTopScene()"; #ifdef DEBUG_FCTNAME cout << "call to " << qPrintable(fctName) << endl; #endif - // creating the model part of the group - Graph* graph = params->createGraph(); + bool createIfaces = true; + if (context == Load) { + createIfaces = false; + } + // creating the graph and thus, the topgroup + Graph* graph = params->initGraph(createIfaces); + graph->addClock(mainClock); + // get the top group GroupBlock *topBlock = graph->getTopGroup(); - // creating the clkrstgen block - ReferenceBlock* ref = params->getHiddenReferenceBlock("clkrstgen"); - FunctionalBlock* newOne = params->getGraph()->createFunctionalBlock(topBlock, ref); - ConnectedInterface* fromIface = AI_TO_CON(topBlock->getIfaceFromName("ext_clk")); - ConnectedInterface* toIface = AI_TO_CON(newOne->getIfaceFromName("ext_clk")); - fromIface->connectTo(toIface); - fromIface = AI_TO_CON(topBlock->getIfaceFromName("ext_reset")); - toIface = AI_TO_CON(newOne->getIfaceFromName("ext_reset")); - fromIface->connectTo(toIface); - - // creating a fake and not connected interface - //AbstractInterface* iface = new GroupInterface(refBlock,"grp_iface",AbstractInterface::Input,AbstractInterface::Top); - - // creating the group widget - topGroup = new GroupWidget(NULL,this,params); - currentGroup = topGroup; + // creating the top group widget + topGroupWidget = new GroupWidget(NULL,this,params); + currentGroupWidget = topGroupWidget; // getting the newly created scene - GroupScene *scene = topGroup->getScene(); + GroupScene *scene = topGroupWidget->getScene(); scene->setId(sceneCounter++); params->setTopScene(scene); params->setCurrentScene(scene); // creating the view part of the group GroupItem *group = new GroupItem(NULL,topBlock,this,params); - + // associate the top scene to the top group iten + scene->setGroupItem(group); // adding the fake interface to the top group item //InterfaceItem* item = new InterfaceItem(0.0 , Parameters::West, (ConnectedInterface*)iface, group, params); //group->addInterface(item,true); - scene->setGroupItem(group); - groupList.append(topGroup); - return topGroup; + if (context == Design) { + // create clkrstgen + double freq = params->getGraph()->getClock(0); + params->getGraph()->resetClocks(); + addClkRstGenBlock(context,freq); + } + + groupList.append(topGroupWidget); + return topGroupWidget; } -GroupWidget* Dispatcher::addNewEmptyGroup(GroupScene* scene, bool show) { +GroupWidget* Dispatcher::addNewEmptyGroup(Context context, GroupScene* scene, bool show) { static QString fctName = "Dispatcher::addNewEmptyGroup();"; #ifdef DEBUG_FCTNAME cout << "call to " << qPrintable(fctName) << endl; #endif + bool createIfaces = true; + if (context == Load) { + createIfaces = false; + } // getting the parent block in the graph GroupBlock* parent = AB_TO_GRP(scene->getGroupItem()->getRefBlock()); cout << "new group : parent = "<< qPrintable(parent->getName()) << endl; - GroupBlock* groupBlock = params->getGraph()->createChildGroupBlock(parent); + GroupBlock* groupBlock = params->getGraph()->createChildGroupBlock(parent, createIfaces); cout << "new group : child = "<< qPrintable(groupBlock->getName()) << ", child of " << qPrintable(groupBlock->getParent()->getName()) << endl; // creating the BlockItem in the scene BoxItem* newItem = scene->createBoxItem(groupBlock); params->unsaveModif = true; - GroupWidget* child = createChildScene(scene->getGroupWidget(),newItem); + GroupWidget* child = createChildScene(context, scene->getGroupWidget(),newItem); if (show) child->show(); return child; } -GroupWidget *Dispatcher::createChildScene(GroupWidget* parentWidget, BoxItem *upperItemOfGroupItem) { +GroupWidget *Dispatcher::createChildScene(Context context, GroupWidget* parentWidget, BoxItem *upperItemOfGroupItem) { static QString fctName = "Dispatcher::createChildScene()"; #ifdef DEBUG_FCTNAME cout << "call to " << qPrintable(fctName) << endl; @@ -747,9 +849,9 @@ GroupWidget *Dispatcher::createChildScene(GroupWidget* parentWidget, BoxItem *up return group; } -void Dispatcher::destroyScene(GroupScene *scene) { +void Dispatcher::destroyScene(Context context, GroupScene *scene) { foreach(GroupScene* s, scene->getChildrenScene()) { - destroyScene(s); + destroyScene(context, s); } if (scene->getNbChildScene() == 0) { @@ -766,7 +868,7 @@ void Dispatcher::destroyScene(GroupScene *scene) { } } -void Dispatcher::showRaiseWindow(BoxItem *item) { +void Dispatcher::showRaiseWindow(Context context, BoxItem *item) { static QString fctName = "Dispatcher::showRaiseWindow()"; #ifdef DEBUG_FCTNAME cout << "call to " << qPrintable(fctName) << endl; @@ -785,11 +887,11 @@ void Dispatcher::showRaiseWindow(BoxItem *item) { win->raise(); win->activateWindow(); - currentGroup = win; - params->setCurrentScene(currentGroup->getScene()); + currentGroupWidget = win; + params->setCurrentScene(currentGroupWidget->getScene()); } -void Dispatcher::showRstClkIface(AbstractBoxItem *item) { +void Dispatcher::showRstClkIface(Context context, AbstractBoxItem *item) { static QString fctName = "Dispatcher::showRstClkIface()"; #ifdef DEBUG_FCTNAME cout << "call to " << qPrintable(fctName) << endl; @@ -799,7 +901,7 @@ void Dispatcher::showRstClkIface(AbstractBoxItem *item) { } -void Dispatcher::showWishboneIface(AbstractBoxItem *item) { +void Dispatcher::showWishboneIface(Context context, AbstractBoxItem *item) { static QString fctName = "Dispatcher::showWishboneIface()"; #ifdef DEBUG_FCTNAME cout << "call to " << qPrintable(fctName) << endl; @@ -808,7 +910,7 @@ void Dispatcher::showWishboneIface(AbstractBoxItem *item) { item->setWishboneVisible(!item->isWishboneVisible()); } -void Dispatcher::addNewFullGroup() { +void Dispatcher::addNewFullGroup(Context context) { static QString fctName = "Dispatcher::addNewFullGroup()"; #ifdef DEBUG_FCTNAME cout << "call to " << qPrintable(fctName) << endl; @@ -969,12 +1071,14 @@ void Dispatcher::addNewFullGroup() { #endif } -void Dispatcher::removeBoxItem(BoxItem *item) { +void Dispatcher::removeBoxItem(Context context, BoxItem *item) { static QString fctName = "Dispatcher::removeBoxItem()"; #ifdef DEBUG_FCTNAME cout << "call to " << qPrintable(fctName) << endl; #endif + if (context != Design) return; + /* a BoxItem (group of func) can be removed only if none of its interfaces is connected to a group interface that is itself connected to another one. @@ -1020,7 +1124,7 @@ void Dispatcher::removeBoxItem(BoxItem *item) { if (ret == QMessageBox::Cancel) { return; } - removeAllBlockConnections(item); + removeAllBlockConnections(context, item); if (item->getRefBlock()->isFunctionalBlock()) { FunctionalBlock* block = AB_TO_FUN(item->getRefBlock()); @@ -1035,7 +1139,7 @@ void Dispatcher::removeBoxItem(BoxItem *item) { // remove all child scenes recursively GroupItem* subgroup = item->getChildGroupItem(); - destroyScene(subgroup->getScene()); + destroyScene(context, subgroup->getScene()); // remove the BoxItem item->getScene()->removeBoxItem(item); // remove the group from the graph @@ -1043,7 +1147,7 @@ void Dispatcher::removeBoxItem(BoxItem *item) { } } -void Dispatcher::removeAllBlockConnections(AbstractBoxItem *item) { +void Dispatcher::removeAllBlockConnections(Context context, AbstractBoxItem *item) { static QString fctName = "Dispatcher::removeAllBlockConnection()"; #ifdef DEBUG_FCTNAME cout << "call to " << qPrintable(fctName) << endl; @@ -1051,35 +1155,35 @@ void Dispatcher::removeAllBlockConnections(AbstractBoxItem *item) { foreach(InterfaceItem* ifaceItem, item->getInterfaces()) { foreach(ConnectionItem* conn, ifaceItem->connections) { - removeConnection(conn); + removeConnection(context, conn); } } } -void Dispatcher::removeSourceItem(SourceItem *item) { - static QString fctName = "Dispatcher::removeSourceItem()"; +void Dispatcher::removeStimuliItem(Context context, StimuliItem *item) { + static QString fctName = "Dispatcher::removeStimuliItem()"; #ifdef DEBUG_FCTNAME cout << "call to " << qPrintable(fctName) << endl; #endif - QString msg = "Removing source "; + QString msg = "Removing stimmuli "; msg += item->getRefBlock()->getName(); msg += " and all its connections.\n\nAre you sure ?"; - int ret = QMessageBox::question(NULL,"Removing source block",msg, QMessageBox::Ok | QMessageBox::Cancel, QMessageBox::Ok); + int ret = QMessageBox::question(NULL,"Removing stimuli block",msg, QMessageBox::Ok | QMessageBox::Cancel, QMessageBox::Ok); if (ret == QMessageBox::Cancel) { return; } - removeAllBlockConnections(item); + removeAllBlockConnections(context, item); FunctionalBlock* block = AB_TO_FUN(item->getRefBlock()); - item->getScene()->removeSourceItem(item); - params->getGraph()->removeSourceBlock(block); + item->getScene()->removeStimuliItem(item); + params->getGraph()->removeStimuliBlock(block); } -void Dispatcher::removeConnection(ConnectionItem *connItem) { +void Dispatcher::removeConnection(Context context, ConnectionItem *connItem) { static QString fctName = "Dispatcher::removeConnection()"; #ifdef DEBUG_FCTNAME cout << "call to " << qPrintable(fctName) << endl; @@ -1161,8 +1265,9 @@ void Dispatcher::showBlocksLibrary(){ mainWindow->getLibrary()->raise(); } -void Dispatcher::showProperties(InterfaceItem *inter) { - new InterfacePropertiesWindow(inter); +void Dispatcher::showProperties(Context context, InterfaceItem *inter) { + QDialog* dial = new InterfacePropertiesDialog(inter); + dial->exec(); } /* connectInterToGroup() : @@ -1171,7 +1276,7 @@ void Dispatcher::showProperties(InterfaceItem *inter) { That action will create a new InterfaceItem on the GroupItem and a connectionItem between the interfaces. */ -void Dispatcher::connectInterToGroup(InterfaceItem *item){ +void Dispatcher::connectInterToGroup(Context context, InterfaceItem *item){ // getting the GroupBlock and GroupItem that are parent of the block that owns item ConnectedInterface *refInter = item->refInter; @@ -1194,7 +1299,7 @@ void Dispatcher::connectInterToGroup(InterfaceItem *item){ parentItem->addInterfaceItem(groupIfaceItem,true); // creating the connection, in graph and with an item - createConnection(item, groupIfaceItem); + createConnection(context, item, groupIfaceItem); // if groupItem is not topGroup, must also add a new interface to the parent BlockItem BoxItem* parent2Item = parentItem->getParentItem(); @@ -1205,11 +1310,11 @@ void Dispatcher::connectInterToGroup(InterfaceItem *item){ parentItem->getScene()->updateConnectionItemsShape(); - unselectAllItems(); + unselectAllItems(context); params->unsaveModif = true; } -void Dispatcher::removeFunctionalInterface(InterfaceItem *item) { +void Dispatcher::removeFunctionalInterface(Context context, InterfaceItem *item) { static QString fctName = "Dispatcher::removeBlockInterface()"; #ifdef DEBUG_FCTNAME cout << "call to " << qPrintable(fctName) << endl; @@ -1223,7 +1328,7 @@ void Dispatcher::removeFunctionalInterface(InterfaceItem *item) { that allows to remove an interface. */ foreach(ConnectionItem* conn, item->connections) { - removeConnection(conn); + removeConnection(context, conn); } ConnectedInterface* ref = item->refInter; @@ -1232,7 +1337,7 @@ void Dispatcher::removeFunctionalInterface(InterfaceItem *item) { fun->removeInterface(ref); } -void Dispatcher::removeGroupInterface(InterfaceItem *item) { +void Dispatcher::removeGroupInterface(Context context, InterfaceItem *item) { static QString fctName = "Dispatcher::removeGroupInterface()"; #ifdef DEBUG_FCTNAME cout << "call to " << qPrintable(fctName) << endl; @@ -1242,7 +1347,7 @@ void Dispatcher::removeGroupInterface(InterfaceItem *item) { ones to a GroupItem, it is automatically deleted. */ foreach(ConnectionItem* conn, item->connections) { - removeConnection(conn); + removeConnection(context, conn); } } @@ -1310,7 +1415,7 @@ InterfaceItem* Dispatcher::getInterfaceItemById(int id) { return NULL; } -void Dispatcher::findGraphModifications(FunctionalBlock *block) { +void Dispatcher::findGraphModifications(Context context, FunctionalBlock *block) { static QString fctName = "Dispatcher::findGraphModifications()"; #ifdef DEBUG_FCTNAME cout << "call to " << qPrintable(fctName) << endl;