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 logging
31
32 logger = logging.getLogger( 'camelot.view.controls.inheritance' )
33
34 from PyQt4 import QtGui
35 from PyQt4 import QtCore
36
37 from camelot.view.controls.modeltree import ModelTree, ModelItem
38 from camelot.view.model_thread import post
39
40 QT_MAJOR_VERSION = float( '.'.join( str( QtCore.QT_VERSION_STR ).split( '.' )[0:2] ) )
41
42
47
49 """Widget to select subclasses of a certain entity, where the
50 subclasses are represented in a tree
51
52 emits subclassClicked when a subclass has been selected
53 """
54
66
68 logger.debug( 'setting subclass tree' )
69 self.subclasses = subclasses
70
71 def append_subclasses(class_item, subclasses):
72 for subclass_admin, subsubclasses in subclasses:
73 subclass_item = SubclassItem(class_item, subclass_admin)
74 self.modelitems.append(subclass_item)
75 append_subclasses(subclass_item, subsubclasses)
76
77 if len( subclasses ):
78 self.clear_model_items()
79 top_level_item = SubclassItem( self, self.admin )
80 self.modelitems.append( top_level_item )
81 append_subclasses(top_level_item, subclasses)
82 top_level_item.setExpanded( True )
83 self.setMaximumWidth( self.fontMetrics().width( ' ' )*70 )
84 else:
85 self.setMaximumWidth( 0 )
86
88 logger.debug( 'subclass clicked at position %s' % index.row() )
89 item = self.itemFromIndex( index )
90 self.emit( QtCore.SIGNAL( 'subclassClicked' ), item.admin )
91
93 """A dialog requesting the user to select a subclass"""
94
96 QtGui.QDialog.__init__( self, parent )
97 layout = QtGui.QVBoxLayout()
98 subclass_tree = SubclassTree( admin, self )
99 layout.addWidget( subclass_tree )
100 layout.addStretch( 1 )
101 self.setLayout( layout )
102 self.selected_subclass = None
103 self.connect( subclass_tree, QtCore.SIGNAL( 'subclassClicked' ), self.subclassClicked )
104
106 self.selected_subclass = admin
107 self.accept()
108