Skip to content

Commit 9d06b1c

Browse files
authored
Merge pull request matplotlib#18493 from xordux/navigate_mode_18151
MEP22 toolmanager set axes navigate_mode
2 parents d1a9b21 + 427c2fb commit 9d06b1c

File tree

2 files changed

+26
-0
lines changed

2 files changed

+26
-0
lines changed

lib/matplotlib/backend_tools.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -750,6 +750,9 @@ def disable(self, event):
750750
def trigger(self, sender, event, data=None):
751751
self.toolmanager.get_tool(_views_positions).add_figure(self.figure)
752752
super().trigger(sender, event, data)
753+
new_navigate_mode = self.name.upper() if self.toggled else None
754+
for ax in self.figure.axes:
755+
ax.set_navigate_mode(new_navigate_mode)
753756

754757
def scroll_zoom(self, event):
755758
# https://gist.github.com/tacaswell/3144287

lib/matplotlib/tests/test_backend_bases.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
from matplotlib.backend_bases import (
44
FigureCanvasBase, LocationEvent, MouseButton, MouseEvent,
55
NavigationToolbar2, RendererBase)
6+
from matplotlib.backend_tools import (ToolZoom, ToolPan, RubberbandBase,
7+
ToolViewsPositions, _views_positions)
68
import matplotlib.pyplot as plt
79
import matplotlib.transforms as transforms
810
import matplotlib.path as path
@@ -157,3 +159,24 @@ def test_interactive_zoom():
157159

158160
tb.zoom()
159161
assert ax.get_navigate_mode() is None
162+
163+
164+
def test_toolbar_zoompan():
165+
plt.rcParams['toolbar'] = 'toolmanager'
166+
ax = plt.gca()
167+
assert ax.get_navigate_mode() is None
168+
expected_warning_regex = (r"The new Tool classes introduced in "
169+
r"v[0-9]*.[0-9]* are experimental")
170+
with pytest.warns(UserWarning, match=expected_warning_regex) as rec:
171+
ax.figure.canvas.manager.toolmanager.add_tool(name="zoom",
172+
tool=ToolZoom)
173+
ax.figure.canvas.manager.toolmanager.add_tool(name="pan",
174+
tool=ToolPan)
175+
ax.figure.canvas.manager.toolmanager.add_tool(name=_views_positions,
176+
tool=ToolViewsPositions)
177+
ax.figure.canvas.manager.toolmanager.add_tool(name='rubberband',
178+
tool=RubberbandBase)
179+
ax.figure.canvas.manager.toolmanager.trigger_tool('zoom')
180+
assert ax.get_navigate_mode() == "ZOOM"
181+
ax.figure.canvas.manager.toolmanager.trigger_tool('pan')
182+
assert ax.get_navigate_mode() == "PAN"

0 commit comments

Comments
 (0)