From 1e7c08dcdfceb0176678ed6d0fdca2c358865726 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Thu, 26 Nov 2009 10:32:01 +0100 Subject: [PATCH] Use same keyboard shortcut for xxx2many than for other fields - Remove hardcoded CTRL+N shortcut on one2many - Add F2, F3 and Delete on many2many - Make F2 working only when focus is on list - Remove on many2many keep the cursor position --- CHANGELOG | 2 ++ .../view_form/view/form_gtk/many2many.py | 19 +++++++++++-- .../view_form/view/form_gtk/one2many.py | 27 ++++++++++--------- 3 files changed, 34 insertions(+), 14 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 46343e7ec4..cdb792057f 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,5 @@ +* Use same keyboard shortcut for xxx2many than for other fields + Version 1.4.0 - 2009-10-19 * Bug fixes (see mercurial logs for details) * Handle datetime_field in xxx2Many diff --git a/tryton/gui/window/view_form/view/form_gtk/many2many.py b/tryton/gui/window/view_form/view/form_gtk/many2many.py index c6a1c33743..52a990dc8f 100644 --- a/tryton/gui/window/view_form/view/form_gtk/many2many.py +++ b/tryton/gui/window/view_form/view/form_gtk/many2many.py @@ -57,17 +57,34 @@ class Many2Many(WidgetInterface): self.widget.pack_start(hbox, expand=False, fill=False) + hbox.set_focus_chain([self.wid_text]) + self.screen = Screen(attrs['relation'], self._window, view_type=['tree'], views_preload=attrs.get('views', {}), row_activate=self._on_activate) self.widget.pack_start(self.screen.widget, expand=True, fill=True) + self.screen.widget.connect('key_press_event', self.on_keypress) + self.wid_text.connect('key_press_event', self.on_keypress) + self.old = None def grab_focus(self): return self.wid_text.grab_focus() + def on_keypress(self, widget, event): + if event.keyval == gtk.keysyms.F3: + self._sig_add() + return False + if event.keyval == gtk.keysyms.F2 \ + and widget == self.screen.widget: + self._sig_edit() + if event.keyval in (gtk.keysyms.Delete, gtk.keysyms.KP_Delete) \ + and widget == self.screen.widget: + self._sig_remove() + return False + def destroy(self): self.screen.destroy() self.widget.destroy() @@ -106,8 +123,6 @@ class Many2Many(WidgetInterface): def _sig_remove(self, *args): self.screen.remove() - self.screen.display() - self.set_value(self._view.model, self._view.modelfield) def _sig_activate(self, *args): self._sig_add() diff --git a/tryton/gui/window/view_form/view/form_gtk/one2many.py b/tryton/gui/window/view_form/view/form_gtk/one2many.py index 3aa51b13d7..917ba1be20 100644 --- a/tryton/gui/window/view_form/view/form_gtk/one2many.py +++ b/tryton/gui/window/view_form/view/form_gtk/one2many.py @@ -315,18 +315,17 @@ class Dialog(object): and self.but_add.get_property('sensitive'): self._sig_add() return False - if ((event.keyval in (gtk.keysyms.N, gtk.keysyms.n) \ - and event.state & gtk.gdk.CONTROL_MASK) \ - or event.keyval == gtk.keysyms.F3) \ + if (event.keyval == gtk.keysyms.F3) \ and self.but_new.get_property('sensitive'): self._sig_new(widget) return False - if event.keyval == gtk.keysyms.F2: + if event.keyval == gtk.keysyms.F2 \ + and widget == self.screen.widget: self._sig_edit(widget) return False - if (event.keyval in (gtk.keysyms.L, gtk.keysyms.l) \ - and event.state & gtk.gdk.CONTROL_MASK): - self.switch_view(widget) + if event.keyval in (gtk.keysyms.Delete, gtk.keysyms.KP_Delete) \ + and widget == self.screen.widget: + self._sig_remove(widget) return False def switch_view(self, widget): @@ -483,6 +482,8 @@ class One2Many(WidgetInterface): self.widget.pack_start(self.screen.widget, expand=True, fill=True) self.screen.widget.connect('key_press_event', self.on_keypress) + if self.attrs.get('add_remove'): + self.wid_text.connect('key_press_event', self.on_keypress) def grab_focus(self): return self.screen.widget.grab_focus() @@ -493,16 +494,18 @@ class One2Many(WidgetInterface): and self.but_add.get_property('sensitive'): self._sig_add() return False - if ((event.keyval == gtk.keysyms.N \ - and event.state & gtk.gdk.CONTROL_MASK \ - and event.state & gtk.gdk.SHIFT_MASK) \ - or event.keyval == gtk.keysyms.F3) \ + if (event.keyval == gtk.keysyms.F3) \ and self.but_new.get_property('sensitive'): self._sig_new(widget) return False - if event.keyval == gtk.keysyms.F2: + if event.keyval == gtk.keysyms.F2 \ + and widget == self.screen.widget: self._sig_edit(widget) return False + if event.keyval in (gtk.keysyms.Delete, gtk.keysyms.KP_Delete) \ + and widget == self.screen.widget: + self._sig_remove(widget) + return False def destroy(self): self.screen.destroy()