diff --git a/tryton/gui/window/view_form/view/list.py b/tryton/gui/window/view_form/view/list.py index 2a2fdb4e2b..8f4628f1a4 100644 --- a/tryton/gui/window/view_form/view/list.py +++ b/tryton/gui/window/view_form/view/list.py @@ -258,7 +258,7 @@ class ViewList(ParserView): self.widget_tree.connect('drag-data-received', self.drag_data_received) self.widget_tree.connect('drag-data-delete', self.drag_data_delete) - self.widget_tree.connect('key_press_event', self.on_keypres) + self.widget_tree.connect('key_press_event', self.on_keypress) def _sig_clicked(self, widget, action, atype): return self._action(action, atype) @@ -287,10 +287,21 @@ class ViewList(ParserView): return value - def on_keypres(self, widget, event): + def on_keypress(self, widget, event): if event.keyval == gtk.keysyms.c and event.state & gtk.gdk.CONTROL_MASK: self.on_copy() return False + if event.keyval in (gtk.keysyms.Down, gtk.keysyms.Up): + path, column = self.widget_tree.get_cursor() + if not path: + return False + store = self.widget_tree.get_model() + if event.keyval == gtk.keysyms.Down: + if path[0] == len(store) - 1: + return True + elif event.keyval == gtk.keysyms.Up: + if path[0] == 0: + return True def on_copy(self): clipboard = self.widget_tree.get_clipboard(gtk.gdk.SELECTION_CLIPBOARD) diff --git a/tryton/gui/window/view_tree/view_tree.py b/tryton/gui/window/view_tree/view_tree.py index c0d25b95b2..fcc5127bd6 100644 --- a/tryton/gui/window/view_tree/view_tree.py +++ b/tryton/gui/window/view_tree/view_tree.py @@ -353,6 +353,7 @@ class ViewTree(object): self.view.set_expander_column(self.view.get_column(1)) self.view.set_enable_search(False) self.view.get_column(0).set_visible(False) + self.view.connect('key_press_event', self.on_keypress) self.ids = ids self.view_info = view_info @@ -365,6 +366,24 @@ class ViewTree(object): self.search = [] self.next = 0 + def on_keypress(self, widget, event): + if event.keyval in (gtk.keysyms.Down, gtk.keysyms.Up): + path, column = self.view.get_cursor() + if not path: + return False + store = self.view.get_model() + if event.keyval == gtk.keysyms.Down: + iter = store.get_iter(path) + if path[0] == len(store) - 1 \ + and not store.iter_next(iter) \ + and (not store.iter_has_child(iter) \ + or not self.view.row_expanded(path)): + return True + elif event.keyval == gtk.keysyms.Up: + if path[0] == 0 \ + and len(path) == 1: + return True + def reload(self): del self.model self.model = ViewTreeModel(self.ids, self.view_info, self.fields_order, diff --git a/tryton/gui/window/view_tree/view_tree_sc.py b/tryton/gui/window/view_tree/view_tree_sc.py index 4da656b59e..51feb07ea4 100644 --- a/tryton/gui/window/view_tree/view_tree_sc.py +++ b/tryton/gui/window/view_tree/view_tree_sc.py @@ -24,6 +24,20 @@ class ViewTreeSC(object): column = gtk.TreeViewColumn (_('Description'), cell, text=1) self.tree.append_column(column) + self.tree.connect('key_press_event', self.on_keypress) + + def on_keypress(self, widget, event): + if event.keyval in (gtk.keysyms.Down, gtk.keysyms.Up): + path, column = self.tree.get_cursor() + if not path: + return False + store = self.tree.get_model() + if event.keyval == gtk.keysyms.Down: + if path[0] == len(store) - 1: + return True + elif event.keyval == gtk.keysyms.Up: + if path[0] == 0: + return True def update(self): store = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_STRING,