root/trunk/camelot/view/controls/filterlist.py @ 1184

Revision 1184, 2.7 KB (checked in by erikj, 6 months ago)

prepare complex filter widget

Line 
1#  ============================================================================
2#
3#  Copyright (C) 2007-2008 Conceptive Engineering bvba. All rights reserved.
4#  www.conceptive.be / project-camelot@conceptive.be
5#
6#  This file is part of the Camelot Library.
7#
8#  This file may be used under the terms of the GNU General Public
9#  License version 2.0 as published by the Free Software Foundation
10#  and appearing in the file LICENSE.GPL included in the packaging of
11#  this file.  Please review the following information to ensure GNU
12#  General Public Licensing requirements will be met:
13#  http://www.trolltech.com/products/qt/opensource.html
14#
15#  If you are unsure which license is appropriate for your use, please
16#  review the following information:
17#  http://www.trolltech.com/products/qt/licensing.html or contact
18#  project-camelot@conceptive.be.
19#
20#  This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
21#  WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
22#
23#  For use of this library in commercial applications, please contact
24#  project-camelot@conceptive.be
25#
26#  ============================================================================
27
28"""Controls to filter data"""
29
30import logging
31logger = logging.getLogger('camelot.view.controls.filter')
32
33from PyQt4 import QtGui, QtCore
34
35_ = lambda x:x
36
37filter_changed_signal = QtCore.SIGNAL('filter_changed')
38
39class FilterList(QtGui.QScrollArea):
40    """A list with filters that can be applied on a query in the tableview"""
41
42    def __init__(self, items, parent):
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
65    def decorate_query(self, query):
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
71    def emit_filters_changed(self):
72        logger.debug('filters changed')
73        self.emit(QtCore.SIGNAL('filters_changed'))
Note: See TracBrowser for help on using the browser.