Skip to content

Commit db91106

Browse files
committed
Reorder NavigationToolbar2 methods.
This PR only moves methods around, and does not change any actual implementation code. Right now NavigationToolbar2 methods are implemented in a very haphazard order. In particular the successively called event handlers for interactive panning and zooming are not defined next to one another, which makes logic hard to follow. This PR moves `home`, `back` and `forward` next to one another (in the same order as they appear in the toolbar); `pan`, `press_pan`, `drag_pan`, and `release_pan` next to one another in that order; and likewise for `zoom`, `press_zoom`, `drag_zoom`, and `release_zoom`.
1 parent 22eade6 commit db91106

File tree

1 file changed

+80
-80
lines changed

1 file changed

+80
-80
lines changed

lib/matplotlib/backend_bases.py

Lines changed: 80 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -2762,18 +2762,6 @@ def __init__(self, canvas):
27622762
def set_message(self, s):
27632763
"""Display a message on toolbar or in status bar."""
27642764

2765-
def back(self, *args):
2766-
"""
2767-
Move back up the view lim stack.
2768-
2769-
For convenience of being directly connected as a GUI callback, which
2770-
often get passed additional parameters, this method accepts arbitrary
2771-
parameters, but does not use them.
2772-
"""
2773-
self._nav_stack.back()
2774-
self.set_history_buttons()
2775-
self._update_view()
2776-
27772765
def draw_rubberband(self, event, x0, y0, x1, y1):
27782766
"""
27792767
Draw a rectangle rubberband to indicate zoom limits.
@@ -2784,27 +2772,39 @@ def draw_rubberband(self, event, x0, y0, x1, y1):
27842772
def remove_rubberband(self):
27852773
"""Remove the rubberband."""
27862774

2787-
def forward(self, *args):
2775+
def home(self, *args):
27882776
"""
2789-
Move forward in the view lim stack.
2777+
Restore the original view.
27902778
27912779
For convenience of being directly connected as a GUI callback, which
27922780
often get passed additional parameters, this method accepts arbitrary
27932781
parameters, but does not use them.
27942782
"""
2795-
self._nav_stack.forward()
2783+
self._nav_stack.home()
27962784
self.set_history_buttons()
27972785
self._update_view()
27982786

2799-
def home(self, *args):
2787+
def back(self, *args):
28002788
"""
2801-
Restore the original view.
2789+
Move back up the view lim stack.
28022790
28032791
For convenience of being directly connected as a GUI callback, which
28042792
often get passed additional parameters, this method accepts arbitrary
28052793
parameters, but does not use them.
28062794
"""
2807-
self._nav_stack.home()
2795+
self._nav_stack.back()
2796+
self.set_history_buttons()
2797+
self._update_view()
2798+
2799+
def forward(self, *args):
2800+
"""
2801+
Move forward in the view lim stack.
2802+
2803+
For convenience of being directly connected as a GUI callback, which
2804+
often get passed additional parameters, this method accepts arbitrary
2805+
parameters, but does not use them.
2806+
"""
2807+
self._nav_stack.forward()
28082808
self.set_history_buttons()
28092809
self._update_view()
28102810

@@ -2908,6 +2908,14 @@ def _zoom_pan_handler(self, event):
29082908
elif event.name == "button_release_event":
29092909
self.release_zoom(event)
29102910

2911+
@cbook.deprecated("3.3")
2912+
def press(self, event):
2913+
"""Called whenever a mouse button is pressed."""
2914+
2915+
@cbook.deprecated("3.3")
2916+
def release(self, event):
2917+
"""Callback for mouse button release."""
2918+
29112919
def pan(self, *args):
29122920
"""
29132921
Toggle the pan/zoom tool.
@@ -2924,10 +2932,6 @@ def pan(self, *args):
29242932
a.set_navigate_mode(self.mode)
29252933
self.set_message(self.mode)
29262934

2927-
@cbook.deprecated("3.3")
2928-
def press(self, event):
2929-
"""Called whenever a mouse button is pressed."""
2930-
29312935
def press_pan(self, event):
29322936
"""Callback for mouse button press in pan/zoom mode."""
29332937
if event.button in [1, 3]:
@@ -2955,6 +2959,49 @@ def press_pan(self, event):
29552959
if press is not None:
29562960
press(event)
29572961

2962+
def drag_pan(self, event):
2963+
"""Callback for dragging in pan/zoom mode."""
2964+
for a, ind in self._xypress:
2965+
#safer to use the recorded button at the press than current button:
2966+
#multiple button can get pressed during motion...
2967+
a.drag_pan(self._button_pressed, event.key, event.x, event.y)
2968+
self.canvas.draw_idle()
2969+
2970+
def release_pan(self, event):
2971+
"""Callback for mouse button release in pan/zoom mode."""
2972+
2973+
if self._button_pressed is None:
2974+
return
2975+
self.canvas.mpl_disconnect(self._id_drag)
2976+
self._id_drag = self.canvas.mpl_connect(
2977+
'motion_notify_event', self.mouse_move)
2978+
for a, ind in self._xypress:
2979+
a.end_pan()
2980+
if not self._xypress:
2981+
return
2982+
self._xypress = []
2983+
self._button_pressed = None
2984+
self.push_current()
2985+
release = cbook._deprecate_method_override(
2986+
__class__.press, self, since="3.3", message="Calling an "
2987+
"overridden release() at pan stop is deprecated since %(since)s "
2988+
"and will be removed %(removal)s; override release_pan() instead.")
2989+
if release is not None:
2990+
release(event)
2991+
self._draw()
2992+
2993+
def zoom(self, *args):
2994+
"""Toggle zoom to rect mode."""
2995+
if self.mode == _Mode.ZOOM:
2996+
self.mode = _Mode.NONE
2997+
self.canvas.widgetlock.release(self)
2998+
else:
2999+
self.mode = _Mode.ZOOM
3000+
self.canvas.widgetlock(self)
3001+
for a in self.canvas.figure.get_axes():
3002+
a.set_navigate_mode(self.mode)
3003+
self.set_message(self.mode)
3004+
29583005
def press_zoom(self, event):
29593006
"""Callback for mouse button press in zoom to rect mode."""
29603007
if event.button not in [1, 3]:
@@ -2982,52 +3029,6 @@ def press_zoom(self, event):
29823029
if press is not None:
29833030
press(event)
29843031

2985-
def push_current(self):
2986-
"""Push the current view limits and position onto the stack."""
2987-
self._nav_stack.push(
2988-
WeakKeyDictionary(
2989-
{ax: (ax._get_view(),
2990-
# Store both the original and modified positions.
2991-
(ax.get_position(True).frozen(),
2992-
ax.get_position().frozen()))
2993-
for ax in self.canvas.figure.axes}))
2994-
self.set_history_buttons()
2995-
2996-
@cbook.deprecated("3.3")
2997-
def release(self, event):
2998-
"""Callback for mouse button release."""
2999-
3000-
def release_pan(self, event):
3001-
"""Callback for mouse button release in pan/zoom mode."""
3002-
3003-
if self._button_pressed is None:
3004-
return
3005-
self.canvas.mpl_disconnect(self._id_drag)
3006-
self._id_drag = self.canvas.mpl_connect(
3007-
'motion_notify_event', self.mouse_move)
3008-
for a, ind in self._xypress:
3009-
a.end_pan()
3010-
if not self._xypress:
3011-
return
3012-
self._xypress = []
3013-
self._button_pressed = None
3014-
self.push_current()
3015-
release = cbook._deprecate_method_override(
3016-
__class__.press, self, since="3.3", message="Calling an "
3017-
"overridden release() at pan stop is deprecated since %(since)s "
3018-
"and will be removed %(removal)s; override release_pan() instead.")
3019-
if release is not None:
3020-
release(event)
3021-
self._draw()
3022-
3023-
def drag_pan(self, event):
3024-
"""Callback for dragging in pan/zoom mode."""
3025-
for a, ind in self._xypress:
3026-
#safer to use the recorded button at the press than current button:
3027-
#multiple button can get pressed during motion...
3028-
a.drag_pan(self._button_pressed, event.key, event.x, event.y)
3029-
self.canvas.draw_idle()
3030-
30313032
def drag_zoom(self, event):
30323033
"""Callback for dragging in zoom mode."""
30333034
start_xy = self._zoom_info["start_xy"]
@@ -3093,6 +3094,17 @@ def release_zoom(self, event):
30933094
if release is not None:
30943095
release(event)
30953096

3097+
def push_current(self):
3098+
"""Push the current view limits and position onto the stack."""
3099+
self._nav_stack.push(
3100+
WeakKeyDictionary(
3101+
{ax: (ax._get_view(),
3102+
# Store both the original and modified positions.
3103+
(ax.get_position(True).frozen(),
3104+
ax.get_position().frozen()))
3105+
for ax in self.canvas.figure.axes}))
3106+
self.set_history_buttons()
3107+
30963108
@cbook.deprecated("3.3", alternative="toolbar.canvas.draw_idle()")
30973109
def draw(self):
30983110
"""Redraw the canvases, update the locators."""
@@ -3153,18 +3165,6 @@ def update(self):
31533165
self._nav_stack.clear()
31543166
self.set_history_buttons()
31553167

3156-
def zoom(self, *args):
3157-
"""Toggle zoom to rect mode."""
3158-
if self.mode == _Mode.ZOOM:
3159-
self.mode = _Mode.NONE
3160-
self.canvas.widgetlock.release(self)
3161-
else:
3162-
self.mode = _Mode.ZOOM
3163-
self.canvas.widgetlock(self)
3164-
for a in self.canvas.figure.get_axes():
3165-
a.set_navigate_mode(self.mode)
3166-
self.set_message(self.mode)
3167-
31683168
def set_history_buttons(self):
31693169
"""Enable or disable the back/forward button."""
31703170

0 commit comments

Comments
 (0)