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 """Controls related to visualizing object hierarchy"""
29
30 import os
31 import logging
32
33 logger = logging.getLogger('camelot.view.controls.inheritance')
34
35 from PyQt4 import QtGui
36 from PyQt4 import QtCore
37 from PyQt4.QtCore import Qt
38
39 import settings
40 from camelot.view.controls.modeltree import ModelTree
41 from camelot.view.controls.modeltree import ModelItem
42
43 QT_MAJOR_VERSION = float('.'.join(str(QtCore.QT_VERSION_STR).split('.')[0:2]))
44
45
50
51
53 """Widget to select subclasses of a certain entity, where the
54 subclasses are represented in a tree
55
56 emits subclasssClicked when a subclass has been selected
57 """
58
60 header_labels = ['Types']
61 super(SubclassTree, self).__init__(header_labels, parent)
62 self.setSizePolicy(QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
63
64 self.admin = admin
65 self.subclasses = []
66 self.mt = admin.getModelThread()
67 self.mt.post(lambda: self.admin.getSubclasses(),
68 lambda subclasses: self.setSubclasses(subclasses))
69 self.connect(self,
70 QtCore.SIGNAL('clicked(const QModelIndex&)'),
71 self.emitSubclassClicked)
72
74 logger.debug('setting subclass tree')
75
76 self.subclasses = subclasses
77 if len(subclasses) > 1:
78 self.clear_model_items()
79 top_level_item = SubclassItem(self, self.admin)
80 self.modelitems.append(top_level_item)
81 for cls in subclasses:
82 item = SubclassItem(top_level_item, cls)
83 self.modelitems.append(item)
84 top_level_item.setExpanded(True)
85 else:
86 self.setMaximumWidth(0)
87
89 logger.debug('subclass clicked at position %s' % index.row())
90 item = self.itemFromIndex(index)
91 self.emit(QtCore.SIGNAL('subclasssClicked'), item.admin)
92