Improve key navigation on tree view
This commit is contained in:
1 parent
dd2e6af074
commit
ceef62f2eb
3 files changed
+46
-2
No files matched your search
@@ -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)
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in new issue
Block a user