forked from blank63/j3dview
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathexplorer_widget.py
57 lines (41 loc) · 1.86 KB
/
explorer_widget.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
from PyQt5 import QtCore,QtGui, QtWidgets
class TextureItem(QtWidgets.QTreeWidgetItem):
def __init__(self,texture):
super().__init__()
self.texture = None
self.setTexture(texture)
def setTexture(self,texture):
if self.texture is not None:
self.texture.name_changed.disconnect(self.on_texture_name_changed)
self.setText(0,texture.name)
self.texture = texture
self.texture.name_changed.connect(self.on_texture_name_changed)
#@QtCore.pyqtSlot(str)
def on_texture_name_changed(self,name):
self.setText(0,name)
class ExplorerWidget(QtWidgets.QTreeWidget):
currentTextureChanged = QtCore.pyqtSignal(object)
def __init__(self,*args,**kwargs):
super().__init__(*args,**kwargs)
self.header().close()
self.model = None
self.texture_list = QtWidgets.QTreeWidgetItem(['Textures'])
self.addTopLevelItem(self.texture_list)
self.currentItemChanged.connect(self.on_currentItemChanged)
def setModel(self,model):
if self.model is not None:
self.model.textures.entry_changed.disconnect(self.on_texture_changed)
self.model = model
self.texture_list.takeChildren()
self.texture_list.addChildren([TextureItem(texture) for texture in self.model.textures])
self.model.textures.entry_changed.connect(self.on_texture_changed)
@QtCore.pyqtSlot(QtWidgets.QTreeWidgetItem,QtWidgets.QTreeWidgetItem)
def on_currentItemChanged(self,current,previous):
if isinstance(current,TextureItem):
self.currentTextureChanged.emit(current.texture)
@QtCore.pyqtSlot(int,object)
def on_texture_changed(self,index,texture):
item = self.texture_list.child(index)
item.setTexture(texture)
if item is self.currentItem():
self.currentTextureChanged.emit(texture)