##// END OF EJS Templates
Work in progress.
Work in progress.

File last commit:

r2:f40b36fd7205 tip default
r2:f40b36fd7205 tip default
Show More
mainwindow.cpp
114 lines | 3.0 KiB | text/x-c | CppLexer
#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::NoDotAndDotDot| QDir::Dirs | QDir::NoSymLinks);
QFileInfoList list = dir.entryInfoList();
for (int i = 0; i < list.size(); ++i)
{
if(list.at(i).isDir())
{
parseDirectory(list.at(i).absoluteFilePath());
}
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();
if(parseTree!=NULL)
{
this->rootNode->childs.append(parseTree);
parseTree->setParent(this->rootNode);
}
}
}
}
}