-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathassetManagerUI.py
139 lines (102 loc) · 3.78 KB
/
assetManagerUI.py
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
import logging
import os
from Qt import QtWidgets, QtCore, QtGui
from Qt import _loadUi
from guiUtil import prompt
from guiUtil.template import getTextDialog
import asset
MODULE_PATH = os.path.dirname(__file__)
UI_FILE = os.path.join(MODULE_PATH, 'assetManager.ui')
ICON_SIZE = 220
class AssetManagerUI(QtWidgets.QMainWindow):
def __init__(self, directory=asset.ASSET_PATH):
super(AssetManagerUI, self).__init__()
_loadUi(UI_FILE, self)
self._dir = directory
self._props = None
self.force_refresh()
# set gui properties
self.ui_info_widget.setIconSize(QtCore.QSize(ICON_SIZE, ICON_SIZE))
# connect signals and slots
self.ui_list_widget.itemClicked.connect(self.display_detail)
self.ui_open_btn.clicked.connect(self.open)
self.ui_import_btn.clicked.connect(self.load)
self.ui_delete_btn.clicked.connect(self.delete_entry)
self.ui_create_scene_action.triggered.connect(self.create_entry)
self.ui_set_dir_action.triggered.connect(self.set_dir)
def set_dir(self):
directory = QtWidgets.QFileDialog.getExistingDirectory(
None,
"Set base directory",
MODULE_PATH
)
self._dir = directory
self.force_refresh()
def get_props(self):
self._props = asset.Asset.get_from_dir(self._dir)
def populate(self):
self.ui_list_widget.clear()
for prop in self._props:
item = QtWidgets.QListWidgetItem(prop.name)
item.setData(QtCore.Qt.UserRole, prop)
self.ui_list_widget.addItem(item)
def force_refresh(self):
self.get_props()
self.populate()
self.ui_info_widget.clear()
def display_detail(self):
self.ui_info_widget.clear()
item = self.ui_list_widget.currentItem()
prop = item.data(QtCore.Qt.UserRole)
if prop.thumbnail:
thumbnail = QtWidgets.QListWidgetItem()
thumbnail.setIcon(QtGui.QIcon(prop.thumbnail))
self.ui_info_widget.addItem(thumbnail)
if prop.name:
name = QtWidgets.QListWidgetItem('Name: {}'.format(prop.name))
self.ui_info_widget.addItem(name)
if prop.size:
size = QtWidgets.QListWidgetItem('Size: {}'.format(prop.size))
self.ui_info_widget.addItem(size)
if prop.mtime:
last_edit = QtWidgets.QListWidgetItem('Last Edit: {}'.format(prop.mtime))
self.ui_info_widget.addItem(last_edit)
def get_current_item(self):
item = self.ui_list_widget.currentItem()
if not item:
raise ValueError("No item selected for action")
return item.data(QtCore.Qt.UserRole)
def open(self, item=None):
if not item:
item = self.get_current_item()
item.fopen()
def load(self, item=None):
if not item:
item = self.get_current_item()
item.fimport()
def create_entry(self):
dialog = getTextDialog.GetTextDialog()
if dialog.exec_():
name = dialog.get_text()
item = asset.Asset.fsave(os.path.join(self._dir, name))
self.force_refresh()
prompt.message_log("Creation Success", ltype='info')
def delete_entry(self):
item = self.get_current_item()
user_choice = prompt.message_yesno(
"Delete the entry: {}?".format(item.name))
if user_choice == QtWidgets.QMessageBox.No:
return
# delete the prop entry
try:
item.fdelete()
except Exception as e:
logging.error("deletion interrupted: %s", e)
self.force_refresh()
def show():
global window
window = AssetManagerUI()
window.show()
return window
if __name__ == "__main__":
window = show()