U
    \	¸aÃ—  ã                J   @   s  d dl Z d dlZ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mZ d dlm  m  mZ d dl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% e!Z&ej'j(d	ej'j)d
ej'j*dej'j+dej'j,dej'j-dej'j.dej'j/dej'j0dej'j1dej'j2dej'j3dej'j4dej'j5dej'j6dej'j7dej'j8dej'j9dej'j:dej'j;dej'j<dej'j=dej'j>dej'j?dej'j@d ej'jAd!ej'jBd"ej'jCd#ej'jDd$ej'jEd%ej'jFd&ej'jGdej'jHd'ej'jId(ej'jJd)ej'jKd*ej'jLd+i%ZMejNd,kr*eM Oej'j(d-ej'j+d	i¡ ej'jPej'j(fej'jQej'j*fej'jRej'j)fej'jSej'j+fgZTejUej'jVejWej'jXejYej'jZej[ej'j\ej]ej'j^iZ_d Z`dZad.Zbd/Zcd0d1„ eTD ƒZddaed2d3„ Zfd4d5„ ZgG d6d7„ d7eƒZhG d8d9„ d9e jieƒZjG d:d;„ d;e jkƒZlG d<d=„ d=eƒZmG d>d?„ d?ee jnƒZoG d@dA„ dAeƒZpG dBdC„ dCee jnƒZqe rdD¡G dEdF„ dFee jsƒƒZtG dGdH„ dHejuƒZvG dIdJ„ dJejwƒZxG dKdL„ dLejyƒZzG dMdN„ dNej{ƒZ|G dOdP„ dPej}ƒZ~G dQdR„ dRejƒZ€exe_eve_‚eze_ƒe|e_„e~e_…e€e_†ej‡G dSdT„ dTeƒƒZˆdS )Ué    N)Ú_apiÚbackend_toolsÚcbook)ÚGcf)	Ú_BackendÚFigureCanvasBaseÚFigureManagerBaseÚNavigationToolbar2Ú	TimerBaseÚcursorsÚToolContainerBaseÚStatusbarBaseÚMouseButton)ÚUiSubplotToolé   )Ú	qt_compat)ÚQtCoreÚQtGuiÚ	QtWidgetsÚ__version__ÚQT_APIÚ_devicePixelRatioFÚ
_isdeletedÚ_setDevicePixelRatioÚcontrolÚshiftZaltÚmetaÚsuperZ	caps_lockZenterÚleftZupÚrightZdownÚescapeÚf1Úf2Zf3Zf4Zf5Zf6Zf7Zf8Zf9Zf10Zf11Zf12ÚhomeÚendZpageupZpagedownÚtabZ	backspaceÚinsertÚdeleteÚpauseZsysreqÚclearÚdarwinÚcmdé   é   c                 C   s   g | ]\}}t | ||f‘qS © )ÚSPECIAL_KEYS©Ú.0ÚmodÚkeyr.   r.   úC/tmp/pip-unpacked-wheel-wjyw_3jo/matplotlib/backends/backend_qt5.pyÚ
<listcomp>X   s    r5   c                  C   sÖ   t dkrªtj ¡ } | dkr¦tj ¡ s,tdƒ‚ztj t	j
j¡ W n tk
rT   Y nX ztj t	j
jj¡ W n tk
r€   Y nX t dg¡a t j t j¡ t ¡  n| a zt  t	j
j¡ W n tk
rÐ   Y nX dS )zJ
    Only one qApp can exist at a time, so check before creating one.
    NzInvalid DISPLAY variableÚ
matplotlib)ÚqAppr   ÚQApplicationÚinstanceÚmplZ_c_internal_utilsZdisplay_is_validÚRuntimeErrorÚsetAttributer   ÚQtZAA_EnableHighDpiScalingÚAttributeErrorZ#setHighDpiScaleFactorRoundingPolicyZ HighDpiScaleFactorRoundingPolicyZPassThroughZlastWindowClosedÚconnectÚquitr   Z_setup_new_guiappZAA_UseHighDpiPixmaps)Zappr.   r.   r4   Ú_create_qApp`   s2    

ÿÿ
rA   c                    s@   t dkrˆ S tjj‰‡fdd„‰t ˆ ¡‡ ‡fdd„ƒ}|S dS )zT
    Decorator for ``__init__`` to allow ``super().__init__`` on PyQt4/PySide2.
    ZPyQt5c                    sN   ˆ | ƒ t | ƒj}tdd„ || tj¡d d … D ƒƒ}|j| f|ž|Ž d S )Nc                 s   s&   | ]}|j  d ¡d dkr|V  qdS )Ú.r   )ZPyQt4ÚsipZPySideZPySide2ZShibokenN)Ú
__module__Úsplit)r1   Úclsr.   r.   r4   Ú	<genexpr>›   s   ÿzF_allow_super_init.<locals>.cooperative_qwidget_init.<locals>.<genexpr>r   )ÚtypeÚ__mro__ÚnextÚindexr   ÚQWidgetÚ__init__)ÚselfÚargsÚkwargsÚmroZnext_coop_init)Úqwidget_initr.   r4   Úcooperative_qwidget_init˜   s    
ÿz3_allow_super_init.<locals>.cooperative_qwidget_initc              	      s0   t jtjˆd ˆ | f|ž|Ž W 5 Q R X d S )N)rM   )r   Ú_setattr_cmr   rL   ©rN   rO   rP   )rM   rS   r.   r4   Úwrapper¡   s    ÿz"_allow_super_init.<locals>.wrapperN)r   r   rL   rM   Ú	functoolsÚwraps)rM   rV   r.   )rM   rS   rR   r4   Ú_allow_super_initƒ   s    	rY   c                       sH   e Zd ZdZ‡ fdd„Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	‡  Z
S )ÚTimerQTz-Subclass of `.TimerBase` using QTimer events.c                    s,   t  ¡ | _| jj | j¡ tƒ j||Ž d S ©N)r   ÚQTimerÚ_timerÚtimeoutr?   Z	_on_timerr   rM   rU   ©Ú	__class__r.   r4   rM   ­   s    
zTimerQT.__init__c                 C   s   t | jƒs|  ¡  d S r[   )r   r]   Ú_timer_stop©rN   r.   r.   r4   Ú__del__´   s    
zTimerQT.__del__c                 C   s   | j  | j¡ d S r[   )r]   ZsetSingleShotZ_singlerb   r.   r.   r4   Ú_timer_set_single_shotº   s    zTimerQT._timer_set_single_shotc                 C   s   | j  | j¡ d S r[   )r]   ZsetIntervalZ	_intervalrb   r.   r.   r4   Ú_timer_set_interval½   s    zTimerQT._timer_set_intervalc                 C   s   | j  ¡  d S r[   )r]   Ústartrb   r.   r.   r4   Ú_timer_startÀ   s    zTimerQT._timer_startc                 C   s   | j  ¡  d S r[   )r]   Ústoprb   r.   r.   r4   ra   Ã   s    zTimerQT._timer_stop)Ú__name__rD   Ú__qualname__Ú__doc__rM   rc   rd   re   rg   ra   Ú__classcell__r.   r.   r_   r4   rZ   ª   s   rZ   c                
       sd  e Zd ZdZeZejje	j
ejje	jejje	jejje	jejje	jiZed@‡ fdd„	ƒZdd„ Ze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#e $¡ dkrÚd d!„ Z%nd"d!„ Z%d#d$„ Z&d%d&„ Z'd'd(„ Z(d)d*„ Z)d+d,„ Z*d-d.„ Z+d/d0„ Z,dAd2d3„Z-dBd4d5„Z.‡ fd6d7„Z/d8d9„ Z0dCd:d;„Z1d<d=„ Z2d>d?„ Z3‡  Z4S )DÚFigureCanvasQTZqt5Nc                    sˆ   t ƒ  tƒ j|d | jj| j_|  ¡  | j| _d| _	d| _
dd„ | _|  tjj¡ |  d¡ | j|  ¡ Ž  t tjj¡}|  |¡ d S )N)ÚfigureFc                 S   s   d S r[   r.   ©Úpainterr.   r.   r4   Ú<lambda>ã   ó    z)FigureCanvasQT.__init__.<locals>.<lambda>T)rA   r   rM   rn   ÚdpiÚ_original_dpiÚ_update_figure_dpiÚ
_dpi_ratioÚ_dpi_ratio_prevÚ_draw_pendingÚ_is_drawingÚ_draw_rect_callbackr<   r   r=   ZWA_OpaquePaintEventZsetMouseTrackingÚresizeÚget_width_heightr   ZQPaletteÚwhiteZ
setPalette)rN   rn   Úpaletter_   r.   r4   rM   Ó   s    

zFigureCanvasQT.__init__c                 C   s"   | j | jj }| jj|dd d S ©NF)Úforward)rv   rn   rt   Z_set_dpi)rN   rs   r.   r.   r4   ru   ì   s    z!FigureCanvasQT._update_figure_dpic                 C   s   t | ƒS r[   )r   rb   r.   r.   r4   rv   ð   s    zFigureCanvasQT._dpi_ratioc                 C   s>   | j | jkr:|  ¡  | j | _t |  ¡ |  ¡ ¡}|  |¡ d S r[   )rv   rw   ru   r   ZQResizeEventÚsizeÚresizeEvent©rN   Úeventr.   r.   r4   Ú_update_pixel_ratioô   s
    z"FigureCanvasQT._update_pixel_ratioc                 C   s0   |   ¡  |d k	r,|j | j ¡ |j | j ¡ d S r[   )r…   ZphysicalDotsPerInchChangedr?   ZlogicalDotsPerInchChanged)rN   Úscreenr.   r.   r4   Ú_update_screen  s    zFigureCanvasQT._update_screenc                 C   s,   |   ¡  ¡ }|j | j¡ |  | ¡ ¡ d S r[   )ÚwindowZwindowHandleZscreenChangedr?   r‡   r†   )rN   r„   rˆ   r.   r.   r4   Ú	showEvent
  s    zFigureCanvasQT.showEventc                 C   s*   t  | ¡\}}t|| j ƒt|| j ƒfS r[   )r   r|   Úintrv   ©rN   ÚwÚhr.   r.   r4   r|     s    zFigureCanvasQT.get_width_heightc                 C   sL   z|   | ¡ ¡\}}W n tk
r2   d  }}Y nX tj| |||fd d S )N)ÚguiEventZxy)ÚmouseEventCoordsÚposr>   r   Zenter_notify_event©rN   r„   ÚxÚyr.   r.   r4   Ú
enterEvent  s
    zFigureCanvasQT.enterEventc                 C   s   t j ¡  tj| |d d S ©N©rŽ   )r   r8   ZrestoreOverrideCursorr   Zleave_notify_eventrƒ   r.   r.   r4   Ú
leaveEvent  s    
zFigureCanvasQT.leaveEventc                 C   s4   | j }| ¡ }| jjj| | ¡  }|| || fS )aI  
        Calculate mouse coordinates in physical pixels.

        Qt5 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.
        )rv   r’   rn   ÚbboxÚheightr“   )rN   r   Z	dpi_ratior’   r“   r.   r.   r4   r   !  s    
zFigureCanvasQT.mouseEventCoordsc                 C   sB   |   | ¡ ¡\}}| j | ¡ ¡}|d k	r>tj| ||||d d S r•   ©r   r   ÚbuttondÚgetÚbuttonr   Zbutton_press_event©rN   r„   r’   r“   r   r.   r.   r4   ÚmousePressEvent1  s    ÿzFigureCanvasQT.mousePressEventc                 C   sD   |   | ¡ ¡\}}| j | ¡ ¡}|d k	r@tj| |||d|d d S )NT)ZdblclickrŽ   rš   rž   r.   r.   r4   ÚmouseDoubleClickEvent8  s    
 þz$FigureCanvasQT.mouseDoubleClickEventc                 C   s$   |   |¡\}}tj| |||d d S r•   )r   r   Zmotion_notify_eventr‘   r.   r.   r4   ÚmouseMoveEvent@  s    zFigureCanvasQT.mouseMoveEventc                 C   s>   |   |¡\}}| j | ¡ ¡}|d k	r:tj| ||||d d S r•   )r   r›   rœ   r   r   Zbutton_release_eventrž   r.   r.   r4   ÚmouseReleaseEventD  s    ÿz FigureCanvasQT.mouseReleaseEventú5.c                 C   sh   |   |¡\}}| ¡  ¡ dkr@| ¡  ¡ dkr@| ¡  ¡ d }n| ¡  ¡ }|rdtj| ||||d d S )Nr   éx   r–   )r   Z
pixelDeltar’   r“   Z
angleDeltar   Úscroll_event©rN   r„   r’   r“   Zstepsr.   r.   r4   Ú
wheelEventL  s         ÿzFigureCanvasQT.wheelEventc                 C   sN   |  ¡ }| jjj| ¡  }| ¡ d }| ¡ tjj	krJt
j| ||||d d S )Nr¤   r–   )r’   rn   r˜   r™   r“   ÚdeltaZorientationr   r=   ZVerticalr   r¥   r¦   r.   r.   r4   r§   W  s        ÿc                 C   s&   |   |¡}|d k	r"tj| ||d d S r•   )Ú_get_keyr   Zkey_press_event©rN   r„   r3   r.   r.   r4   ÚkeyPressEventa  s    
zFigureCanvasQT.keyPressEventc                 C   s&   |   |¡}|d k	r"tj| ||d d S r•   )r©   r   Zkey_release_eventrª   r.   r.   r4   ÚkeyReleaseEventf  s    
zFigureCanvasQT.keyReleaseEventc                 C   sj   |  ¡  ¡ | j }|  ¡  ¡ | j }| jj}|| }|| }| jj||dd tj 	| |¡ t
 | ¡ d S r   )r   Úwidthrv   r™   rn   rs   Zset_size_inchesr   rL   r‚   r   Zresize_event)rN   r„   rŒ   r   ZdpivalZwinchZhinchr.   r.   r4   r‚   k  s    zFigureCanvasQT.resizeEventc                 C   s   |   ¡ \}}t ||¡S r[   )r|   r   ÚQSizer‹   r.   r.   r4   ÚsizeHintw  s    zFigureCanvasQT.sizeHintc                 C   s   t  dd¡S )Né
   )r   r®   rb   r.   r.   r4   ÚminumumSizeHint{  s    zFigureCanvasQT.minumumSizeHintc                    sŽ   |  ¡ ‰ t| ¡ ƒ‰‡ ‡fdd„tD ƒ}ztˆ  }W nH tk
r|   ˆ tjkrTY d S tˆ ƒ}d|krp| 	d¡ n| 
¡ }Y nX d ||g ¡S )Nc                    s0   g | ](\}}ˆ |krˆ|@ rt |  d d¡‘qS )r   Zctrl)r/   Úreplacer0   ©Z	event_keyZ
event_modsr.   r4   r5   ‡  s    þz+FigureCanvasQT._get_key.<locals>.<listcomp>r   ú+)r3   rŠ   Ú	modifiersÚ_MODIFIER_KEYSr/   ÚKeyErrorÚsysÚ
maxunicodeÚchrÚremoveÚlowerÚjoin)rN   r„   Zmodsr3   r.   r³   r4   r©   ~  s    ÿ
zFigureCanvasQT._get_keyc                 C   s   t  ¡  d S r[   )r7   ZprocessEventsrb   r.   r.   r4   Úflush_events¡  s    zFigureCanvasQT.flush_eventsr   c                 C   sV   t | dƒr| j ¡ rtdƒ‚t ¡  | _}|dkrJtj t|d ƒ|j	¡}| 
¡  d S )NÚ_event_loopzEvent loop already runningr   iè  )Úhasattrr¿   Z	isRunningr;   r   Z
QEventLoopr\   Ú
singleShotrŠ   r@   Úexec_)rN   r^   Z
event_loopZtimerr.   r.   r4   Ústart_event_loop¥  s    ÿzFigureCanvasQT.start_event_loopc                 C   s   t | dƒr| j ¡  d S )Nr¿   )rÀ   r¿   r@   rƒ   r.   r.   r4   Ústop_event_loop¯  s    
zFigureCanvasQT.stop_event_loopc              	      s:   | j r
dS tj| dd tƒ  ¡  W 5 Q R X |  ¡  dS )z5Render the figure, and queue a request for a Qt draw.NT)ry   )ry   r   rT   r   ÚdrawÚupdaterb   r_   r.   r4   rÅ   ´  s
    zFigureCanvasQT.drawc                 C   s2   t | ddƒs.t | ddƒs.d| _tj d| j¡ dS )z9Queue redraw of the Agg buffer and request Qt paintEvent.rx   Fry   Tr   N)Úgetattrrx   r   r\   rÁ   Ú
_draw_idlerb   r.   r.   r4   Ú	draw_idle¾  s
    
ÿzFigureCanvasQT.draw_idlec                    sZ   |d krˆ j rˆ j j}‡ fdd„|jD ƒ\}}}}|| }ˆ  |ˆ  ¡  ¡ | ||¡ d S )Nc                    s   g | ]}t |ˆ j ƒ‘qS r.   ©rŠ   rv   ©r1   Úptrb   r.   r4   r5   Ï  s     z'FigureCanvasQT.blit.<locals>.<listcomp>)rn   r˜   ZboundsZrepaintÚrectr™   )rN   r˜   ÚlÚbrŒ   r   Útr.   rb   r4   ÚblitÊ  s
    zFigureCanvasQT.blitc              	   C   s‚   |   ¡ p | jsW 5 Q R £ d S d| _|  ¡ dk s<|  ¡ dk rJW 5 Q R £ d S z|  ¡  W n tk
rr   t ¡  Y nX W 5 Q R X d S )NFr   )Z_idle_draw_cntxrx   r™   r­   rÅ   Ú	ExceptionÚ	tracebackÚ	print_excrb   r.   r.   r4   rÈ   Ó  s    
zFigureCanvasQT._draw_idlec                    sb   |d k	rH‡ fdd„|D ƒ\‰‰}}ˆ| ‰ˆ| ‰‡ ‡‡‡‡fdd„}ndd„ }|ˆ _ ˆ  ¡  d S )Nc                    s   g | ]}t |ˆ j ƒ‘qS r.   rÊ   rË   rb   r.   r4   r5   ä  s     z0FigureCanvasQT.drawRectangle.<locals>.<listcomp>c                    s¨   t  tjjdˆ j ¡}| ddg¡ tjjdftjjdffD ]f\}}| |¡ | 	|¡ |  
|¡ |  ˆˆˆˆ¡ |  ˆˆˆˆ¡ |  ˆˆˆˆ¡ |  ˆˆˆˆ¡ q<d S )Nr   r-   r   )r   ZQPenr   r=   Úblackrv   ZsetDashPatternr}   ZsetDashOffsetZsetColorZsetPenZdrawLine)rp   ZpenÚcolorÚoffset©rN   Úx0Úx1Úy0Úy1r.   r4   rz   ç  s    
 
ÿ


z9FigureCanvasQT.drawRectangle.<locals>._draw_rect_callbackc                 S   s   d S r[   r.   ro   r.   r.   r4   rz   ö  s    )rz   rÆ   )rN   rÍ   rŒ   r   rz   r.   rØ   r4   ÚdrawRectangleà  s    zFigureCanvasQT.drawRectangle)N)r   )N)N)5ri   rD   rj   Zrequired_interactive_frameworkrZ   Z
_timer_clsr   r=   Z
LeftButtonr   ÚLEFTZ	MidButtonZMIDDLEZRightButtonÚRIGHTZXButton1ÚBACKZXButton2ÚFORWARDr›   rY   rM   ru   Úpropertyrv   r…   r‡   r‰   r|   r”   r—   r   rŸ   r    r¡   r¢   ÚqVersionr§   r«   r¬   r‚   r¯   r±   r©   r¾   rÃ   rÄ   rÅ   rÉ   rÑ   rÈ   rÝ   rl   r.   r.   r_   r4   rm   Ç   sZ   
    ü


#




	rm   c                       s$   e Zd Ze ¡ Z‡ fdd„Z‡  ZS )Ú
MainWindowc                    s   | j  ¡  tƒ  |¡ d S r[   )ÚclosingÚemitr   Ú
closeEventrƒ   r_   r.   r4   rç   ÿ  s    
zMainWindow.closeEvent)ri   rD   rj   r   ÚSignalrå   rç   rl   r.   r.   r_   r4   rä   ü  s   rä   c                       s`   e Zd ZdZ‡ f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 )ÚFigureManagerQTzù
    Attributes
    ----------
    canvas : `FigureCanvas`
        The FigureCanvas instance
    num : int or str
        The Figure number
    toolbar : qt.QToolBar
        The qt.QToolBar
    window : qt.QMainWindow
        The qt.QMainWindow
    c                    s:  t ƒ | _tƒ  ||¡ | jj |j¡ | jj | j¡ tt	 
d¡ƒ}| j t |¡¡ d| j_|  | j| j¡| _| jr”t | j¡ | jr”t | j¡ | jr¸| j | j¡ | j ¡  ¡ }nd}| ¡ }| ¡ }|| }| j | ¡ |¡ | j | j¡ t ¡ r| j ¡  | j ¡  | j  t!j"j#¡ | j $¡  | j %¡  d S )Nzimages/matplotlib.svgFr   )&rä   rˆ   r   rM   rå   r?   Zclose_eventÚ_widgetclosedÚstrr   Ú_get_data_pathÚsetWindowIconr   ÚQIconÚ_destroyingÚ_get_toolbarÚcanvasÚtoolbarÚtoolmanagerr   Zadd_tools_to_managerZadd_tools_to_containerZ
addToolBarr¯   r™   r{   r­   ZsetCentralWidgetr:   Zis_interactiveÚshowrÉ   ZsetFocusPolicyr   r=   ZStrongFocusZsetFocusÚraise_)rN   rñ   ÚnumÚimageZ
tbs_heightÚcsZ	cs_heightr™   r_   r.   r4   rM     s6    



zFigureManagerQT.__init__c                 C   s$   | j  ¡ r| j  ¡  n
| j  ¡  d S r[   )rˆ   ZisFullScreenZ
showNormalZshowFullScreenrb   r.   r.   r4   Úfull_screen_toggle@  s    
z"FigureManagerQT.full_screen_togglec                 C   s<   | j jrd S d| j _zt | ¡ W n tk
r6   Y nX d S ©NT)rˆ   rï   r   Údestroyr>   rb   r.   r.   r4   rê   F  s    zFigureManagerQT._widgetclosedc                 C   sB   t jd dkrt||dƒ}n"t jd dkr:t| j| jƒ}nd }|S )Nrò   Ztoolbar2Tró   )r:   ÚrcParamsÚNavigationToolbar2QTÚ	ToolbarQtró   rˆ   )rN   rñ   Úparentrò   r.   r.   r4   rð   R  s    zFigureManagerQT._get_toolbarc                 C   sP   | j  ¡ | j ¡  }| j  ¡ | j ¡  }| j ||¡ | j  || || ¡ d S r[   )rˆ   r­   rñ   r™   r{   )rN   r­   r™   Zextra_widthZextra_heightr.   r.   r4   r{   ]  s    zFigureManagerQT.resizec                 C   s,   | j  ¡  tjd r(| j  ¡  | j  ¡  d S )Nzfigure.raise_window)rˆ   rô   r:   rü   ZactivateWindowrõ   rb   r.   r.   r4   rô   e  s    


zFigureManagerQT.showc                 G   sD   t j ¡ d krd S | jjrd S d| j_| jr6| j ¡  | j ¡  d S rú   )r   r8   r9   rˆ   rï   rò   rû   Úclose©rN   rO   r.   r.   r4   rû   k  s    
zFigureManagerQT.destroyc                 C   s
   | j  ¡ S r[   )rˆ   ZwindowTitlerb   r.   r.   r4   Úget_window_titlev  s    z FigureManagerQT.get_window_titlec                 C   s   | j  |¡ d S r[   )rˆ   ZsetWindowTitle)rN   Útitler.   r.   r4   Úset_window_titley  s    z FigureManagerQT.set_window_title)ri   rD   rj   rk   rM   rù   rê   rð   r{   rô   rû   r  r  rl   r.   r.   r_   r4   ré     s   .ré   c                       s  e Zd Ze e¡Zej•Ze 	dd„ eD ƒ 
d¡d d¡ d+dd„Zejd	d
dedd„ ƒƒZejd	ddejdd„ ƒƒZejd	ddedd„ ƒƒZdd„ Zdd„ Zdd„ Z‡ fdd„Z‡ fdd„Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Z‡  ZS ),rý   c                 C   s   g | ]^}}|‘qS r.   r.   )r1   ÚnameÚ_r.   r.   r4   r5   ƒ  s     zNavigationToolbar2QT.<listcomp>ZSubplotsr   )Ú	Customizez%Edit axis, curve and image parametersZqt4_editor_optionsÚedit_parametersTc           
      C   s  t j | |¡ |  tjjtjjB ¡ || _i | _	| j
D ]j\}}}}|dkrT|  ¡  q6|  |  |d ¡|t| |ƒ¡}|| j	|< |dkrŽ| d¡ |dk	r6| |¡ q6| jrt  d| ¡| _| j tjjtjjB ¡ | j t  t jjt jj¡¡ |  | j¡}	|	 d¡ t | |¡ dS )z9coordinates: should we show the coordinates on the right?Nú.png)ÚzoomÚpanTÚ )r   ÚQToolBarrM   ÚsetAllowedAreasr   r=   ÚTopToolBarAreaÚBottomToolBarAreaÚcoordinatesÚ_actionsÚ	toolitemsZaddSeparatorZ	addActionÚ_iconrÇ   ÚsetCheckableÚ
setToolTipÚQLabelÚlocLabelÚsetAlignmentÚ
AlignRightÚAlignVCenterÚsetSizePolicyÚQSizePolicyÚ	ExpandingÚIgnoredÚ	addWidgetZ
setVisibler	   )
rN   rñ   rÿ   r  ÚtextZtooltip_textÚ
image_fileÚcallbackÚaZlabelActionr.   r.   r4   rM   ‡  s>    ÿ
 ÿ

ÿ
ÿÿ
zNavigationToolbar2QT.__init__ú3.3zself.canvas.parent())Úalternativec                 C   s
   | j  ¡ S r[   )rñ   rÿ   rb   r.   r.   r4   rÿ   «  s    zNavigationToolbar2QT.parentzself.canvas.setParent()c                 C   s   d S r[   r.   )rN   Úvaluer.   r.   r4   rÿ   °  s    z+os.path.join(mpl.get_data_path(), 'images')c                 C   s   t t d¡ƒS )NÚimages)rë   r   rì   rb   r.   r.   r4   Úbasedirµ  s    zNavigationToolbar2QT.basedirc                 C   sœ   t  ¡ dkr| dd¡}t tt d|¡ƒ¡}t|t	| ƒƒ |  
¡  |  ¡ ¡ ¡ dk r’|  
¡  |  ¡ ¡}| t d¡t jj¡}| |¡ | |¡ t |¡S )z—
        Construct a `.QIcon` from an image file *name*, including the extension
        and relative to Matplotlib's "images" data directory.
        r£   r	  z
_large.pngr(  é€   rÕ   )r   rã   r²   r   ZQPixmaprë   r   rì   r   r   r~   rÖ   ZbackgroundRoler'  ZforegroundRoleZcreateMaskFromColorZQColorr=   ZMaskOutColorÚfillZsetMaskrî   )rN   r  ZpmZ
icon_colorÚmaskr.   r.   r4   r  »  s    ÿ

zNavigationToolbar2QT._iconc                    sà   | j j ¡ }|s*tj | j  ¡ dd¡ d S t|ƒdkr>|\}n’dd„ |D ƒ‰ ‡ fdd„ˆ D ƒ}t|ƒD ]2\}}ˆ | |krfˆ |  dt	|ƒd›d	7  < qftj
 | j  ¡ d
dˆ dd¡\}}|sÂd S |ˆ  |¡ }t || ¡ d S )NÚErrorzThere are no axes to edit.r   c              	   S   sJ   g | ]B}|  ¡ pD| ¡ pDd  td| ¡ | ¡ gƒ¡pDdt|ƒj› d‘qS )z - Nz<anonymous ú>)Z	get_labelZ	get_titler½   ÚfilterZ
get_xlabelZ
get_ylabelrH   ri   )r1   Úaxr.   r.   r4   r5   Õ  s   üÿþz8NavigationToolbar2QT.edit_parameters.<locals>.<listcomp>c                    s   g | ]}ˆ   |¡d kr|‘qS )r   )Úcount)r1   r  ©Útitlesr.   r4   r5   Û  s     z (id: z#xú)r  zSelect axes:r   F)rñ   rn   Zget_axesr   ÚQMessageBoxÚwarningrÿ   ÚlenÚ	enumerateÚidZQInputDialogZgetItemrK   ÚfigureoptionsZfigure_edit)rN   Zaxesr0  Zduplicate_titlesÚiÚitemÚokr.   r2  r4   r  Ì  s>      ÿû
ÿ     þz$NavigationToolbar2QT.edit_parametersc                 C   sH   d| j kr"| j d  | jjdk¡ d| j krD| j d  | jjdk¡ d S )Nr  ZPANr
  ZZOOM)r  Ú
setCheckedÚmoder  rb   r.   r.   r4   Ú_update_buttons_checkedè  s    

z,NavigationToolbar2QT._update_buttons_checkedc                    s   t ƒ j|Ž  |  ¡  d S r[   )r   r  r@  r  r_   r.   r4   r  ï  s    zNavigationToolbar2QT.panc                    s   t ƒ j|Ž  |  ¡  d S r[   )r   r
  r@  r  r_   r.   r4   r
  ó  s    zNavigationToolbar2QT.zoomc                 C   s"   | j  |¡ | jr| j |¡ d S r[   )Úmessageræ   r  r  ÚsetText©rN   Úsr.   r.   r4   Úset_message÷  s    z NavigationToolbar2QT.set_messagec                 C   s   | j  t| ¡ d S r[   )rñ   Z	setCursorÚcursord©rN   Úcursorr.   r.   r4   Ú
set_cursorü  s    zNavigationToolbar2QT.set_cursorc                 C   sJ   | j jjj}|| }|| }dd„ |||| || fD ƒ}| j  |¡ d S )Nc                 S   s   g | ]}t |ƒ‘qS r.   )rŠ   )r1   Úvalr.   r.   r4   r5     s     z8NavigationToolbar2QT.draw_rubberband.<locals>.<listcomp>)rñ   rn   r˜   r™   rÝ   )rN   r„   rÙ   rÛ   rÚ   rÜ   r™   rÍ   r.   r.   r4   Údraw_rubberbandÿ  s
    z$NavigationToolbar2QT.draw_rubberbandc                 C   s   | j  d ¡ d S r[   )rñ   rÝ   rb   r.   r.   r4   Úremove_rubberband  s    z&NavigationToolbar2QT.remove_rubberbandc                 C   s>   t t d¡ƒ}t| jj| j ¡ ƒ}| t 	|¡¡ | 
¡  d S )Nzimages/matplotlib.png)rë   r   rì   ÚSubplotToolQtrñ   rn   rÿ   rí   r   rî   rÂ   )rN   r÷   Zdiar.   r.   r4   Úconfigure_subplots	  s    z'NavigationToolbar2QT.configure_subplotsc              
   G   s4  | j  ¡ }t| ¡ ƒ}| j  ¡ }tj tj	d ¡}tj 
|| j  ¡ ¡}g }d }|D ]>\}	}
d 
dd„ |
D ƒ¡}d|	|f }||
kr†|}| |¡ qRd 
|¡}t | j  ¡ d|||¡\}}|r0|dkrØtj |¡tj	d< z| j j |¡ W nD tk
r. } z$tj | d	t|ƒtjjtjj¡ W 5 d }~X Y nX d S )
Nzsavefig.directoryú c                 S   s   g | ]}d | ‘qS )z*.%sr.   )r1   Úextr.   r.   r4   r5     s     z4NavigationToolbar2QT.save_figure.<locals>.<listcomp>z%s (%s)z;;zChoose a filename to save tor  zError saving file)rñ   Zget_supported_filetypes_groupedÚsortedÚitemsZget_default_filetypeÚosÚpathÚ
expanduserr:   rü   r½   Zget_default_filenameÚappendr   Z_getSaveFileNamerÿ   Údirnamern   ZsavefigrÒ   r   r5  Úcriticalrë   ZOkZNoButton)rN   rO   Ú	filetypesZsorted_filetypesZdefault_filetypeZ	startpathrf   ÚfiltersZselectedFilterr  ÚextsZ	exts_listr/  ÚfnameÚer.   r.   r4   Úsave_figure  sD    


   þ   þz NavigationToolbar2QT.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   r   Úbackr€   )Z
_nav_stackÚ_posr7  Z	_elementsr  Z
setEnabled)rN   Zcan_backwardZcan_forwardr.   r.   r4   Úset_history_buttons.  s    

z(NavigationToolbar2QT.set_history_buttons)T)ri   rD   rj   r   rè   rë   rA  r	   r  r&   rK   rM   r   Ú
deprecatedrâ   rÿ   Úsetterr)  r  r  r@  r  r
  rE  rI  rK  rL  rN  r^  ra  rl   r.   r.   r_   r4   rý   }  s>   
ý
$ ÿrý   c                       s<   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Zd	d
„ Z‡  ZS )rM  c                    sì   t ƒ  d ¡ |ˆ_dD ]@\‰‰ ˆjˆ j ‡ ‡fdd„¡ ˆjˆ  j ‡‡fdd„¡ qddddd	d
gˆ_‡fdd„ˆjD ƒˆ_ˆ ¡  ˆjD ]}ˆj| j ˆj	¡ qŽdˆj
fdˆjfdˆjfdˆjffD ]\}}ˆj| j |¡ qÌd S )N))ÚbottomÚtop)r   r   c                    s   ˆj ˆ   | d ¡S ©Ngü©ñÒMbP?)Ú_widgetsZ
setMinimum©rJ  )ÚhigherrN   r.   r4   rq   ?  rr   z(SubplotToolQt.__init__.<locals>.<lambda>c                    s   ˆj ˆ   | d ¡S rf  )rg  Z
setMaximumrh  )r¼   rN   r.   r4   rq   A  rr   re  rd  r   r   ZhspaceZwspacec                    s   i | ]}|t ˆ jjƒ| “qS r.   )ÚvarsÚ_figureÚsubplotpars©r1   Úattrrb   r.   r4   Ú
<dictcomp>D  s   ÿ z*SubplotToolQt.__init__.<locals>.<dictcomp>zExport valueszTight layoutZResetÚClose)r   rM   rk  rg  ZvalueChangedr?   Ú_attrsÚ	_defaultsÚ_resetÚ_on_value_changedÚ_export_valuesÚ_tight_layoutr   Úclicked)rN   Z	targetfigrÿ   rn  ÚactionÚmethodr_   )ri  r¼   rN   r4   rM   8  s,    ÿÿ
ÿ
ýzSubplotToolQt.__init__c                    s    t  ¡ }t  ¡ }| |¡ t  ¡ }| d¡ | |¡ | d ‡ fdd„ˆ j	D ƒ¡¡ | 
¡ }| t | ¡  ¡ ¡ d| ¡ ¡ ¡ d ¡ | |¡ | ¡  d S )NTz,
c                 3   s$   | ]}d   |ˆ j|  ¡ ¡V  qdS )z{}={:.3}N)Úformatrg  r'  rm  rb   r.   r4   rG   ]  s   ÿz/SubplotToolQt._export_values.<locals>.<genexpr>r   é   )r   ZQDialogZQVBoxLayoutZ	setLayoutZQPlainTextEditZsetReadOnlyr   ZsetPlainTextr½   rq  ZmaximumSizeZ	setHeightr   ZQFontMetricsÚdocumentZdefaultFontr   ZtoPlainTextr™   ZsetMaximumSizerÂ   )rN   ÚdialogZlayoutr!  r   r.   rb   r4   ru  S  s,    


ÿÿ ÿÿÿ
zSubplotToolQt._export_valuesc                    s.   ˆ j jf ‡ fdd„ˆ jD ƒŽ ˆ j j ¡  d S )Nc                    s   i | ]}|ˆ j |  ¡ “qS r.   )rg  r'  rm  rb   r.   r4   ro  i  s   ÿ z3SubplotToolQt._on_value_changed.<locals>.<dictcomp>)rk  Zsubplots_adjustrq  rñ   rÉ   rb   r.   rb   r4   rt  h  s    ÿzSubplotToolQt._on_value_changedc                 C   sZ   | j  ¡  | jD ]8}| j| }| d¡ | t| j jƒ| ¡ | d¡ q| j j 	¡  d S )NTF)
rk  Ztight_layoutrq  rg  ZblockSignalsÚsetValuerj  rl  rñ   rÉ   )rN   rn  Úwidgetr.   r.   r4   rv  m  s    



zSubplotToolQt._tight_layoutc                 C   s(   | j  ¡ D ]\}}| j|  |¡ q
d S r[   )rr  rR  rg  r~  )rN   rn  r'  r.   r.   r4   rs  v  s    zSubplotToolQt._reset)	ri   rD   rj   rM   ru  rt  rv  rs  rl   r.   r.   r_   r4   rM  7  s
   	rM  c                   @   s<   e Z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  | |¡ tj | |¡ |  tjjtjjB ¡ t 	d¡}| 
tjjtjjB ¡ | t tjjtjj¡¡ |  |¡| _i | _i | _d S )Nr  )r   rM   r   r  r  r   r=   r  r  r  r  r  r  r  r  r  r  r   Ú_message_actionÚ
_toolitemsÚ_groups)rN   ró   rÿ   Zmessage_labelr.   r.   r4   rM   |  s"    ÿ
ÿ
ÿÿzToolbarQt.__init__c           	         s¤   t  ˆ¡}|r | t ˆ|¡¡ | ˆ ¡ |r8| |¡ ‡ ‡fdd„}|rb| d¡ |j 	|¡ n|j
 	|¡ ˆj ˆ g ¡ ˆ |ˆ ||¡ ˆjˆ   ||f¡ d S )Nc                      s   ˆ  ˆ ¡ d S r[   )Ztrigger_toolr.   ©r  rN   r.   r4   Úhandler•  s    z'ToolbarQt.add_toolitem.<locals>.handlerT)r   ZQToolButtonZsetIconrý   r  rB  r  r  Útoggledr?   rw  r  Ú
setdefaultÚ_add_to_grouprV  )	rN   r  ÚgroupÚpositionr"  ÚdescriptionZtoggler   r„  r.   rƒ  r4   Úadd_toolitem‹  s    



zToolbarQt.add_toolitemc           	      C   sV   | j  |g ¡}|s(|  | j¡}| |¡ || }|  ||¡}| ||¡ || j |< d S r[   )r‚  rœ   ZinsertSeparatorr€  rV  ZinsertWidgetr&   )	rN   rˆ  r  r   r‰  ZgrÚsepÚbeforer  r.   r.   r4   r‡  ¡  s    
zToolbarQt._add_to_groupc                 C   sH   || j krd S | j | D ]*\}}|j |¡ | |¡ |j |¡ qd S r[   )r  r…  Z
disconnectr>  r?   )rN   r  r…  r   r„  r.   r.   r4   Útoggle_toolitem«  s    

zToolbarQt.toggle_toolitemc                 C   s*   | j | D ]\}}| d ¡ q
| j |= d S r[   )r  Ú	setParent)rN   r  r   r„  r.   r.   r4   Úremove_toolitem³  s    zToolbarQt.remove_toolitemc                 C   s   |   | j¡ |¡ d S r[   )ZwidgetForActionr€  rB  rC  r.   r.   r4   rE  ¸  s    zToolbarQt.set_messageN)	ri   rD   rj   rM   r‹  r‡  rŽ  r  rE  r.   r.   r.   r4   rþ   {  s   
rþ   r%  c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚStatusbarQtc                 O   s0   t j| f|ž|Ž tj | ¡ | ¡  | ¡ d S r[   )r   rM   r   r  Z	statusBarr   )rN   rˆ   rO   rP   r.   r.   r4   rM   ¾  s    zStatusbarQt.__init__c                 C   s   |   |¡ d S r[   )rB  rC  r.   r.   r4   rE  Ã  s    zStatusbarQt.set_messageN)ri   rD   rj   rM   rE  r.   r.   r.   r4   r‘  ¼  s   r‘  c                   @   s   e Zd Zdd„ ZdS )ÚConfigureSubplotsQtc                 G   s   t  |  ¡ ¡ d S r[   )rý   rN  Ú"_make_classic_style_pseudo_toolbarr  r.   r.   r4   ÚtriggerÈ  s    ÿzConfigureSubplotsQt.triggerN©ri   rD   rj   r”  r.   r.   r.   r4   r’  Ç  s   r’  c                   @   s   e Zd Zdd„ ZdS )ÚSaveFigureQtc                 G   s   t  |  ¡ ¡ d S r[   )rý   r^  r“  r  r.   r.   r4   r”  Î  s    ÿzSaveFigureQt.triggerNr•  r.   r.   r.   r4   r–  Í  s   r–  c                   @   s   e Zd Zdd„ ZdS )ÚSetCursorQtc                 C   s   t  |  ¡ |¡ d S r[   )rý   rI  r“  rG  r.   r.   r4   rI  Ô  s     ÿzSetCursorQt.set_cursorN)ri   rD   rj   rI  r.   r.   r.   r4   r—  Ó  s   r—  c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚRubberbandQtc                 C   s   t  |  ¡ d ||||¡ d S r[   )rý   rK  r“  )rN   rÙ   rÛ   rÚ   rÜ   r.   r.   r4   rK  Ú  s         ÿzRubberbandQt.draw_rubberbandc                 C   s   t  |  ¡ ¡ d S r[   )rý   rL  r“  rb   r.   r.   r4   rL  Þ  s    ÿzRubberbandQt.remove_rubberbandN)ri   rD   rj   rK  rL  r.   r.   r.   r4   r˜  Ù  s   r˜  c                   @   s   e Zd Zdd„ ZdS )ÚHelpQtc                 G   s   t j d d|  ¡ ¡ d S )NZHelp)r   r5  ZinformationZ_get_help_htmlr  r.   r.   r4   r”  ä  s    zHelpQt.triggerNr•  r.   r.   r.   r4   r™  ã  s   r™  c                   @   s   e Zd Zdd„ ZdS )ÚToolCopyToClipboardQTc                 O   s   | j  ¡ }t ¡  |¡ d S r[   )rñ   Zgrabr7   Z	clipboardZ	setPixmap)rN   rO   rP   Zpixmapr.   r.   r4   r”  é  s    
zToolCopyToClipboardQT.triggerNr•  r.   r.   r.   r4   rš  è  s   rš  c                   @   s    e Zd ZeZeZedd„ ƒZdS )Ú_BackendQT5c               
   C   sN   t  t j¡} | d k	}|r(t   t jt j¡ zt ¡  W 5 |rHt   t j| ¡ X d S r[   )ÚsignalÚ	getsignalÚSIGINTÚSIG_DFLr7   rÂ   )Z
old_signalZis_python_signal_handlerr.   r.   r4   Úmainloopû  s    z_BackendQT5.mainloopN)	ri   rD   rj   rm   ZFigureCanvasré   ZFigureManagerÚstaticmethodr   r.   r.   r.   r4   r›  ö  s   r›  )‰rW   rS  rœ  r¸   rÓ   r6   r:   r   r   r   Zmatplotlib._pylab_helpersr   Zmatplotlib.backend_basesr   r   r   r	   r
   r   r   r   r   Z+matplotlib.backends.qt_editor.figureoptionsÚbackendsZ	qt_editorr:  Z.matplotlib.backends.qt_editor._formsubplottoolr   r  r   r   r   r   r   r   r   r   r   Zbackend_versionr=   ZKey_ControlZ	Key_ShiftZKey_AltZKey_MetaZKey_Super_LZKey_Super_RZKey_CapsLockZ
Key_ReturnZKey_LeftZKey_UpZ	Key_RightZKey_DownZ
Key_EscapeZKey_F1ZKey_F2ZKey_F3ZKey_F4ZKey_F5ZKey_F6ZKey_F7ZKey_F8ZKey_F9ZKey_F10ZKey_F11ZKey_F12ZKey_HomeZKey_EndZ
Key_PageUpZKey_PageDownZKey_TabZKey_BackspaceZ	Key_EnterZ
Key_InsertZ
Key_DeleteZ	Key_PauseZ
Key_SysReqZ	Key_Clearr/   ÚplatformrÆ   ZControlModifierZAltModifierZShiftModifierZMetaModifierr¶   ZMOVEZSizeAllCursorZHANDZPointingHandCursorÚPOINTERZArrowCursorZSELECT_REGIONZCrossCursorZWAITZ
WaitCursorrF  ZSUPERZALTZCTRLZSHIFTZMODIFIER_KEYSr7   rA   rY   rZ   rL   rm   ZQMainWindowrä   ré   r  rý   rM  rþ   rb  r  r‘  ZConfigureSubplotsBaser’  ZSaveFigureBaser–  ZSetCursorBaser—  ZRubberbandBaser˜  ZToolHelpBaser™  ZToolCopyToClipboardBaserš  ZToolSaveFigureZToolConfigureSubplotsZToolSetCursorZToolRubberbandZToolHelpZToolCopyToClipboardÚexportr›  r.   r.   r.   r4   Ú<module>   s   ,(                                    Ü% ÿü     ûÿ#'  7y ;DA

