From b93970c1a5304a9129153fd928a647427dd8befd Mon Sep 17 00:00:00 2001 From: JayP16 Date: Sun, 15 Mar 2015 19:26:01 -0400 Subject: [PATCH 1/4] Updated widgets.py Implemented MultiCursor disable function --- lib/matplotlib/widgets.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/lib/matplotlib/widgets.py b/lib/matplotlib/widgets.py index 6675903b6877..1c8ed5ddb397 100644 --- a/lib/matplotlib/widgets.py +++ b/lib/matplotlib/widgets.py @@ -1020,6 +1020,7 @@ def __init__(self, canvas, axes, useblit=True, horizOn=False, vertOn=True, self.axes = axes self.horizOn = horizOn self.vertOn = vertOn + self.active = True xmin, xmax = axes[-1].get_xlim() ymin, ymax = axes[-1].get_ylim() @@ -1061,6 +1062,8 @@ def disconnect(self): def clear(self, event): """clear the cursor""" + if self.ignore(event): + return if self.useblit: self.background = ( self.canvas.copy_from_bbox(self.canvas.figure.bbox)) @@ -1068,6 +1071,8 @@ def clear(self, event): line.set_visible(False) def onmove(self, event): + if self.ignore(event): + return if event.inaxes is None: return if not self.canvas.widgetlock.available(self): @@ -1099,7 +1104,14 @@ def _update(self): else: self.canvas.draw_idle() + + def ignore(self, event): + """Return True if event should be ignored. + This method (or a version of it) should be called at the beginning + of any event callback. + """ + return not self.active class _SelectorWidget(AxesWidget): From 4032a27b04e93475185a17f709ea69b6f3f4e5e6 Mon Sep 17 00:00:00 2001 From: JayP16 Date: Mon, 16 Mar 2015 16:03:15 -0400 Subject: [PATCH 2/4] Moved active and ignore logic to parent class. --- lib/matplotlib/widgets.py | 54 +++++++++++++++++---------------------- 1 file changed, 23 insertions(+), 31 deletions(-) diff --git a/lib/matplotlib/widgets.py b/lib/matplotlib/widgets.py index 1c8ed5ddb397..976a940134c7 100644 --- a/lib/matplotlib/widgets.py +++ b/lib/matplotlib/widgets.py @@ -68,6 +68,29 @@ class Widget(object): """ drawon = True eventson = True + _active = True + + def set_active(self, active): + """Set whether the widget is active. + """ + self._active = active + + def get_active(self): + """Get whether the widget is active. + """ + return self._active + + # set_active is overriden by SelectorWidgets. + active = property(get_active, lambda self, active: self.set_active(active), + doc="Is the widget active?") + + def ignore(self, event): + """Return True if event should be ignored. + + This method (or a version of it) should be called at the beginning + of any event callback. + """ + return not self.active class AxesWidget(Widget): @@ -96,7 +119,6 @@ def __init__(self, ax): self.ax = ax self.canvas = ax.figure.canvas self.cids = [] - self._active = True def connect_event(self, event, callback): """Connect callback with an event. @@ -112,28 +134,6 @@ def disconnect_events(self): for c in self.cids: self.canvas.mpl_disconnect(c) - def set_active(self, active): - """Set whether the widget is active. - """ - self._active = active - - def get_active(self): - """Get whether the widget is active. - """ - return self._active - - # set_active is overriden by SelectorWidgets. - active = property(get_active, lambda self, active: self.set_active(active), - doc="Is the widget active?") - - def ignore(self, event): - """Return True if event should be ignored. - - This method (or a version of it) should be called at the beginning - of any event callback. - """ - return not self.active - class Button(AxesWidget): """ @@ -1020,7 +1020,6 @@ def __init__(self, canvas, axes, useblit=True, horizOn=False, vertOn=True, self.axes = axes self.horizOn = horizOn self.vertOn = vertOn - self.active = True xmin, xmax = axes[-1].get_xlim() ymin, ymax = axes[-1].get_ylim() @@ -1105,13 +1104,6 @@ def _update(self): self.canvas.draw_idle() - def ignore(self, event): - """Return True if event should be ignored. - - This method (or a version of it) should be called at the beginning - of any event callback. - """ - return not self.active class _SelectorWidget(AxesWidget): From 215f3b66d97a8cc109f401244a1d52c40626a209 Mon Sep 17 00:00:00 2001 From: JayP16 Date: Thu, 19 Mar 2015 21:43:38 -0400 Subject: [PATCH 3/4] Removed white space. --- lib/matplotlib/widgets.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/matplotlib/widgets.py b/lib/matplotlib/widgets.py index 976a940134c7..6197d5ce4b4a 100644 --- a/lib/matplotlib/widgets.py +++ b/lib/matplotlib/widgets.py @@ -1101,9 +1101,8 @@ def _update(self): ax.draw_artist(line) self.canvas.blit(self.canvas.figure.bbox) else: - self.canvas.draw_idle() - + class _SelectorWidget(AxesWidget): From 8a38b794f73613402506af5f035b8f9a293912d4 Mon Sep 17 00:00:00 2001 From: JayP16 Date: Mon, 30 Mar 2015 12:41:45 -0400 Subject: [PATCH 4/4] Create updated_widgets.rst --- doc/users/whats_new/updated_widgets.rst | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 doc/users/whats_new/updated_widgets.rst diff --git a/doc/users/whats_new/updated_widgets.rst b/doc/users/whats_new/updated_widgets.rst new file mode 100644 index 000000000000..702be6f0cefb --- /dev/null +++ b/doc/users/whats_new/updated_widgets.rst @@ -0,0 +1,10 @@ +Moved ``ignore``, ``set_active``, and ``get_active`` methods to base class ``Widget`` +````````````````````````````````````````````````````````````````````````````````` +Pushes up duplicate methods in child class to parent class to avoid duplication of code. + + +Adds enable/disable feature to MultiCursor +`````````````````````````````````````````` +A MultiCursor object can be disabled (and enabled) after it has been created without destroying the object. +Example: + multi_cursor.active = False