o
    iF                     @   s  d dl Z d dlZd dlZd dlmZ d dlZd dlZd dlmZm	Z	 d dl
mZ d dlmZmZmZmZmZmZmZmZ d dlmZ d dlmZ zd dlZW n ey_ Z zededZ[ww zed	d
 W n eyw Z zeedZ[ww d dlm Z m!Z!m"Z"m#Z#m$Z$ e%e&Z'de#( e#) e#* f Z+z1ej,e$j-.e$j/j0ej1e$j-.e$j/j2ej3e$j-.e$j/j4ej5e$j-.e$j/j6ej7e$j-.e$j/j8iZ9W n e:y Z; zee;e;dZ;[;ww G dd deZ<G dd de#j=eZ>G dd deZ?G dd dee#j@ZAG dd dee#jBZCe	DdG dd dee#jEZFG dd dejGZHG dd dejIZJG dd dejKZLG d d! d!ejMe#jNZOG d"d# d#ejPZQG d$d% d%ejRZSejTd&krYd'ZUnd(ZUeVe	Wd)eUZXd.d*d+ZYeJe_ZeOe_[eLe_\eHe_]eQe_^eSe__eCZ@ej`G d,d- d-eZadS )/    N)Path)backend_toolscbook)Gcf)_BackendFigureCanvasBaseFigureManagerBaseNavigationToolbar2StatusbarBase	TimerBaseToolContainerBasecursors)Figure)SubplotToolz#The GTK3 backends require PyGObjectGtkz3.0)GioGLibGObjectr   Gdkz%s.%s.%sc                   @   s8   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d ZdS )	TimerGTK3z1Subclass of `.TimerBase` using GTK3 timer events.c                 O   s"   d | _ tj| g|R i | d S N)_timerr   __init__selfargskwargs r   [/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/matplotlib/backends/backend_gtk3.pyr   7   s   zTimerGTK3.__init__c                 C   s   |    t| j| j| _d S r   )_timer_stopr   timeout_add	_interval	_on_timerr   r   r   r   r   _timer_start;   s   zTimerGTK3._timer_startc                 C   s$   | j d urt| j  d | _ d S d S r   )r   r   source_remover#   r   r   r   r   A   s   

zTimerGTK3._timer_stopc                 C   s"   | j d ur|   |   d S d S r   )r   r   r$   r#   r   r   r   _timer_set_intervalF   s   
zTimerGTK3._timer_set_intervalc                 C   s$   t |  | jr| jsdS d | _dS )NTF)r   r"   	callbacks_singler   r#   r   r   r   r"   L   s
   
zTimerGTK3._on_timerN)	__name__
__module____qualname____doc__r   r$   r   r&   r"   r   r   r   r   r   4   s    r   c                       s  e Zd ZdZeZi ddddddddd	dd
ddddddddddddddddddddddd i d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPd4dQZejj	ejj
B ejjB ejjB ejjB ejjB ejjB ejjB ejjB ejjB Z fdRdSZejdTdUdVdWdX ZdYdZ Zd[d\ Zd]d^ Zd_d` Zdadb Zdcdd Zdedf Zdgdh Zdidj Z dkdl Z!dmdn Z"dodp Z#dqdr Z$dsdt Z%dudv Z&dwdx Z'dydz Z(d{d| Z)  Z*S )}FigureCanvasGTK3gtk3i  controli  shifti  alti  i  i  iQ  leftiR  upiS  rightiT  downi  escapei  f1i  f2i  f3i  f4i  f5i  f6i  f7i  f8i  f9i  f10i  f11i  f12i  scroll_locki  breaki  	backspacei  enteric  inserti  deleteiP  homeiW  endiU  pageupiV  pagedowni  0123456789+-*/dec)i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  c                    s  t | | tj|  d| _d | _d | _| d| j | d| j | d| j	 | d| j
 | d| j | d| j | d| j | d| j | d	| j | d
| j | d| j | d| j | | jj | d | d tj j| dddd}|r|  d S d S )Nr   scroll_eventbutton_press_eventbutton_release_eventconfigure_eventdrawkey_press_eventkey_release_eventmotion_notify_eventleave_notify_evententer_notify_eventsize_allocateT3.3zPlease initialize the renderer, if needed, in the subclass' __init__; a fully empty _renderer_init implementation may be kept for compatibility with earlier versions of Matplotlib.)allow_emptysinceaddendum)r   r   r   _idle_draw_id_lastCursor_rubberband_rectconnectr\   r]   r^   r_   on_draw_event
_post_drawra   rb   rc   rd   re   rf   
set_events	__class__
event_maskset_double_bufferedset_can_focusr   _deprecate_method_override_renderer_init)r   figurerenderer_initrr   r   r   r      s6   



zFigureCanvasGTK3.__init__rg   r   )alternativec                 C      d S r   r   r#   r   r   r   rw         zFigureCanvasGTK3._renderer_initc                 C   s   |    d S r   )close_eventr#   r   r   r   destroy   s   zFigureCanvasGTK3.destroyc                 C   sD   |j }|  j|j }|jtjjkrdnd}tj	| ||||d dS )N   guiEventF)
xget_allocationheighty	directionr   ScrollDirectionUPr   r\   )r   widgeteventr   r   stepr   r   r   r\      s
   zFigureCanvasGTK3.scroll_eventc                 C   0   |j }|  j|j }tj| |||j|d dS Nr   F)r   r   r   r   r   r]   buttonr   r   r   r   r   r   r   r   r]         z#FigureCanvasGTK3.button_press_eventc                 C   r   r   )r   r   r   r   r   r^   r   r   r   r   r   r^      r   z%FigureCanvasGTK3.button_release_eventc                 C      |  |}tj| ||d dS Nr   T)_get_keyr   ra   r   r   r   keyr   r   r   ra         
z FigureCanvasGTK3.key_press_eventc                 C   r   r   )r   r   rb   r   r   r   r   rb      r   z"FigureCanvasGTK3.key_release_eventc                 C   sL   |j r|j \}}}}n|j|j}}|  j| }tj| |||d dS r   )	is_hintwindowget_pointerr   r   r   r   r   rc   )r   r   r   tr   r   stater   r   r   rc      s   z$FigureCanvasGTK3.motion_notify_eventc                 C   s   t | | d S r   )r   rd   )r   r   r   r   r   r   rd         z#FigureCanvasGTK3.leave_notify_eventc                 C   s.   |j }|  j|j }tj| |||fd d S )N)r   xy)r   r   r   r   r   re   r   r   r   r   re      s   z#FigureCanvasGTK3.enter_notify_eventc                 C   sD   | j j}|j| }|j| }| j j||dd t|  |   d S )NFforward)rx   dpiwidthr   set_size_inchesr   resize_event	draw_idle)r   r   
allocationdpivalwinchhinchr   r   r   rf      s   


zFigureCanvasGTK3.size_allocatec                 C   s~   |j | jv r| j|j  }n|j dk rt|j }nd }tjjdftjjdftjjdfg}|D ]\}}|j|@ r<d	||}q-|S )N   superr1   ctrlz{0}+{1})
keyvalkeyvaldchrr   ModifierType	MOD4_MASK	MOD1_MASKCONTROL_MASKr   format)r   r   r   	modifierskey_maskprefixr   r   r   r     s   




zFigureCanvasGTK3._get_keyc                 C   sZ   | dd u r	d S |j|j}}|dk s|dk rd S | jj}| jj|| || dd dS )Nr      Fr   )get_propertyr   r   rx   r   r   )r   r   r   whr   r   r   r   r_     s   z FigureCanvasGTK3.configure_eventc                 C   s   || _ |   d S r   )rm   
queue_draw)r   rectr   r   r   _draw_rubberband#  s   z!FigureCanvasGTK3._draw_rubberbandc           	      C   s   | j d u rd S | j \}}}}|| }|| }||| ||| ||| ||| ||| ||| ||| ||| |d |d |dd |ddd |  |dd |ddd |  d S )Nr   )r   r   r   r   )	rm   move_toline_toset_antialiasset_line_widthset_dashset_source_rgbstroke_preservestroke)	r   r   ctxx0y0r   r   x1y1r   r   r   rp   (  s*   


zFigureCanvasGTK3._post_drawc                 C   r|   r   r   )r   r   r   r   r   r   ro   E  r}   zFigureCanvasGTK3.on_draw_eventc                 C   s   |   r
|   d S d S r   )is_drawabler   r#   r   r   r   r`   I  s   zFigureCanvasGTK3.drawc                    s*    j dkrd S  fdd}t| _ d S )Nr   c                     s   z
    W d _dS d _w )Nr   F)r`   rk   r   r#   r   r   	idle_drawR  s
   
z-FigureCanvasGTK3.draw_idle.<locals>.idle_draw)rk   r   idle_add)r   r   r   r#   r   r   N  s   
zFigureCanvasGTK3.draw_idlec                 C   s4   t   t rt  t st   t   d S r   )r   threads_enterr   events_pendingmain_iterationflushthreads_leaver#   r   r   r   flush_eventsZ  s   zFigureCanvasGTK3.flush_events)+r)   r*   r+   required_interactive_frameworkr   
_timer_clsr   r   	EventMaskBUTTON_PRESS_MASKBUTTON_RELEASE_MASKEXPOSURE_MASKKEY_PRESS_MASKKEY_RELEASE_MASKENTER_NOTIFY_MASKLEAVE_NOTIFY_MASKPOINTER_MOTION_MASKPOINTER_MOTION_HINT_MASKSCROLL_MASKrs   r   r   
deprecatedrw   r   r\   r]   r^   ra   rb   rc   rd   re   rf   r   r_   r   rp   ro   r`   r   r   __classcell__r   r   rz   r   r-   X   s    	
 !"5	#
r-   c                   @   sT   e Zd ZdZdd Zdd Zdd Zdd	 Zd
Zdd Z	dd Z
dd Zdd ZdS )FigureManagerGTK3a=  
    Attributes
    ----------
    canvas : `FigureCanvas`
        The FigureCanvas instance
    num : int or str
        The Figure number
    toolbar : Gtk.Toolbar
        The Gtk.Toolbar
    vbox : Gtk.VBox
        The Gtk.VBox containing the canvas and toolbar
    window : Gtk.Window
        The Gtk.Window

    c                    s  t  || t  _ jdd  d|  z jt W n t	y5   t
dt d  Y nw t  _ jdtjj  j j  j   j   j jddd t jjjj}t jjjj}   _ fd	d
} jrt  j  jrt! j  jd ur j  || j7 } j"|| d _# j$d fdd  j$d fdd t%& rˈ j   j'   j(  d S )N
matplotlib
Matplotlibz	Figure %dz"Could not load matplotlib icon: %sr   orientationTr   c                    s(   |     j| ddd |  }|jS NFr   )showvboxpack_endsize_requestr   )childr   r#   r   r   
add_widget  s   z.FigureManagerGTK3.__init__.<locals>.add_widgetFr   c                     
   t  S r   r   r   r   r#   r   r   <lambda>     
 z,FigureManagerGTK3.__init__.<locals>.<lambda>delete_eventc                     r   r   r   r   r#   r   r   r     r   ))r   r   r   Windowr   set_wmclassset_window_titleset_icon_from_filewindow_icon	Exception_loginfosysexc_infoBoxr   set_propertyOrientationVERTICALaddr   canvas
pack_startintrx   bboxr   r   _get_toolbartoolbartoolmanagerr   add_tools_to_manageradd_tools_to_containerset_default_size_destroyingrn   mplis_interactiver   
grab_focus)r   r  numr   r   r   r   r#   r   r   s  sD   








zFigureManagerGTK3.__init__c                 G   sv   | j rd S d| _ | j  | j  | j  | jr| j  t dkr5t	 s7t
 dkr9t
  d S d S d S d S )NTr   r   )r  r   r   r   r  r
  r   get_num_fig_managersr  r  r   
main_level	main_quitr   r   r   r   r   r     s   



zFigureManagerGTK3.destroyc                 C   s0   | j   | j  tjd r| j   d S d S )Nzfigure.raise_window)r   r   r  r`   r  rcParamspresentr#   r   r   r   r     s
   


zFigureManagerGTK3.showc                 C   s,   | j  | _ | j r| j  d S | j  d S r   )_full_screen_flagr   
fullscreenunfullscreenr#   r   r   r   full_screen_toggle  s   
z$FigureManagerGTK3.full_screen_toggleFc                 C   sD   t jd dkrt| j| j}|S t jd dkrt| j}|S d }|S )Nr
  toolbar2r  )r  r  NavigationToolbar2GTK3r  r   ToolbarGTK3r  )r   r
  r   r   r   r	    s   
zFigureManagerGTK3._get_toolbarc                 C   s
   | j  S r   )r   	get_titler#   r   r   r   get_window_title  s   
z"FigureManagerGTK3.get_window_titlec                 C      | j | d S r   )r   	set_title)r   titler   r   r   r     r   z"FigureManagerGTK3.set_window_titlec                 C   sd   | j r| j  }||j7 }| j }|j|j  krdkr)n n	| j|| dS | j|| dS )zSet the canvas size in pixels.r   N)	r
  r   r   r  r   r   r   r  resize)r   r   r   toolbar_sizecanvas_sizer   r   r   r&    s   


zFigureManagerGTK3.resizeN)r)   r*   r+   r,   r   r   r   r  r  r	  r"  r   r&  r   r   r   r   r   c  s    6r   c                       s   e Zd Zdd Zededd Zdd Zdd	 Z	d
d Z
dd Zdd Z fddZ fddZdd Zdd Zdd Z  ZS )r  c                 C   sz  || _ tj|  | tjj i | _| jD ]Y\}}}}|d u r)| 	t
 d qtjtjttd| dtjj}|dv rGt nt  | j|< }|| || | 	|d |dt| ||_|| qt
 }	| 	|	d |	d |	d t }	| 	|	d t  }
|
!d |	"|
 t }	| 	|	d t  | _#|	"| j# | $  t%| | d S )	Nr   images-symbolic.svg)zoompanclickedFTu   <small> 
 </small>)&winr   r   	set_styler   ToolbarStyleICONS_gtk_ids	toolitemsrG   SeparatorToolItemImagenew_from_giconr   Iconnew_for_stringstrr   _get_data_pathIconSizeLARGE_TOOLBARToggleToolButton
ToolButton	set_labelset_icon_widgetrn   getattr_signal_handlerset_tooltip_textset_draw
set_expandToolItemLabel
set_markupr  messageshow_allr	   )r   r  r   texttooltip_text
image_filecallbackimagetbuttontoolitemlabelr   r   r   r     sV   






zNavigationToolbar2GTK3.__init__rg   c                 C   s   | j d S Nr   )r  r   cairo_creater#   r   r   r   r      s   zNavigationToolbar2GTK3.ctxc                 C   s"   t |}| jd| d d S )Nz<small>z</small>)r   markup_escape_textrI  rH  )r   sescapedr   r   r   set_message%  s   
z"NavigationToolbar2GTK3.set_messagec                 C   s2   | j d}|d ur|t|  t  d S d S rS  )r  r   
set_cursorcursordr   r   )r   cursorr   r   r   r   rY  )  s
   z!NavigationToolbar2GTK3.set_cursorc                 C   sJ   | j jjj}|| }|| }dd |||| || fD }| j | d S )Nc                 S   s   g | ]}t |qS r   )r  ).0valr   r   r   
<listcomp>3  s    z:NavigationToolbar2GTK3.draw_rubberband.<locals>.<listcomp>)r  rx   r  r   r   )r   r   r   r   r   r   r   r   r   r   r   draw_rubberband/  s
   z&NavigationToolbar2GTK3.draw_rubberbandc                 C   s   | j d  d S r   )r  r   r#   r   r   r   remove_rubberband6  r   z(NavigationToolbar2GTK3.remove_rubberbandc              	   C   s`   dD ]+\}}| j |}|r-||j || jj|k W d    n1 s(w   Y  qd S )N))PanPAN)ZoomZOOM)r2  gethandler_blockrB  
set_activemodename)r   ri  activer   r   r   r   _update_buttons_checked9  s   z.NavigationToolbar2GTK3._update_buttons_checkedc                       t  j|  |   d S r   )r   r,  rk  r  rz   r   r   r,  @     zNavigationToolbar2GTK3.panc                    rl  r   )r   r+  rk  r  rz   r   r   r+  D  rm  zNavigationToolbar2GTK3.zoomc           
   
      s  t jdj t jjt jt jjt j	t jj
fd j  D ]*\}}t  }|| |D ]	}|d|  q. | j |v rI | qt jd fdd} tjd   j   d   }  }  }j |  d	 }    |t jj
krd S tjd rt!j"#|tjd< zjj$j%||d
 W d S  t&y }	 zt't(|	d W Y d }	~	d S d }	~	ww )NzSave the figure)r%  parentactionbuttonsz*.znotify::filterc                     sB       }j | d } tt  d|  d S )Nr   .)	
get_filterget_namer  get_supported_filetypes_groupedset_current_namer9  r   get_current_namewith_suffix)r   ri  fmtdialogr   r   r   on_notify_filterZ  s
   z<NavigationToolbar2GTK3.save_figure.<locals>.on_notify_filterzsavefig.directoryTr   )r   )rn  ))r   FileChooserDialogr  get_toplevelFileChooserActionSAVESTOCK_CANCELResponseTypeCANCEL
STOCK_SAVEOKrt  items
FileFilterset_nameadd_pattern
add_filterget_default_filetype
set_filter	functoolspartialrn   set_current_folderr  r  ru  get_default_filenameset_do_overwrite_confirmationrunget_filenamerr  rs  r   ospathdirnamerx   savefigr   error_msg_gtkr9  )
r   r   ri  fmtsffrx  r{  responsefnameer   ry  r   save_figureH  sL   







z"NavigationToolbar2GTK3.save_figurec           	      C   s   t dd}t| j|}|jdd t| jj|}t|jj}t|jj	}t
 }z|t W n	 ty9   Y nw |d ||| t
 }|dt
jj || |  |  ||ddd |  d S )	N   r   figsize?topSubplot Configuration Toolr   Tr   )r   typer  subplots_adjustr   rx   r  r  r   r   r   r   r   r   r   r$  r  r   r  r  r  r  r   r  )	r   r   toolfigr  _toolr   r   r   r   r   r   r   configure_subplotst  s*   


z)NavigationToolbar2GTK3.configure_subplotsc                 C   s`   | j jdk}| j jt| j jd k }d| jv r| jd | d| jv r.| jd | d S d S )Nr   r   BackForward)
_nav_stack_poslen	_elementsr2  set_sensitive)r   can_backwardcan_forwardr   r   r   set_history_buttons  s   

z*NavigationToolbar2GTK3.set_history_buttons)r)   r*   r+   r   r   r   propertyr   rX  rY  r_  r`  rk  r,  r+  r  r  r  r   r   r   rz   r   r    s    4,r  c                   @   sP   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd ZdS )r   r*  c                 C   s\   t | | tj|  | dtjj t | _| 	| jddd | 
  i | _i | _d S )Nr   Fr   )r   r   r   r   r  r  
HORIZONTALrG  _messager   rJ  _groups
_toolitems)r   r  r   r   r   r     s   

zToolbarGTK3.__init__c           
      C   s   |rt  }nt  }|| |d ur&t jtj|t j	j
}|| |d u r,d}| ||| |d| j|}	|| |  | j|g  | j| ||	f d S )Nr   r-  )r   r=  r>  r?  r5  r6  r   r7  r8  r;  r<  r@  _add_buttonrn   
_call_toolrC  rJ  r  
setdefaultappend)
r   ri  grouppositionrM  descriptiontogglerP  rO  signalr   r   r   add_toolitem  s$   




zToolbarGTK3.add_toolitemc                 C   sf   || j vr(| j r|   t }|tjj | |ddd |  || j |< | j | 	|| d S r   )
r  _add_separatorr   Toolbarr/  r0  r1  r  rJ  rG   )r   r   r  r  r
  r   r   r   r    s   

zToolbarGTK3._add_buttonc                 C   s   |  | d S r   )trigger_tool)r   btnri  r   r   r   r    s   zToolbarGTK3._call_toolc                 C   sD   || j vrd S | j | D ]\}}|| || || qd S r   )r  rf  rg  handler_unblock)r   ri  toggledrQ  r  r   r   r   toggle_toolitem  s   


zToolbarGTK3.toggle_toolitemc                 C   sj   || j vr| jd| |  d S | jD ]}| j | D ]\}}|| j| v r-| j| | qq| j |= d S )Nz%s Not in toolbar)r  r  message_eventr  remove)r   ri  r  rQ  _signalr   r   r   remove_toolitem  s   

zToolbarGTK3.remove_toolitemc                 C   s4   t  }|dt jj | |ddd |  d S )Nr   FTr   )r   	Separatorr  r  r  r  rJ  )r   sepr   r   r   r    s   zToolbarGTK3._add_separatorc                 C   r#  r   )r  r?  r   rV  r   r   r   rX    r   zToolbarGTK3.set_messageN)r)   r*   r+   _icon_extensionr   r  r  r  r  r  r  rX  r   r   r   r   r     s    
r   rg   c                   @      e Zd Zdd Zdd ZdS )StatusbarGTK3c                 O   s4   t j| g|R i | tj|  | d| _d S )NrI  )r
   r   r   	Statusbarget_context_id_contextr   r   r   r   r     s   zStatusbarGTK3.__init__c                 C   s   |  | j | | j| d S r   )popr  pushr  r   r   r   rX    s   zStatusbarGTK3.set_messageN)r)   r*   r+   r   rX  r   r   r   r   r    s    r  c                   @   r  )RubberbandGTK3c                 C   s   t |  d |||| d S r   )r  r_  "_make_classic_style_pseudo_toolbar)r   r   r   r   r   r   r   r   r_    s   zRubberbandGTK3.draw_rubberbandc                 C   s   t |   d S r   )r  r`  r  r#   r   r   r   r`    s   z RubberbandGTK3.remove_rubberbandN)r)   r*   r+   r_  r`  r   r   r   r   r    s    r  c                   @      e Zd Zdd ZdS )SaveFigureGTK3c                    s   G  fddd}t | S )Nc                       s   e Zd Z jjZdS )z-SaveFigureGTK3.trigger.<locals>.PseudoToolbarN)r)   r*   r+   rx   r  r   r#   r   r   PseudoToolbar      r  )r  r  )r   r   r   r  r   r#   r   trigger   s   zSaveFigureGTK3.triggerNr)   r*   r+   r  r   r   r   r   r    r  r  c                   @   r  )SetCursorGTK3c                 C   s   t |  | d S r   )r  rY  r  )r   r[  r   r   r   rY  	     zSetCursorGTK3.set_cursorN)r)   r*   r+   rY  r   r   r   r   r    r  r  c                   @   sn   e Zd Zededd Zejeddd Zeddd Zeddd Z	d	d
 Z
dd ZdS )ConfigureSubplotsGTK3z3.2c                 C   s   t | dsd | _| jS )N_window)hasattrr  r#   r   r   r   r     s   
zConfigureSubplotsGTK3.windowc                 C   s
   || _ d S r   )r  )r   r   r   r   r   r     s   
c                 C   s   | j rd S tjdd| _ z	| j j t W n	 ty   Y nw t | _| jdtj	j
 | j | j | j  | j d| j tdd}| jj|}|jdd t| j| t|jj}t|jj}| j || |  | j|d	d	d
 | j   d S )Nr  r%  r   r   r  r  r  r  Tr   )r   r   r   r   r   r   r   r   r  r  r  r  r   rn   r   r   rx   r  rr   r  r   r  r  r   r   r  r  )r   r  r  r   r   r   r   r   init_window  s.   


z!ConfigureSubplotsGTK3.init_windowc                 G   s   | j   d | _ d S r   )r   r   r  r   r   r   r   =  s   

zConfigureSubplotsGTK3.destroyc                 C   s   | j |S r   )r  rr   )r   figr   r   r   _get_canvasB  s   z!ConfigureSubplotsGTK3._get_canvasc                 G   s   t |  d  d S r   )r  r  r  r  r   r   r   r  E  r  zConfigureSubplotsGTK3.triggerN)r)   r*   r+   r   r   r  r   setterr  r   r  r  r   r   r   r   r    s    
!
r  c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )HelpGTK3c                 C   s~   ddddd}| d}dd |d	d
 D }|d
 }||v r$|| }nt|dkr/| }n	| r8|dg7 }d|| S )z
        Convert Matplotlib key presses to GTK+ accelerator identifiers.

        Related to `FigureCanvasGTK3._get_key`.
        	BackSpace	Page_DownPage_UpScroll_Lock)rE   rL   rK   rC   rW   c                 S   s   g | ]}d | d qS )<>r   )r\  modr   r   r   r^  Y  s    z0HelpGTK3._normalize_shortcut.<locals>.<listcomp>Nr   r   z<shift> )splitr  
capitalizeisupperjoin)r   r   specialpartsmodsr   r   r   _normalize_shortcutK  s   



zHelpGTK3._normalize_shortcutc                 C   s   d|vo	| d S )z
        Check for a valid shortcut to be displayed.

        - GTK will never send 'cmd+' (see `FigureCanvasGTK3._get_key`).
        - The shortcut window only shows keyboard shortcuts, not mouse buttons.
        zcmd+zMouseButton.)
startswith)r   r   r   r   r   _is_valid_shortcute  s   zHelpGTK3._is_valid_shortcutc                    s   t  }t jj D ]6\}}|jsqt  }|| |	dd d  t j
d fdd j|D |j|jd}|| qt jdd jj d	}|  || |  d S )
Nc                 S   s
   |  dS )NF)set_visible)r   datar   r   r   r   |  r   z1HelpGTK3._show_shortcuts_window.<locals>.<lambda> c                 3   s$    | ]}  |r |V  qd S r   )r  r  )r\  r   r#   r   r   	<genexpr>  s    
z2HelpGTK3._show_shortcuts_window.<locals>.<genexpr>)acceleratorr%  subtitleHelpT)r%  modaltransient_for)r   ShortcutsSectionsortedr  toolsr  r  ShortcutsGroupr  forallShortcutsShortcutr  get_tool_keymapri  ShortcutsWindow_figurer  r}  r   rJ  )r   sectionri  toolr  shortcutr   r   r#   r   _show_shortcuts_windown  s.   



zHelpGTK3._show_shortcuts_windowc                 C   s>   t j| jj dt jjt jj| 	 dd}|
  |  d S )Nr   r  r  )r   MessageDialogr  r  r}  MessageTypeINFOButtonsTyper  _get_help_textr  r   )r   rz  r   r   r   _show_shortcuts_dialog  s   
zHelpGTK3._show_shortcuts_dialogc                 G   s*   t dddd u r|   d S |   d S )Nr      r   )r   check_versionr  r  r  r   r   r   r    s   zHelpGTK3.triggerN)r)   r*   r+   r  r  r  r  r  r   r   r   r   r  J  s    	"r  c                   @   r  )ToolCopyToClipboardGTK3c           
      O   sH   t jtj}| j }| \}}}}t|||||}	|	|	 d S r   )
r   	Clipboardre  r   SELECTION_CLIPBOARDr  
get_windowget_geometrypixbuf_get_from_window	set_image)
r   r   r   	clipboardr   r   r   r   r   pbr   r   r   r    s
   
zToolCopyToClipboardGTK3.triggerNr  r   r   r   r   r    r  r  win32zmatplotlib.pngzmatplotlib.svgr)  c                 C   sd   |d ur|  }| sd }t| tsdtt| } tj|tjj	tj
j| d}|  |  d S )N,)rn  r  rp  message_format)r}  is_toplevel
isinstancer9  r  mapr   r  r  ERRORr  r  r  r   )msgrn  rz  r   r   r   r    s   
r  c                   @   s,   e Zd ZeZeZedd Zedd Z	dS )_BackendGTK3c                 C   s   | j   d S r   )r  r   )managerr   r   r   trigger_manager_draw  s   z!_BackendGTK3.trigger_manager_drawc                   C   s   t  dkrt   d S d S )Nr   )r   r  mainr   r   r   r   mainloop  s   z_BackendGTK3.mainloopN)
r)   r*   r+   r-   FigureCanvasr   FigureManagerstaticmethodr0  r2  r   r   r   r   r.    s    
r.  r   )br  loggingr  pathlibr   r   r   r  r   r   matplotlib._pylab_helpersr   matplotlib.backend_basesr   r   r   r	   r
   r   r   r   matplotlib.figurer   matplotlib.widgetsr   giImportErrorerrrequire_version
ValueErrorr  gi.repositoryr   r   r   r   r   	getLoggerr)   r   get_major_versionget_micro_versionget_minor_versionbackend_versionMOVECursornew
CursorTypeFLEURHANDHAND2POINTERLEFT_PTRSELECT_REGIONTCROSSWAITWATCHrZ  	TypeErrorexcr   DrawingArear-   r   r  r  r   r   r   r  r  RubberbandBaser  SaveFigureBaser  SetCursorBaser  ConfigureSubplotsBaser   r  ToolHelpBaser  ToolCopyToClipboardBaser  platformicon_filenamer9  r:  r   r  ToolSaveFigureToolConfigureSubplotsToolSetCursorToolRubberbandToolHelpToolCopyToClipboardexportr.  r   r   r   r   <module>   s    (


$   	 /P
	<U

