2
2
Abstract base classes define the primitives for Tools.
3
3
These tools are used by `matplotlib.backend_managers.ToolManager`
4
4
5
- :class: `ToolBase`
6
- Simple stateless tool
5
+ `ToolBase`
6
+ Simple stateless tool.
7
7
8
- :class:`ToolToggleBase`
9
- Tool that has two states, only one Toggle tool can be
10
- active at any given time for the same
11
- `matplotlib.backend_managers.ToolManager`
8
+ `ToolToggleBase`
9
+ Tool that has two states, only one Toggle tool can be active at any given time for
10
+ the same `matplotlib.backend_managers.ToolManager`.
12
11
"""
13
12
14
13
import enum
22
21
import numpy as np
23
22
24
23
import matplotlib as mpl
25
- from matplotlib ._pylab_helpers import Gcf
26
24
from matplotlib import _api , cbook
27
25
28
26
@@ -358,101 +356,66 @@ def remove_rubberband(self):
358
356
pass
359
357
360
358
361
- class ToolQuit (ToolBase ):
359
+ class _ToolForwardingToClassicToolbar (ToolBase ):
360
+ _rc_entry = '' # Must be set by subclass.
361
+ default_keymap = property (lambda self : mpl .rcParams [self ._rc_entry ])
362
+
363
+ def trigger (self , sender , event , data = None ):
364
+ sentinel = str (uuid .uuid4 ())
365
+ # Trigger classic toolbar implementation by temporarily setting the keymap to a
366
+ # unique key and sending an appropriate event.
367
+ with cbook ._setattr_cm (event , key = sentinel ), \
368
+ mpl .rc_context ({self ._rc_entry : sentinel }):
369
+ mpl .backend_bases .key_press_handler (event , self .figure .canvas )
370
+
371
+
372
+ class ToolQuit (_ToolForwardingToClassicToolbar ):
362
373
"""Tool to call the figure manager destroy method."""
363
374
364
375
description = 'Quit the figure'
365
- default_keymap = property (lambda self : mpl .rcParams ['keymap.quit' ])
366
-
367
- def trigger (self , sender , event , data = None ):
368
- Gcf .destroy_fig (self .figure )
376
+ _rc_entry = 'keymap.quit'
369
377
370
378
371
- class ToolQuitAll (ToolBase ):
379
+ class ToolQuitAll (_ToolForwardingToClassicToolbar ):
372
380
"""Tool to call the figure manager destroy method."""
373
381
374
382
description = 'Quit all figures'
375
- default_keymap = property (lambda self : mpl .rcParams ['keymap.quit_all' ])
376
-
377
- def trigger (self , sender , event , data = None ):
378
- Gcf .destroy_all ()
383
+ _rc_entry = 'keymap.quit_all'
379
384
380
385
381
- class ToolGrid (ToolBase ):
386
+ class ToolGrid (_ToolForwardingToClassicToolbar ):
382
387
"""Tool to toggle the major grids of the figure."""
383
388
384
389
description = 'Toggle major grids'
385
- default_keymap = property (lambda self : mpl .rcParams ['keymap.grid' ])
386
-
387
- def trigger (self , sender , event , data = None ):
388
- sentinel = str (uuid .uuid4 ())
389
- # Trigger grid switching by temporarily setting :rc:`keymap.grid`
390
- # to a unique key and sending an appropriate event.
391
- with cbook ._setattr_cm (event , key = sentinel ), \
392
- mpl .rc_context ({'keymap.grid' : sentinel }):
393
- mpl .backend_bases .key_press_handler (event , self .figure .canvas )
390
+ _rc_entry = 'keymap.grid'
394
391
395
392
396
- class ToolMinorGrid (ToolBase ):
393
+ class ToolMinorGrid (_ToolForwardingToClassicToolbar ):
397
394
"""Tool to toggle the major and minor grids of the figure."""
398
395
399
396
description = 'Toggle major and minor grids'
400
- default_keymap = property (lambda self : mpl .rcParams ['keymap.grid_minor' ])
401
-
402
- def trigger (self , sender , event , data = None ):
403
- sentinel = str (uuid .uuid4 ())
404
- # Trigger grid switching by temporarily setting :rc:`keymap.grid_minor`
405
- # to a unique key and sending an appropriate event.
406
- with cbook ._setattr_cm (event , key = sentinel ), \
407
- mpl .rc_context ({'keymap.grid_minor' : sentinel }):
408
- mpl .backend_bases .key_press_handler (event , self .figure .canvas )
397
+ _rc_entry = 'keymap.grid_minor'
409
398
410
399
411
- class ToolFullScreen (ToolBase ):
400
+ class ToolFullScreen (_ToolForwardingToClassicToolbar ):
412
401
"""Tool to toggle full screen."""
413
402
414
403
description = 'Toggle fullscreen mode'
415
- default_keymap = property ( lambda self : mpl . rcParams [ 'keymap.fullscreen' ])
404
+ _rc_entry = 'keymap.fullscreen'
416
405
417
- def trigger (self , sender , event , data = None ):
418
- self .figure .canvas .manager .full_screen_toggle ()
419
-
420
-
421
- class AxisScaleBase (ToolToggleBase ):
422
- """Base Tool to toggle between linear and logarithmic."""
423
406
424
- def trigger (self , sender , event , data = None ):
425
- if event .inaxes is None :
426
- return
427
- super ().trigger (sender , event , data )
428
-
429
- def enable (self , event = None ):
430
- self .set_scale (event .inaxes , 'log' )
431
- self .figure .canvas .draw_idle ()
407
+ class ToolXScale (_ToolForwardingToClassicToolbar ):
408
+ """Tool to toggle between linear and logarithmic scales on the X axis."""
432
409
433
- def disable (self , event = None ):
434
- self .set_scale (event .inaxes , 'linear' )
435
- self .figure .canvas .draw_idle ()
410
+ description = 'Toggle scale X axis'
411
+ _rc_entry = 'keymap.xscale'
436
412
437
413
438
- class ToolYScale (AxisScaleBase ):
414
+ class ToolYScale (_ToolForwardingToClassicToolbar ):
439
415
"""Tool to toggle between linear and logarithmic scales on the Y axis."""
440
416
441
417
description = 'Toggle scale Y axis'
442
- default_keymap = property (lambda self : mpl .rcParams ['keymap.yscale' ])
443
-
444
- def set_scale (self , ax , scale ):
445
- ax .set_yscale (scale )
446
-
447
-
448
- class ToolXScale (AxisScaleBase ):
449
- """Tool to toggle between linear and logarithmic scales on the X axis."""
450
-
451
- description = 'Toggle scale X axis'
452
- default_keymap = property (lambda self : mpl .rcParams ['keymap.xscale' ])
453
-
454
- def set_scale (self , ax , scale ):
455
- ax .set_xscale (scale )
418
+ _rc_entry = 'keymap.yscale'
456
419
457
420
458
421
class ToolViewsPositions (ToolBase ):
0 commit comments