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
, path
):
21 self
.connect('motion-notify-event', type(self
)._motion
_notify
_event
)
22 self
.connect('button-press-event', type(self
)._button
_press
_event
)
23 self
.connect('button-release-event', type(self
)._button
_release
_event
)
24 self
.connect('building-tree-state-changed', type(self
)._reset
_mouse
)
25 self
.cursor_node
= None
26 self
.button_press_node
= None
27 self
.set_cursor_node(None)
29 def set_cursor_node(self
, cursor_node
):
30 self
.cursor_node
= cursor_node
31 self
.emit('hover-changed', cursor_node
)
33 def _reset_mouse(self
, unused_tree
):
34 self
.set_cursor_node(None)
35 self
.button_press_node
= None
37 def _get_node_here(self
, event
):
38 point
= _point(event
.x
, event
.y
)
39 for node
in self
.tree
.root
:
40 if node
.contains_point(point
):
43 def _motion_notify_event(self
, event
):
44 point
= _event_point(event
)
45 prev_selection
= new_selection
= self
.cursor_node
46 if not (self
.cursor_node
and self
.cursor_node
.contains_point(point
)):
47 # The cursor is no more in the same node
49 for node
in self
.tree
.root
:
50 if node
.contains_point(point
) != (node
== prev_selection
):
51 if node
== prev_selection
:
59 if prev_selection
!= new_selection
:
60 self
.set_cursor_node(new_selection
)
61 self
.queue_node_redraw(prev_selection
)
62 self
.queue_node_redraw(new_selection
)
65 def _handle_double_click(self
, node
):
66 if not (node
and node
.is_real()):
68 self
.path
= node
.get_fullpath()
69 self
.schedule_new_tree()
71 def _button_press_event(self
, event
):
73 node
= self
._get
_node
_here
(event
)
74 if event
.type == gtk
.gdk
._2BUTTON
_PRESS
:
75 return self
._handle
_double
_click
(node
)
76 if node
!= self
.button_press_node
:
77 self
.queue_node_redraw(self
.button_press_node
)
78 self
.queue_node_redraw(node
)
79 self
.button_press_node
= node
83 def _button_release_event(self
, event
):
84 node
= self
._get
_node
_here
(event
)
85 if node
== self
.button_press_node
:
86 if event
.state
& gtk
.gdk
.CONTROL_MASK
:
87 if node
in self
.selected_nodes
:
88 self
.selected_nodes
.remove(node
)
90 self
.selected_nodes
.append(node
)
92 for n
in self
.selected_nodes
:
93 self
.queue_node_redraw(n
)
94 self
.selected_nodes
= [node
]
95 self
.queue_node_redraw(node
)
97 self
.queue_node_redraw(self
.button_press_node
)
98 self
.button_press_node
= None