-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtree.cpp
More file actions
67 lines (57 loc) · 1.71 KB
/
tree.cpp
File metadata and controls
67 lines (57 loc) · 1.71 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#include "tree.h"
#include "ui_tree.h"
Tree::Tree(QWidget *parent,string disk, double start_inodes, double root, int b_size) :
QWidget(parent),
ui(new Ui::Tree)
{
ui->setupUi(this);
this->disk = disk;
start_inode = start_inodes;
inode = root;
blocksize=b_size;
fillTree();
}
Tree::~Tree()
{
delete ui;
}
void Tree::fillTree()
{
ui->tree->clear();
char buff[sizeof(Inode)];
read(disk,(char*)&buff,start_inode + inode*sizeof(Inode),sizeof(Inode));
Inode root_inode;
memcpy(&root_inode,&buff,sizeof(Inode));
// Nodo *root = new Nodo("/");
QTreeWidgetItem *rootWidget = new QTreeWidgetItem();
rootWidget->setText(0,"/");
fillTree(&root_inode,"/",rootWidget);
ui->tree->addTopLevelItem(rootWidget);
}
void Tree::fillTree(Inode* curr_inode,QString name,QTreeWidgetItem*&root)
{
QList<QTreeWidgetItem*>hijos;
vector<FileData*>FT;
char *data;
readDataBlocksFrom(disk,data,curr_inode,blocksize);
FT = getFileTableFrom(*curr_inode,data);
if(curr_inode->permisos[0]=='d')
{
for (int i = 0; i < FT.size(); ++i) {
char buff[sizeof(Inode)];
read(disk,(char*)&buff,start_inode + FT[i]->index_file*sizeof(Inode),sizeof(Inode));
Inode *child_inode = new Inode();
memcpy(child_inode,&buff,sizeof(Inode));
QTreeWidgetItem* item = new QTreeWidgetItem();
item->setText(0,QString(FT[i]->name));
if((strcmp(FT[i]->name,".."))!=0)
{
if((child_inode->permisos)[0]=='d')
{
fillTree(child_inode,QString(FT[i]->name),item);
}
root->addChild(item);
}
}
}
}