#include "GroupWidget.h"
#include "GroupScene.h"
#include "VHDLConverter.h"
-#include "AbstractBoxItem.h"
#include "Graph.h"
-#include "GroupItem.h"
+#include "FunctionalBlock.h"
#include <QDomDocument>
#include <QDomElement>
#include <QDomText>
cout << "all references and implementations are loaded" << endl;
+ params->createDelayBlock();
+
// create the menu, action, ...
dispatcher = new Dispatcher(params,this);
params->setDispatcher(dispatcher);
void MainWindow::initialize() {
projectMenuEnb = 0;
+ analysisMenuEnb = 0;
stackedWidget->setCurrentIndex(0);
enableProjectActions(true,PROJECT_NEW | PROJECT_OPEN, OP_RAZ);
+ enableAnalysisActions(false);
stackedWidget->setCurrentIndex(0);
}
}
+void MainWindow::enableAnalysisActions(bool enbMenu, quint16 mask, quint8 op) {
+ if (enbMenu) {
+ analysisMenu->setEnabled(true);
+ }
+ else {
+ analysisMenu->setEnabled(false);
+ }
+
+ if (op == OP_ADD) {
+ analysisMenuEnb = analysisMenuEnb | mask;
+ }
+ else if (op == OP_REM) {
+ analysisMenuEnb = (analysisMenuEnb | mask) ^ mask;
+ }
+ else if (op == OP_RAZ) {
+ analysisMenuEnb = mask;
+ }
+
+
+ if (analysisMenuEnb & ANALYSIS_ANALYZE) {
+ graphAnalysis->setEnabled(true);
+ }
+ else {
+ graphAnalysis->setEnabled(false);
+ }
+}
+
void MainWindow::createMenus(){
allMenuBar = menuBar();
projectMenu = allMenuBar->addMenu(tr("&Project"));
+ analysisMenu = allMenuBar->addMenu(tr("&Analysis"));
toolsMenu = allMenuBar->addMenu(tr("&Tools"));
projectMenu->addAction(newProject);
projectMenu->addAction(closeProject);
projectMenu->addAction(openLibrary);
- toolsMenu->addAction(newBlockWidgetAct);
- toolsMenu->addAction(graphValidation);
+ analysisMenu->addAction(graphAnalysis);
+
+ toolsMenu->addAction(vhdlToXmlAct);
+
}
openLibrary->setStatusTip(tr("Open block library window"));
connect(openLibrary, SIGNAL(triggered()), this, SLOT(slotOpenBlockLibrary()));
- newBlockWidgetAct = new QAction(tr("&XML generator"), this);
- newBlockWidgetAct->setIcon(QPixmap::fromImage(QImage("icons/new.ico")));
- newBlockWidgetAct->setStatusTip(tr("Create a new XML generator"));
- connect(newBlockWidgetAct, SIGNAL(triggered()), this, SLOT(slotNewBlockWidget()));
+ vhdlToXmlAct = new QAction(tr("&XML generator"), this);
+ vhdlToXmlAct->setIcon(QPixmap::fromImage(QImage("icons/new.ico")));
+ vhdlToXmlAct->setStatusTip(tr("Create a new XML generator"));
+ connect(vhdlToXmlAct, SIGNAL(triggered()), this, SLOT(slotVHDLToXml()));
- graphValidation = new QAction(tr("&graph validation"), this);
- graphValidation->setIcon(QPixmap::fromImage(QImage("icons/new.ico")));
- graphValidation->setStatusTip(tr("validate the graph"));
- connect(graphValidation, SIGNAL(triggered()), this, SLOT(slotGraphValidation()));
+ graphAnalysis = new QAction(tr("&graph validation"), this);
+ graphAnalysis->setIcon(QPixmap::fromImage(QImage("icons/new.ico")));
+ graphAnalysis->setStatusTip(tr("validate the graph"));
+ connect(graphAnalysis, SIGNAL(triggered()), this, SLOT(slotGraphAnalysis()));
}
library->updateComboScene();
params->isCurrentProject = true;
enableProjectActions(true, PROJECT_CLOSE | PROJECT_SAVE | PROJECT_SAVEAS | PROJECT_LIB, OP_RAZ);
+ enableAnalysisActions(true, ANALYSIS_ANALYZE, OP_RAZ);
}
else {
QMessageBox msgBox;
void MainWindow::slotNewProject(){
enableProjectActions(true, PROJECT_CLOSE | PROJECT_SAVE | PROJECT_SAVEAS | PROJECT_LIB, OP_RAZ);
+ enableAnalysisActions(true, ANALYSIS_ANALYZE, OP_RAZ);
GroupWidget* topGroup = dispatcher->createTopScene();
addTopGroup(topGroup);
library->updateComboScene();
}
-void MainWindow::slotNewBlockWidget() {
+void MainWindow::slotVHDLToXml() {
new VHDLConverter();
}
}
-void MainWindow::slotGraphValidation() {
- try {
- params->getGraph()->computeOutputPatterns(5);
+void MainWindow::slotGraphAnalysis() {
+ bool compat = true;
+ try {
+ params->getGraph()->computeOutputPatterns(1);
}
catch(Exception e) {
- cerr << qPrintable(e.getMessage()) << endl;
+ cerr << qPrintable(e.getMessage()) << endl;
+ compat = false;
+ if (e.getType() == IP_AP_NOTCOMPAT) {
+ FunctionalBlock* toBlock = (FunctionalBlock*)(e.getSource());
+ QString msg = tr("");
+ msg.append(toBlock->getName());
+ msg += " is not compatible with its input pattern.\nDo you want to launch automatic modification process to ensure the compatibility ?";
+ int ret = QMessageBox::question(this,tr("Building references library"),msg, QMessageBox::Ok | QMessageBox::Cancel, QMessageBox::Ok);
+ if (ret == QMessageBox::Ok) {
+ dispatcher->findGraphModifications(toBlock);
+ }
+ }
}
}