Extra keybinding/buttonbinding on treeviews for usability
Shift+enter and dblclick: expand group and children svn: r14019
This commit is contained in:
parent
1946440fc2
commit
2e65bfcce4
@ -719,8 +719,20 @@ class ListView(NavigationView):
|
|||||||
return False
|
return False
|
||||||
from QuickReports import create_quickreport_menu
|
from QuickReports import create_quickreport_menu
|
||||||
if event.type == gtk.gdk._2BUTTON_PRESS and event.button == 1:
|
if event.type == gtk.gdk._2BUTTON_PRESS and event.button == 1:
|
||||||
self.edit(obj)
|
if self.type_list() == LISTFLAT:
|
||||||
return True
|
self.edit(obj)
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
# Tree
|
||||||
|
store, paths = self.selection.get_selected_rows()
|
||||||
|
if paths:
|
||||||
|
firstsel = paths[0]
|
||||||
|
firstnode = self.model.on_get_iter(firstsel)
|
||||||
|
if len(paths)==1 and firstnode.handle is None:
|
||||||
|
return self.expand_collapse_tree_branch()
|
||||||
|
else:
|
||||||
|
self.edit(obj)
|
||||||
|
return True
|
||||||
elif event.type == gtk.gdk.BUTTON_PRESS and event.button == 3:
|
elif event.type == gtk.gdk.BUTTON_PRESS and event.button == 3:
|
||||||
menu = self.uistate.uimanager.get_widget('/Popup')
|
menu = self.uistate.uimanager.get_widget('/Popup')
|
||||||
#construct quick reports if needed
|
#construct quick reports if needed
|
||||||
@ -751,7 +763,8 @@ class ListView(NavigationView):
|
|||||||
|
|
||||||
def _key_press(self, obj, event):
|
def _key_press(self, obj, event):
|
||||||
"""
|
"""
|
||||||
Called when a key is pressed.
|
Called when a key is pressed on a flat listview
|
||||||
|
ENTER --> edit selection
|
||||||
"""
|
"""
|
||||||
if not self.dbstate.open:
|
if not self.dbstate.open:
|
||||||
return False
|
return False
|
||||||
@ -763,7 +776,9 @@ class ListView(NavigationView):
|
|||||||
|
|
||||||
def _key_press_tree(self, obj, event):
|
def _key_press_tree(self, obj, event):
|
||||||
"""
|
"""
|
||||||
Overwrite of listview key press
|
Called when a key is pressed on a tree listview
|
||||||
|
ENTER --> edit selection or open group node
|
||||||
|
SHIFT+ENTER --> open group node and all children nodes
|
||||||
"""
|
"""
|
||||||
if not self.dbstate.open:
|
if not self.dbstate.open:
|
||||||
return False
|
return False
|
||||||
@ -778,6 +793,15 @@ class ListView(NavigationView):
|
|||||||
else:
|
else:
|
||||||
self.edit(obj)
|
self.edit(obj)
|
||||||
return True
|
return True
|
||||||
|
elif event.state in (gtk.gdk.SHIFT_MASK, ):
|
||||||
|
if event.keyval in (gtk.keysyms.Return, gtk.keysyms.KP_Enter):
|
||||||
|
store, paths = self.selection.get_selected_rows()
|
||||||
|
if paths:
|
||||||
|
firstsel = paths[0]
|
||||||
|
firstnode = self.model.on_get_iter(firstsel)
|
||||||
|
if len(paths)==1 and firstnode.handle is None:
|
||||||
|
return self.expand_collapse_tree_branch()
|
||||||
|
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def expand_collapse_tree(self):
|
def expand_collapse_tree(self):
|
||||||
@ -798,6 +822,24 @@ class ListView(NavigationView):
|
|||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
def expand_collapse_tree_branch(self):
|
||||||
|
"""
|
||||||
|
Expand or collapse the selected group node with all children.
|
||||||
|
Return True if change done, False otherwise
|
||||||
|
"""
|
||||||
|
store, paths = self.selection.get_selected_rows()
|
||||||
|
if paths:
|
||||||
|
firstsel = paths[0]
|
||||||
|
firstnode = self.model.on_get_iter(firstsel)
|
||||||
|
if firstnode.handle:
|
||||||
|
return False
|
||||||
|
if self.list.row_expanded(firstsel):
|
||||||
|
self.list.collapse_row(firstsel)
|
||||||
|
else:
|
||||||
|
self.open_branch(None)
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
def key_delete(self):
|
def key_delete(self):
|
||||||
self.remove(None)
|
self.remove(None)
|
||||||
|
|
||||||
@ -946,3 +988,47 @@ class ListView(NavigationView):
|
|||||||
Template function to allow the removal of an object by its handle
|
Template function to allow the removal of an object by its handle
|
||||||
"""
|
"""
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
|
||||||
|
def open_all_nodes(self, obj):
|
||||||
|
"""
|
||||||
|
Method for Treeviews to open all groups
|
||||||
|
obj: for use of method in event callback
|
||||||
|
"""
|
||||||
|
self.uistate.status_text(_("Updating display..."))
|
||||||
|
self.uistate.set_busy_cursor(True)
|
||||||
|
|
||||||
|
self.list.expand_all()
|
||||||
|
|
||||||
|
self.uistate.set_busy_cursor(False)
|
||||||
|
self.uistate.modify_statusbar(self.dbstate)
|
||||||
|
|
||||||
|
def close_all_nodes(self, obj):
|
||||||
|
"""
|
||||||
|
Method for Treeviews to close all groups
|
||||||
|
obj: for use of method in event callback
|
||||||
|
"""
|
||||||
|
self.list.collapse_all()
|
||||||
|
|
||||||
|
def open_branch(self, obj):
|
||||||
|
"""
|
||||||
|
Expand the selected branches and all children.
|
||||||
|
obj: for use of method in event callback
|
||||||
|
"""
|
||||||
|
self.uistate.status_text(_("Updating display..."))
|
||||||
|
self.uistate.set_busy_cursor(True)
|
||||||
|
|
||||||
|
selected = self.selection.get_selected_rows()
|
||||||
|
for path in selected[1]:
|
||||||
|
self.list.expand_row(path, True)
|
||||||
|
|
||||||
|
self.uistate.set_busy_cursor(False)
|
||||||
|
self.uistate.modify_statusbar(self.dbstate)
|
||||||
|
|
||||||
|
def close_branch(self, obj):
|
||||||
|
"""
|
||||||
|
Collapse the selected branches.
|
||||||
|
obj: for use of method in event callback
|
||||||
|
"""
|
||||||
|
selected = self.selection.get_selected_rows()
|
||||||
|
for path in selected[1]:
|
||||||
|
self.list.collapse_row(path)
|
||||||
|
@ -415,18 +415,6 @@ class PersonView(ListView):
|
|||||||
self.all_action.set_visible(False)
|
self.all_action.set_visible(False)
|
||||||
self.edit_action.set_visible(False)
|
self.edit_action.set_visible(False)
|
||||||
|
|
||||||
def open_all_nodes(self, obj):
|
|
||||||
self.uistate.status_text(_("Updating display..."))
|
|
||||||
self.uistate.set_busy_cursor(True)
|
|
||||||
|
|
||||||
self.list.expand_all()
|
|
||||||
|
|
||||||
self.uistate.set_busy_cursor(False)
|
|
||||||
self.uistate.modify_statusbar(self.dbstate)
|
|
||||||
|
|
||||||
def close_all_nodes(self, obj):
|
|
||||||
self.list.collapse_all()
|
|
||||||
|
|
||||||
def cmp_merge(self, obj):
|
def cmp_merge(self, obj):
|
||||||
mlist = self.get_selected_objects()
|
mlist = self.get_selected_objects()
|
||||||
|
|
||||||
|
@ -175,43 +175,3 @@ class PlaceTreeView(PlaceBaseView):
|
|||||||
EditPlace(self.dbstate, self.uistate, [], place)
|
EditPlace(self.dbstate, self.uistate, [], place)
|
||||||
except Errors.WindowActiveError:
|
except Errors.WindowActiveError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def open_branch(self, obj):
|
|
||||||
"""
|
|
||||||
Expand the selected branches and all children.
|
|
||||||
"""
|
|
||||||
self.uistate.status_text(_("Updating display..."))
|
|
||||||
self.uistate.set_busy_cursor(True)
|
|
||||||
|
|
||||||
selected = self.selection.get_selected_rows()
|
|
||||||
for path in selected[1]:
|
|
||||||
self.list.expand_row(path, True)
|
|
||||||
|
|
||||||
self.uistate.set_busy_cursor(False)
|
|
||||||
self.uistate.modify_statusbar(self.dbstate)
|
|
||||||
|
|
||||||
def close_branch(self, obj):
|
|
||||||
"""
|
|
||||||
Collapse the selected branches.
|
|
||||||
"""
|
|
||||||
selected = self.selection.get_selected_rows()
|
|
||||||
for path in selected[1]:
|
|
||||||
self.list.collapse_row(path)
|
|
||||||
|
|
||||||
def open_all_nodes(self, obj):
|
|
||||||
"""
|
|
||||||
Expand the entire tree.
|
|
||||||
"""
|
|
||||||
self.uistate.status_text(_("Updating display..."))
|
|
||||||
self.uistate.set_busy_cursor(True)
|
|
||||||
|
|
||||||
self.list.expand_all()
|
|
||||||
|
|
||||||
self.uistate.set_busy_cursor(False)
|
|
||||||
self.uistate.modify_statusbar(self.dbstate)
|
|
||||||
|
|
||||||
def close_all_nodes(self, obj):
|
|
||||||
"""
|
|
||||||
Collapse the entire tree.
|
|
||||||
"""
|
|
||||||
self.list.collapse_all()
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user