1 import logging
2
3 logger = logging.getLogger( 'camelot.view.controls.editors.onetomanyeditor' )
4 from customeditor import CustomEditor, QtCore, QtGui, Qt
5 from wideeditor import WideEditor
6
7 from camelot.view.art import Icon
8 from camelot.view.model_thread import gui_function, model_function, post
9 from camelot.core.utils import ugettext as _
12
13 - def __init__( self,
14 admin = None,
15 parent = None,
16 create_inline = False,
17 editable = True,
18 vertical_header_clickable = True,
19 **kw ):
20 """
21 :param admin: the Admin interface for the objects on the one side of the
22 relation
23
24 :param create_inline: if False, then a new entity will be created within a
25 new window, if True, it will be created inline
26
27 :param vertical_header_clickable: True if the vertical header is clickable by the user, False if not.
28
29 after creating the editor, set_value needs to be called to set the
30 actual data to the editor
31 """
32
33 CustomEditor.__init__( self, parent )
34 layout = QtGui.QHBoxLayout()
35 layout.setContentsMargins( 0, 0, 0, 0 )
36
37
38
39 from camelot.view.controls.tableview import TableWidget
40
41 self.table = TableWidget()
42 rowHeight = QtGui.QFontMetrics( self.font() ).height() + 5
43 self.table.verticalHeader().setDefaultSectionSize( rowHeight )
44 layout.setSizeConstraint( QtGui.QLayout.SetNoConstraint )
45 self.setSizePolicy( QtGui.QSizePolicy.Expanding,
46 QtGui.QSizePolicy.Expanding )
47 if vertical_header_clickable:
48 self.connect( self.table.verticalHeader(),
49 QtCore.SIGNAL( 'sectionClicked(int)' ),
50 self.createFormForIndex )
51 self.admin = admin
52 self.editable = editable
53 self.create_inline = create_inline
54 layout.addWidget( self.table )
55 self.setupButtons( layout )
56 self.setLayout( layout )
57 self.model = None
58
96
106
107 post( export )
108
111
113 if self.model:
114 delegate = self.model.getItemDelegate()
115 if delegate:
116 self.table.setItemDelegate( delegate )
117 for i in range( self.model.columnCount() ):
118 txtwidth = self.model.headerData( i, Qt.Horizontal, Qt.SizeHintRole ).toSize().width()
119 colwidth = self.table.columnWidth( i )
120 self.table.setColumnWidth( i, max( txtwidth, colwidth ) )
121
134
135 return fill_model_cache
136
137 post( create_fill_model_cache( model ), self.update_delegates )
138
139 @gui_function
141 index = self.model.index( row, 0 )
142 self.table.scrollToBottom()
143 self.table.setCurrentIndex( index )
144 self.table.edit( index )
145
158
159 post( create, self.activate_editor )
160
161 else:
162 prependentity = lambda o: self.model.insertEntityInstance( 0, o )
163 removeentity = lambda o: self.model.removeEntityInstance( o )
164
165
166
167
168 form = self.admin.create_new_view( parent = None,
169 oncreate = prependentity,
170 onexpunge = removeentity )
171 workspace.addSubWindow( form )
172 form.show()
173
175 """Copy the selected rows in this tableview"""
176 logger.debug( 'delete selected rows called' )
177 for row in set( map( lambda x: x.row(), self.table.selectedIndexes() ) ):
178 self.model.copy_row( row )
179
181 """Delete the selected rows in this tableview"""
182 logger.debug( 'delete selected rows called' )
183 for row in set( map( lambda x: x.row(), self.table.selectedIndexes() ) ):
184 self.model.removeRow( row )
185
197