Add autocompletion on selection field (inspired from openerp rev539)

Improve selection and checkbox in search widget to connect to activate signal
This commit is contained in:
Cédric Krier committed 2008-07-17 01:53:50 +02:00
1 parent 972ba7fc47
commit 4eaee2370b
3 files changed
+48 -11

No files matched your search

@@ -66,6 +66,11 @@ class Selection(WidgetInterface):
model.set(i, 0, name)
self.entry.set_model(model)
self.entry.set_text_column(0)
completion = gtk.EntryCompletion()
completion.set_inline_selection(True)
completion.set_model(model)
self.entry.get_child().set_completion(completion)
completion.set_text_column(0)
return lst
def _readonly_set(self, value):
@@ -12,18 +12,32 @@ class CheckBox(Interface):
super(CheckBox, self).__init__(name, parent, attrs)
self.widget = gtk.combo_box_entry_new_text()
self.widget.child.set_editable(True)
self.widget.child.set_property('activates_default', True)
self.widget.child.connect('key_press_event', self.sig_key_press)
self.widget.set_focus_chain([self.widget.child])
self.widget.append_text('')
self.widget.append_text(_('Yes'))
self.widget.append_text(_('No'))
self.entry = self.widget.child
self.entry.set_property('activates_default', True)
self.entry.set_editable(False)
completion = gtk.EntryCompletion()
completion.set_inline_selection(True)
completion.set_model(self.widget.get_model())
self.widget.child.set_completion(completion)
completion.set_text_column(0)
def sig_key_press(self, widget, event):
if event.type == gtk.gdk.KEY_PRESS \
and event.state & gtk.gdk.CONTROL_MASK \
and event.keyval == gtk.keysyms.space:
self.widget.popup()
def _value_get(self):
val = self.entry.get_text()
val = self.widget.child.get_text()
if val:
return [(self.name, '=', int(val == _('Yes')))]
self.widget.child.set_text('')
return []
def _value_set(self, value):
@@ -37,3 +51,6 @@ class CheckBox(Interface):
value = property(_value_get, _value_set, None,
_('The content of the widget or ValueError if not valid'))
def sig_activate(self, fct):
self.widget.child.connect_after('activate', fct)
@@ -12,7 +12,10 @@ class Selection(Interface):
super(Selection, self).__init__(name, parent, attrs)
self.widget = gtk.combo_box_entry_new_text()
self.widget.child.set_editable(False)
self.widget.child.set_editable(True)
self.widget.child.set_property('activates_default', True)
self.widget.child.connect('key_press_event', self.sig_key_press)
self.widget.set_focus_chain([self.widget.child])
self._selection = {}
selection = attrs.get('selection', [])
if 'relation' in attrs:
@@ -49,15 +52,24 @@ class Selection(Interface):
self.widget.append_text('')
for name in lst:
self.widget.append_text(name)
completion = gtk.EntryCompletion()
completion.set_inline_selection(True)
completion.set_model(model)
self.widget.child.set_completion(completion)
completion.set_text_column(0)
return lst
def sig_key_press(self, widget, event):
if event.type == gtk.gdk.KEY_PRESS \
and event.state & gtk.gdk.CONTROL_MASK \
and event.keyval == gtk.keysyms.space:
self.widget.popup()
def _value_get(self):
model = self.widget.get_model()
index = self.widget.get_active()
if index >= 0:
res = self._selection.get(model[index][0], False)
if res:
return [(self.name, '=', res)]
res = self._selection.get(self.widget.child.get_text(), False)
if res:
return [(self.name, '=', res)]
self.widget.child.set_text('')
return []
def _value_set(self, value):
@@ -77,3 +89,6 @@ class Selection(Interface):
def _readonly_set(self, value):
self.widget.set_sensitive(not value)
def sig_activate(self, fct):
self.widget.child.connect_after('activate', fct)