1 import logging
2 logger = logging.getLogger('camelot.view.controls.delegates.delegatemanager')
3
4 from PyQt4 import QtGui, QtCore
5 from PyQt4.QtCore import Qt
6
8 """Manages custom delegates, should not be used by the application
9 developer
10 """
11
12 - def __init__(self, parent=None, **kwargs):
15
17 self.columnsdesc = columnsdesc
18
20 try:
21 return self.delegates[column]
22 except KeyError:
23 logger.error('Programming Error, no delegate available for column %s'%column)
24 logger.error('Available columns : %s'%unicode(self.delegates.keys()))
25 raise KeyError
26
28 """Inserts a custom column delegate"""
29 logger.debug('inserting delegate for column %s' % column)
30 assert delegate
31 delegate.setParent(self)
32 self.delegates[column] = delegate
33 self.connect(delegate, QtCore.SIGNAL('commitData(QWidget*)'), self.commitData)
34 self.connect(delegate, QtCore.SIGNAL('closeEditor(QWidget*)'), self.closeEditor)
35
37 self.emit(QtCore.SIGNAL('commitData(QWidget*)'), editor)
38
40 self.emit(QtCore.SIGNAL('closeEditor(QWidget*)'), editor)
41
43 """Removes custom column delegate"""
44 logger.debug('removing a custom column delegate')
45 if column in self.delegates:
46 del self.delegates[column]
47
48 - def paint(self, painter, option, index):
49 """Use a custom delegate paint method if it exists"""
50 delegate = self.get_column_delegate(index.column())
51 delegate.paint(painter, option, index)
52
59
61 """Use a custom delegate setEditorData method if it exists"""
62 logger.debug('setting editor data for column %s' % index.column())
63 try:
64 delegate = self.get_column_delegate(index.column())
65 delegate.setEditorData(editor, index)
66 except Exception, e:
67 logger.error('Programming Error : could not set editor data for editor at column %s'%(index.column()), exc_info=e)
68 logger.error('value that could not be set : %s'%unicode(index.model().data(index, Qt.EditRole)))
69
75
77 option = QtGui.QStyleOptionViewItem()
78 delegate = self.get_column_delegate(index.column())
79 return delegate.sizeHint(option, index)
80