-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathProject.py
More file actions
81 lines (69 loc) · 2.2 KB
/
Project.py
File metadata and controls
81 lines (69 loc) · 2.2 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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
import os
from PyQt5.QtWidgets import QTreeWidgetItem
from watchdog.events import FileSystemEventHandler
class Handler(FileSystemEventHandler):
def __init__(self, project):
super(Handler).__init__()
self.project = project
def on_created(self, event):
self.project.render(self.project.path)
def on_deleted(self, event):
self.project.render(self.project.path)
def on_moved(self, event):
self.project.render(self.project.path)
class Project:
def __init__(self, dirs_widget, files_widget):
self.dirs = dirs_widget
self.files = files_widget
self.dirs.setHeaderLabel("Dirs")
self.files.setHeaderLabel("Files")
self.path = None
def hide(self):
"""
Method hides Project's UI elements
:return: None
"""
self.dirs.hide()
self.files.hide()
def show(self):
"""
Method shows Project's UI elements
:return: None
"""
self.dirs.show()
self.files.show()
def open(self, path):
"""
Method opens project with path
:param path: path to project's directory
:return: None
"""
if path is not None:
self.path = path
self.render(self.path)
self.show()
def render(self, path):
"""
Method adds files and directories to project trees
:param path: project directory
:return: None
"""
if path is not None:
tree = os.walk(path)
try:
top_level = next(tree)
top_level_dirs = top_level[1]
top_level_files = top_level[2]
except StopIteration:
pass
else:
self.clear()
self.dirs.addTopLevelItems(map(lambda x: QTreeWidgetItem([x]), ["../", *top_level_dirs]))
self.files.addTopLevelItems(map(lambda x: QTreeWidgetItem([x]), top_level_files))
def clear(self):
"""
Method clears project
:return: None
"""
self.dirs.clear()
self.files.clear()