B
    ]”t\…  ã               @   sÆ  d dl Z d dl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 d dlmZ dd	lmZmZmZmZ e  e¡Zd
e  ¡ e !¡ e "¡ f Z#dZ$ybej%ej& 'ej(j)¡ej*ej& 'ej(j+¡ej,ej& 'ej(j-¡ej.ej& 'ej(j/¡ej0ej& 'ej(j1¡iZ2W n, e3k
rZ Z4 ze5e4ƒ‚W ddZ4[4X Y nX G dd„ deƒZ6G dd„ dej7eƒZ8G dd„ deƒZ9G dd„ deej:ƒZ;G dd„ dej<ƒZ<G dd„ dej=ƒZ>G dd„ deej?ƒZ@G dd„ deejAƒZBG dd„ dejCƒZDG dd„ dejEƒZFG d d!„ d!ejGejHƒZIG d"d#„ d#ejJƒZKG d$d%„ d%ejLƒZMejNd&kr`d'ZOnd(ZOejP Qejd) d*eO¡ZRd/d+d,„ZSeDe_TeIe_UeFe_Ve>e_WeKe_XeMe_Ye@Z:e
jZG d-d.„ d.e
ƒƒZ[dS )0é    N)Úbackend_toolsÚcbookÚrcParams)ÚGcf)Ú_BackendÚFigureCanvasBaseÚFigureManagerBaseÚNavigationToolbar2ÚStatusbarBaseÚ	TimerBaseÚToolContainerBaseÚcursors)ÚToolManager)ÚFigure)ÚSubplotToolé   )ÚGLibÚGObjectÚGtkÚGdkz%s.%s.%sé`   c               @   s0   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
S )Ú	TimerGTK3aO  
    Subclass of :class:`backend_bases.TimerBase` using GTK3 for timer events.

    Attributes
    ----------
    interval : int
        The time between timer events in milliseconds. Default is 1000 ms.
    single_shot : bool
        Boolean flag indicating whether this timer should operate as single
        shot (run once and then stop). Defaults to False.
    callbacks : list
        Stores list of (func, args) tuples that will be called upon timer
        events. This list can be manipulated directly, or the functions
        `add_callback` and `remove_callback` can be used.

    c             C   s   |   ¡  t | j| j¡| _d S )N)Ú_timer_stopr   Ztimeout_addZ	_intervalÚ	_on_timerÚ_timer)Úself© r   ú?lib/python3.7/site-packages/matplotlib/backends/backend_gtk3.pyÚ_timer_start9   s    zTimerGTK3._timer_startc             C   s    | j d k	rt | j ¡ d | _ d S )N)r   r   Úsource_remove)r   r   r   r   r   ?   s    
zTimerGTK3._timer_stopc             C   s   | j d k	r|  ¡  |  ¡  d S )N)r   r   r   )r   r   r   r   Ú_timer_set_intervalD   s    
zTimerGTK3._timer_set_intervalc             C   s(   t  | ¡ | jr| jsdS d | _dS d S )NTF)r   r   Z	callbacksZ_singler   )r   r   r   r   r   J   s
    
zTimerGTK3._on_timerN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r    r   r   r   r   r   r   (   s
   r   c            2   @   sT  e Zd Z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d d!d"d#d$d%d&d'd(d)d*d+d,d-dd.œ1Z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/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zd7d8„ Zd9d:„ 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"dSS )TÚFigureCanvasGTK3ZcontrolÚshiftÚaltÚleftZupÚrightZdownÚescapeÚf1Úf2Zf3Zf4Zf5Zf6Zf7Zf8Zf9Zf10Zf11Zf12Úscroll_lockÚbreakÚ	backspaceZenterÚinsertÚdeleteÚhomeÚendÚpageupÚpagedownÚ0Ú1Ú2Ú3Ú4Ú5Ú6Ú7Ú8Ú9ú+ú-Ú*ú/Zdec)1iãÿ  iáÿ  iéÿ  iäÿ  iâÿ  iêÿ  iQÿ  iRÿ  iSÿ  iTÿ  iÿ  i¾ÿ  i¿ÿ  iÀÿ  iÁÿ  iÂÿ  iÃÿ  iÄÿ  iÅÿ  iÆÿ  iÇÿ  iÈÿ  iÉÿ  iÿ  iÿ  iÿ  iÿ  icÿ  iÿÿ  iPÿ  iWÿ  iUÿ  iVÿ  ižÿ  iœÿ  i™ÿ  i›ÿ  i–ÿ  iÿ  i˜ÿ  i•ÿ  i—ÿ  išÿ  i«ÿ  i­ÿ  iªÿ  i¯ÿ  iŸÿ  iÿ  c             C   sü   t  | |¡ tj | ¡ d| _d | _|  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 ¡ pöt ¡ }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)r   Ú__init__r   Ú_idle_draw_idZ_lastCursorÚconnectrD   rE   rF   rG   Úon_draw_eventrI   rJ   rK   rL   rM   rN   Z
set_eventsÚ	__class__Ú
event_maskZset_double_bufferedZset_can_focusZ_renderer_initr   Zmain_context_get_thread_defaultZmain_context_default)r   ÚfigureZdefault_contextr   r   r   rO   —   s(    

zFigureCanvasGTK3.__init__c             C   s"   |   ¡  | jdkrt | j¡ d S )Nr   )Zclose_eventrP   r   r   )r   r   r   r   Údestroy±   s    
zFigureCanvasGTK3.destroyc             C   sF   |j }|  ¡ j|j }|jtjjkr*d}nd}tj	| ||||d dS )Nr   éÿÿÿÿ)ÚguiEventF)
ÚxÚget_allocationÚheightÚyÚ	directionr   ZScrollDirectionZUPr   rD   )r   ÚwidgetÚeventrY   r\   Ústepr   r   r   rD   ·   s    zFigureCanvasGTK3.scroll_eventc             C   s0   |j }|  ¡ j|j }tj| |||j|d dS )N)rX   F)rY   rZ   r[   r\   r   rE   Úbutton)r   r^   r_   rY   r\   r   r   r   rE   Â   s    z#FigureCanvasGTK3.button_press_eventc             C   s0   |j }|  ¡ j|j }tj| |||j|d dS )N)rX   F)rY   rZ   r[   r\   r   rF   ra   )r   r^   r_   rY   r\   r   r   r   rF   É   s    z%FigureCanvasGTK3.button_release_eventc             C   s   |   |¡}tj| ||d dS )N)rX   T)Ú_get_keyr   rI   )r   r^   r_   Úkeyr   r   r   rI   Ð   s    
z FigureCanvasGTK3.key_press_eventc             C   s   |   |¡}tj| ||d dS )N)rX   T)rb   r   rJ   )r   r^   r_   rc   r   r   r   rJ   Õ   s    
z"FigureCanvasGTK3.key_release_eventc             C   sV   |j r|j ¡ \}}}}n|j|j| ¡   }}}|  ¡ j| }tj	| |||d dS )N)rX   F)
Zis_hintÚwindowZget_pointerrY   r\   Z	get_staterZ   r[   r   rK   )r   r^   r_   ÚtrY   r\   Ústater   r   r   rK   Ú   s    z$FigureCanvasGTK3.motion_notify_eventc             C   s   t  | |¡ d S )N)r   rL   )r   r^   r_   r   r   r   rL   å   s    z#FigureCanvasGTK3.leave_notify_eventc             C   s.   |j }|  ¡ j|j }tj| |||fd d S )N)rX   Zxy)rY   rZ   r[   r\   r   rM   )r   r^   r_   rY   r\   r   r   r   rM   è   s    z#FigureCanvasGTK3.enter_notify_eventc             C   sD   | j j}|j| }|j| }| j j||dd t | ¡ |  ¡  d S )NF)Úforward)rU   ÚdpiÚwidthr[   Úset_size_inchesr   Zresize_eventÚ	draw_idle)r   r^   Z
allocationZdpivalZwinchZhinchr   r   r   rN   î   s    


zFigureCanvasGTK3.size_allocatec             C   s‚   |j | jkr| j|j  }n|j dk r0t|j ƒ}nd }tjjdftjjdftjjdfg}x&|D ]\}}|j|@ r\d 	||¡}q\W |S )Né   Úsuperr'   Zctrlz{0}+{1})
ZkeyvalÚkeyvaldÚchrr   ZModifierTypeZ	MOD4_MASKZ	MOD1_MASKZCONTROL_MASKrf   Úformat)r   r_   rc   Z	modifiersZkey_maskÚprefixr   r   r   rb   ö   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 )Nrd   é   F)rg   )Úget_propertyri   r[   rU   rh   rj   )r   r^   r_   ÚwÚhrh   r   r   r   rG   	  s    z FigureCanvasGTK3.configure_eventc             C   s   d S )Nr   )r   r^   Úctxr   r   r   rR     s    zFigureCanvasGTK3.on_draw_eventc             C   s,   |   ¡ r(|  ¡ r(|  ¡  |  d¡ d¡ d S )Nrd   F)Zget_visibleZ
get_mappedZ
queue_drawrs   Zprocess_updates)r   r   r   r   rH     s    zFigureCanvasGTK3.drawc                s*   ˆ j dkrd S ‡ fdd„}t |¡ˆ _ d S )Nr   c                 s   zˆ   ¡  W d dˆ _X dS )Nr   F)rH   rP   )Úargs)r   r   r   Ú	idle_draw"  s    z-FigureCanvasGTK3.draw_idle.<locals>.idle_draw)rP   r   Zidle_add)r   rx   r   )r   r   rk     s    
zFigureCanvasGTK3.draw_idlec             O   s
   t ||ŽS )a  
        Creates a new backend-specific subclass of :class:`backend_bases.Timer`.
        This is useful for getting periodic events through the backend's native
        event loop. Implemented only for backends with GUIs.

        Other Parameters
        ----------------
        interval : scalar
            Timer interval in milliseconds
        callbacks : list
            Sequence of (func, args, kwargs) where ``func(*args, **kwargs)``
            will be executed by the timer every *interval*.
        )r   )r   rw   Úkwargsr   r   r   Ú	new_timer*  s    zFigureCanvasGTK3.new_timerc             C   s2   t  ¡  xt ¡ rt ¡  q
W t  ¡  t  ¡  d S )N)r   Zthreads_enterr   Zevents_pendingÚmain_iterationÚflushZthreads_leave)r   r   r   r   Úflush_events:  s
    
zFigureCanvasGTK3.flush_eventsN)#r!   r"   r#   rn   r   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_MASKrT   rO   rV   rD   rE   rF   rI   rJ   rK   rL   rM   rN   rb   rG   rR   rH   rk   rz   r}   r   r   r   r   r%   V   sŠ   F
r%   c               @   s\   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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ˆ  ¡ yˆj t¡ W n( t	k
rl   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ƒ}ˆ ¡ ˆ_ˆ ¡ ˆ_d ˆ_ ‡fd	d
„}ˆjrdt! "ˆj¡ ˆjrdt! #ˆj¡ t$ˆjƒˆ_ ||ˆj dddƒ7 }||t %¡ dddƒ7 }ˆjd k	rŽˆj ¡  ||ˆjdddƒ7 }ˆj &||¡ ‡ fdd„}ˆj 'd|¡ ˆj 'd|¡ t( )¡ râˆj ¡  ˆj *¡  ˆj +¡  d S )NÚ
matplotlibZ
Matplotlibz	Figure %dz"Could not load matplotlib icon: %sr   ÚorientationTr   c                s(   |   ¡  ˆ j | ddd¡ |  ¡ }|jS )NFr   )ÚshowÚvboxZpack_endÚsize_requestr[   )ZchildÚexpandZfillZpaddingrƒ   )r   r   r   Ú
add_widgetp  s    z.FigureManagerGTK3.__init__.<locals>.add_widgetFc                 s   t  ˆ ¡ d S )N)r   rV   )rw   )Únumr   r   rV   „  s    z+FigureManagerGTK3.__init__.<locals>.destroyrV   Zdelete_event),r   rO   r   ÚWindowrd   Z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ÚintrU   Úbboxri   r[   Ú_get_toolmanagerÚtoolmanagerÚ_get_toolbarÚtoolbarZ	statusbarr   Zadd_tools_to_managerZadd_tools_to_containerÚStatusbarGTK3Z
HSeparatorÚset_default_sizerQ   r   Úis_interactiverk   Z
grab_focus)r   r•   r†   rt   ru   r…   rV   r   )r†   r   r   rO   R  sL    









zFigureManagerGTK3.__init__c             G   sZ   | j  ¡  | j ¡  | j ¡  | jr.| j ¡  t ¡ dkrVt ¡ sVt	 
¡ dkrVt	 ¡  d S )Nr   r   )r‚   rV   rd   r•   rœ   r   Zget_num_fig_managersr   rŸ   r   Ú
main_levelZ	main_quit)r   rw   r   r   r   rV   Ž  s    



zFigureManagerGTK3.destroyc             C   s   | j  ¡  | j  ¡  d S )N)rd   r   Úpresent)r   r   r   r   r   š  s    
zFigureManagerGTK3.showc             C   s*   | j  | _ | j r| j ¡  n
| j ¡  d S )N)Ú_full_screen_flagrd   Z
fullscreenZunfullscreen)r   r   r   r   Úfull_screen_toggleŸ  s    
z$FigureManagerGTK3.full_screen_toggleFc             C   s<   t d dkrt| j| jƒ}nt d dkr4t| jƒ}nd }|S )Nrœ   Ztoolbar2rš   )r   ÚNavigationToolbar2GTK3r•   rd   ÚToolbarGTK3rš   )r   rœ   r   r   r   r›   §  s    zFigureManagerGTK3._get_toolbarc             C   s"   t d dkrt| jjƒ}nd }|S )Nrœ   rš   )r   r   r•   rU   )r   rš   r   r   r   r™   ²  s    z"FigureManagerGTK3._get_toolmanagerc             C   s
   | j  ¡ S )N)rd   Z	get_title)r   r   r   r   Úget_window_titleº  s    z"FigureManagerGTK3.get_window_titlec             C   s   | j  |¡ d S )N)rd   Ú	set_title)r   Útitler   r   r   rˆ   ½  s    z"FigureManagerGTK3.set_window_titlec             C   s   | j  ||¡ dS )zset the canvas size in pixelsN)rd   Úresize)r   ri   r[   r   r   r   r©   À  s    zFigureManagerGTK3.resizeN)r!   r"   r#   r$   rO   rV   r   r£   r¢   r›   r™   r¦   rˆ   r©   r   r   r   r   r~   B  s   <r~   c               @   sT   e 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d„ ZdS )r¤   c             C   s(   || _ tj | ¡ t | |¡ d | _d S )N)Úwinr   rO   r	   rv   )r   r•   rd   r   r   r   rO   É  s    zNavigationToolbar2GTK3.__init__c             C   s   | j  |¡ d S )N)ÚmessageÚ	set_label)r   Úsr   r   r   Úset_messageÏ  s    z"NavigationToolbar2GTK3.set_messagec             C   s"   | j  d¡ t| ¡ t ¡  d S )Nrd   )r•   rs   Ú
set_cursorÚcursordr   r{   )r   Úcursorr   r   r   r¯   Ò  s    z!NavigationToolbar2GTK3.set_cursorc       
      C   sÈ   | j  d¡ ¡ | _| j  ¡  | j jjj}|| }|| }t|| ƒ}t|| ƒ}dd„ t	||ƒt	||ƒ||fD ƒ}	| j 
¡  | j d¡ | j |	d |	d |	d |	d ¡ | j ddd¡ | j ¡  d	S )
zKadapted from http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/189744rd   c             S   s   g | ]}t |ƒ‘qS r   )r—   )Ú.0Úvalr   r   r   ú
<listcomp>ã  s    z:NavigationToolbar2GTK3.draw_rubberband.<locals>.<listcomp>g      à?r   r   é   rr   N)r•   rs   Úcairo_createrv   rH   rU   r˜   r[   ÚabsÚminÚnew_pathÚset_line_widthÚ	rectangleÚset_source_rgbÚstroke)
r   r_   Úx0Úy0Úx1Úy1r[   rt   ru   Úrectr   r   r   Údraw_rubberbandÖ  s    
"
"z&NavigationToolbar2GTK3.draw_rubberbandc       
      C   s  |   tjj¡ tj td d¡}x˜| jD ]Ž\}}}}|d krN|  	t 
¡ d¡ q(tj ||d ¡}t ¡ }| |¡ t ¡ }| |¡ | |¡ |  	|d¡ | dt| |ƒ¡ | |¡ q(W t 
¡ }	|  	|	d¡ |	 d¡ |	 d¡ t ¡ }	|  	|	d¡ t ¡ | _|	 | j¡ |  ¡  d S )NÚdatapathÚimagesrW   z.pngÚclickedFT)Ú	set_styler   ÚToolbarStyleÚICONSÚosÚpathÚjoinr   Z	toolitemsr0   ZSeparatorToolItemÚImageÚset_from_fileÚ
ToolButtonr¬   Úset_icon_widgetrQ   ÚgetattrÚset_tooltip_textZset_drawZ
set_expandZToolItemÚLabelr«   r”   Úshow_all)
r   ZbasedirÚtextZtooltip_textÚ
image_fileÚcallbackÚfnameÚimageÚtbuttonÚtoolitemr   r   r   Ú_init_toolbarë  s0    





z$NavigationToolbar2GTK3._init_toolbarc             C   s@   t d| jtj td ¡| j ¡ | j ¡ d}| 	| j 
¡ ¡ |S )NzSave the figurezsavefig.directory)r¨   ÚparentrË   Ú	filetypesÚdefault_filetype)ÚFileChooserDialogrª   rÊ   rË   Ú
expanduserr   r•   Úget_supported_filetypesÚget_default_filetypeÚset_current_nameÚget_default_filename)r   Úfcr   r   r   Úget_filechooser	  s    z&NavigationToolbar2GTK3.get_filechooserc          
   G   s–   |   ¡ }| ¡ \}}| ¡  |r’tj td ¡}|dkrHtj |¡td< y| jj	j
||d W n2 tk
r } ztt|ƒ| d W d d }~X Y nX d S )Nzsavefig.directoryÚ )rp   )rÝ   )rç   Úget_filename_from_userrV   rÊ   rË   rá   r   Údirnamer•   rU   Zsavefigr‹   Úerror_msg_gtkÚstr)r   rw   ÚchooserrØ   rp   Ú	startpathÚer   r   r   Úsave_figure  s    z"NavigationToolbar2GTK3.save_figurec       	      C   sÖ   t dd}|  |¡}|jdd t| jj|ƒ}t|jjƒ}t|jj	ƒ}t
 ¡ }y| t¡ W n tk
rp   Y nX | d¡ | ||¡ t
 ¡ }| dt
jj¡ | |¡ | ¡  | ¡  | |ddd¡ | ¡  d S )	N)é   rr   )ÚfigsizegÍÌÌÌÌÌì?)ÚtopzSubplot Configuration Toolr€   Tr   )r   Ú_get_canvasÚsubplots_adjustr   r•   rU   r—   r˜   ri   r[   r   r‡   r‰   rŠ   r‹   r§   rž   r   r‘   r’   r“   r”   r   r–   )	r   ra   Útoolfigr•   Útoolrt   ru   rd   r‚   r   r   r   Úconfigure_subplots!  s(    



z)NavigationToolbar2GTK3.configure_subplotsc             C   s   | j  |¡S )N)r•   rS   )r   Úfigr   r   r   rô   <  s    z"NavigationToolbar2GTK3._get_canvasN)r!   r"   r#   rO   r®   r¯   rÃ   rÜ   rç   rð   rø   rô   r   r   r   r   r¤   È  s   
r¤   c                   sf   e Zd ZdZddejjejejj	ej
ejjfdg df‡ fdd„	Zejdddd	d
„ ƒZdd„ Z‡  ZS )rà   z‰GTK+ file selector which remembers the last file/directory
    selected and presents the user with a menu of supported image formats
    z	Save fileNc                sT  t ƒ  ||||¡ ˆ  tjj¡ ˆ  d¡ |s6t ¡ }ˆ  	|¡ ˆ  
d| ¡ tjdd}| tjddddd¡ t tj¡}	t ¡ }
|
 |	¡ t ¡ }|
 |d¡ |
 |d	d¡ | |
ddd¡ |ˆ _t| ¡ ƒ‰d}x8tˆƒD ],\}\}}|	 d
||f g¡ ||krâ|}qâW |
 |¡ |ˆ _d‡ ‡fdd„	}|
 d|¡ | ¡  ˆ  |¡ d S )NTzimage.é
   )ZspacingzFile Format:)ZlabelFr   rÕ   z	%s (*.%s)c                s†   t j ˆ  ¡ ¡\}}t j |¡\}}|dd… }ˆ|  ¡  d }|ˆ _|ˆ jkr^|d | }n|dkrx| d¡d | }ˆ  	|¡ dS )zFile extension changedr   Nr   Ú.rè   )
rÊ   rË   ÚsplitÚget_filenameÚsplitextZ
get_activeÚextrÞ   Úrstriprä   )ÚcboxÚdataÚheadÚfilenameÚrootrÿ   Znew_ext)r   Úsorted_filetypesr   r   Úcb_cbox_changedn  s    
z3FileChooserDialog.__init__.<locals>.cb_cbox_changedZchanged)N)rm   rO   Zset_default_responser   ÚResponseTypeÚOKZset_do_overwrite_confirmationrÊ   ÚgetcwdZset_current_folderrä   r   r–   rÓ   Z	ListStorer   ZTYPE_STRINGZComboBoxZ	set_modelZCellRendererTextZadd_attributerÞ   ÚsortedÚitemsÚ	enumerateÚappendÚ
set_activerÿ   rQ   rÔ   Zset_extra_widget)r   r¨   rÝ   ÚactionÚbuttonsrË   rÞ   rß   ZhboxZ	liststorer  ZcellÚdefaultÚirÿ   Únamer  )rS   )r   r  r   rO   D  s:    




zFileChooserDialog.__init__z3.0zsorted(self.filetypes.items()))Zalternativec             C   s   t | j ¡ ƒS )N)r  rÞ   r  )r   r   r   r   r    s    z"FileChooserDialog.sorted_filetypesc             C   s0   |   ¡ ttjjƒkr"|  ¡ | jfS d | jfS d S )N)Úrunr—   r   r  r	  rý   rÿ   )r   r   r   r   ré   …  s    z(FileChooserDialog.get_filename_from_user)r!   r"   r#   r$   r   ZFileChooserActionZSAVEZSTOCK_CANCELr  ZCANCELZ
STOCK_SAVEr	  rO   r   Z
deprecatedr  ré   Ú__classcell__r   r   )rS   r   rà   @  s   
5rà   c               @   s   e Zd Zdd„ Zdd„ ZdS )ÚRubberbandGTK3c             O   s   t jj| f|ž|Ž d | _d S )N)r   ÚRubberbandBaserO   rv   )r   rw   ry   r   r   r   rO     s    zRubberbandGTK3.__init__c       	      C   sÊ   | j j d¡ ¡ | _| j j ¡  | j jj}|| }|| }t|| ƒ}t|| ƒ}dd„ t	||ƒt	||ƒ||fD ƒ}| j 
¡  | j d¡ | j |d |d |d |d ¡ | j ddd¡ | j ¡  d S )	Nrd   c             S   s   g | ]}t |ƒ‘qS r   )r—   )r²   r³   r   r   r   r´   Ÿ  s    z2RubberbandGTK3.draw_rubberband.<locals>.<listcomp>g      à?r   r   rµ   rr   )rU   r•   rs   r¶   rv   rH   r˜   r[   r·   r¸   r¹   rº   r»   r¼   r½   )	r   r¾   r¿   rÀ   rÁ   r[   rt   ru   rÂ   r   r   r   rÃ   ‘  s    
"
"zRubberbandGTK3.draw_rubberbandN)r!   r"   r#   rO   rÃ   r   r   r   r   r  Œ  s   r  c               @   sH   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S )r¥   z.pngc             C   sp   t  | |¡ tj | ¡ |  dtjj¡ t ¡ | _| j dtjj¡ |  	| jddd¡ | j 
¡  i | _i | _d S )Nr€   Fr   )r   rO   r   r   r‘   r’   r“   Ú	_toolareaZ
HORIZONTALr–   rÔ   Ú_groupsÚ
_toolitems)r   rš   r   r   r   rO   «  s    

zToolbarGTK3.__init__c       
      C   s¦   |rt  ¡ }nt  ¡ }| |¡ |d k	rDt  ¡ }| |¡ | |¡ |d krPd}|  |||¡ | d| j	|¡}	| 
|¡ | ¡  | j |g ¡ | j|  ||	f¡ d S )NrW   rÆ   )r   ZToggleToolButtonrÏ   r¬   rÍ   rÎ   rÐ   Ú_add_buttonrQ   Ú
_call_toolrÒ   rÔ   r  Ú
setdefaultr  )
r   r  ÚgroupÚpositionrÖ   ÚdescriptionZtogglerÚ   rÙ   Úsignalr   r   r   Úadd_toolitem·  s     




zToolbarGTK3.add_toolitemc             C   sh   || j krR| j r|  ¡  t ¡ }| tjj¡ | j |ddd¡ | 	¡  || j |< | j |  
||¡ d S )NFr   )r  Ú_add_separatorr   ÚToolbarrÇ   rÈ   rÉ   r  r–   rÔ   r0   )r   ra   r  r   rœ   r   r   r   r  Î  s    

zToolbarGTK3._add_buttonc             C   s   |   |¡ d S )N)Ztrigger_tool)r   Zbtnr  r   r   r   r  Ù  s    zToolbarGTK3._call_toolc             C   sH   || j krd S x4| j | D ]&\}}| |¡ | |¡ | |¡ qW d S )N)r  Zhandler_blockr  Zhandler_unblock)r   r  ZtoggledrÛ   r"  r   r   r   Útoggle_toolitemÜ  s    


zToolbarGTK3.toggle_toolitemc             C   sr   || j kr | j d| | ¡ d S xD| jD ]:}x4| j | D ]&\}}|| j| kr8| j|  |¡ q8W q(W | j |= d S )Nz%s Not in toolbar)r  rš   Zmessage_eventr  Úremove)r   r  r  rÛ   Z_signalr   r   r   Úremove_toolitemä  s    
zToolbarGTK3.remove_toolitemc             C   s6   t  ¡ }| dt jj¡ | j |ddd¡ | ¡  d S )Nr€   FTr   )r   Z	Separatorr‘   r’   r“   r  r–   rÔ   )r   Úsepr   r   r   r$  ï  s    zToolbarGTK3._add_separatorN)r!   r"   r#   Z_icon_extensionrO   r#  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 )r   c             O   s.   t j| f|ž|Ž tj | ¡ |  d¡| _d S )Nr«   )r
   rO   r   Ú	StatusbarZget_context_idÚ_context)r   rw   ry   r   r   r   rO   ÷  s    zStatusbarGTK3.__init__c             C   s   |   | j¡ |  | j|¡ d S )N)Úpopr+  Úpush)r   r­   r   r   r   r®   ü  s    zStatusbarGTK3.set_messageN)r!   r"   r#   rO   r®   r   r   r   r   r   ö  s   r   c               @   s   e Zd Zdd„ Zdd„ ZdS )ÚSaveFigureGTK3c             C   sL   t d| jjjjtj td ¡| jj 	¡ | jj 
¡ d}| | jj ¡ ¡ |S )NzSave the figurezsavefig.directory)r¨   rÝ   rË   rÞ   rß   )rà   rU   r•   Úmanagerrd   rÊ   rË   rá   r   râ   rã   rä   rå   )r   ræ   r   r   r   rç     s    

zSaveFigureGTK3.get_filechooserc          
   O   s    |   ¡ }| ¡ \}}| ¡  |rœtj td ¡}|dkrB|td< ntj |¡td< y| jj	j
||d W n2 tk
rš } ztt|ƒ| d W d d }~X Y nX d S )Nzsavefig.directoryrè   )rp   )rÝ   )rç   ré   rV   rÊ   rË   rá   r   rê   rU   r•   Zprint_figurer‹   rë   rì   )r   rw   ry   rí   rØ   Zformat_rî   rï   r   r   r   Útrigger  s    
zSaveFigureGTK3.triggerN)r!   r"   r#   rç   r0  r   r   r   r   r.    s   
r.  c               @   s   e Zd Zdd„ ZdS )ÚSetCursorGTK3c             C   s   | j j d¡ t| ¡ d S )Nrd   )rU   r•   rs   r¯   r°   )r   r±   r   r   r   r¯      s    zSetCursorGTK3.set_cursorN)r!   r"   r#   r¯   r   r   r   r   r1    s   r1  c               @   s6   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zdd
d„Zd	S )ÚConfigureSubplotsGTK3c             O   s   t jj| f|ž|Ž d | _d S )N)r   ÚConfigureSubplotsBaserO   rd   )r   rw   ry   r   r   r   rO   %  s    zConfigureSubplotsGTK3.__init__c             C   s  | j r
d S tjdd| _ y| j j  t¡ W n tk
r>   Y nX 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 )NzSubplot Configuration Tool)r¨   r€   rV   )rñ   rr   )rò   gÍÌÌÌÌÌì?)ró   Tr   )rd   r   r‡   r‰   rŠ   r‹   r   r‚   r‘   r’   r“   r”   r   rQ   rV   r   rU   r•   rS   rõ   r   r—   r˜   ri   r[   rž   r–   )r   rö   r•   rt   ru   r   r   r   Úinit_window)  s,    


z!ConfigureSubplotsGTK3.init_windowc             G   s   | j  ¡  d | _ d S )N)rd   rV   )r   rw   r   r   r   rV   J  s    
zConfigureSubplotsGTK3.destroyc             C   s   | j  |¡S )N)r•   rS   )r   rù   r   r   r   rô   N  s    z!ConfigureSubplotsGTK3._get_canvasNc             C   s   |   ¡  | j ¡  d S )N)r4  rd   r¡   )r   Zsenderr_   r  r   r   r   r0  Q  s    zConfigureSubplotsGTK3.trigger)N)r!   r"   r#   rO   r4  rV   rô   r0  r   r   r   r   r2  $  s
   !r2  c               @   s,   e Z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)r/   r5   r4   r-   r@   c             S   s   g | ]}d | d ‘qS )ú<ú>r   )r²   Úmodr   r   r   r´   e  s    z0HelpGTK3._normalize_shortcut.<locals>.<listcomp>NrW   r   z<shift>rè   )rü   ÚlenÚ
capitalizeÚisupperrÌ   )r   rc   ZspecialÚpartsZmodsr   r   r   Ú_normalize_shortcutW  s    



zHelpGTK3._normalize_shortcutc                sÀ   t  ¡ }x€tˆ jj ¡ ƒD ]l\}}|js*qt  ¡ }| |¡ | 	dd„ d ¡ t j
d ‡ fdd„ˆ j |¡D ƒ¡|j|jd}| |¡ qW t jddˆ jj ¡ d	}| ¡  | |¡ | ¡  d S )
Nc             S   s
   |   d¡S )NF)Zset_visible)r^   r  r   r   r   Ú<lambda>  s    z1HelpGTK3._show_shortcuts_window.<locals>.<lambda>ú c             3   s    | ]}d |krˆ   |¡V  qdS )zcmd+N)r=  )r²   rc   )r   r   r   ú	<genexpr>ƒ  s   z2HelpGTK3._show_shortcuts_window.<locals>.<genexpr>)Zacceleratorr¨   ZsubtitleÚHelpT)r¨   ZmodalZtransient_for)r   ZShortcutsSectionr  rš   Ztoolsr  r!  ZShortcutsGroupr”   ZforallZShortcutsShortcutrÌ   Zget_tool_keymapr  ZShortcutsWindowÚ_figurer•   Úget_toplevelr   rÔ   )r   Zsectionr  r÷   r  Zshortcutrd   r   )r   r   Ú_show_shortcuts_windowq  s*    



zHelpGTK3._show_shortcuts_windowc             C   s>   t j| jj ¡ dt jjt jj|  	¡ dd}| 
¡  | ¡  d S )Nr   rA  )r¨   )r   ÚMessageDialogrB  r•   rC  ÚMessageTypeÚINFOÚButtonsTyper	  Z_get_help_textr  rV   )r   Údialogr   r   r   Ú_show_shortcuts_dialog”  s    
zHelpGTK3._show_shortcuts_dialogc             G   s(   t  ddd¡d kr|  ¡  n|  ¡  d S )Nrr   é   r   )r   Zcheck_versionrD  rJ  )r   rw   r   r   r   r0  œ  s    
zHelpGTK3.triggerN)r!   r"   r#   r=  rD  rJ  r0  r   r   r   r   r5  V  s   #r5  c               @   s   e Zd Zdd„ ZdS )ÚToolCopyToClipboardGTK3c       
      O   sH   t j tj¡}| j ¡ }| ¡ \}}}}t |||||¡}	| 	|	¡ d S )N)
r   Z	ClipboardÚgetr   ZSELECTION_CLIPBOARDr•   Z
get_windowZget_geometryZpixbuf_get_from_windowZ	set_image)
r   rw   ry   Z	clipboardrd   rY   r\   ri   r[   Zpbr   r   r   r0  ¤  s
    
zToolCopyToClipboardGTK3.triggerN)r!   r"   r#   r0  r   r   r   r   rL  £  s   rL  Zwin32zmatplotlib.pngzmatplotlib.svgrÄ   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Ý   Útyper  Zmessage_format)rC  Zis_toplevelÚ
isinstancerì   rÌ   Úmapr   rE  rF  ZERRORrH  r	  r  rV   )ÚmsgrÝ   rI  r   r   r   rë   µ  s    
rë   c               @   s0   e Zd ZdZeZeZedd„ ƒZ	edd„ ƒZ
dS )Ú_BackendGTK3Zgtk3c             C   s   | j  ¡  d S )N)r•   rk   )r/  r   r   r   Útrigger_manager_draw×  s    z!_BackendGTK3.trigger_manager_drawc               C   s   t  ¡ dkrt  ¡  d S )Nr   )r   r    Úmainr   r   r   r   ÚmainloopÛ  s    z_BackendGTK3.mainloopN)r!   r"   r#   Zrequired_interactive_frameworkr%   ZFigureCanvasr~   ZFigureManagerÚstaticmethodrT  rV  r   r   r   r   rS  Ñ  s
   rS  )N)\ZloggingrÊ   rŽ   r   r   r   r   Zmatplotlib._pylab_helpersr   Zmatplotlib.backend_basesr   r   r   r	   r
   r   r   r   Zmatplotlib.backend_managersr   Zmatplotlib.figurer   Zmatplotlib.widgetsr   Z_gtk3_compatr   r   r   r   Z	getLoggerr!   rŒ   Zget_major_versionZget_micro_versionZget_minor_versionZbackend_versionZPIXELS_PER_INCHZMOVEZCursorÚnewZ
CursorTypeZFLEURZHANDZHAND2ZPOINTERZLEFT_PTRZSELECT_REGIONZTCROSSZWAITZWATCHr°   Ú	TypeErrorÚexcÚImportErrorr   ZDrawingArear%   r~   r%  r¤   rà   r  r  r   r¥   r*  r   ZSaveFigureBaser.  ZSetCursorBaser1  r3  r‡   r2  ZToolHelpBaser5  ZToolCopyToClipboardBaserL  ÚplatformZicon_filenamerË   rÌ   rŠ   rë   ZToolSaveFigureZToolConfigureSubplotsZToolSetCursorZToolRubberbandZToolHelpZToolCopyToClipboardZexportrS  r   r   r   r   Ú<module>   sh   (
. m xLN2M

