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

prepare complex filter widget

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • 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