31
31
from gi .repository import Gio , GLib , GObject , Gtk , Gdk
32
32
from ._backend_gtk import (
33
33
_create_application , _shutdown_application ,
34
- backend_version , _BackendGTK ,
34
+ backend_version , _BackendGTK , _NavigationToolbar2GTK ,
35
35
TimerGTK as TimerGTK3 ,
36
+ ConfigureSubplotsGTK as ConfigureSubplotsGTK3 ,
37
+ RubberbandGTK as RubberbandGTK3 ,
36
38
)
37
39
38
40
@@ -291,7 +293,7 @@ class FigureManagerGTK3(FigureManagerBase):
291
293
num : int or str
292
294
The Figure number
293
295
toolbar : Gtk.Toolbar
294
- The Gtk.Toolbar
296
+ The toolbar
295
297
vbox : Gtk.VBox
296
298
The Gtk.VBox containing the canvas and toolbar
297
299
window : Gtk.Window
@@ -418,7 +420,7 @@ def resize(self, width, height):
418
420
self .window .resize (width , height )
419
421
420
422
421
- class NavigationToolbar2GTK3 (NavigationToolbar2 , Gtk .Toolbar ):
423
+ class NavigationToolbar2GTK3 (_NavigationToolbar2GTK , Gtk .Toolbar ):
422
424
def __init__ (self , canvas , window ):
423
425
self .win = window
424
426
GObject .GObject .__init__ (self )
@@ -435,21 +437,16 @@ def __init__(self, canvas, window):
435
437
str (cbook ._get_data_path ('images' ,
436
438
f'{ image_file } -symbolic.svg' ))),
437
439
Gtk .IconSize .LARGE_TOOLBAR )
438
- self ._gtk_ids [text ] = tbutton = (
440
+ self ._gtk_ids [text ] = button = (
439
441
Gtk .ToggleToolButton () if callback in ['zoom' , 'pan' ] else
440
442
Gtk .ToolButton ())
441
- tbutton .set_label (text )
442
- tbutton .set_icon_widget (image )
443
- self .insert (tbutton , - 1 )
443
+ button .set_label (text )
444
+ button .set_icon_widget (image )
444
445
# Save the handler id, so that we can block it as needed.
445
- tbutton ._signal_handler = tbutton .connect (
446
+ button ._signal_handler = button .connect (
446
447
'clicked' , getattr (self , callback ))
447
- tbutton .set_tooltip_text (tooltip_text )
448
-
449
- toolitem = Gtk .SeparatorToolItem ()
450
- self .insert (toolitem , - 1 )
451
- toolitem .set_draw (False )
452
- toolitem .set_expand (True )
448
+ button .set_tooltip_text (tooltip_text )
449
+ self .insert (button , - 1 )
453
450
454
451
# This filler item ensures the toolbar is always at least two text
455
452
# lines high. Otherwise the canvas gets redrawn as the mouse hovers
@@ -460,6 +457,7 @@ def __init__(self, canvas, window):
460
457
label = Gtk .Label ()
461
458
label .set_markup (
462
459
'<small>\N{NO-BREAK SPACE} \n \N{NO-BREAK SPACE} </small>' )
460
+ toolitem .set_expand (True ) # Push real message to the right.
463
461
toolitem .add (label )
464
462
465
463
toolitem = Gtk .ToolItem ()
@@ -471,35 +469,6 @@ def __init__(self, canvas, window):
471
469
472
470
NavigationToolbar2 .__init__ (self , canvas )
473
471
474
- def set_message (self , s ):
475
- escaped = GLib .markup_escape_text (s )
476
- self .message .set_markup (f'<small>{ escaped } </small>' )
477
-
478
- def draw_rubberband (self , event , x0 , y0 , x1 , y1 ):
479
- height = self .canvas .figure .bbox .height
480
- y1 = height - y1
481
- y0 = height - y0
482
- rect = [int (val ) for val in (x0 , y0 , x1 - x0 , y1 - y0 )]
483
- self .canvas ._draw_rubberband (rect )
484
-
485
- def remove_rubberband (self ):
486
- self .canvas ._draw_rubberband (None )
487
-
488
- def _update_buttons_checked (self ):
489
- for name , active in [("Pan" , "PAN" ), ("Zoom" , "ZOOM" )]:
490
- button = self ._gtk_ids .get (name )
491
- if button :
492
- with button .handler_block (button ._signal_handler ):
493
- button .set_active (self .mode .name == active )
494
-
495
- def pan (self , * args ):
496
- super ().pan (* args )
497
- self ._update_buttons_checked ()
498
-
499
- def zoom (self , * args ):
500
- super ().zoom (* args )
501
- self ._update_buttons_checked ()
502
-
503
472
def save_figure (self , * args ):
504
473
dialog = Gtk .FileChooserDialog (
505
474
title = "Save the figure" ,
@@ -544,14 +513,6 @@ def on_notify_filter(*args):
544
513
except Exception as e :
545
514
error_msg_gtk (str (e ), parent = self )
546
515
547
- def set_history_buttons (self ):
548
- can_backward = self ._nav_stack ._pos > 0
549
- can_forward = self ._nav_stack ._pos < len (self ._nav_stack ._elements ) - 1
550
- if 'Back' in self ._gtk_ids :
551
- self ._gtk_ids ['Back' ].set_sensitive (can_backward )
552
- if 'Forward' in self ._gtk_ids :
553
- self ._gtk_ids ['Forward' ].set_sensitive (can_forward )
554
-
555
516
556
517
class ToolbarGTK3 (ToolContainerBase , Gtk .Box ):
557
518
_icon_extension = '-symbolic.svg'
@@ -569,26 +530,26 @@ def __init__(self, toolmanager):
569
530
def add_toolitem (self , name , group , position , image_file , description ,
570
531
toggle ):
571
532
if toggle :
572
- tbutton = Gtk .ToggleToolButton ()
533
+ button = Gtk .ToggleToolButton ()
573
534
else :
574
- tbutton = Gtk .ToolButton ()
575
- tbutton .set_label (name )
535
+ button = Gtk .ToolButton ()
536
+ button .set_label (name )
576
537
577
538
if image_file is not None :
578
539
image = Gtk .Image .new_from_gicon (
579
540
Gio .Icon .new_for_string (image_file ),
580
541
Gtk .IconSize .LARGE_TOOLBAR )
581
- tbutton .set_icon_widget (image )
542
+ button .set_icon_widget (image )
582
543
583
544
if position is None :
584
545
position = - 1
585
546
586
- self ._add_button (tbutton , group , position )
587
- signal = tbutton .connect ('clicked' , self ._call_tool , name )
588
- tbutton .set_tooltip_text (description )
589
- tbutton .show_all ()
547
+ self ._add_button (button , group , position )
548
+ signal = button .connect ('clicked' , self ._call_tool , name )
549
+ button .set_tooltip_text (description )
550
+ button .show_all ()
590
551
self ._toolitems .setdefault (name , [])
591
- self ._toolitems [name ].append ((tbutton , signal ))
552
+ self ._toolitems [name ].append ((button , signal ))
592
553
593
554
def _add_button (self , button , group , position ):
594
555
if group not in self ._groups :
@@ -633,16 +594,6 @@ def set_message(self, s):
633
594
self ._message .set_label (s )
634
595
635
596
636
- class RubberbandGTK3 (backend_tools .RubberbandBase ):
637
- def draw_rubberband (self , x0 , y0 , x1 , y1 ):
638
- NavigationToolbar2GTK3 .draw_rubberband (
639
- self ._make_classic_style_pseudo_toolbar (), None , x0 , y0 , x1 , y1 )
640
-
641
- def remove_rubberband (self ):
642
- NavigationToolbar2GTK3 .remove_rubberband (
643
- self ._make_classic_style_pseudo_toolbar ())
644
-
645
-
646
597
class SaveFigureGTK3 (backend_tools .SaveFigureBase ):
647
598
def trigger (self , * args , ** kwargs ):
648
599
@@ -659,15 +610,6 @@ def set_cursor(self, cursor):
659
610
self ._make_classic_style_pseudo_toolbar (), cursor )
660
611
661
612
662
- class ConfigureSubplotsGTK3 (backend_tools .ConfigureSubplotsBase , Gtk .Window ):
663
- def _get_canvas (self , fig ):
664
- return self .canvas .__class__ (fig )
665
-
666
- def trigger (self , * args ):
667
- NavigationToolbar2GTK3 .configure_subplots (
668
- self ._make_classic_style_pseudo_toolbar (), None )
669
-
670
-
671
613
class HelpGTK3 (backend_tools .ToolHelpBase ):
672
614
def _normalize_shortcut (self , key ):
673
615
"""
0 commit comments