Improve shortcuts of Many2Many

Use the same shortcuts as the Many2One on the text widget and keep the previous
one on the list view.

issue4556
review10191002
This commit is contained in:
Cédric Krier committed 2015-03-02 23:29:58 +01:00
1 parent 9abc59ed6b
commit 7853db3bdd
1 file changed
+49 -37
@@ -106,25 +106,29 @@ class Many2Many(Widget):
def on_keypress(self, widget, event):
editable = self.wid_text.get_editable()
activate_keys = [gtk.keysyms.Tab, gtk.keysyms.ISO_Left_Tab]
remove_keys = [gtk.keysyms.Delete, gtk.keysyms.KP_Delete]
if not self.wid_completion:
activate_keys.append(gtk.keysyms.Return)
if event.keyval == gtk.keysyms.F3:
self._sig_add()
return True
if event.keyval == gtk.keysyms.F2 \
and widget == self.screen.widget:
self._sig_edit()
return True
if event.keyval in (gtk.keysyms.Delete, gtk.keysyms.KP_Delete) \
and widget == self.screen.widget:
self._sig_remove()
return True
if (widget == self.wid_text
and event.keyval in activate_keys
and editable
and self.wid_text.get_text()):
self._sig_add()
self.wid_text.grab_focus()
if widget == self.screen.widget:
if event.keyval == gtk.keysyms.F3 and editable:
self._sig_add()
return True
elif event.keyval == gtk.keysyms.F2:
self._sig_edit()
return True
elif event.keyval in remove_keys and editable:
self._sig_remove()
return True
elif widget == self.wid_text:
if event.keyval == gtk.keysyms.F3:
self._sig_new()
return True
elif event.keyval == gtk.keysyms.F2:
self._sig_add()
return True
elif event.keyval in activate_keys and self.wid_text.get_text():
self._sig_add()
self.wid_text.grab_focus()
return False
def destroy(self):
@@ -182,10 +186,13 @@ class Many2Many(Widget):
add_remove = self.record.expr_eval(self.attrs.get('add_remove'))
if add_remove:
domain = [domain, add_remove]
context = self.field.context_get(self.record)
screen = Screen(self.attrs['relation'], domain=domain,
view_ids=self.attrs.get('view_ids', '').split(','),
mode=['form'], views_preload=self.attrs.get('views', {}),
readonly=self.attrs.get('readonly', False))
readonly=self.attrs.get('readonly', False),
context=context)
screen.load([self.screen.current_record.id])
def callback(result):
@@ -197,6 +204,29 @@ class Many2Many(Widget):
self.screen.display()
WinForm(screen, callback)
def _sig_new(self):
domain = self.field.domain_get(self.record)
add_remove = self.record.expr_eval(self.attrs.get('add_remove'))
if add_remove:
domain = [domain, add_remove]
context = self.field.context_get(self.record)
screen = Screen(self.attrs['relation'], domain=domain,
view_ids=self.attrs.get('view_ids', '').split(','),
mode=['form'], views_preload=self.attrs.get('views', {}),
context=context)
def callback(result):
self.focus_out = True
if result:
record = screen.current_record
self.screen.load([record.id], modified=True)
self.wid_text.set_text('')
self.wid_text.grab_focus()
self.focus_out = False
WinForm(screen, callback, new=True, save_current=True)
def _readonly_set(self, value):
self._readonly = value
self._set_button_sensitive()
@@ -264,22 +294,4 @@ class Many2Many(Widget):
self._sig_add()
self.wid_text.grab_focus()
elif index == 1:
model = self.attrs['relation']
domain = self.field.domain_get(self.record)
add_remove = self.record.expr_eval(self.attrs.get('add_remove'))
if add_remove:
domain = [domain, add_remove]
context = self.field.context_get(self.record)
screen = Screen(model, domain, context=context, mode=['form'])
def callback(result):
self.focus_out = True
if result:
record = screen.current_record
self.screen.load([record.id], modified=True)
self.wid_text.set_text('')
self.wid_text.grab_focus()
self.focus_out = False
WinForm(screen, callback, new=True, save_current=True)
self._sig_new()