U
    \	¸a¬t  ã                   @   s8  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mZmZ d dlmZ d dl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% e &e'¡Z(de$ )¡ e$ *¡ e$ +¡ f Z,zbe%j- .¡ Z/ej0e%j1 2e/d¡ej3e%j1 2e/d¡ej4e%j1 2e/d¡ej5e%j1 2e/d¡ej6e%j1 2e/d¡iZ7W n. e8k
rÚ Z9 zee9ƒe9‚W 5 dZ9[9X Y nX 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>ƒZ?G dd„ dee$j@ƒZAe Bd¡G dd„ dee$jCƒƒZDG dd „ d e	jEƒZFG d!d"„ d"e	jGƒZHG d#d$„ d$e	jIƒZJG d%d&„ d&e	jKe$jLƒZMG d'd(„ d(e	jNƒZOG d)d*„ d*e	jPƒZQejRd+krØd,ZSnd-ZSeTe
 Ud.eS¡ƒZVd3d/d0„ZWeHe	_XeMe	_YeJe	_ZeFe	_[eOe	_\eQe	_]eAZ>ej^G d1d2„ d2eƒƒZ_dS )4é    N)ÚPath)Ú_apiÚ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.%sÚmoveÚpointerÚdefaultZ	crosshairÚwaitc                       sD   e Zd ZdZ‡ fdd„Zdd„ Zdd„ Zdd	„ Z‡ fd
d„Z‡  Z	S )Ú	TimerGTK3z1Subclass of `.TimerBase` using GTK3 timer events.c                    s   d | _ tƒ j||Ž d S ©N)Ú_timerÚsuperÚ__init__©ÚselfÚargsÚkwargs©Ú	__class__© úD/tmp/pip-unpacked-wheel-wjyw_3jo/matplotlib/backends/backend_gtk3.pyr   8   s    zTimerGTK3.__init__c                 C   s   |   ¡  t | j| j¡| _d S r   )Ú_timer_stopr   Ztimeout_addZ	_intervalÚ	_on_timerr   ©r    r%   r%   r&   Ú_timer_start<   s    zTimerGTK3._timer_startc                 C   s    | j d k	rt | j ¡ d | _ d S r   )r   r   Zsource_remover)   r%   r%   r&   r'   B   s    
zTimerGTK3._timer_stopc                 C   s   | j d k	r|  ¡  |  ¡  d S r   )r   r'   r*   r)   r%   r%   r&   Ú_timer_set_intervalG   s    
zTimerGTK3._timer_set_intervalc                    s(   t ƒ  ¡  | jr| jsdS d | _dS d S )NTF)r   r(   Ú	callbacksZ_singler   r)   r#   r%   r&   r(   M   s
    
zTimerGTK3._on_timer)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r*   r'   r+   r(   Ú__classcell__r%   r%   r#   r&   r   5   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 ejjB Zd.‡ fdd„	Zejd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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(‡  Z)S )/ÚFigureCanvasGTK3Zgtk3Nc                    sB  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¡ t ¡ }| d¡ |  ¡ }| |tj¡ | d¡ tjˆ j | dddd}|r>|ƒ  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_allocateTs/   .matplotlib-canvas { background-color: white; }zmatplotlib-canvasú3.3z´Please 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.)Zallow_emptyZsinceZaddendum)!r   r   r   Ú_idle_draw_idZ_lastCursorÚ_rubberband_rectÚconnectr3   r4   r5   r6   Úon_draw_eventÚ
_post_drawr8   r9   r:   r;   r<   r=   Z
set_eventsr$   Ú
event_maskZset_can_focusr   ZCssProviderZload_from_dataZget_style_contextZadd_providerZ#STYLE_PROVIDER_PRIORITY_APPLICATIONZ	add_classr   Zdeprecate_method_overrideÚ_renderer_init)r    ÚfigureÚcssZ	style_ctxZrenderer_initr#   r%   r&   r   i   sB    


   þzFigureCanvasGTK3.__init__r>   r   )Úalternativec                 C   s   d S r   r%   r)   r%   r%   r&   rE   ‘   s    zFigureCanvasGTK3._renderer_initc                 C   s   |   ¡  d S r   )Z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   ZScrollDirectionÚUPr   r3   )r    ÚwidgetÚeventrN   rQ   Ústepr%   r%   r&   r3   ™   s
    zFigureCanvasGTK3.scroll_eventc                 C   s0   |j }|  ¡ j|j }tj| |||j|d dS ©NrL   F)rN   rO   rP   rQ   r   r4   Úbutton©r    rT   rU   rN   rQ   r%   r%   r&   r4   ¡   s        ÿz#FigureCanvasGTK3.button_press_eventc                 C   s0   |j }|  ¡ j|j }tj| |||j|d dS rW   )rN   rO   rP   rQ   r   r5   rX   rY   r%   r%   r&   r5   ©   s        ÿz%FigureCanvasGTK3.button_release_eventc                 C   s   |   |¡}tj| ||d dS ©NrL   T)Ú_get_keyr   r8   ©r    rT   rU   Úkeyr%   r%   r&   r8   ±   s    
z FigureCanvasGTK3.key_press_eventc                 C   s   |   |¡}tj| ||d dS rZ   )r[   r   r9   r\   r%   r%   r&   r9   ¶   s    
z"FigureCanvasGTK3.key_release_eventc                 C   sP   |j r|j |j¡\}}}}n|j|j }}|  ¡ j| }tj	| |||d dS rW   )
Zis_hintÚwindowZget_device_positionZdevicerN   rQ   rO   rP   r   r:   )r    rT   rU   ÚtrN   rQ   Ústater%   r%   r&   r:   »   s    z$FigureCanvasGTK3.motion_notify_eventc                 C   s   t  | |¡ d S r   )r   r;   )r    rT   rU   r%   r%   r&   r;   Æ   s    z#FigureCanvasGTK3.leave_notify_eventc                 C   s.   |j }|  ¡ j|j }tj| |||fd d S )N)rM   Zxy)rN   rO   rP   rQ   r   r<   rY   r%   r%   r&   r<   É   s    z#FigureCanvasGTK3.enter_notify_eventc                 C   sD   | j j}|j| }|j| }| j j||dd t | ¡ |  ¡  d S )NF©Zforward)rF   ÚdpiÚwidthrP   Úset_size_inchesr   Zresize_eventÚ	draw_idle)r    rT   Z
allocationZdpivalZwinchZhinchr%   r%   r&   r=   Ï   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 ].\}}|j|@ rT|dkrv| ¡ sTd ||¡}qT|S )NZctrlZaltÚshiftr   z{0}+{1})Úchrr   Zkeyval_to_unicodeÚkeyvalr   Z_unikey_or_keysym_to_mplkeyZkeyval_nameZModifierTypeZCONTROL_MASKZ	MOD1_MASKZ
SHIFT_MASKZ	MOD4_MASKr`   ÚisprintableÚformat)r    rU   Zunikeyr]   Ú	modifiersZkey_maskÚprefixr%   r%   r&   r[   ×   s    
þ



ü
zFigureCanvasGTK3._get_keyc                 C   sZ   |  d¡d krd S |j|j }}|dk s0|dk r4d S | jj}| jj|| || dd dS )Nr^   é   Fra   )Úget_propertyrc   rP   rF   rb   rd   )r    rT   rU   ÚwÚhrb   r%   r%   r&   r6   è   s    z FigureCanvasGTK3.configure_eventc                 C   s   || _ |  ¡  d S r   )r@   Ú
queue_draw)r    Úrectr%   r%   r&   Ú_draw_rubberbandó   s    z!FigureCanvasGTK3._draw_rubberbandc           	      C   sè   | j d krd S | j \}}}}|| }|| }| ||¡ | ||¡ | ||¡ | ||¡ | ||¡ | ||¡ | ||¡ | ||¡ | d¡ | d¡ | dd¡ | ddd¡ | ¡  | dd¡ | ddd¡ | ¡  d S )NrJ   )rm   rm   r   rm   )	r@   Zmove_toZline_toZset_antialiasZset_line_widthZset_dashZset_source_rgbZstroke_preserveZstroke)	r    rT   ÚctxÚx0Úy0ro   rp   Úx1Úy1r%   r%   r&   rC   ø   s*    


zFigureCanvasGTK3._post_drawc                 C   s   d S r   r%   )r    rT   rt   r%   r%   r&   rB     s    zFigureCanvasGTK3.on_draw_eventc                 C   s   |   ¡ r|  ¡  d S r   )Zis_drawablerq   r)   r%   r%   r&   r7     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)r?   r7   ©r!   r)   r%   r&   Ú	idle_draw"  s    z-FigureCanvasGTK3.draw_idle.<locals>.idle_draw)r?   r   Zidle_add)r    rz   r%   r)   r&   re     s    
zFigureCanvasGTK3.draw_idlec                 C   s.   t  ¡  t ¡ rt ¡  qt  ¡  t  ¡  d S r   )r   Zthreads_enterr   Zevents_pendingÚmain_iterationÚflushZthreads_leaver)   r%   r%   r&   Úflush_events*  s
    
zFigureCanvasGTK3.flush_events)N)*r-   r.   r/   Zrequired_interactive_frameworkr   Z
_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POINTER_MOTION_HINT_MASKZSCROLL_MASKrD   r   r   Ú
deprecatedrE   rI   r3   r4   r5   r8   r9   r:   r;   r<   r=   r[   r6   rs   rC   rB   r7   re   r}   r1   r%   r%   r#   r&   r2   Y   sT   ÿþýüûúùø	÷(
r2   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 )Ú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¡ zˆ j t¡ W n( tk
r^   t	 
dt ¡ d ¡ Y nX 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ƒ}ˆ  ¡ ˆ _ˆ jrt ˆ j¡ ˆ jrt  ˆ j¡ ˆ jd k	rFˆ j ¡  ˆ j !ˆ jddd¡ ˆ j "¡ \}}||j7 }ˆ j #||¡ dˆ _$ˆ j %d	‡ fd
d„¡ ˆ j %d‡ fdd„¡ t& '¡ r¤ˆ j ¡  ˆ j (¡  ˆ j )¡  d S )NÚ
matplotlibZ
Matplotlibz"Could not load matplotlib icon: %srJ   ÚorientationTr   FrI   c                     s
   t  ˆ ¡S r   ©r   rI   ry   r)   r%   r&   Ú<lambda>l  ó    z,FigureManagerGTK3.__init__.<locals>.<lambda>Zdelete_eventc                     s
   t  ˆ ¡S r   r‚   ry   r)   r%   r&   rƒ   m  r„   )*r   ÚWindowr^   r   r   Zset_wmclassZset_icon_from_fileÚwindow_iconÚ	ExceptionÚ_logÚinfoÚsysÚexc_infoÚBoxÚvboxÚset_propertyÚOrientationÚVERTICALÚaddÚshowÚcanvasÚ
pack_startÚintrF   Úbboxrc   rP   Ú_get_toolbarÚtoolbarÚtoolmanagerr   Zadd_tools_to_managerZadd_tools_to_containerÚpack_endZget_preferred_sizeÚset_default_sizeÚ_destroyingrA   ÚmplÚis_interactivere   Z
grab_focus)r    r“   Únumro   rp   Zmin_sizeZnat_sizer#   r)   r&   r   C  sB    









zFigureManagerGTK3.__init__c                 G   sj   | j r
d S d| _ | j ¡  | j ¡  | j ¡  | jr>| j ¡  t ¡ dkrft 	¡ sft
 ¡ dkrft
 ¡  d S )NTr   rJ   )rœ   r   rI   r^   r“   r˜   r   Zget_num_fig_managersr   rž   r   Ú
main_levelZ	main_quit©r    r!   r%   r%   r&   rI   t  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)
r^   r’   r“   r7   r   ÚrcParamsÚ
get_windowZpresentr   Zwarn_externalr)   r%   r%   r&   r’   †  s    



zFigureManagerGTK3.showc                 C   s*   | j  | _ | j r| j ¡  n
| j ¡  d S r   )Ú_full_screen_flagr^   Z
fullscreenZunfullscreenr)   r%   r%   r&   Ú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“   r^   ÚToolbarGTK3r™   )r    r˜   r%   r%   r&   r—   œ  s    zFigureManagerGTK3._get_toolbarc                 C   s
   | j  ¡ S r   )r^   Z	get_titler)   r%   r%   r&   Úget_window_title§  s    z"FigureManagerGTK3.get_window_titlec                 C   s   | j  |¡ d S r   )r^   Ú	set_title)r    Útitler%   r%   r&   Úset_window_titleª  s    z"FigureManagerGTK3.set_window_titlec                 C   sb   | 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.rJ   N)	r˜   Zsize_requestrP   r“   rO   rc   r^   r›   Úresize)r    rc   rP   Ztoolbar_sizeZcanvas_sizer%   r%   r&   r¬   ­  s    


zFigureManagerGTK3.resize)r-   r.   r/   r0   r   rI   r’   r¥   r¤   r—   r¨   r«   r¬   r1   r%   r%   r#   r&   r   3  s   1r   c                       s~   e Zd Ze d¡edd„ ƒƒZ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‡  ZS )r¦   r>   c                 C   s   | j  d¡ ¡ S ©Nr^   )r“   rn   Zcairo_creater)   r%   r%   r&   rƒ   ¿  r„   zNavigationToolbar2GTK3.<lambda>c                 C   sz  || _ 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¡ | dt| |ƒ¡|_| |¡ q,t 
¡ }	|  	|	d¡ |	 d¡ |	 d¡ t ¡ }	|  	|	d¡ t  ¡ }
|
 !d¡ |	 "|
¡ t ¡ }	|  	|	d¡ t  ¡ | _#|	 "| j#¡ |  $¡  t% | |¡ d S )	NrK   Úimagesú-symbolic.svg)ÚzoomÚpanÚclickedFTu   <small>Â 
Â </small>)&Úwinr   r   Ú	set_styler   ÚToolbarStyleÚICONSÚ_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_widgetrA   ÚgetattrÚ_signal_handlerÚset_tooltip_textZset_drawZ
set_expandZToolItemÚLabelÚ
set_markupr‘   ÚmessageÚshow_allr
   )r    r“   r^   ÚtextZtooltip_textÚ
image_fileÚcallbackÚimageÚtbuttonÚtoolitemÚlabelr%   r%   r&   r   Á  sX    ÿÿüþ

 ÿ

ÿ

zNavigationToolbar2GTK3.__init__c                 C   s"   t  |¡}| j d|› d¡ d S )Nz<small>z</small>)r   Zmarkup_escape_textrÊ   rÉ   )r    ÚsÚescapedr%   r%   r&   Úset_messageõ  s    
z"NavigationToolbar2GTK3.set_messagec                 C   s.   | j  d¡}|d k	r*| t| ¡ t ¡  d S r­   )r“   rn   Ú
set_cursorÚcursordr   r{   )r    Úcursorr^   r%   r%   r&   rÖ   ù  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>  s     z:NavigationToolbar2GTK3.draw_rubberband.<locals>.<listcomp>)r“   rF   r–   rP   rs   )r    rU   ru   rv   rw   rx   rP   rr   r%   r%   r&   Údraw_rubberbandÿ  s
    z&NavigationToolbar2GTK3.draw_rubberbandc                 C   s   | j  d ¡ d S r   )r“   rs   r)   r%   r%   r&   Úremove_rubberband  s    z(NavigationToolbar2GTK3.remove_rubberbandc              
   C   sL   dD ]B\}}| j  |¡}|r| |j¡ | | jj|k¡ W 5 Q R X qd S )N))ZPanZPAN)ZZoomZZOOM)r·   ÚgetÚhandler_blockrÆ   Ú
set_activeÚmodeÚname)r    râ   ÚactiverX   r%   r%   r&   Ú_update_buttons_checked	  s
    z.NavigationToolbar2GTK3._update_buttons_checkedc                    s   t ƒ j|Ž  |  ¡  d S r   )r   r±   rä   r¡   r#   r%   r&   r±     s    zNavigationToolbar2GTK3.panc                    s   t ƒ j|Ž  |  ¡  d S r   )r   r°   rä   r¡   r#   r%   r&   r°     s    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\}}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 r@t!j" #|¡tjd< zˆjj$j%||d
 W n4 t&k
rŠ }	 zt't(|	ƒˆd W 5 d }	~	X Y nX d S )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_namer½   r   Zget_current_nameÚwith_suffix)r!   râ   Úfmt©Údialogr    r%   r&   Úon_notify_filter*  s
    ÿz<NavigationToolbar2GTK3.save_figure.<locals>.on_notify_filterzsavefig.directoryTr   )rj   )rå   ))r   ZFileChooserDialogr“   Úget_toplevelZFileChooserActionZSAVEZSTOCK_CANCELZResponseTypeZCANCELZ
STOCK_SAVEÚOKrë   ÚitemsZ
FileFilterÚset_nameZadd_patternZ
add_filterZget_default_filetypeZ
set_filterÚ	functoolsÚpartialrA   Zset_current_folderr   r¢   rì   Zget_default_filenameZset_do_overwrite_confirmationÚrunÚget_filenameré   rê   rI   ÚosÚpathÚdirnamerF   Zsavefigr‡   Úerror_msg_gtkr½   )
r    r!   râ   ZfmtsÚffrî   rñ   ÚresponseÚfnameÚer%   rï   r&   Úsave_figure  sH    
 ÿüÿ



z"NavigationToolbar2GTK3.save_figurec                 C   s\   | j jdk}| j jt| j jƒd k }d| jkr>| jd  |¡ d| jkrX| jd  |¡ d S )Nr   rJ   ÚBackÚForward)Z
_nav_stackÚ_posÚlenZ	_elementsr·   Zset_sensitive)r    Zcan_backwardZcan_forwardr%   r%   r&   Úset_history_buttonsD  s    

z*NavigationToolbar2GTK3.set_history_buttons)r-   r.   r/   r   r~   Úpropertyrt   r   rÕ   rÖ   rÜ   rÝ   rä   r±   r°   r  r  r1   r%   r%   r#   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   Z
HORIZONTALrÈ   Ú_messagerš   rË   Ú_groupsÚ
_toolitems)r    r™   r%   r%   r&   r   P  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 )NrK   r²   )r   rÁ   rÂ   rÃ   r¹   rº   r   r»   r¼   r¿   rÀ   rÄ   Ú_add_buttonrA   Ú
_call_toolrÇ   rË   r  Ú
setdefaultÚappend)
r    râ   ÚgroupÚpositionrÍ   ÚdescriptionZtogglerÐ   rÏ   Úsignalr%   r%   r&   Úadd_toolitemZ  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¶   r”   rË   r¸   )r    rX   r  r  r˜   r%   r%   r&   r  r  s    

zToolbarGTK3._add_buttonc                 C   s   |   |¡ d S r   )Ztrigger_tool)r    Zbtnrâ   r%   r%   r&   r  }  s    zToolbarGTK3._call_toolc                 C   sD   || j krd S | j | D ]&\}}| |¡ | |¡ | |¡ qd S r   )r  rß   rà   Zhandler_unblock)r    râ   ZtoggledrÑ   r  r%   r%   r&   Útoggle_toolitem€  s    


zToolbarGTK3.toggle_toolitemc                 C   sj   || j kr | j d| | ¡ d S | jD ]6}| j | D ]&\}}|| j| kr4| j|  |¡ q4q&| j |= d S )Nz%s Not in toolbar)r  r™   Zmessage_eventr
  Úremove)r    râ   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   r   r”   rË   )r    Úsepr%   r%   r&   r  “  s    zToolbarGTK3._add_separatorc                 C   s   | j  |¡ d S r   )r	  rÃ   ©r    rÓ   r%   r%   r&   rÕ   ™  s    zToolbarGTK3.set_messageN)r-   r.   r/   Z_icon_extensionr   r  r  r  r  r  r  rÕ   r%   r%   r%   r&   r§   M  s   
r§   r>   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚStatusbarGTK3c                 O   s.   t j| f|ž|Ž tj | ¡ |  d¡| _d S )NrÊ   )r   r   r   Ú	StatusbarZ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&   rÕ   ¤  s    zStatusbarGTK3.set_messageN)r-   r.   r/   r   rÕ   r%   r%   r%   r&   r    s   r  c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚRubberbandGTK3c                 C   s   t  |  ¡ d ||||¡ d S r   )r¦   rÜ   Ú"_make_classic_style_pseudo_toolbar)r    ru   rv   rw   rx   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                   @   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)r-   r.   r/   rF   r“   r%   r)   r%   r&   ÚPseudoToolbar¶  s   r%  )r¦   r  )r    r!   r"   r%  r%   r)   r&   Útrigger´  s    zSaveFigureGTK3.triggerN©r-   r.   r/   r&  r%   r%   r%   r&   r$  ³  s   r$  c                   @   s   e Zd Zdd„ ZdS )ÚSetCursorGTK3c                 C   s   t  |  ¡ |¡ d S r   )r¦   rÖ   r#  )r    rØ   r%   r%   r&   rÖ   ½  s     ÿzSetCursorGTK3.set_cursorN)r-   r.   r/   rÖ   r%   r%   r%   r&   r(  ¼  s   r(  c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚConfigureSubplotsGTK3c                 C   s   | j  |¡S r   )r“   r$   )r    Zfigr%   r%   r&   Ú_get_canvasÃ  s    z!ConfigureSubplotsGTK3._get_canvasc                 G   s   t  |  ¡ d ¡ d S r   )r¦   Zconfigure_subplotsr#  r¡   r%   r%   r&   r&  Æ  s     ÿzConfigureSubplotsGTK3.triggerN)r-   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_lockú+c                 S   s   g | ]}d | d ‘qS )ú<ú>r%   )rÙ   Úmodr%   r%   r&   rÛ   Ú  s     z0HelpGTK3._normalize_shortcut.<locals>.<listcomp>NrK   rJ   z<shift>Ú )Úsplitr  Ú
capitalizeÚisupperÚjoin)r    r]   ÚspecialÚpartsZmodsr%   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)rT   Údatar%   r%   r&   rƒ   ý  r„   z1HelpGTK3._show_shortcuts_window.<locals>.<lambda>ú c                 3   s"   | ]}ˆ   |¡rˆ  |¡V  qd S r   )r9  r7  )rÙ   r]   r)   r%   r&   Ú	<genexpr>   s   
þz2HelpGTK3._show_shortcuts_window.<locals>.<genexpr>)Zacceleratorrª   ZsubtitleÚHelpT)rª   ÚmodalZtransient_for)r   ZShortcutsSectionÚsortedr™   Ztoolsrô   r  ZShortcutsGroupr‘   ÚforallZShortcutsShortcutr4  Zget_tool_keymaprâ   ZShortcutsWindowÚ_figurer“   rò   r’   rË   )r    Úsectionrâ   Ztoolr  Zshortcutr^   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   ÚMessageDialogrA  r“   rò   ÚMessageTypeÚINFOÚButtonsTyperó   Z_get_help_textrø   rI   )r    rð   r%   r%   r&   Ú_show_shortcuts_dialog  s    
   ýzHelpGTK3._show_shortcuts_dialogc                 G   s(   t  ddd¡d kr|  ¡  n|  ¡  d S )Nrm   é   r   )r   Zcheck_versionrC  rH  r¡   r%   r%   r&   r&    s    
zHelpGTK3.triggerN)r-   r.   r/   r7  r9  rC  rH  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	ClipboardrÞ   r   ZSELECTION_CLIPBOARDr“   r£   Zget_geometryZpixbuf_get_from_windowZ	set_image)
r    r!   r"   Z	clipboardr^   rN   rQ   rc   rP   Zpbr%   r%   r&   r&  !  s
    
zToolCopyToClipboardGTK3.triggerNr'  r%   r%   r%   r&   rJ     s   rJ  Úwin32zmatplotlib.pngzmatplotlib.svgr®   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å   Útyperç   Zmessage_format)rò   Zis_toplevelÚ
isinstancer½   r4  Úmapr   rD  rE  ÚERRORrG  ró   rø   rI   )Úmsgrå   rð   r%   r%   r&   rý   1  s    
  þrý   c                   @   s    e Zd ZeZeZedd„ ƒZdS )Ú_BackendGTK3c                   C   s    t  ¡ dkrt ¡  t  ¡  d S )Nr   )r   r    r   Z_setup_new_guiappÚmainr%   r%   r%   r&   ÚmainloopN  s    z_BackendGTK3.mainloopN)	r-   r.   r/   r2   ZFigureCanvasr   ZFigureManagerÚstaticmethodrT  r%   r%   r%   r&   rR  I  s   rR  )N)`rö   Úloggingrú   Úpathlibr   rŠ   r€   r   r   r   r   Zmatplotlib._pylab_helpersr   Zmatplotlib.backend_basesr   r   r	   r
   r   r   r   r   Zmatplotlib.figurer   Zmatplotlib.widgetsr   ZgiÚImportErrorÚerrZrequire_versionÚ
ValueErrorr  Zgi.repositoryr   r   r   r   r   Ú	getLoggerr-   rˆ   Zget_major_versionZget_micro_versionZget_minor_versionZbackend_versionZDisplayÚget_defaultÚ_displayZMOVEÚCursorZnew_from_nameZHANDÚPOINTERZSELECT_REGIONZWAITr×   Ú	TypeErrorÚexcr   ZDrawingArear2   r   r  r¦   rŒ   r§   r~   r  r  ZRubberbandBaser"  ZSaveFigureBaser$  ZSetCursorBaser(  ZConfigureSubplotsBaser…   r)  ZToolHelpBaser+  ZToolCopyToClipboardBaserJ  ÚplatformZicon_filenamer½   r¾   r†   rý   ZToolSaveFigureZToolConfigureSubplotsZToolSetCursorZToolRubberbandZToolHelpZToolCopyToClipboardÚexportrR  r%   r%   r%   r&   Ú<module>   sŒ   (
  ÿ
     û$ [  P
		U

