mainwindow.cpp
111 lines
| 2.9 KiB
| text/x-c
|
CppLexer
r1 | #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; | ||||
} | ||||
} | ||||
} | ||||
} | ||||