Skip to content

Commit 6739ee0

Browse files
committed
removing persistent tools
1 parent ffa65d6 commit 6739ee0

File tree

5 files changed

+110
-142
lines changed

5 files changed

+110
-142
lines changed

examples/user_interfaces/navigation.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,6 @@ def trigger(self, event):
5454
fig.canvas.manager.navigation.add_tool('copy', CopyToolGTK3)
5555

5656
# Just for fun, lets remove the back button
57-
fig.canvas.manager.navigation.remove_tool('Back')
57+
# fig.canvas.manager.navigation.remove_tool('Back')
5858

5959
plt.show()

lib/matplotlib/backend_bases.py

Lines changed: 14 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -3254,7 +3254,6 @@ def __init__(self, manager):
32543254

32553255
self._tools = {}
32563256
self._keys = {}
3257-
self._instances = {}
32583257
self._toggled = None
32593258

32603259
# to process keypress event
@@ -3273,15 +3272,6 @@ def active_toggle(self):
32733272

32743273
return self._toggled
32753274

3276-
@property
3277-
def instances(self):
3278-
"""Active tools instances
3279-
3280-
**dictionary** : Contains the active instances that are registered
3281-
"""
3282-
3283-
return self._instances
3284-
32853275
def get_tool_keymap(self, name):
32863276
"""Get the keymap associated with a tool
32873277
@@ -3323,28 +3313,19 @@ def set_tool_keymap(self, name, *keys):
33233313
self._keys[k] = name
33243314

33253315
def unregister(self, name):
3326-
"""Unregister the tool from the active instances
3316+
"""Unregister the tool from Navigation
33273317
33283318
Parameters
33293319
----------
33303320
name : string
33313321
Name of the tool to unregister
3332-
3333-
Notes
3334-
-----
3335-
This method is used by `PersistentTools` to remove the reference kept
3336-
by `Navigation`.
3337-
3338-
It is usually called by the `unregister` method
3339-
3340-
If called, next time the `Tool` is used it will be reinstantiated
3341-
instead of using the existing instance.
33423322
"""
33433323

33443324
if self._toggled == name:
33453325
self._handle_toggle(name, from_toolbar=False)
3346-
if name in self._instances:
3347-
del self._instances[name]
3326+
if name in self._tools:
3327+
self._tools[name].destroy()
3328+
del self._tools[name]
33483329

33493330
def remove_tool(self, name):
33503331
"""Remove tool from the `Navigation`
@@ -3356,7 +3337,7 @@ def remove_tool(self, name):
33563337
"""
33573338

33583339
self.unregister(name)
3359-
del self._tools[name]
3340+
33603341
keys = [k for k, v in six.iteritems(self._keys) if v == name]
33613342
for k in keys:
33623343
del self._keys[k]
@@ -3403,7 +3384,7 @@ def add_tool(self, name, tool, position=None):
34033384
'not added')
34043385
return
34053386

3406-
self._tools[name] = tool_cls
3387+
self._tools[name] = tool_cls(self.canvas.figure, name)
34073388
if tool_cls.keymap is not None:
34083389
self.set_tool_keymap(name, tool_cls.keymap)
34093390

@@ -3436,27 +3417,23 @@ def _get_cls_to_instantiate(self, callback_class):
34363417

34373418
return callback_class
34383419

3439-
def trigger_tool(self, name):
3420+
def trigger_tool(self, name, event=None):
34403421
"""Trigger on a tool
34413422
34423423
Method to programatically "click" on Tools
34433424
"""
34443425

3445-
self._trigger_tool(name, None, False)
3426+
self._trigger_tool(name, event, False)
34463427

34473428
def _trigger_tool(self, name, event, from_toolbar):
34483429
if name not in self._tools:
34493430
raise AttributeError('%s not in Tools' % name)
34503431

34513432
tool = self._tools[name]
3452-
if issubclass(tool, tools.ToolToggleBase):
3433+
if isinstance(tool, tools.ToolToggleBase):
34533434
self._handle_toggle(name, event=event, from_toolbar=from_toolbar)
3454-
elif issubclass(tool, tools.ToolPersistentBase):
3455-
instance = self._get_instance(name)
3456-
instance.trigger(event)
34573435
else:
3458-
# Non persistent tools, are instantiated and forgotten
3459-
tool(self.canvas.figure, event)
3436+
tool.trigger(event)
34603437

34613438
def _key_press(self, event):
34623439
if event.key is None or self.keypresslock.locked():
@@ -3467,14 +3444,6 @@ def _key_press(self, event):
34673444
return
34683445
self._trigger_tool(name, event, False)
34693446

3470-
def _get_instance(self, name):
3471-
if name not in self._instances:
3472-
instance = self._tools[name](self.canvas.figure, name)
3473-
# register instance
3474-
self._instances[name] = instance
3475-
3476-
return self._instances[name]
3477-
34783447
def _toolbar_callback(self, name):
34793448
"""Callback for the `Toolbar`
34803449
@@ -3495,7 +3464,7 @@ def _handle_toggle(self, name, event=None, from_toolbar=False):
34953464
if not from_toolbar and self.toolbar:
34963465
self.toolbar._toggle(name, False)
34973466

3498-
instance = self._get_instance(name)
3467+
tool = self._tools[name]
34993468
if self._toggled is None:
35003469
# first trigger of tool
35013470
self._toggled = name
@@ -3507,10 +3476,10 @@ def _handle_toggle(self, name, event=None, from_toolbar=False):
35073476
if self.toolbar:
35083477
# untoggle the previous toggled tool
35093478
self.toolbar._toggle(self._toggled, False)
3510-
self._get_instance(self._toggled).trigger(event)
3479+
self._tools[self._toggled].trigger(event)
35113480
self._toggled = name
35123481

3513-
instance.trigger(event)
3482+
tool.trigger(event)
35143483

35153484
for a in self.canvas.figure.get_axes():
35163485
a.set_navigate_mode(self._toggled)
@@ -3534,7 +3503,7 @@ def _mouse_move(self, event):
35343503
self._last_cursor = self._default_cursor
35353504
else:
35363505
if self._toggled:
3537-
cursor = self._instances[self._toggled].cursor
3506+
cursor = self._tools[self._toggled].cursor
35383507
if cursor and self._last_cursor != cursor:
35393508
self.set_cursor(cursor)
35403509
self._last_cursor = cursor

0 commit comments

Comments
 (0)