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
@@ -352,101 +350,66 @@ def remove_rubberband(self):
352
350
pass
353
351
354
352
355
- class ToolQuit (ToolBase ):
353
+ class _ToolForwardingToClassicToolbar (ToolBase ):
354
+ _rc_entry = '' # Must be set by subclass.
355
+ default_keymap = property (lambda self : mpl .rcParams [self ._rc_entry ])
356
+
357
+ def trigger (self , sender , event , data = None ):
358
+ sentinel = str (uuid .uuid4 ())
359
+ # Trigger classic key press event handling by temporarily setting the keymap to
360
+ # a unique key and sending an event with that key.
361
+ with (cbook ._setattr_cm (event , key = sentinel ),
362
+ mpl .rc_context ({self ._rc_entry : sentinel })):
363
+ mpl .backend_bases .key_press_handler (event , self .figure .canvas )
364
+
365
+
366
+ class ToolQuit (_ToolForwardingToClassicToolbar ):
356
367
"""Tool to call the figure manager destroy method."""
357
368
358
369
description = 'Quit the figure'
359
- default_keymap = property (lambda self : mpl .rcParams ['keymap.quit' ])
360
-
361
- def trigger (self , sender , event , data = None ):
362
- Gcf .destroy_fig (self .figure )
370
+ _rc_entry = 'keymap.quit'
363
371
364
372
365
- class ToolQuitAll (ToolBase ):
373
+ class ToolQuitAll (_ToolForwardingToClassicToolbar ):
366
374
"""Tool to call the figure manager destroy method."""
367
375
368
376
description = 'Quit all figures'
369
- default_keymap = property (lambda self : mpl .rcParams ['keymap.quit_all' ])
370
-
371
- def trigger (self , sender , event , data = None ):
372
- Gcf .destroy_all ()
377
+ _rc_entry = 'keymap.quit_all'
373
378
374
379
375
- class ToolGrid (ToolBase ):
380
+ class ToolGrid (_ToolForwardingToClassicToolbar ):
376
381
"""Tool to toggle the major grids of the figure."""
377
382
378
383
description = 'Toggle major grids'
379
- default_keymap = property (lambda self : mpl .rcParams ['keymap.grid' ])
380
-
381
- def trigger (self , sender , event , data = None ):
382
- sentinel = str (uuid .uuid4 ())
383
- # Trigger grid switching by temporarily setting :rc:`keymap.grid`
384
- # to a unique key and sending an appropriate event.
385
- with (cbook ._setattr_cm (event , key = sentinel ),
386
- mpl .rc_context ({'keymap.grid' : sentinel })):
387
- mpl .backend_bases .key_press_handler (event , self .figure .canvas )
384
+ _rc_entry = 'keymap.grid'
388
385
389
386
390
- class ToolMinorGrid (ToolBase ):
387
+ class ToolMinorGrid (_ToolForwardingToClassicToolbar ):
391
388
"""Tool to toggle the major and minor grids of the figure."""
392
389
393
390
description = 'Toggle major and minor grids'
394
- default_keymap = property (lambda self : mpl .rcParams ['keymap.grid_minor' ])
395
-
396
- def trigger (self , sender , event , data = None ):
397
- sentinel = str (uuid .uuid4 ())
398
- # Trigger grid switching by temporarily setting :rc:`keymap.grid_minor`
399
- # to a unique key and sending an appropriate event.
400
- with (cbook ._setattr_cm (event , key = sentinel ),
401
- mpl .rc_context ({'keymap.grid_minor' : sentinel })):
402
- mpl .backend_bases .key_press_handler (event , self .figure .canvas )
391
+ _rc_entry = 'keymap.grid_minor'
403
392
404
393
405
- class ToolFullScreen (ToolBase ):
394
+ class ToolFullScreen (_ToolForwardingToClassicToolbar ):
406
395
"""Tool to toggle full screen."""
407
396
408
397
description = 'Toggle fullscreen mode'
409
- default_keymap = property ( lambda self : mpl . rcParams [ 'keymap.fullscreen' ])
398
+ _rc_entry = 'keymap.fullscreen'
410
399
411
- def trigger (self , sender , event , data = None ):
412
- self .figure .canvas .manager .full_screen_toggle ()
413
-
414
-
415
- class AxisScaleBase (ToolToggleBase ):
416
- """Base Tool to toggle between linear and logarithmic."""
417
400
418
- def trigger (self , sender , event , data = None ):
419
- if event .inaxes is None :
420
- return
421
- super ().trigger (sender , event , data )
422
-
423
- def enable (self , event = None ):
424
- self .set_scale (event .inaxes , 'log' )
425
- self .figure .canvas .draw_idle ()
401
+ class ToolXScale (_ToolForwardingToClassicToolbar ):
402
+ """Tool to toggle between linear and logarithmic scales on the X axis."""
426
403
427
- def disable (self , event = None ):
428
- self .set_scale (event .inaxes , 'linear' )
429
- self .figure .canvas .draw_idle ()
404
+ description = 'Toggle scale X axis'
405
+ _rc_entry = 'keymap.xscale'
430
406
431
407
432
- class ToolYScale (AxisScaleBase ):
408
+ class ToolYScale (_ToolForwardingToClassicToolbar ):
433
409
"""Tool to toggle between linear and logarithmic scales on the Y axis."""
434
410
435
411
description = 'Toggle scale Y axis'
436
- default_keymap = property (lambda self : mpl .rcParams ['keymap.yscale' ])
437
-
438
- def set_scale (self , ax , scale ):
439
- ax .set_yscale (scale )
440
-
441
-
442
- class ToolXScale (AxisScaleBase ):
443
- """Tool to toggle between linear and logarithmic scales on the X axis."""
444
-
445
- description = 'Toggle scale X axis'
446
- default_keymap = property (lambda self : mpl .rcParams ['keymap.xscale' ])
447
-
448
- def set_scale (self , ax , scale ):
449
- ax .set_xscale (scale )
412
+ _rc_entry = 'keymap.yscale'
450
413
451
414
452
415
class ToolViewsPositions (ToolBase ):
0 commit comments