Skip to content

Commit

Permalink
Remove private event handling methods to allow for subclassing old api
Browse files Browse the repository at this point in the history
  • Loading branch information
blink1073 committed Oct 19, 2014
1 parent 2e99826 commit f28d31c
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 55 deletions.
23 changes: 14 additions & 9 deletions lib/matplotlib/tests/test_widgets.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,10 @@
import mock

import matplotlib.widgets as widgets

import numpy as np
import matplotlib
from matplotlib.testing.decorators import image_comparison, cleanup
import matplotlib.pyplot as plt


Expand Down Expand Up @@ -74,13 +78,13 @@ def onselect(epress, erelease):

tool = widgets.RectangleSelector(ax, onselect, **kwargs)
event = get_event(ax, xdata=100, ydata=100, button=1)
tool._press(event)
tool.press(event)

event = get_event(ax, xdata=125, ydata=125, button=1)
tool._onmove(event)
tool.onmove(event)

event = get_event(ax, xdata=150, ydata=150, button=1)
tool._release(event)
tool.release(event)

assert ax._got_onselect

Expand Down Expand Up @@ -113,13 +117,13 @@ def onmove(vmin, vmax):

tool = widgets.SpanSelector(ax, onselect, *args, **kwargs)
event = get_event(ax, xdata=100, ydata=100, button=1)
tool._press(event)
tool.press(event)

event = get_event(ax, xdata=125, ydata=125, button=1)
tool._onmove(event)
tool.onmove(event)

event = get_event(ax, xdata=150, ydata=150, button=1)
tool._release(event)
tool.release(event)

assert ax._got_onselect

Expand All @@ -139,17 +143,18 @@ def check_lasso_selector(**kwargs):

def onselect(verts):
ax._got_onselect = True
print(verts)
assert verts == [(100, 100), (125, 125), (150, 150)]

tool = widgets.LassoSelector(ax, onselect, **kwargs)
event = get_event(ax, xdata=100, ydata=100, button=1)
tool._press(event)
tool.press(event)

event = get_event(ax, xdata=125, ydata=125, button=1)
tool._onmove(event)
tool.onmove(event)

event = get_event(ax, xdata=150, ydata=150, button=1)
tool._release(event)
tool.release(event)

assert ax._got_onselect

Expand Down
77 changes: 31 additions & 46 deletions lib/matplotlib/widgets.py
Original file line number Diff line number Diff line change
Expand Up @@ -1132,12 +1132,12 @@ def update_background(self, event):

def connect_default_events(self):
"""Connect the major canvas events to methods."""
self.connect_event('motion_notify_event', self._onmove)
self.connect_event('button_press_event', self._press)
self.connect_event('button_release_event', self._release)
self.connect_event('motion_notify_event', self.onmove)
self.connect_event('button_press_event', self.press)
self.connect_event('button_release_event', self.release)
self.connect_event('draw_event', self.update_background)
self.connect_event('key_press_event', self._on_key_press)
self.connect_event('scroll_event', self._on_scroll)
self.connect_event('key_press_event', self.on_key_press)
self.connect_event('scroll_event', self.on_scroll)

def ignore(self, event):
"""return *True* if *event* should be ignored"""
Expand Down Expand Up @@ -1198,64 +1198,36 @@ def update(self):
self.canvas.draw_idle()
return False

def _press(self, event):
"""Button press event"""
if not self.ignore(event):
self.eventpress = event
self.press(event)

def press(self, event):
"""Button press handler"""
pass

def _release(self, event):
if not self.ignore(event) and not self.eventpress is None:
self.eventrelease = event
self.release(event)
self.eventpress = None
self.eventrelease = None
if not self.ignore(event):
self.eventpress = event
return True
return False

def release(self, event):
"""Button release event"""
pass

def _onmove(self, event):
if not self.ignore(event):
self.onmove(event)
if not self.ignore(event) and not self.eventpress is None:
self.eventrelease = event
return True
else:
return False

def onmove(self, event):
"""Cursor motion event"""
"""Cursor move event"""
pass

def _on_scroll(self, event):
if not self.ignore(event):
self.on_scroll(event)

def on_scroll(self, event):
"""Mouse scroll event"""
pass

def _on_key_press(self, event):
if not self.ignore(event):
self.on_key_press(event)

def on_key_press(self, event):
"""Key press event"""
pass

def set_active(self, active):
"""
Use this to activate / deactivate the Selector
from your program with an boolean parameter *active*.
"""
self.active = active

def get_active(self):
""" Get status of active mode (boolean variable)"""
return self.active

def set_visible(self, visible):
""" Set the visibility of our artists """
self.visible = visible
for artist in self.artists:
artist.set_visible(visible)

Expand Down Expand Up @@ -1393,6 +1365,8 @@ def ignore(self, event):

def press(self, event):
"""on button press event"""
if not _SelectorWidget.press(self, event):
return False
self.rect.set_visible(self.visible)
if self.span_stays:
self.stay_rect.set_visible(False)
Expand All @@ -1405,7 +1379,7 @@ def press(self, event):

def release(self, event):
"""on button release event"""
if self.pressv is None:
if not _SelectorWidget.release(self, event) or self.pressv is None:
return
self.buttonDown = False

Expand Down Expand Up @@ -1467,6 +1441,7 @@ def onmove(self, event):
self.onmove_callback(vmin, vmax)

self.update()
self.eventpress = None
return False


Expand Down Expand Up @@ -1591,12 +1566,17 @@ def __init__(self, ax, onselect, drawtype='box',

def press(self, event):
"""on button press event"""
if not _SelectorWidget.press(self, event):
return True
# make the drawed box/line visible
self.to_draw.set_visible(self.visible)
return False

def release(self, event):
"""on button release event"""
if not _SelectorWidget.release(self, event):
return True

# make the box/line invisible again
self.to_draw.set_visible(False)
self.canvas.draw()
Expand Down Expand Up @@ -1630,6 +1610,7 @@ def release(self, event):

self.onselect(self.eventpress, self.eventrelease)
# call desired function
self.eventpress = None
return False

def onmove(self, event):
Expand Down Expand Up @@ -1720,13 +1701,17 @@ def onpress(self, event):
self.press(event)

def press(self, event):
if not _SelectorWidget.press(self, event):
return
self.verts = [(event.xdata, event.ydata)]
self.line.set_visible(True)

def onrelease(self, event):
self.release(event)

def release(self, event):
if not _SelectorWidget.release(self, event):
return
if self.verts is not None:
self.verts.append((event.xdata, event.ydata))
self.onselect(self.verts)
Expand All @@ -1735,7 +1720,7 @@ def release(self, event):
self.verts = None

def onmove(self, event):
if self.verts is None:
if self.ignore(event) or self.verts is None:
return
self.verts.append((event.xdata, event.ydata))

Expand Down

0 comments on commit f28d31c

Please sign in to comment.