Changeset 1184

Show
Ignore:
Timestamp:
03/11/10 22:37:04 (5 months ago)
Author:
erikj
Message:

prepare complex filter widget

Location:
trunk/camelot/view
Files:
4 modified

Legend:

Unmodified
Added
Removed
  • trunk/camelot/view/controls/filterlist.py

    r1165 r1184  
    5858        widget.setLayout(layout) 
    5959        self.setWidget(widget) 
    60         #self.setMaximumWidth(self.fontMetrics().width( ' ' )*70) 
    6160        if len(items) == 0: 
    6261            self.setMaximumWidth(0) 
  • trunk/camelot/view/controls/search.py

    r1154 r1184  
    3838  """ 
    3939 
     40    expand_search_options_signal = QtCore.SIGNAL('expand_search_options()') 
     41     
    4042    def __init__(self, parent): 
    4143        QtGui.QWidget.__init__(self, parent) 
     
    5254        self.connect(self.search_button, 
    5355                     QtCore.SIGNAL('clicked()'), 
    54                      self.emit_search) 
     56                     self.expand_search_options_signal) 
    5557 
    5658        # Search input 
     
    8991        self.emit_search() 
    9092 
     93    def emit_expand_search_options(self): 
     94        self.emit(self.expand_search_options_signal) 
     95         
    9196    def emit_search(self): 
    9297        text = unicode(self.search_input.user_input()) 
  • trunk/camelot/view/controls/tableview.py

    r1183 r1184  
    113113    def __init__( self, parent, admin ): 
    114114        QtGui.QWidget.__init__( self, parent ) 
     115        layout = QtGui.QVBoxLayout() 
    115116        widget_layout = QtGui.QHBoxLayout() 
    116117        self.search = self.search_widget( self ) 
     118        self.connect(self.search, SimpleSearchControl.expand_search_options_signal, self.expand_search_options) 
    117119        title = UserTranslatableLabel( admin.get_verbose_name_plural(), self ) 
    118120        title.setFont( self._title_font ) 
     
    122124            self.number_of_rows = self.rows_widget( self ) 
    123125            widget_layout.addWidget( self.number_of_rows ) 
    124        
    125126        else: 
    126127            self.number_of_rows = None 
    127         self.setLayout( widget_layout ) 
     128        layout.addLayout( widget_layout ) 
     129        self._expanded_search = QtGui.QLabel('Expanded') 
     130        self._expanded_search.hide() 
     131        layout.addWidget(self._expanded_search) 
     132        self.setLayout( layout ) 
    128133        self.setSizePolicy( QSizePolicy.Minimum, QSizePolicy.Fixed ) 
    129134        self.setNumberOfRows( 0 ) 
    130135     
     136    def expand_search_options(self): 
     137        if self._expanded_search.isHidden(): 
     138            self._expanded_search.show() 
     139        else: 
     140            self._expanded_search.hide() 
     141         
    131142    @gui_function 
    132143    def setNumberOfRows( self, rows ): 
  • trunk/camelot/view/filters.py

    r1173 r1184  
    216216                self._field_attributes['editable'] = True 
    217217                layout = QtGui.QVBoxLayout() 
    218                 group = QtGui.QButtonGroup(self) 
    219                 self.all_button = QtGui.QRadioButton(ugettext('All'), self) 
    220                 self.all_button.setChecked(True) 
    221                 group.addButton(self.all_button) 
    222                 layout.addWidget(self.all_button) 
    223                 self.none_button = QtGui.QRadioButton(ugettext('None'), self) 
    224                 group.addButton(self.none_button) 
    225                 layout.addWidget(self.none_button) 
    226                 self.connect(self.all_button, QtCore.SIGNAL('toggled(bool)'), self.all_toggled) 
    227                 self.connect(self.none_button, QtCore.SIGNAL('toggled(bool)'), self.none_toggled) 
    228                 self.setLayout(layout) 
    229 #                if self._field_attributes.get('nullable', True)==False: 
    230 #                    self.none_button.hide() 
     218                self._choices = [(0, ugettext('All')), (1, ugettext('None')), (2, ugettext('='))] 
     219                combobox = QtGui.QComboBox(self) 
     220                layout.addWidget(combobox) 
     221                for i,name in self._choices: 
     222                    combobox.insertItem(i, unicode(name)) 
     223                self.connect(combobox, QtCore.SIGNAL('currentIndexChanged(int)'), self.combobox_changed) 
    231224                delegate = self._field_attributes['delegate'](**self._field_attributes) 
    232225                option = QtGui.QStyleOptionViewItem() 
    233226                option.version = 5 
    234                 self.editor = delegate.createEditor( self, option, None ) 
     227                self._editor = delegate.createEditor( self, option, None ) 
    235228                # explicitely set a value, otherways the current value remains ValueLoading 
    236                 self.editor.set_value(None) 
    237                 self.connect(self.editor, editors.editingFinished, self.editor_editing_finished) 
    238                 layout.addWidget(self.editor) 
    239                 self._filter = False 
     229                self._editor.set_value(None) 
     230                self.connect(self._editor, editors.editingFinished, self.editor_editing_finished) 
     231                layout.addWidget(self._editor) 
     232                self.setLayout(layout) 
     233                self._editor.setEnabled(False) 
     234                self._index = 0 
    240235                self._value = None 
    241236                 
    242             def all_toggled(self, bool): 
    243                 self.editor.set_value(None) 
    244                 self._filter = False 
    245                 self.emit(filter_changed_signal) 
    246              
    247             def none_toggled(self, bool): 
    248                 self.editor.set_value(None) 
    249                 self._filter = True 
    250                 self._value = None 
     237            def combobox_changed(self, index): 
     238                self._index = index 
     239                if index==2: 
     240                    self._editor.setEnabled(True) 
     241                else: 
     242                    self._editor.setEnabled(False) 
    251243                self.emit(filter_changed_signal) 
    252244                 
    253245            def editor_editing_finished(self): 
    254                 self.all_button.setChecked(False) 
    255                 self.none_button.setChecked(False) 
    256                 self._filter = True 
    257                 self._value = self.editor.get_value() 
     246                self._value = self._editor.get_value() 
    258247                self.emit(filter_changed_signal) 
    259248             
    260249            def decorate_query(self, query): 
    261                 if not self._filter: 
     250                if self._index==0: 
    262251                    return query 
     252                if self._index==1: 
     253                    return query.filter(getattr(self._entity, self._field_name)==None) 
    263254                return query.filter(getattr(self._entity, self._field_name)==self._value) 
    264255