U
    Âmœd>Y  ã                
   @   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	m
Z
 d dlmZmZmZmZmZmZ zd dlZW n, ek
r  Z zedƒe‚W 5 dZ[X Y nX ze dd¡ W n( ek
rÚ Z z
ee‚W 5 dZ[X Y nX d dlmZmZmZmZmZ d	d
lmZ d	dlm Z m!Z!m"Z"m#Z#m$Z% e &e'¡Z(ej)G dd„ dƒƒZ*e  +¡ dd„ ƒZ,G dd„ de!ej-ƒZ.G dd„ de#ej/ƒZ0G dd„ deej1ƒZ2e	 3e.¡G dd„ de	j4ƒƒZ5e	 3e.¡G dd„ de	j6ƒƒZ7e	 3e.¡G dd„ de	j8ƒƒZ9e :d¡d#dd„ƒZ;e2Z/e	 3e.ej<¡ e	 3e.ej=¡ G dd „ d e"ƒZ>e j?G d!d"„ d"e ƒƒZ@dS )$é    N)ÚPath)Ú_apiÚbackend_toolsÚcbook)ÚToolContainerBaseÚ
CloseEventÚKeyEventÚLocationEventÚ
MouseEventÚResizeEventz#The GTK3 backends require PyGObjectÚGtkz3.0)ÚGioÚGLibÚGObjectr   ÚGdké   )Ú_backend_gtk)Ú_BackendGTKÚ_FigureCanvasGTKÚ_FigureManagerGTKÚ_NavigationToolbar2GTKÚTimerGTKc                   @   s@   e Zd Zejddd�edd„ ƒƒZejddd�edd„ ƒƒZdS )Ú__getattr__ú3.6Ú )Úobj_typec                 C   s   t jdkrdS dS )NÚwin32zmatplotlib.pngzmatplotlib.svg)ÚsysÚplatform©Úself© r!   úY/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/matplotlib/backends/backend_gtk3.pyÚ<lambda>)   s    z__getattr__.<lambda>c                 C   s   t t dtdƒ¡ƒS )NÚimagesÚicon_filename)Ústrr   Ú_get_data_pathr   r   r!   r!   r"   r#   ,   s    N)Ú__name__Ú
__module__Ú__qualname__r   Ú
deprecatedÚpropertyr%   Zwindow_iconr!   r!   r!   r"   r   &   s   ÿÿr   c                 C   s   t j t j ¡ t | ¡¡S ©N)r   ZCursorZnew_from_nameZDisplayÚget_defaultr   Zmpl_to_gtk_cursor_name)Z
mpl_cursorr!   r!   r"   Ú_mpl_to_gtk_cursor0   s    þr/   c                       s4  e Zd ZdZe dd„ ¡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 Zd4‡ fdd„	Zdd„ Zd	d
„ Zd5d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d„ Ze ddœd d!„ƒZ!d"d#„ Z"d$d%„ Z#d&d'„ Z$d(d)„ Z%d*d+„ Z&d,d-„ Z'd.d/„ Z(d0d1„ Z)d2d3„ Z*‡  Z+S )6ÚFigureCanvasGTK3Zgtk3c                 C   s   t S r-   )ÚFigureManagerGTK3)Úclsr!   r!   r"   r#   9   ó    zFigureCanvasGTK3.<lambda>Nc                    s,  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¡ |  d| j¡ |  d| j¡ |  | jj¡ |  d¡ t ¡ }| d¡ |  ¡ }| |tj¡ | d¡ d S )N)Úfigurer   Úscroll_eventÚbutton_press_eventÚbutton_release_eventÚconfigure_eventzscreen-changedznotify::scale-factorÚdrawÚkey_press_eventÚkey_release_eventÚmotion_notify_eventÚenter_notify_eventÚleave_notify_eventÚsize_allocateTs/   .matplotlib-canvas { background-color: white; }zmatplotlib-canvas)ÚsuperÚ__init__Ú_idle_draw_idÚ_rubberband_rectÚconnectr5   r6   r7   r8   Ú_update_device_pixel_ratioÚon_draw_eventÚ
_post_drawr:   r;   r<   r=   r>   r?   Z
set_eventsÚ	__class__Ú
event_maskZset_can_focusr   ZCssProviderZload_from_dataZget_style_contextZadd_providerZ#STYLE_PROVIDER_PRIORITY_APPLICATIONZ	add_class)r    r4   ÚcssZ	style_ctx©rH   r!   r"   rA   F   s0    

zFigureCanvasGTK3.__init__c                 C   s   t d| ƒ ¡  d S )NZclose_event)r   Ú_processr   r!   r!   r"   Údestroye   s    zFigureCanvasGTK3.destroyc                 C   s8   |   d¡}|d k	r4| t|ƒ¡ tj ¡ }| d¡ d S )NÚwindowT)Úget_propertyÚ
set_cursorr/   r   ÚMainContextÚdefaultÚ	iteration)r    ÚcursorrN   Úcontextr!   r!   r"   rP   h   s
    

zFigureCanvasGTK3.set_cursorc                 C   sd   |dkr0|   ¡ }| | ¡  ¡  ¡ ¡\}}}}n|j|j }}|| j }| jj	j
|| j  }||fS )a—  
        Convert the position of a GTK event, or of the current cursor position
        if *event* is None, to Matplotlib coordinates.

        GTK use logical pixels, but the figure is scaled to physical pixels for
        rendering.  Transform to physical pixels so that all of the down-stream
        transforms work as expected.

        Also, the origin is different and needs to be corrected.
        N)Ú
get_windowZget_device_positionÚget_displayZget_device_managerZget_client_pointerÚxÚyÚdevice_pixel_ratior4   ZbboxÚheight)r    ÚeventrN   ÚtrX   rY   Ústater!   r!   r"   Ú_mpl_coordsp   s    ÿ
zFigureCanvasGTK3._mpl_coordsc                 C   sF   |j tjjkrdnd}td| f|  |¡ž||  |j¡|dœŽ ¡  dS )Nr   éÿÿÿÿr5   )ÚstepÚ	modifiersÚguiEventF)	Ú	directionr   ZScrollDirectionZUPr
   r_   Ú_mpl_modifiersr^   rL   )r    Úwidgetr\   ra   r!   r!   r"   r5   †   s    ÿ
ýzFigureCanvasGTK3.scroll_eventc                 C   s4   t d| f|  |¡|jfž|  |j¡|dœŽ ¡  dS )Nr6   ©rb   rc   F©r
   r_   Úbuttonre   r^   rL   ©r    rf   r\   r!   r!   r"   r6   Ž   s     ÿ
ýz#FigureCanvasGTK3.button_press_eventc                 C   s4   t d| f|  |¡|jfž|  |j¡|dœŽ ¡  dS )Nr7   rg   Frh   rj   r!   r!   r"   r7   •   s     ÿ
ýz%FigureCanvasGTK3.button_release_eventc                 C   s*   t d| |  |¡f|  ¡ žd|iŽ ¡  dS )Nr:   rc   T©r   Ú_get_keyr_   rL   rj   r!   r!   r"   r:   œ   s    ÿÿþ
z FigureCanvasGTK3.key_press_eventc                 C   s*   t d| |  |¡f|  ¡ žd|iŽ ¡  dS )Nr;   rc   Trk   rj   r!   r!   r"   r;   ¢   s    ÿÿþ
z"FigureCanvasGTK3.key_release_eventc                 C   s.   t d| f|  |¡ž|  |j¡|dœŽ ¡  dS )Nr<   rg   F)r
   r_   re   r^   rL   rj   r!   r!   r"   r<   ¨   s
    
þz$FigureCanvasGTK3.motion_notify_eventc                 C   s@   t j |  ¡ ¡ ¡ }td| f|  |¡ž|  |¡|dœŽ ¡  d S )NZfigure_enter_eventrg   ©	r   ZKeymapZget_for_displayrW   Zget_modifier_stater	   r_   re   rL   ©r    rf   r\   Zgtk_modsr!   r!   r"   r=   ®   s    ÿþz#FigureCanvasGTK3.enter_notify_eventc                 C   s@   t j |  ¡ ¡ ¡ }td| f|  |¡ž|  |¡|dœŽ ¡  d S )NZfigure_leave_eventrg   rm   rn   r!   r!   r"   r>   µ   s    ÿþz#FigureCanvasGTK3.leave_notify_eventc                 C   sT   | j j}|j| j | }|j| j | }| j j||dd� td| ƒ ¡  |  ¡  d S )NF©ÚforwardZresize_event)	r4   ÚdpiÚwidthrZ   r[   Úset_size_inchesr   rL   Ú	draw_idle)r    rf   Z
allocationZdpivalZwinchZhinchr!   r!   r"   r?   ¼   s    zFigureCanvasGTK3.size_allocate©Úexcludec                   sH   dt jjdfdt jjdfdt jjdfdt jjdfg}‡ ‡fdd„|D ƒS )NZctrlÚcontrolZaltÚshiftr@   c                    s&   g | ]\}}}ˆ|krˆ |@ r|‘qS r!   r!   )Ú.0ÚnameÚmaskÚkey©Úevent_staterv   r!   r"   Ú
<listcomp>Ì   s     ÿz3FigureCanvasGTK3._mpl_modifiers.<locals>.<listcomp>)r   ZModifierTypeZCONTROL_MASKZ	MOD1_MASKZ
SHIFT_MASKZ	MOD4_MASK)r~   rv   rb   r!   r}   r"   re   Ä   s    üzFigureCanvasGTK3._mpl_modifiersc                 C   s^   t t |j¡ƒ}t |t |j¡¡}| j|j|d�}d|krN| 	¡ rN| 
d¡ d ||f•¡S )Nru   rx   ú+)Úchrr   Zkeyval_to_unicodeÚkeyvalr   Z_unikey_or_keysym_to_mplkeyZkeyval_namere   r^   ÚisprintableÚremoveÚjoin)r    r\   Zunikeyr|   Úmodsr!   r!   r"   rl   Ï   s     
ÿ
zFigureCanvasGTK3._get_keyc                 O   s"   |   |  ¡ ¡r|  ¡  |  ¡  d S r-   )Z_set_device_pixel_ratioZget_scale_factorZqueue_resizeÚ
queue_draw©r    ÚargsÚkwargsr!   r!   r"   rE   Ø   s    z+FigureCanvasGTK3._update_device_pixel_ratioc                 C   sd   |  d¡d krd S |j| j }|j| j }|dk s:|dk r>d S | jj}| jj|| || dd� dS )NrN   é   Fro   )rO   rr   rZ   r[   r4   rq   rs   )r    rf   r\   ÚwÚhrq   r!   r!   r"   r8   â   s    z FigureCanvasGTK3.configure_eventc                 C   s   || _ |  ¡  d S r-   )rC   r‡   )r    Úrectr!   r!   r"   Ú_draw_rubberbandî   s    z!FigureCanvasGTK3._draw_rubberbandc           	         sö   ˆ j d krd S ‡ fdd„ˆ j D ƒ\}}}}|| }|| }| ||¡ | ||¡ | ||¡ | ||¡ | ||¡ | ||¡ | ||¡ | ||¡ | d¡ | d¡ | dd¡ | ddd¡ | ¡  | dd¡ | ddd¡ | ¡  d S )Nc                 3   s   | ]}|ˆ j  V  qd S r-   )rZ   )ry   Údimr   r!   r"   Ú	<genexpr>÷   s   ÿz.FigureCanvasGTK3._post_draw.<locals>.<genexpr>r   )r‹   r‹   r   r‹   )	rC   Úmove_toZline_toZset_antialiasZset_line_widthZset_dashZset_source_rgbZstroke_preserveÚstroke)	r    rf   ÚctxZx0Zy0rŒ   r�   Úx1Úy1r!   r   r"   rG   ó   s.    

ÿ

zFigureCanvasGTK3._post_drawc                 C   s   d S r-   r!   )r    rf   r”   r!   r!   r"   rF     s    zFigureCanvasGTK3.on_draw_eventc                 C   s   |   ¡ r|  ¡  d S r-   )Zis_drawabler‡   r   r!   r!   r"   r9     s    zFigureCanvasGTK3.drawc                    s*   ˆ j dkrd S ‡ fdd„}t |¡ˆ _ d S )Nr   c                     s   zˆ  ¡  W 5 dˆ _ X dS )Nr   F)rB   r9   )r‰   r   r!   r"   Ú	idle_draw  s    z-FigureCanvasGTK3.draw_idle.<locals>.idle_draw)rB   r   Zidle_add)r    r—   r!   r   r"   rt     s    
zFigureCanvasGTK3.draw_idlec                 C   s"   t j ¡ }| ¡ r| d¡ q
d S )NT)r   rQ   rR   ÚpendingrS   )r    rU   r!   r!   r"   Úflush_events&  s    
zFigureCanvasGTK3.flush_events)N)N),r(   r)   r*   Zrequired_interactive_frameworkr   ZclasspropertyZmanager_classr   Z	EventMaskZBUTTON_PRESS_MASKZBUTTON_RELEASE_MASKZEXPOSURE_MASKZKEY_PRESS_MASKZKEY_RELEASE_MASKZENTER_NOTIFY_MASKZLEAVE_NOTIFY_MASKZPOINTER_MOTION_MASKZSCROLL_MASKrI   rA   rM   rP   r_   r5   r6   r7   r:   r;   r<   r=   r>   r?   Ústaticmethodre   rl   rE   r8   r�   rG   rF   r9   rt   r™   Ú__classcell__r!   r!   rK   r"   r0   7   sV   ÿþýüûúùø


	
r0   c                   @   s@   e Zd Ze dd¡d
dd„ƒZe d¡edd„ ƒƒZdd	„ Z	dS )ÚNavigationToolbar2GTK3r   rN   Nc                 C   sl  || _ tj | ¡ |  tjj¡ i | _| jD ]²\}}}}|d krR|  	t 
¡ d¡ q,tj tj tt d|› d�¡ƒ¡tjj¡}|dkrŽt ¡ nt ¡  | j|< }| |¡ | |¡ | dt| |ƒ¡|_| |¡ |  	|d¡ q,t ¡ }	|  	|	d¡ t ¡ }
|
 d¡ |	  d¡ |	 !|
¡ t ¡ }	|  	|	d¡ t ¡ | _"| j" #tj$j%¡ |	 !| j"¡ |  &¡  t' | |¡ d S )Nr`   r$   ú-symbolic.svg)ZzoomÚpanÚclickedu   <small>Â 
Â </small>T)(Ú_winr   rA   Ú	set_styler   ÚToolbarStyleÚICONSZ_gtk_idsZ	toolitemsÚinsertZSeparatorToolItemÚImageÚnew_from_giconr   ÚIconÚnew_for_stringr&   r   r'   ÚIconSizeÚLARGE_TOOLBARÚToggleToolButtonÚ
ToolButtonÚ	set_labelÚset_icon_widgetrD   ÚgetattrZ_signal_handlerÚset_tooltip_textZToolItemÚLabelZ
set_markupZ
set_expandÚaddÚmessageÚset_justifyÚJustificationÚRIGHTÚshow_allr   )r    ÚcanvasrN   ÚtextZtooltip_textÚ
image_fileÚcallbackÚimageri   ÚtoolitemÚlabelr!   r!   r"   rA   .  sT    ÿÿüþ

 ÿ
ÿ


zNavigationToolbar2GTK3.__init__c                 C   s   | j S r-   )r    r   r!   r!   r"   r#   `  r3   zNavigationToolbar2GTK3.<lambda>c           
   
      s¶  t jdˆj ¡ t jjt jt jjt j	t jj
fd�‰ ˆj ¡  ¡ D ]V\}}t  ¡ }| |¡ |D ]}| d|› �¡ q\ˆ  |¡ ˆj ¡ |kr>ˆ  |¡ q>t ˆ jd¡‡ ‡fdd„ƒ}ˆ  tjd ¡ ˆ  ˆj ¡ ¡ ˆ  d¡ ˆ  ¡ }ˆ  ¡ }ˆ  ¡ }ˆj ¡ | ¡  d	 }ˆ   ¡  |t jj
k�r$d S tjd �rBt!j" #|¡tjd< zˆjj$j%||d
� W nX t&k
�r° }	 z8t j'ˆj ¡ t(|	ƒt j)j*t j+j
d�‰ ˆ  ¡  ˆ   ¡  W 5 d }	~	X Y nX d S )NzSave the figure)ÚtitleÚparentÚactionÚbuttonsz*.znotify::filterc                     sD   ˆ   ¡  ¡ }ˆj ¡ | d }ˆ  ttˆ  ¡ ƒ d|› �¡ƒ¡ d S )Nr   Ú.)	Ú
get_filterÚget_namer¸   Úget_supported_filetypes_groupedÚset_current_namer&   r   Zget_current_nameÚwith_suffix)r‰   rz   Úfmt©Údialogr    r!   r"   Úon_notify_filtert  s
    ÿz<NavigationToolbar2GTK3.save_figure.<locals>.on_notify_filterzsavefig.directoryTr   )Úformat)rÀ   Úmessage_formatÚtyperÂ   ),r   ZFileChooserDialogr¸   Úget_toplevelZFileChooserActionZSAVEZSTOCK_CANCELZResponseTypeZCANCELZ
STOCK_SAVEÚOKrÆ   ÚitemsZ
FileFilterÚset_nameZadd_patternÚ
add_filterZget_default_filetypeZ
set_filterÚ	functoolsÚpartialrD   Zset_current_folderÚmplZrcParamsrÇ   Zget_default_filenameZset_do_overwrite_confirmationÚrunÚget_filenamerÄ   rÅ   rM   ÚosÚpathÚdirnamer4   ZsavefigÚ	ExceptionÚMessageDialogr&   ÚMessageTypeÚERRORÚButtonsType)
r    r‰   rz   ZfmtsÚffrÉ   rÌ   ÚresponseÚfnameÚer!   rÊ   r"   Úsave_figureb  sV    
 ÿüÿ



  þz"NavigationToolbar2GTK3.save_figure)N)
r(   r)   r*   r   Zdelete_parameterrA   r+   r,   Úwinræ   r!   r!   r!   r"   rœ   -  s   
1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 )ÚToolbarGTK3r�   c                 C   sl   t  | |¡ tj | ¡ |  dtjj¡ t ¡ | _| j 	tj
j¡ |  | jddd¡ |  ¡  i | _i | _d S )NÚorientationFr   )r   rA   r   ÚBoxÚset_propertyÚOrientationZ
HORIZONTALr±   Ú_messager´   rµ   r¶   Zpack_endr·   Ú_groupsÚ
_toolitems)r    Útoolmanagerr!   r!   r"   rA   –  s    
zToolbarGTK3.__init__c           
      C   s®   |rt  ¡ }nt  ¡ }| |¡ |d k	rLt j tj |¡t j	j
¡}| |¡ |d krXd}|  |||¡ | d| j|¡}	| |¡ | ¡  | j |g ¡ | j|  ||	f¡ d S )Nr`   rŸ   )r   r«   r¬   r­   r¥   r¦   r   r§   r¨   r©   rª   r®   Ú_add_buttonrD   Ú
_call_toolr°   r·   rï   Ú
setdefaultÚappend)
r    rz   ÚgroupÚpositionrº   ÚdescriptionÚtoggleri   r¼   Úsignalr!   r!   r"   Úadd_toolitem¡  s$    


þ

zToolbarGTK3.add_toolitemc                 C   sf   || j krP| j r|  ¡  t ¡ }| tjj¡ |  |ddd¡ | ¡  || j |< | j |  	||¡ d S )NFr   )
rî   Ú_add_separatorr   ÚToolbarr¡   r¢   r£   Ú
pack_startr·   r¤   )r    ri   rõ   rö   Ztoolbarr!   r!   r"   rñ   ¹  s    

zToolbarGTK3._add_buttonc                 C   s   |   |¡ d S r-   )Ztrigger_tool)r    Zbtnrz   r!   r!   r"   rò   Ä  s    zToolbarGTK3._call_toolc                 C   sD   || j krd S | j | D ]&\}}| |¡ | |¡ | |¡ qd S r-   )rï   Zhandler_blockZ
set_activeZhandler_unblock)r    rz   Ztoggledr½   rù   r!   r!   r"   Útoggle_toolitemÇ  s    


zToolbarGTK3.toggle_toolitemc                 C   sl   || j kr"| j |› d�| ¡ d S | jD ]6}| j | D ]&\}}|| j| kr6| j|  |¡ q6q(| j |= d S )Nz not in toolbar)rï   rð   Zmessage_eventrî   r„   )r    rz   rõ   r½   Ú_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   Z	Separatorrë   rì   ZVERTICALrý   r·   )r    Úsepr!   r!   r"   rû   Ú  s    zToolbarGTK3._add_separatorc                 C   s   | j  |¡ d S r-   )rí   r­   )r    Úsr!   r!   r"   Úset_messageà  s    zToolbarGTK3.set_messageN)r(   r)   r*   Z_icon_extensionrA   rú   rñ   rò   rþ   r   rû   r  r!   r!   r!   r"   rè   “  s   rè   c                   @   s   e Zd Zdd„ ZdS )ÚSaveFigureGTK3c                 O   s   t  |  ¡ ¡ d S r-   )rœ   ræ   Z"_make_classic_style_pseudo_toolbarrˆ   r!   r!   r"   Útriggeræ  s    ÿzSaveFigureGTK3.triggerN©r(   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
 }||krH|| }n(t|ƒdkr^| ¡ }n| ¡ rp|dg7 }d |¡| S )z‚
        Convert Matplotlib key presses to GTK+ accelerator identifiers.

        Related to `FigureCanvasGTK3._get_key`.
        Z	BackSpaceZ	Page_DownZPage_UpZScroll_Lock)Z	backspaceZpagedownZpageupZscroll_lockr€   c                 S   s   g | ]}d | d ‘qS )ú<ú>r!   )ry   Úmodr!   r!   r"   r   û  s     z0HelpGTK3._normalize_shortcut.<locals>.<listcomp>Nr`   r   z<shift>r   )ÚsplitÚlenÚ
capitalizeÚisupperr…   )r    r|   ÚspecialÚpartsr†   r!   r!   r"   Ú_normalize_shortcutí  s    ü



zHelpGTK3._normalize_shortcutc                 C   s   d|k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_shortcut  s    zHelpGTK3._is_valid_shortcutc                    s¼   t  ¡ }tˆ jj ¡ ƒD ]l\}}|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)Zset_visible)rf   Údatar!   r!   r"   r#     r3   z1HelpGTK3._show_shortcuts_window.<locals>.<lambda>ú c                 3   s"   | ]}ˆ   |¡rˆ  |¡V  qd S r-   )r  r  )ry   r|   r   r!   r"   r‘   !  s   
þz2HelpGTK3._show_shortcuts_window.<locals>.<genexpr>)Zacceleratorr¿   ÚsubtitleÚHelpT)r¿   ÚmodalZtransient_for)r   ZShortcutsSectionÚsortedrð   ZtoolsrÒ   r÷   ZShortcutsGroupr²   ÚforallZShortcutsShortcutr…   Zget_tool_keymaprz   ZShortcutsWindowÚ_figurer¸   rÐ   Úshowr·   )r    Úsectionrz   Ztoolrõ   ZshortcutrN   r!   r   r"   Ú_show_shortcuts_window  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   rÞ   r  r¸   rÐ   rß   ÚINFOrá   rÑ   Z_get_help_textrØ   rM   )r    rË   r!   r!   r"   Ú_show_shortcuts_dialog2  s    
   ýzHelpGTK3._show_shortcuts_dialogc                 G   s(   t  ddd¡d kr|  ¡  n|  ¡  d S )Nr‹   é   r   )r   Zcheck_versionr  r   )r    r‰   r!   r!   r"   r  :  s    
zHelpGTK3.triggerN)r(   r)   r*   r  r  r  r   r  r!   r!   r!   r"   r  ë  s
   	"r  c                   @   s   e Zd Zdd„ ZdS )ÚToolCopyToClipboardGTK3c           
      O   sH   t j tj¡}| j ¡ }| ¡ \}}}}t |||||¡}	| 	|	¡ d S r-   )
r   Z	ClipboardÚgetr   ZSELECTION_CLIPBOARDr¸   rV   Zget_geometryZpixbuf_get_from_windowZ	set_image)
r    r‰   rŠ   Ú	clipboardrN   rX   rY   rr   r[   Zpbr!   r!   r"   r  C  s
    
zToolCopyToClipboardGTK3.triggerNr  r!   r!   r!   r"   r"  A  s   r"  r   c                 C   sd   |d k	r|  ¡ }| ¡ sd }t| tƒs6d tt| ƒ¡} tj|tjj	tj
j| d�}| ¡  | ¡  d S )Nú,)rÀ   rÏ   rÂ   rÎ   )rÐ   Zis_toplevelÚ
isinstancer&   r…   Úmapr   rÞ   rß   rà   rá   rÑ   rØ   rM   )ÚmsgrÀ   rË   r!   r!   r"   Úerror_msg_gtkK  s    
  þr)  c                   @   s   e Zd ZeZeZdS )r1   N)r(   r)   r*   rœ   Z_toolbar2_classrè   Z_toolmanager_toolbar_classr!   r!   r!   r"   r1   a  s   r1   c                   @   s   e Zd ZeZeZdS )Ú_BackendGTK3N)r(   r)   r*   r0   ZFigureCanvasr1   ZFigureManagerr!   r!   r!   r"   r*  f  s   r*  )N)ArÕ   ÚloggingrÚ   Úpathlibr   r   Z
matplotlibr×   r   r   r   Zmatplotlib.backend_basesr   r   r   r	   r
   r   ÚgiÚImportErrorÚerrZrequire_versionÚ
ValueErrorrå   Zgi.repositoryr   r   r   r   r   r   r   r   r   r   r   r   Z	TimerGTK3Ú	getLoggerr(   Ú_logZcaching_module_getattrr   Ú	lru_cacher/   ZDrawingArear0   rü   rœ   rê   rè   Z_register_tool_classZSaveFigureBaser  ZToolHelpBaser  ZToolCopyToClipboardBaser"  r+   r)  ZConfigureSubplotsGTKZRubberbandGTKr1   Zexportr*  r!   r!   r!   r"   Ú<module>   s^    
	
 wfQU	 ÿ ÿ