4 assert gtk
.pygtk_version
>= (2, 8)
7 def __init__(self
, x
, y
):
11 def _event_point(event
):
13 x
, y
, state
= event
.window
.get_pointer()
16 point
= _point(event
.x
, event
.y
)
19 class PysizeWidget_Mouse(object):
20 def __init__(self
, options
, args
):
21 self
.connect('motion-notify-event', self
._motion
_notify
_event
)
22 self
.connect('button-press-event', self
._button
_press
_event
)
23 self
.connect('button-release-event', self
._button
_release
_event
)
24 self
.cursor_node
= None
25 self
.button_press_node
= None
26 self
._set
_cursor
_node
(None)
28 def _set_cursor_node(self
, cursor_node
):
29 self
.cursor_node
= cursor_node
30 self
.emit('hover-changed', cursor_node
)
32 def _get_node_here(self
, event
):
33 point
= _point(event
.x
, event
.y
)
34 for node
in self
.tree
.root
:
35 if node
.contains_point(point
):
38 def _motion_notify_event(self
, widget
, event
):
39 point
= _event_point(event
)
40 prev_selection
= new_selection
= self
.cursor_node
41 if not (self
.cursor_node
and self
.cursor_node
.contains_point(point
)):
42 # The cursor is no more in the same node
44 for node
in self
.tree
.root
:
45 if node
.contains_point(point
) != (node
== prev_selection
):
46 if node
== prev_selection
:
54 if prev_selection
!= new_selection
:
55 self
._set
_cursor
_node
(new_selection
)
56 self
._queue
_node
_redraw
(prev_selection
)
57 self
._queue
_node
_redraw
(new_selection
)
59 def _button_press_event(self
, widget
, event
):
60 node
= self
._get
_node
_here
(event
)
61 if node
!= self
.button_press_node
:
62 self
._queue
_node
_redraw
(self
.button_press_node
)
63 self
._queue
_node
_redraw
(node
)
64 self
.button_press_node
= node
66 def _button_release_event(self
, widget
, event
):
67 node
= self
._get
_node
_here
(event
)
68 if node
== self
.button_press_node
:
69 if event
.state
& gtk
.gdk
.CONTROL_MASK
:
70 if node
in self
.selected_nodes
:
71 self
.selected_nodes
.remove(node
)
73 self
.selected_nodes
.append(node
)
75 for n
in self
.selected_nodes
:
76 self
._queue
_node
_redraw
(n
)
77 self
.selected_nodes
= [node
]
78 self
._queue
_node
_redraw
(node
)
80 self
._queue
_node
_redraw
(self
.button_press_node
)
81 self
.button_press_node
= None