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:
1 parent
6763875179
commit
26368bfb5a
3 files changed
+33
-18
No files matched your search
@@ -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,))
|
||||
|
||||
Reference in new issue
Block a user