Reviewers: ,
Please review this at http://codereview.tryton.org/236001/
Affected files:
M tryton/common/tdp.py
M tryton/gui/window/view_form/view/screen_container.py
Index: tryton/common/tdp.py
===================================================================
--- a/tryton/common/tdp.py
+++ b/tryton/common/tdp.py
@@ -635,6 +635,8 @@
return (datetime_strftime(datetime.date.today(), format_),)
elif parent_field['type'] == 'boolean':
return (_('True'), _('False'))
+ if not self.parent:
+ return sorted([f + ':' for f in self.parser.sugg_fields])
return []
SPLIT_REGEXP = re.compile(
@@ -905,6 +907,20 @@
return DomainParser(fields)
+def test_empty_complete():
+ parser = test_parser()
+ assert list(parser.parse('').complete()) == [
+ 'Boolean:',
+ 'Char:',
+ 'Date Time:',
+ 'Date:',
+ 'Float:',
+ 'Integer:',
+ 'Numeric:',
+ 'Selection:',
+ ]
+
+
def test_selection_complete():
parser = test_parser()
assert list(parser.parse('S').complete()) == ['Selection:']
Index: tryton/gui/window/view_form/view/screen_container.py
===================================================================
--- a/tryton/gui/window/view_form/view/screen_container.py
+++ b/tryton/gui/window/view_form/view/screen_container.py
@@ -2,6 +2,7 @@
#this repository contains the full copyright notices and license terms.
import gtk
import gettext
+import gobject
import tryton.common as common
_ = gettext.gettext
@@ -17,7 +18,6 @@
self.filter_vbox = None
self.but_prev = None
self.but_next = None
- self.current_text = ''
self.alternate_viewport = gtk.Viewport()
self.alternate_viewport.set_shadow_type(gtk.SHADOW_NONE)
self.alternate_view = False
@@ -43,10 +43,17 @@
self.completion = gtk.EntryCompletion()
self.completion.set_model(gtk.ListStore(str))
self.completion.set_text_column(0)
- self.completion.set_match_func(lambda *a: True, None)
- self.search_entry.connect_after('activate', self.do_search)
+ self.completion.props.inline_completion = True
+ if hasattr(self.completion.props, 'inline_selection'):
+ self.completion.props.inline_selection = True
+ self.completion.props.minimum_key_length = 0
+ if hasattr(self.completion.props, 'popup_set_width'):
+ self.completion.props.popup_set_width = False
+ self.completion.connect('match-selected', self.match_selected)
+ self.search_entry.connect('activate', self.activate)
self.search_entry.set_completion(self.completion)
- self.search_entry.connect('changed', self.changed)
+ self.search_entry.connect('key-press-event', self.key_press)
+ self.search_entry.connect('focus-in-event', self.focus_in)
hbox.pack_start(self.search_entry, expand=True, fill=True,
padding=5)
@@ -131,9 +138,8 @@
self.viewport.add(widget)
self.viewport.show_all()
- def changed(self, editable):
+ def update(self):
res = self.screen.search_complete(self.get_text())
- self.current_text = self.get_text()
model = self.completion.get_model()
model.clear()
for r in res:
@@ -154,9 +160,26 @@
def search_prev(self, widget=None):
self.screen.search_prev(self.get_text())
+ def match_selected(self, completion, model, iter):
+ def callback():
+ self.update()
+ self.search_entry.emit('changed')
+ gobject.idle_add(callback)
+
+ def activate(self, widget):
+ if not self.search_entry.get_selection_bounds():
+ self.do_search(widget)
+
def do_search(self, widget=None):
self.screen.search_filter(self.get_text())
def set_cursor(self, new=False, reset_view=True):
if self.filter_vbox:
self.search_entry.grab_focus()
+
+ def key_press(self, widget, event):
+ gobject.idle_add(self.update)
+
+ def focus_in(self, widget, event):
+ self.update()
+ self.search_entry.emit('changed')
--
[email protected] mailing list