#include "BlockLibraryWidget.h"
#include "GroupWidget.h"
#include "GroupScene.h"
-#include "BlockWidget.h"
-#include "AbstractBoxItem.h"
+#include "VHDLConverter.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()));
}
if (topGroup != NULL) {
addTopGroup(topGroup);
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;
- msgBox.setText("Cannot open the project.");
- msgBox.setInformativeText("Do you want to save your changes?");
+ msgBox.setText("Cannot open the project.");
msgBox.setStandardButtons(QMessageBox::Cancel);
msgBox.setDefaultButton(QMessageBox::Cancel);
- int ret = msgBox.exec();
+ msgBox.exec();
}
}
}
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();
+ library->show();
params->isCurrentProject = true;
}
-void MainWindow::slotCloseProject(){
+bool MainWindow::slotCloseProject(){
- // removing the GroupWidget from stack
- QWidget *widget = stackedWidget->widget(1);
- stackedWidget->removeWidget(widget);
- stackedWidget->setCurrentIndex(0);
+ bool doClose = false;
+
+ if(params->isCurrentProject) {
+ if (params->unsaveModif) {
+ QMessageBox msgBox;
+ msgBox.setText("The project has been modified.");
+ msgBox.setInformativeText("Do you want to save your changes?");
+ msgBox.setStandardButtons(QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel);
+ msgBox.setDefaultButton(QMessageBox::Save);
- dispatcher->closeCurrentProject();
+ int ret = msgBox.exec();
+ switch(ret) {
+ case QMessageBox::Save :
+ slotSaveProject();
+ doClose = true;
+ break;
+ case QMessageBox::Discard :
+ doClose = true;
+ break;
+ }
+ }
+ else {
+ doClose = true;
+ }
+ if (doClose) {
+ // removing the GroupWidget from stack
+ QWidget *widget = stackedWidget->widget(1);
+ stackedWidget->removeWidget(widget);
+ stackedWidget->setCurrentIndex(0);
- params->isCurrentProject = false;
- params->unsaveModif = false;
- absoluteFilename = QString();
+ dispatcher->closeCurrentProject();
- initialize();
+ params->isCurrentProject = false;
+ params->unsaveModif = false;
+ absoluteFilename = QString();
+
+ initialize();
+ }
+ }
+ return doClose;
}
-void MainWindow::slotNewBlockWidget() {
- new BlockWidget();
+void MainWindow::slotVHDLToXml() {
+ new VHDLConverter();
}
void MainWindow::slotSaveProject(){
}
-void MainWindow::slotGraphValidation() {
- params->parametersValidation();
+void MainWindow::slotGraphAnalysis() {
+ bool compat = true;
+ try {
+ params->getGraph()->computeOutputPatterns(1);
+ }
+ catch(Exception e) {
+ 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);
+ }
+ }
+ }
}
void MainWindow::addTopGroup(GroupWidget *_topGroup) {
stackedWidget->setCurrentIndex(0);
}
-void MainWindow::closeEvent(QCloseEvent *event){
- if(params->isCurrentProject){
- QMessageBox msgBox;
- msgBox.setText("The project has been modified.");
- msgBox.setInformativeText("Do you want to save your changes?");
- msgBox.setStandardButtons(QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel);
- msgBox.setDefaultButton(QMessageBox::Save);
-
- int ret = msgBox.exec();
-
- switch(ret) {
- case QMessageBox::Save :
- slotSaveProject();
- slotCloseProject();
- break;
- case QMessageBox::Discard :
- slotCloseProject();
- break;
- }
+void MainWindow::closeEvent(QCloseEvent *event) {
+
+ if (params->isCurrentProject) {
+ slotCloseProject();
event->ignore();
- } else {
- exit(0);
}
+ else {
+ library->deleteLater();
+ }
+
}
void MainWindow::mousePressEvent(QMouseEvent *e) {