|
|
#include "mainwindow.h"
|
|
|
#include "ui_mainwindow.h"
|
|
|
#include <QFileDialog>
|
|
|
#include <QTreeWidget>
|
|
|
#include <QTreeWidgetItem>
|
|
|
|
|
|
MainWindow::MainWindow(QWidget *parent) :
|
|
|
QMainWindow(parent),
|
|
|
ui(new Ui::MainWindow)
|
|
|
{
|
|
|
ui->setupUi(this);
|
|
|
connect(this->ui->actionOpen,SIGNAL(triggered()),this,SLOT(openFile()));
|
|
|
connect(this->ui->actionScan_Folder,SIGNAL(triggered()),this,SLOT(openFolder()));
|
|
|
this->file = new VHDL_Tools::VHDL_File;
|
|
|
this->rootNode = NULL;
|
|
|
}
|
|
|
|
|
|
MainWindow::~MainWindow()
|
|
|
{
|
|
|
delete ui;
|
|
|
}
|
|
|
|
|
|
void MainWindow::openFile()
|
|
|
{
|
|
|
QString fileName = QFileDialog::getOpenFileName(this,
|
|
|
tr("Open VHDL file"), NULL, tr("VHDL Files (*.vhd)"));
|
|
|
if(fileName!="")
|
|
|
{
|
|
|
parseFile(fileName,true);
|
|
|
this->rootNode=file->getParseTree();
|
|
|
updateTree(rootNode);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
void MainWindow::openFolder()
|
|
|
{
|
|
|
QString dir = QFileDialog::getExistingDirectory(this, tr("Open Directory"),
|
|
|
NULL,
|
|
|
QFileDialog::ShowDirsOnly
|
|
|
| QFileDialog::DontResolveSymlinks);
|
|
|
if(dir!="")
|
|
|
{
|
|
|
this->rootNode=new VHDL_Tools::VHDL_AST_Node(dir,VHDL_Tools::virtualGroup);
|
|
|
parseDirectory(dir);
|
|
|
updateTree(this->rootNode);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
void MainWindow::updateTree(VHDL_Tools::VHDL_AST_Node *rootNode)
|
|
|
{
|
|
|
this->ui->VHDLtreeWidget->clear();
|
|
|
if(rootNode)
|
|
|
{
|
|
|
QTreeWidgetItem* item = new QTreeWidgetItem(QStringList()<<rootNode->a_value);
|
|
|
for(int i=0;i<rootNode->childs.count();i++)
|
|
|
{
|
|
|
printNode(rootNode->childs.at(i),item);
|
|
|
}
|
|
|
this->ui->VHDLtreeWidget->addTopLevelItem(item);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
void MainWindow::printNode(VHDL_Tools::VHDL_AST_Node *rootNode, QTreeWidgetItem *parent)
|
|
|
{
|
|
|
if(rootNode)
|
|
|
{
|
|
|
QTreeWidgetItem* item = new QTreeWidgetItem(parent,QStringList()<<rootNode->a_value);
|
|
|
for(int i=0;i<rootNode->childs.count();i++)
|
|
|
{
|
|
|
printNode(rootNode->childs.at(i),item);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
void MainWindow::parseFile(const QString &fileName, bool trashPreviousTree)
|
|
|
{
|
|
|
if(fileName!="")
|
|
|
this->file->parseFile(fileName,trashPreviousTree);
|
|
|
}
|
|
|
|
|
|
void MainWindow::parseDirectory(const QString &dirName)
|
|
|
{
|
|
|
QDir dir(dirName);
|
|
|
dir.setFilter(QDir::Files | QDir::Hidden | QDir::NoSymLinks);
|
|
|
QFileInfoList list = dir.entryInfoList();
|
|
|
for (int i = 0; i < list.size(); ++i)
|
|
|
{
|
|
|
if(list.at(i).isDir())
|
|
|
{
|
|
|
parseDirectory(list.at(i).fileName());
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
if(list.at(i).isFile() && (!list.at(i).completeSuffix().compare("vhd")))
|
|
|
{
|
|
|
parseFile(list.at(i).absoluteFilePath(),false);
|
|
|
VHDL_Tools::VHDL_AST_Node* parseTree = file->getParseTree();
|
|
|
this->rootNode->childs.append(parseTree);
|
|
|
parseTree->parent = this->rootNode;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|