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 to filter data"""
29
30 import logging
31 logger = logging.getLogger('camelot.view.controls.filter')
32
33 from PyQt4 import QtGui, QtCore
34
35 _ = lambda x:x
36
37 filter_changed_signal = QtCore.SIGNAL('filter_changed')
38
40 """A list with filters that can be applied on a query in the tableview"""
41
43 """
44 :param items: list of tubles (name, choices) for constructing the different filterboxes
45 """
46 QtGui.QScrollArea.__init__(self, parent)
47 widget = QtGui.QWidget(self)
48 self.setFrameStyle(QtGui.QFrame.NoFrame)
49 layout = QtGui.QVBoxLayout()
50
51 for filter,(name,options) in items:
52 filter_widget = filter.render(widget, name, options)
53 layout.addWidget(filter_widget)
54 self.connect(filter_widget,
55 filter_changed_signal,
56 self.emit_filters_changed)
57
58 widget.setLayout(layout)
59 self.setWidget(widget)
60 if len(items) == 0:
61 self.setMaximumWidth(0)
62 else:
63 self.setSizePolicy( QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding )
64
66 for i in range(self.widget().layout().count()):
67 if self.widget().layout().itemAt(i).widget():
68 query = self.widget().layout().itemAt(i).widget().decorate_query(query)
69 return query
70
72 logger.debug('filters changed')
73 self.emit(QtCore.SIGNAL('filters_changed'))
74