a
    ëÝEbŒh  ã                
   @   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 d dlmZmZmZmZmZmZ d dl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‚W Y dZ[n
dZ[0 0 ze d
d¡ W n, e�y Z zee‚W Y dZ[n
dZ[0 0 d dl m!Z!m"Z"m#Z#m$Z$m%Z% ddl&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z-m.Z/m0Z1 e 2e3¡Z4ej5G dd„ dƒƒZ6e  7¡ dd„ ƒZ8G dd„ de$j9eƒZ:G dd„ deƒZ;G dd„ de+e$j<ƒZ=G dd„ dee$j>ƒZ?G dd„ de	j@ƒZAejBddd�G d d!„ d!e	jCƒƒZDG d"d#„ d#e	jEƒZFG d$d%„ d%e	jGƒZHejId&k�r8d'ZJnd(ZJeKe
 Ld)eJ¡ƒZMd.d*d+„ZNeAe	_Oe/e	_Pe1e	_QeFe	_ReHe	_Se?Z<ejTG d,d-„ d-e*ƒƒZUdS )/é    N)ÚPath)Ú_apiÚbackend_toolsÚcbook)ÚGcf)Ú_BackendÚFigureCanvasBaseÚFigureManagerBaseÚNavigationToolbar2Ú	TimerBaseÚToolContainerBase)ÚCursors)ÚFigure)ÚSubplotToolz#The GTK3 backends require PyGObjectÚGtkz3.0)ÚGioÚGLibÚGObjectr   ÚGdké   )Ú_create_applicationÚ_shutdown_applicationÚbackend_versionÚ_BackendGTKÚ_NavigationToolbar2GTKÚTimerGTKÚConfigureSubplotsGTKÚRubberbandGTKc                   @   s&   e Zd Zejddd�edd„ ƒƒZdS )Ú__getattr__ú3.5Ú )Úobj_typec                 C   s|   zNt  tjjtj ¡ ¡}tj|dƒtj	|dƒtj
|dƒtj|dƒtj|dƒiW S  tyv } zi W  Y d }~S d }~0 0 d S )NÚmoveÚpointerÚdefaultÚ	crosshairÚwait)Ú	functoolsÚpartialr   ÚCursorÚnew_from_nameÚDisplayÚget_defaultr   ÚMOVEÚHANDÚPOINTERÚSELECT_REGIONÚWAITÚ	TypeError)ÚselfZ
new_cursorÚexc© r5   ú`/home/ja/django-apps/lartica_env/lib/python3.9/site-packages/matplotlib/backends/backend_gtk3.pyÚcursord.   s    ÿ




ûz__getattr__.cursordN)Ú__name__Ú
__module__Ú__qualname__r   Ú
deprecatedÚpropertyr7   r5   r5   r5   r6   r   ,   s   r   c                 C   sL   t jtjdtjdtjdtjdtjdtjdtj	di| d�}t
j t
j ¡ |¡S )	Nr"   r#   r$   r%   r&   z	ew-resizez	ns-resize)Úcursor)r   Zcheck_getitemr   r-   r.   r/   r0   r1   ZRESIZE_HORIZONTALZRESIZE_VERTICALr   r)   r*   r+   r,   )Z
mpl_cursorÚnamer5   r5   r6   Ú_mpl_to_gtk_cursor?   s    ùø	r?   c                   @   s  e Zd ZdZe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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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"d%d&„ Z#d'd(„ Z$d)d*„ Z%d+d,„ Z&d-d.„ Z'dS )0ÚFigureCanvasGTK3Zgtk3Nc                 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¡ |  d| j¡ |  d| j¡ |  | jj¡ |  d¡ t ¡ }| d¡ |  ¡ }| |tj¡ | d¡ d S )Nr   Ú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Úleave_notify_eventÚenter_notify_eventÚsize_allocateTs/   .matplotlib-canvas { background-color: white; }zmatplotlib-canvas)r   Ú__init__r   Ú_idle_draw_idZ_lastCursorÚ_rubberband_rectÚconnectrA   rB   rC   rD   Ú_update_device_pixel_ratioÚon_draw_eventÚ
_post_drawrF   rG   rH   rI   rJ   rK   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)r3   ÚfigureÚcssZ	style_ctxr5   r5   r6   rL   \   s4    

zFigureCanvasGTK3.__init__c                 C   s   |   ¡  d S ©N)Zclose_event©r3   r5   r5   r6   Údestroy}   s    zFigureCanvasGTK3.destroyc                 C   s8   |   d¡}|d ur4| t|ƒ¡ tj ¡ }| d¡ d S )NÚwindowT)Úget_propertyÚ
set_cursorr?   r   ÚMainContextr$   Ú	iteration)r3   r=   rZ   Úcontextr5   r5   r6   r\   €   s
    

zFigureCanvasGTK3.set_cursorc                 C   s*   |j | j }| jjj|j| j  }||fS )aI  
        Calculate mouse coordinates in physical pixels.

        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.
        )ÚxÚdevice_pixel_ratiorU   ZbboxÚheightÚy)r3   Úeventr`   rc   r5   r5   r6   Ú_mouse_event_coordsˆ   s    
z$FigureCanvasGTK3._mouse_event_coordsc                 C   s<   |   |¡\}}|jtjjkr dnd}tj| ||||d� dS )Nr   éÿÿÿÿ©ÚguiEventF)re   Ú	directionr   ZScrollDirectionÚUPr   rA   )r3   Úwidgetrd   r`   rc   Ústepr5   r5   r6   rA   —   s    zFigureCanvasGTK3.scroll_eventc                 C   s(   |   |¡\}}tj| |||j|d� dS ©Nrg   F)re   r   rB   Úbutton©r3   rk   rd   r`   rc   r5   r5   r6   rB   �   s
    ÿz#FigureCanvasGTK3.button_press_eventc                 C   s(   |   |¡\}}tj| |||j|d� dS rm   )re   r   rC   rn   ro   r5   r5   r6   rC   £   s
    ÿz%FigureCanvasGTK3.button_release_eventc                 C   s   |   |¡}tj| ||d� dS ©Nrg   T)Ú_get_keyr   rF   ©r3   rk   rd   Úkeyr5   r5   r6   rF   ©   s    
z FigureCanvasGTK3.key_press_eventc                 C   s   |   |¡}tj| ||d� dS rp   )rq   r   rG   rr   r5   r5   r6   rG   ®   s    
z"FigureCanvasGTK3.key_release_eventc                 C   s$   |   |¡\}}tj| |||d� dS rm   )re   r   rH   ro   r5   r5   r6   rH   ³   s    z$FigureCanvasGTK3.motion_notify_eventc                 C   s   t  | |¡ d S rW   )r   rI   )r3   rk   rd   r5   r5   r6   rI   ¸   s    z#FigureCanvasGTK3.leave_notify_eventc                 C   s&   |   |¡\}}tj| |||fd� d S )N)rh   Zxy)re   r   rJ   ro   r5   r5   r6   rJ   »   s    z#FigureCanvasGTK3.enter_notify_eventc                 C   sP   | j j}|j| j | }|j| j | }| j j||dd� t | ¡ |  ¡  d S )NF©Úforward)	rU   ÚdpiÚwidthra   rb   Úset_size_inchesr   Zresize_eventÚ	draw_idle)r3   rk   Z
allocationZdpivalZwinchZhinchr5   r5   r6   rK   ¿   s    
zFigureCanvasGTK3.size_allocatec                 C   sŠ   t t |j¡ƒ}t |t |j¡¡}tjjdftjj	dftjj
dftjjdfg}|D ]0\}}|j|@ rT|dkrv| ¡ sT|› d|› �}qT|S )NZctrlZaltÚshiftÚsuperú+)Úchrr   Zkeyval_to_unicodeÚkeyvalr   Z_unikey_or_keysym_to_mplkeyZkeyval_nameZModifierTypeZCONTROL_MASKZ	MOD1_MASKZ
SHIFT_MASKZ	MOD4_MASKÚstateÚisprintable)r3   rd   Zunikeyrs   Ú	modifiersZkey_maskÚprefixr5   r5   r6   rq   Ç   s    
þ



ü
zFigureCanvasGTK3._get_keyc                 O   s"   |   |  ¡ ¡r|  ¡  |  ¡  d S rW   )Z_set_device_pixel_ratioZget_scale_factorZqueue_resizeÚ
queue_draw)r3   ÚargsÚkwargsr5   r5   r6   rP   Ø   s    z+FigureCanvasGTK3._update_device_pixel_ratioc                 C   sd   |  d¡d u rd S |j| j }|j| j }|dk s:|dk r>d S | jj}| jj|| || dd� dS )NrZ   é   Frt   )r[   rw   ra   rb   rU   rv   rx   )r3   rk   rd   ÚwÚhrv   r5   r5   r6   rD   â   s    z FigureCanvasGTK3.configure_eventc                 C   s   || _ |  ¡  d S rW   )rN   rƒ   )r3   Zrectr5   r5   r6   Ú_draw_rubberbandî   s    z!FigureCanvasGTK3._draw_rubberbandc           	         sö   ˆ j d u 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 rW   )ra   )Ú.0ÚdimrX   r5   r6   Ú	<genexpr>÷   s   ÿz.FigureCanvasGTK3._post_draw.<locals>.<genexpr>r   )r†   r†   r   r†   )	rN   Úmove_toZline_toZset_antialiasZset_line_widthZset_dashZset_source_rgbZstroke_preserveZstroke)	r3   rk   ÚctxZx0Zy0r‡   rˆ   Úx1Úy1r5   rX   r6   rR   ó   s.    

ÿ

zFigureCanvasGTK3._post_drawc                 C   s   d S rW   r5   )r3   rk   rŽ   r5   r5   r6   rQ     s    zFigureCanvasGTK3.on_draw_eventc                 C   s   |   ¡ r|  ¡  d S rW   )Zis_drawablerƒ   rX   r5   r5   r6   rE     s    zFigureCanvasGTK3.drawc                    s*   ˆ j dkrd S ‡ fdd„}t |¡ˆ _ d S )Nr   c                     s    zˆ   ¡  W dˆ _ndˆ _0 dS )Nr   F)rE   rM   ©r„   rX   r5   r6   Ú	idle_draw  s    
z-FigureCanvasGTK3.draw_idle.<locals>.idle_draw)rM   r   Zidle_add)r3   r’   r5   rX   r6   ry     s    
zFigureCanvasGTK3.draw_idlec                 C   s"   t j ¡ }| ¡ r| d¡ q
d S ©NT)r   r]   r$   Úpendingr^   )r3   r_   r5   r5   r6   Úflush_events&  s    
zFigureCanvasGTK3.flush_events)N)(r8   r9   r:   Zrequired_interactive_frameworkÚ	TimerGTK3Z
_timer_clsr   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_MASKrT   rL   rY   r\   re   rA   rB   rC   rF   rG   rH   rI   rJ   rK   rq   rP   rD   r‰   rR   rQ   rE   ry   r•   r5   r5   r5   r6   r@   M   sR   ÿþýüûúùø

!
r@   c                       s\   e Zd ZdZ‡ f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‡  ZS )ÚFigureManagerGTK3a9  
    Attributes
    ----------
    canvas : `FigureCanvas`
        The FigureCanvas instance
    num : int or str
        The Figure number
    toolbar : Gtk.Toolbar
        The toolbar
    vbox : Gtk.VBox
        The Gtk.VBox containing the canvas and toolbar
    window : Gtk.Window
        The Gtk.Window

    c                    s€  t ƒ }t ¡ ˆ _| ˆ j¡ tƒ  ||¡ ˆ j dd¡ ˆ j t	¡ t 
¡ ˆ _ˆ j dtjj¡ ˆ j ˆ j¡ ˆ j ¡  ˆ j ¡  ˆ j ˆ jddd¡ ˆ j ¡ \}}ˆ  ¡ ˆ _ˆ jrÒt ˆ j¡ ˆ jrÒt ˆ j¡ ˆ jd u�rˆ j ¡  ˆ j ˆ jddd¡ ˆ j ¡ \}}||j7 }ˆ j ||¡ dˆ _ˆ j d‡ fdd	„¡ ˆ j d
‡ fdd	„¡ t  !¡ �rrˆ j ¡  ˆ j "¡  ˆ j #¡  d S )NÚ
matplotlibZ
MatplotlibÚorientationTr   FrY   c                     s
   t  ˆ ¡S rW   ©r   rY   r‘   rX   r5   r6   Ú<lambda>a  ó    z,FigureManagerGTK3.__init__.<locals>.<lambda>Zdelete_eventc                     s
   t  ˆ ¡S rW   rš   r‘   rX   r5   r6   r›   b  rœ   )$r   r   ZWindowrZ   Z
add_windowr{   rL   Zset_wmclassZset_icon_from_fileÚwindow_iconÚBoxÚvboxÚset_propertyÚOrientationÚVERTICALÚaddÚshowÚcanvasÚ
pack_startZget_width_heightÚ_get_toolbarÚtoolbarÚtoolmanagerr   Zadd_tools_to_managerZadd_tools_to_containerÚpack_endZget_preferred_sizerb   Úset_default_sizeÚ_destroyingrO   ÚmplÚis_interactivery   Z
grab_focus)r3   r¥   ÚnumZappr‡   rˆ   Zmin_sizeZnat_size©rS   rX   r6   rL   =  s>    









zFigureManagerGTK3.__init__c                 G   sB   | j r
d S d| _ | j ¡  | j ¡  | j ¡  | jr>| j ¡  d S r“   )r¬   rŸ   rY   rZ   r¥   r¨   ©r3   r„   r5   r5   r6   rY   i  s    


zFigureManagerGTK3.destroyc                 C   sB   | j  ¡  | j ¡  tjd r>| j  ¡ r4| j  ¡  n
t 	d¡ d S )Nzfigure.raise_windowz#Cannot raise window yet to be setup)
rZ   r¤   r¥   rE   r­   ÚrcParamsÚ
get_windowZpresentr   Zwarn_externalrX   r5   r5   r6   r¤   w  s    



zFigureManagerGTK3.showc                 C   s*   | j  | _ | j r| j ¡  n
| j ¡  d S rW   )Ú_full_screen_flagrZ   Z
fullscreenZunfullscreenrX   r5   r5   r6   Úfull_screen_toggle…  s    
z$FigureManagerGTK3.full_screen_toggleFc                 C   s@   t jd dkrt| j| jƒ}nt jd dkr8t| jƒ}nd }|S )Nr¨   Ztoolbar2r©   )r­   r²   ÚNavigationToolbar2GTK3r¥   rZ   ÚToolbarGTK3r©   )r3   r¨   r5   r5   r6   r§   �  s    zFigureManagerGTK3._get_toolbarc                 C   s
   | j  ¡ S rW   )rZ   Z	get_titlerX   r5   r5   r6   Úget_window_title˜  s    z"FigureManagerGTK3.get_window_titlec                 C   s   | j  |¡ d S rW   )rZ   Ú	set_title)r3   Útitler5   r5   r6   Úset_window_title›  s    z"FigureManagerGTK3.set_window_titlec                 C   s‚   t || jj ƒ}t || jj ƒ}| jr:| j ¡ }||j7 }| j ¡ }|j|j  kr\dkrpn n| j 	||¡ n| j 
||¡ dS )zSet the canvas size in pixels.r   N)Úintr¥   ra   r¨   Zsize_requestrb   Zget_allocationrw   rZ   r«   Úresize)r3   rw   rb   Ztoolbar_sizeZcanvas_sizer5   r5   r6   r½   ž  s    


zFigureManagerGTK3.resize)r8   r9   r:   Ú__doc__rL   rY   r¤   rµ   r´   r§   r¸   r»   r½   Ú__classcell__r5   r5   r°   r6   r—   -  s   ,r—   c                   @   s   e Zd Zdd„ Zdd„ ZdS )r¶   c                 C   s\  || _ tj | ¡ |  tjj¡ i | _| jD ]²\}}}}|d u rR|  	t 
¡ d¡ q,tj tj tt d|› d�¡ƒ¡tjj¡}|dv rŽt ¡ nt ¡  | j|< }| |¡ | |¡ | dt| |ƒ¡|_| |¡ |  	|d¡ q,t ¡ }	|  	|	d¡ t ¡ }
|
 d¡ |	  d¡ |	 !|
¡ t ¡ }	|  	|	d¡ t ¡ | _"|	 !| j"¡ |  #¡  t$ | |¡ d S )Nrf   Úimagesú-symbolic.svg)ZzoomÚpanÚclickedu   <small>Â 
Â </small>T)%Úwinr   rL   Ú	set_styler   ÚToolbarStyleÚICONSZ_gtk_idsZ	toolitemsÚinsertZSeparatorToolItemÚImageÚnew_from_giconr   ÚIconÚnew_for_stringÚstrr   Ú_get_data_pathÚIconSizeÚLARGE_TOOLBARÚToggleToolButtonÚ
ToolButtonÚ	set_labelÚset_icon_widgetrO   ÚgetattrZ_signal_handlerÚset_tooltip_textZToolItemÚLabelZ
set_markupZ
set_expandr£   ÚmessageÚshow_allr
   )r3   r¥   rZ   ÚtextZtooltip_textÚ
image_fileÚcallbackÚimagern   ÚtoolitemÚlabelr5   r5   r6   rL   ±  sP    ÿÿüþ


ÿ
ÿ


zNavigationToolbar2GTK3.__init__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 ¡ |v 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 n6 t&�yŽ }	 zt't(|	ƒˆd� W Y d }	~	n
d }	~	0 0 d S )NzSave the figure)rº   Ú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„   r>   Úfmt©Údialogr3   r5   r6   Úon_notify_filteró  s
    ÿz<NavigationToolbar2GTK3.save_figure.<locals>.on_notify_filterzsavefig.directoryTr   )Úformat)rà   ))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_filterr'   r(   rO   Zset_current_folderr­   r²   rç   Zget_default_filenameZset_do_overwrite_confirmationÚrunÚget_filenamerä   rå   rY   ÚosÚpathÚdirnamerU   ZsavefigÚ	ExceptionÚerror_msg_gtkrÍ   )
r3   r„   r>   ZfmtsÚffré   rì   ÚresponseÚfnameÚer5   rê   r6   Úsave_figureá  sF    

ÿüÿ



z"NavigationToolbar2GTK3.save_figureN)r8   r9   r:   rL   rþ   r5   r5   r5   r6   r¶   °  s   0r¶   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   rL   r   rž   r    r¡   Z
HORIZONTALr×   Ú_messagerª   rÙ   Ú_groupsÚ
_toolitems)r3   r©   r5   r5   r6   rL     s    
zToolbarGTK3.__init__c           
      C   s®   |rt  ¡ }nt  ¡ }| |¡ |d urLt j tj |¡t j	j
¡}| |¡ |d u rXd}|  |||¡ | d| j|¡}	| |¡ | ¡  | j |g ¡ | j|  ||	f¡ d S )Nrf   rÃ   )r   rÑ   rÒ   rÓ   rÉ   rÊ   r   rË   rÌ   rÏ   rÐ   rÔ   Ú_add_buttonrO   Ú
_call_toolrÖ   rÙ   r  Ú
setdefaultÚappend)
r3   r>   ÚgroupÚpositionrÛ   ÚdescriptionÚtogglern   rÝ   Úsignalr5   r5   r6   Úadd_toolitem  s$    


þ

zToolbarGTK3.add_toolitemc                 C   sf   || j vrP| j r|  ¡  t ¡ }| tjj¡ |  |ddd¡ | ¡  || j |< | j |  	||¡ d S )NFr   )
r   Ú_add_separatorr   ÚToolbarrÅ   rÆ   rÇ   r¦   rÙ   rÈ   )r3   rn   r  r  r¨   r5   r5   r6   r  3  s    

zToolbarGTK3._add_buttonc                 C   s   |   |¡ d S rW   )Ztrigger_tool)r3   Zbtnr>   r5   r5   r6   r  >  s    zToolbarGTK3._call_toolc                 C   sD   || j vrd S | j | D ]&\}}| |¡ | |¡ | |¡ qd S rW   )r  Zhandler_blockZ
set_activeZhandler_unblock)r3   r>   ZtoggledrÞ   r
  r5   r5   r6   Útoggle_toolitemA  s    


zToolbarGTK3.toggle_toolitemc                 C   sl   || j vr"| j |› d�| ¡ d S | jD ]6}| j | D ]&\}}|| j| v r6| j|  |¡ q6q(| j |= d S )Nz not in toolbar)r  r©   Zmessage_eventr   Úremove)r3   r>   r  rÞ   Ú_signalr5   r5   r6   Úremove_toolitemI  s    

zToolbarGTK3.remove_toolitemc                 C   s4   t  ¡ }| dt jj¡ |  |ddd¡ | ¡  d S )Nr™   FTr   )r   Z	Separatorr    r¡   r¢   r¦   rÙ   )r3   Úsepr5   r5   r6   r  T  s    zToolbarGTK3._add_separatorc                 C   s   | j  |¡ d S rW   )rÿ   rÓ   )r3   Úsr5   r5   r6   Úset_messageZ  s    zToolbarGTK3.set_messageN)r8   r9   r:   Z_icon_extensionrL   r  r  r  r  r  r  r  r5   r5   r5   r6   r·     s   
r·   c                   @   s   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)r8   r9   r:   rU   r¥   r5   rX   r5   r6   ÚPseudoToolbara  s   r  )r¶   rþ   )r3   r„   r…   r  r5   rX   r6   Útrigger_  s    zSaveFigureGTK3.triggerN©r8   r9   r:   r  r5   r5   r5   r6   r  ^  s   r  r   ZToolSetCursor)Úalternativec                   @   s   e Zd Zdd„ ZdS )ÚSetCursorGTK3c                 C   s   t  |  ¡ |¡ d S rW   )r¶   r\   Z"_make_classic_style_pseudo_toolbar)r3   r=   r5   r5   r6   r\   i  s    ÿzSetCursorGTK3.set_cursorN)r8   r9   r:   r\   r5   r5   r5   r6   r  g  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 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 )ú<ú>r5   )rŠ   Úmodr5   r5   r6   Ú
<listcomp>}  rœ   z0HelpGTK3._normalize_shortcut.<locals>.<listcomp>Nrf   r   z<shift>r    )ÚsplitÚlenÚ
capitalizeÚisupperÚjoin)r3   rs   ZspecialÚpartsÚmodsr5   r5   r6   Ú_normalize_shortcuto  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)r3   rs   r5   r5   r6   Ú_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)rk   Údatar5   r5   r6   r›      rœ   z1HelpGTK3._show_shortcuts_window.<locals>.<lambda>ú c                 3   s"   | ]}ˆ   |¡rˆ  |¡V  qd S rW   )r)  r'  )rŠ   rs   rX   r5   r6   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_keymapr>   ZShortcutsWindowÚ_figurer¥   rî   r¤   rÙ   )r3   Úsectionr>   Ztoolr  ZshortcutrZ   r5   rX   r6   Ú_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   ÚMessageDialogr1  r¥   rî   ÚMessageTypeÚINFOÚButtonsTyperï   Z_get_help_textró   rY   )r3   rë   r5   r5   r6   Ú_show_shortcuts_dialog´  s    
ýzHelpGTK3._show_shortcuts_dialogc                 G   s(   t  ddd¡d u r|  ¡  n|  ¡  d S )Nr†   é   r   )r   Zcheck_versionr3  r8  r±   r5   r5   r6   r  ¼  s    
zHelpGTK3.triggerN)r8   r9   r:   r'  r)  r3  r8  r  r5   r5   r5   r6   r  n  s
   	"r  c                   @   s   e Zd Zdd„ ZdS )ÚToolCopyToClipboardGTK3c           
      O   sH   t j tj¡}| j ¡ }| ¡ \}}}}t |||||¡}	| 	|	¡ d S rW   )
r   Z	ClipboardÚgetr   ZSELECTION_CLIPBOARDr¥   r³   Zget_geometryZpixbuf_get_from_windowZ	set_image)
r3   r„   r…   Ú	clipboardrZ   r`   rc   rw   rb   Zpbr5   r5   r6   r  Ä  s
    
zToolCopyToClipboardGTK3.triggerNr  r5   r5   r5   r6   r:  Ã  s   r:  Úwin32zmatplotlib.pngzmatplotlib.svgrÀ   c                 C   sd   |d ur|  ¡ }| ¡ sd }t| tƒs6d tt| ƒ¡} tj|tjj	tj
j| d�}| ¡  | ¡  d S )Nú,)rà   Útyperâ   Zmessage_format)rî   Zis_toplevelÚ
isinstancerÍ   r$  Úmapr   r4  r5  ÚERRORr7  rï   ró   rY   )Úmsgrà   rë   r5   r5   r6   rù   Ô  s    
þrù   c                   @   s   e Zd ZeZeZdS )Ú_BackendGTK3N)r8   r9   r:   r@   ZFigureCanvasr—   ZFigureManagerr5   r5   r5   r6   rD  ë  s   rD  )N)Vr'   Úloggingrõ   Úpathlibr   Úsysr˜   r­   r   r   r   Zmatplotlib._pylab_helpersr   Zmatplotlib.backend_basesr   r   r	   r
   r   r   Zmatplotlib.backend_toolsr   Zmatplotlib.figurer   Zmatplotlib.widgetsr   ÚgiÚImportErrorÚerrZrequire_versionÚ
ValueErrorrý   Zgi.repositoryr   r   r   r   r   Z_backend_gtkr   r   r   r   r   r   r–   r   ZConfigureSubplotsGTK3r   ZRubberbandGTK3Ú	getLoggerr8   Ú_logZcaching_module_getattrr   Ú	lru_cacher?   ZDrawingArear@   r—   r  r¶   rž   r·   ZSaveFigureBaser  r;   ZSetCursorBaser  ZToolHelpBaser  ZToolCopyToClipboardBaser:  ÚplatformZicon_filenamerÍ   rÎ   r�   rù   ZToolSaveFigureZToolConfigureSubplotsZToolRubberbandZToolHelpZToolCopyToClipboardZexportrD  r5   r5   r5   r6   Ú<module>   sd     (	

 a ^P	U

