Skip to content

Commit 3452995

Browse files
committed
Add preliminary file tree
1 parent c03f669 commit 3452995

File tree

2 files changed

+155
-2
lines changed

2 files changed

+155
-2
lines changed

main.py

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
from util_classes import ExistingProjectDialog
3838
from util_classes import BackgroundThread, Validator
3939
from util_classes import CompleterLineEdit, TagsCompleter
40+
from util_classes import TreeBrowser
4041

4142
from PySide import QtGui, QtCore
4243
from PySide.QtGui import (QApplication, QHBoxLayout, QVBoxLayout)
@@ -989,6 +990,9 @@ def load_project(self, directory, readonly=False):
989990

990991
self.set_window_icon()
991992
self.open_export_button.setEnabled(True)
993+
994+
self.tree_browser.init(directory, ['.*'])
995+
992996
self.update_json = True
993997

994998
def init_main_field(self, directory):
@@ -1159,23 +1163,48 @@ def create_export_settings(self):
11591163

11601164
ex_setting_order = self.settings['order']['export_setting_order']
11611165

1162-
vlayout = self.create_layout(ex_setting_order, cols=4)
1166+
vlayout = self.create_layout(ex_setting_order, cols=1)
11631167

11641168
output_name_layout = self.create_output_name_pattern_line()
11651169

11661170
output_layout = self.create_output_directory_line()
11671171

11681172
script_layout = self.create_script_layout()
11691173

1174+
hlayout = QtGui.QHBoxLayout()
1175+
1176+
platform_group = QtGui.QGroupBox('Platforms')
1177+
playout = QtGui.QVBoxLayout()
1178+
playout.addLayout(vlayout)
1179+
platform_group.setLayout(playout)
1180+
1181+
hlayout.addWidget(platform_group)
1182+
1183+
tree_layout = self.create_blacklist_layout()
1184+
1185+
tree_group = QtGui.QGroupBox('Files')
1186+
tree_group.setLayout(tree_layout)
1187+
1188+
hlayout.addWidget(tree_group)
1189+
11701190
vbox = QtGui.QVBoxLayout()
1171-
vbox.addLayout(vlayout)
1191+
vbox.addLayout(hlayout)
11721192
vbox.addLayout(output_name_layout)
11731193
vbox.addLayout(output_layout)
11741194
vbox.addLayout(script_layout)
11751195

11761196
group_box.setLayout(vbox)
11771197
return group_box
11781198

1199+
def create_blacklist_layout(self):
1200+
blacklist_layout = QtGui.QVBoxLayout()
1201+
1202+
self.tree_browser = TreeBrowser()
1203+
1204+
blacklist_layout.addWidget(self.tree_browser)
1205+
1206+
return blacklist_layout
1207+
11791208
def create_output_name_pattern_line(self):
11801209
output_name_layout = QtGui.QHBoxLayout()
11811210

util_classes.py

Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,129 @@
99
import utils
1010

1111
from PySide import QtGui, QtCore
12+
from PySide.QtCore import Qt
13+
14+
class FileItem(QtGui.QTreeWidgetItem):
15+
def __init__(self, parent=None, path=None):
16+
super(FileItem, self).__init__(parent)
17+
self.path = path
18+
19+
class TreeBrowser(QtGui.QWidget):
20+
def __init__(self, directory=None, checked_files=None,
21+
whitelist=None, blacklist=None, parent=None):
22+
super(TreeBrowser, self).__init__(parent=parent)
23+
self.root = QtGui.QTreeWidget()
24+
self.root.setHeaderLabel('Included files')
25+
self.root.itemChanged.connect(self.item_changed)
26+
self.files = {}
27+
28+
self.paths = []
29+
30+
layout = QtGui.QVBoxLayout()
31+
layout.addWidget(self.root)
32+
self.setLayout(layout)
33+
34+
self.watcher = QtCore.QFileSystemWatcher()
35+
self.watcher.directoryChanged.connect(self.directory_changed)
36+
self.watcher.fileChanged.connect(self.file_changed)
37+
38+
self.directoryChanged = self.watcher.directoryChanged
39+
self.fileChanged = self.watcher.fileChanged
40+
41+
self.init(directory, checked_files, whitelist, blacklist)
42+
43+
def init(self, directory=None, checked_files=None,
44+
whitelist=None, blacklist=None):
45+
46+
if directory:
47+
self.directory = directory + os.sep
48+
else:
49+
self.directory = directory
50+
51+
self.checked_files = checked_files or []
52+
53+
self.whitelist = whitelist or []
54+
self.blacklist = blacklist or []
55+
56+
self.watcher.removePaths(self.watcher.files())
57+
58+
self.files = {}
59+
60+
self.root.clear()
61+
62+
self.generate_directory_widget()
63+
64+
def file_changed(self, path):
65+
print(path)
66+
pass
67+
68+
def directory_changed(self, path):
69+
print(path)
70+
pass
71+
72+
def get_abs_file_list(self):
73+
return [os.path.join(self.directory, path) for path in self.files.keys()]
74+
75+
def get_checked_files(self):
76+
pass
77+
78+
def item_changed(self, item, column):
79+
self.files[item.path] = item.checkState(column)
80+
81+
def generate_directory_widget(self):
82+
if self.directory is None:
83+
return
84+
85+
parent_map = {'': self.root}
86+
87+
for root, dirs, files in os.walk(self.directory):
88+
for directory in dirs:
89+
90+
proj_path = root.replace(self.directory, '')
91+
92+
parent = parent_map[proj_path]
93+
94+
path = os.path.join(proj_path, directory)
95+
96+
checked = Qt.Unchecked
97+
98+
for checked_file in self.checked_files:
99+
match = re.match('^'+checked_file, path)
100+
if match:
101+
checked = Qt.Checked
102+
103+
child = FileItem(parent, path)
104+
child.setFlags(child.flags() | Qt.ItemIsTristate | Qt.ItemIsUserCheckable)
105+
child.setText(0, directory)
106+
child.setCheckState(0, checked)
107+
108+
self.files[path] = checked
109+
110+
parent_map[path] = child
111+
112+
for file in files:
113+
proj_path = root.replace(self.directory, '')
114+
115+
parent = parent_map[proj_path]
116+
117+
path = os.path.join(proj_path, file)
118+
119+
checked = Qt.Unchecked
120+
121+
for checked_file in self.checked_files:
122+
match = re.match(checked_file, path)
123+
if match:
124+
checked = Qt.Checked
125+
126+
child = FileItem(parent, path)
127+
child.setFlags(child.flags() | Qt.ItemIsUserCheckable)
128+
child.setText(0, file)
129+
child.setCheckState(0, checked)
130+
131+
self.files[path] = checked
132+
133+
self.watcher.addPaths(self.get_abs_file_list())
134+
12135

13136
class ExistingProjectDialog(QtGui.QDialog):
14137
def __init__(self, recent_projects, directory_callback, parent=None):
@@ -93,6 +216,7 @@ def project_clicked(self, _):
93216
def cancelled(self):
94217
self.close()
95218

219+
96220
class Validator(QtGui.QRegExpValidator):
97221
def __init__(self, regex, action, parent=None):
98222
self.exp = regex

0 commit comments

Comments
 (0)