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
This commit is contained in:
Cédric Krier committed 2009-11-26 10:32:01 +01:00
1 parent 515d0ec7d5
commit 1e7c08dcdf
3 files changed
+34 -14

No files matched your search

+2
View File
@@ -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
@@ -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()
@@ -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()