#include "Parameters.h"
#include "MainWindow.h"
+#include "ExternalResource.h"
+
#include "Graph.h"
#include "ReferenceBlock.h"
#include "GroupBlock.h"
#include "GroupScene.h"
#include "GroupItem.h"
#include "BoxItem.h"
-#include "SourceItem.h"
+#include "StimuliItem.h"
#include "InterfaceItem.h"
#include "ConnectionItem.h"
#include "DelayInputModifier.h"
-#include "InterfacePropertiesWindow.h"
+#include "InterfacePropertiesDialog.h"
+
+#include <QHashIterator>
int Dispatcher::sceneCounter = 0;
params = _params;
mainWindow =_window;
params->setDispatcher(this);
- currentGroup = NULL;
- topGroup = NULL;
+ currentGroupWidget = NULL;
+ topGroupWidget = NULL;
}
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;
QFileInfo info(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() {
}
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;
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;
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;
}
-void Dispatcher::unselectAllItems(int direction){
+void Dispatcher::unselectAllItems(Context context, int direction){
GroupScene *scene = params->getCurrentScene();
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){
*/
}
-void Dispatcher::generateBlockVHDL(BoxItem *item){
+void Dispatcher::generateVHDL(Context context) throw(Exception) {
+ static QString fctName = "Dispatcher::generateVHDL()";
+#ifdef DEBUG_FCTNAME
+ cout << "call to " << qPrintable(fctName) << endl;
+#endif
+
+ QDir baseDir(params->projectPath);
+ QDir srcDir(params->projectPath+"/src");
+
+ if (!baseDir.exists()) {
+ cerr << "Project path " << qPrintable(params->projectPath) << " no longer exists. First, recreate it and put the project file within. Then retry to generate." << endl;
+ return;
+ }
+
+ if (srcDir.exists()) {
+ srcDir.removeRecursively();
+ }
+ baseDir.mkdir("src");
+
+ if (! baseDir.exists("testbench")) {
+ baseDir.mkdir("testbench");
+ }
+ if (! baseDir.exists("Makefile")) {
+ QFile make("/home/sdomas/Projet/Blast/code/blast/Makefile-isim");
+ QString dest = params->projectPath;
+ dest += "/Makefile";
+ make.copy(dest);
+ }
+
+ // copying external resources
+ QString dest = params->projectPath;
+ dest += "/src/";
+ try {
+ params->getGraph()->generateVHDL(dest);
+
+ QList<QString> extResources = params->getGraph()->getExternalResources();
+ foreach(QString name, extResources) {
+ cout << qPrintable(name) << endl;
+ QList<ExternalResource*> lstRes = params->searchResourceByName(name);
+ foreach(ExternalResource* res, lstRes) {
+ QFile resFile(res->getFile());
+ QFileInfo info(res->getFile());
+ QString destFile = dest+info.fileName();
+ cout << "copying " << qPrintable(res->getFile()) << " into " << qPrintable(destFile) << endl;
+ resFile.copy(destFile);
+ }
+ }
+ }
+ catch(Exception e) {
+ throw(e);
+ }
+
+ // creating parameters file
+ QString paramName = params->projectPath+"/params-isim.txt";
+ QFile paramFile(paramName);
+ if (!paramFile.open(QIODevice::WriteOnly)) {
+ throw(Exception(PROJECTPATH_NOACCESS));
+ }
+ QTextStream out(¶mFile);
+ out << "PROJECT_NAME := " << params->projectName << endl << endl;
+ out << "SRC_DIR := src" << endl;
+ out << "TB_DIR := testbench" << endl << endl;
+ out << "VHDL_SRC := ";
+ QStringList filter;
+ filter << "*.vhd" ;
+ srcDir.setNameFilters(filter);
+ QStringList listVHDL = srcDir.entryList();
+ for(int j=0;j<listVHDL.size();j++) {
+ if (j > 0) {
+ out << "\t";
+ }
+ out << "$(SRC_DIR)/" << qPrintable(listVHDL.at(j));
+ if (j != listVHDL.size()-1) {
+ out << " \\";
+ }
+ out << endl;
+ }
+ out << endl;
+ out << "VL_SRC := ${XILINX}/verilog/src/glbl.v" << 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(Context context, BoxItem *item){
static QString fctName = "Dispatcher::generateBlockVHDL()";
#ifdef DEBUG_FCTNAME
cout << "call to " << qPrintable(fctName) << endl;
}
}
-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;
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;
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
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;
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;
}
}
-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;
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;
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;
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;
}
-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;
}
}
-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
// 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;
}
-BoxItem* Dispatcher::addBlock(int idCategory, int idBlock, int idScene) {
+BoxItem* Dispatcher::addBlock(Context context, int idCategory, int idBlock, int idScene, QHash<QString, int> 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<QString,int> 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;
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) {
}
}
-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;
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;
}
-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;
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;
#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.
if (ret == QMessageBox::Cancel) {
return;
}
- removeAllBlockConnections(item);
+ removeAllBlockConnections(context, item);
if (item->getRefBlock()->isFunctionalBlock()) {
FunctionalBlock* block = AB_TO_FUN(item->getRefBlock());
// 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
}
}
-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;
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;
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() :
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;
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();
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;
that allows to remove an interface.
*/
foreach(ConnectionItem* conn, item->connections) {
- removeConnection(conn);
+ removeConnection(context, conn);
}
ConnectedInterface* ref = item->refInter;
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;
ones to a GroupItem, it is automatically deleted.
*/
foreach(ConnectionItem* conn, item->connections) {
- removeConnection(conn);
+ removeConnection(context, conn);
}
}
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;