Factorize TreeView with CONTROL MASK inverted

- always grab focus on button press
- use bitwise exclusive or to allow usage of CONTROL
- use this view for search box

issue3919
review5301002
This commit is contained in:
Cédric Krier committed 2014-05-22 23:27:31 +02:00
1 parent 6763875179
commit 26368bfb5a
3 files changed
+33 -18

No files matched your search

+29
View File
@@ -0,0 +1,29 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of this
# repository contains the full copyright notices and license terms.
import gtk
MOVEMENT_KEYS = {gtk.keysyms.Up, gtk.keysyms.Down, gtk.keysyms.space,
gtk.keysyms.Left, gtk.keysyms.KP_Left,
gtk.keysyms.Right, gtk.keysyms.KP_Right,
gtk.keysyms.Home, gtk.keysyms.KP_Home,
gtk.keysyms.End, gtk.keysyms.KP_End}
__all__ = ['TreeViewControl']
class TreeViewControl(gtk.TreeView):
__gsignals__ = {
'button-press-event': 'override',
'key-press-event': 'override',
}
def do_button_press_event(self, event):
self.grab_focus() # grab focus because it doesn't whith CONTROL MASK
if event.button == 1:
event.state ^= gtk.gdk.CONTROL_MASK
return super(TreeViewControl, self).do_button_press_event(self, event)
def do_key_press_event(self, event):
if event.keyval in MOVEMENT_KEYS:
event.state ^= gtk.gdk.CONTROL_MASK
return super(TreeViewControl, self).do_key_press_event(self, event)
@@ -5,12 +5,7 @@ import gobject
from .interface import WidgetInterface
from tryton.common.selection import SelectionMixin
MOVEMENT_KEYS = {gtk.keysyms.Up, gtk.keysyms.Down, gtk.keysyms.space,
gtk.keysyms.Left, gtk.keysyms.KP_Left,
gtk.keysyms.Right, gtk.keysyms.KP_Right,
gtk.keysyms.Home, gtk.keysyms.KP_Home,
gtk.keysyms.End, gtk.keysyms.KP_End}
from tryton.common.treeviewcontrol import TreeViewControl
class MultiSelection(WidgetInterface, SelectionMixin):
@@ -27,12 +22,10 @@ class MultiSelection(WidgetInterface, SelectionMixin):
viewport.add(scroll)
self.model = gtk.ListStore(gobject.TYPE_INT, gobject.TYPE_STRING)
self.tree = gtk.TreeView()
self.tree = TreeViewControl()
self.tree.set_model(self.model)
self.tree.set_search_column(1)
self.tree.connect('focus-out-event', lambda *a: self._focus_out())
self.tree.connect('button-press-event', self.__button_press)
self.tree.connect('key_press_event', self.__key_press)
selection = self.tree.get_selection()
selection.set_mode(gtk.SELECTION_MULTIPLE)
selection.connect('changed', self.send_modified)
@@ -89,11 +82,3 @@ class MultiSelection(WidgetInterface, SelectionMixin):
if (element not in group.record_removed
and element not in group.record_deleted):
selection.select_path(id2path[element.id])
def __button_press(self, treeview, event):
if event.button == 1:
event.state |= gtk.gdk.CONTROL_MASK
def __key_press(self, treeview, event):
if event.keyval in MOVEMENT_KEYS:
event.state |= gtk.gdk.CONTROL_MASK
@@ -7,6 +7,7 @@ import gobject
import tryton.common as common
from tryton.common.domain_parser import quote
from tryton.common.placeholder_entry import PlaceholderEntry
from tryton.common.treeviewcontrol import TreeViewControl
from tryton.translate import date_format
from tryton.config import TRYTON_ICON
from tryton.pyson import PYSONDecoder
@@ -42,7 +43,7 @@ class Selection(gtk.ScrolledWindow):
def __init__(self, selections):
super(Selection, self).__init__()
self.treeview = gtk.TreeView()
self.treeview = TreeViewControl()
model = gtk.ListStore(gobject.TYPE_STRING)
for selection in selections:
model.append((selection,))