16
16
import re
17
17
import time
18
18
from types import SimpleNamespace
19
+ import uuid
19
20
from weakref import WeakKeyDictionary
20
21
21
22
import numpy as np
@@ -440,79 +441,34 @@ class ToolEnableNavigation(_ToolEnableNavigation):
440
441
pass
441
442
442
443
443
- class _ToolGridBase (ToolBase ):
444
- """Common functionality between ToolGrid and ToolMinorGrid."""
445
-
446
- _cycle = [(False , False ), (True , False ), (True , True ), (False , True )]
447
-
448
- def trigger (self , sender , event , data = None ):
449
- ax = event .inaxes
450
- if ax is None :
451
- return
452
- try :
453
- x_state , x_which , y_state , y_which = self ._get_next_grid_states (ax )
454
- except ValueError :
455
- pass
456
- else :
457
- ax .grid (x_state , which = x_which , axis = "x" )
458
- ax .grid (y_state , which = y_which , axis = "y" )
459
- ax .figure .canvas .draw_idle ()
460
-
461
- @staticmethod
462
- def _get_uniform_grid_state (ticks ):
463
- """
464
- Check whether all grid lines are in the same visibility state.
465
-
466
- Returns True/False if all grid lines are on or off, None if they are
467
- not all in the same state.
468
- """
469
- if all (tick .gridline .get_visible () for tick in ticks ):
470
- return True
471
- elif not any (tick .gridline .get_visible () for tick in ticks ):
472
- return False
473
- else :
474
- return None
475
-
476
-
477
- class ToolGrid (_ToolGridBase ):
444
+ class ToolGrid (ToolBase ):
478
445
"""Tool to toggle the major grids of the figure."""
479
446
480
447
description = 'Toggle major grids'
481
448
default_keymap = mpl .rcParams ['keymap.grid' ]
482
449
483
- def _get_next_grid_states (self , ax ):
484
- if None in map (self ._get_uniform_grid_state ,
485
- [ax .xaxis .minorTicks , ax .yaxis .minorTicks ]):
486
- # Bail out if minor grids are not in a uniform state.
487
- raise ValueError
488
- x_state , y_state = map (self ._get_uniform_grid_state ,
489
- [ax .xaxis .majorTicks , ax .yaxis .majorTicks ])
490
- cycle = self ._cycle
491
- # Bail out (via ValueError) if major grids are not in a uniform state.
492
- x_state , y_state = (
493
- cycle [(cycle .index ((x_state , y_state )) + 1 ) % len (cycle )])
494
- return (x_state , "major" if x_state else "both" ,
495
- y_state , "major" if y_state else "both" )
496
-
497
-
498
- class ToolMinorGrid (_ToolGridBase ):
450
+ def trigger (self , sender , event , data = None ):
451
+ sentinel = str (uuid .uuid4 ())
452
+ # Trigger grid switching by temporarily setting :rc:`keymap.grid`
453
+ # to a unique key and sending an appropriate event.
454
+ with cbook ._setattr_cm (event , key = sentinel ), \
455
+ mpl .rc_context ({'keymap.grid' : sentinel }):
456
+ mpl .backend_bases .key_press_handler (event , self .figure .canvas )
457
+
458
+
459
+ class ToolMinorGrid (ToolBase ):
499
460
"""Tool to toggle the major and minor grids of the figure."""
500
461
501
462
description = 'Toggle major and minor grids'
502
463
default_keymap = mpl .rcParams ['keymap.grid_minor' ]
503
464
504
- def _get_next_grid_states (self , ax ):
505
- if None in map (self ._get_uniform_grid_state ,
506
- [ax .xaxis .majorTicks , ax .yaxis .majorTicks ]):
507
- # Bail out if major grids are not in a uniform state.
508
- raise ValueError
509
- x_state , y_state = map (self ._get_uniform_grid_state ,
510
- [ax .xaxis .minorTicks , ax .yaxis .minorTicks ])
511
- cycle = self ._cycle
512
- # Bail out (via ValueError) if minor grids are not in a uniform state.
513
- x_state , y_state = (
514
- cycle [(cycle .index ((x_state , y_state )) + 1 ) % len (cycle )])
515
- return x_state , "both" , y_state , "both"
465
+ def trigger (self , sender , event , data = None ):
466
+ sentinel = str (uuid .uuid4 ())
467
+ # Trigger grid switching by temporarily setting :rc:`keymap.grid_minor`
468
+ # to a unique key and sending an appropriate event.
469
+ with cbook ._setattr_cm (event , key = sentinel ), \
470
+ mpl .rc_context ({'keymap.grid_minor' : sentinel }):
471
+ mpl .backend_bases .key_press_handler (event , self .figure .canvas )
516
472
517
473
518
474
class ToolFullScreen (ToolToggleBase ):
0 commit comments