U
    Fvf›  ã                &   @   s   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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m Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z' dd	„ d
dddddddddddddddddddej(dkrdnd fd!ej(dkr(d"ndfd#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2f%D ƒZ)d3d4„ d5D ƒZ*d6d	„ ej+d7fej,d8fej-d9fej.d:fej/d;fej0d<fej1d=ffD ƒZ2ej3G d>d?„ d?ƒƒZ4e  5d¡d@dA„ ƒZ6G dBdC„ dCeƒZ7G dDdE„ dEee!j8ƒZ9G dFdG„ dGe!j:ƒZ;G dHdI„ dIeƒZ<G dJdK„ dKee!j=ƒZ>G dLdM„ dMe!j?ƒZ@G dNdO„ dOee!j=ƒZAe Be9¡G dPdQ„ dQejCƒƒZDe Be9¡G dRdS„ dSejEƒƒZFe Be9¡G dTdU„ dUejGƒƒZHe Be9¡G dVdW„ dWejIƒƒZJe Be9¡G dXdY„ dYejKƒƒZLe>e<_MeAe<_NejOG dZd[„ d[eƒƒZPdS )\é    N)Ú_apiÚbackend_toolsÚcbook)ÚGcf)Ú_BackendÚFigureCanvasBaseÚFigureManagerBaseÚNavigationToolbar2Ú	TimerBaseÚcursorsÚToolContainerBaseÚMouseButtonÚ
CloseEventÚKeyEventÚLocationEventÚ
MouseEventÚResizeEventé   )Ú	qt_compat)	ÚQtCoreÚQtGuiÚ	QtWidgetsÚ__version__ÚQT_APIÚ_enumÚ_to_intÚ
_isdeletedÚ_maybe_allow_interruptc                 C   s$   i | ]\}}t ttd ƒ|ƒƒ|“qS )úQtCore.Qt.Key©r   Úgetattrr   ©Ú.0ÚkÚv© r%   úB/tmp/pip-unpacked-wheel-7vhvci0g/matplotlib/backends/backend_qt.pyÚ
<dictcomp>   s     r'   )Z
Key_EscapeÚescape)ZKey_TabÚtab)ZKey_BackspaceZ	backspace)Z
Key_ReturnÚenter)Z	Key_Enterr*   )Z
Key_InsertÚinsert)Z
Key_DeleteÚdelete)Z	Key_PauseÚpause)Z
Key_SysReqZsysreq)Z	Key_ClearÚclear)ZKey_HomeÚhome)ZKey_EndÚend)ZKey_LeftÚleft)ZKey_UpZup)Z	Key_RightÚright)ZKey_DownZdown)Z
Key_PageUpZpageup)ZKey_PageDownZpagedown)Ú	Key_ShiftÚshiftÚKey_ControlÚdarwinÚcontrolÚcmdÚKey_MetaÚmeta)ÚKey_AltZalt)ZKey_CapsLockZ	caps_lock)ZKey_F1Úf1)ZKey_F2Úf2)ZKey_F3Zf3)ZKey_F4Zf4)ZKey_F5Zf5)ZKey_F6Zf6)ZKey_F7Zf7)ZKey_F8Zf8)ZKey_F9Zf9)ÚKey_F10Zf10)r>   Zf11)ZKey_F12Zf12)ZKey_Super_LÚsuper)ZKey_Super_Rr?   c                 C   s4   g | ],\}}t ttd ƒ|ƒƒt ttdƒ|ƒƒf‘qS )zQtCore.Qt.KeyboardModifierr   r   )r"   ÚmodÚkeyr%   r%   r&   Ú
<listcomp>D   s   þÿrB   ))ZControlModifierr5   )ZAltModifierr;   )ZShiftModifierr3   )ZMetaModifierr9   c                 C   s    i | ]\}}|t td ƒ|ƒ“qS )zQtCore.Qt.CursorShape©r    r   r!   r%   r%   r&   r'   N   s     ZSizeAllCursorZPointingHandCursorZArrowCursorZCrossCursorZ
WaitCursorZSizeHorCursorZSizeVerCursorc                   @   s&   e Zd Zejdddedd„ ƒƒZdS )Ú__getattr__z3.6z!QtWidgets.QApplication.instance())Úalternativec                 C   s
   t j ¡ S ©N)r   ÚQApplicationÚinstance©Úselfr%   r%   r&   Ú<lambda>_   ó    z__getattr__.<lambda>N)Ú__name__Ú
__module__Ú__qualname__r   Ú
deprecatedÚpropertyZqAppr%   r%   r%   r&   rD   [   s    ÿ
þrD   c                  C   s’  t j ¡ } | d krŽtj ¡ s&tdƒ‚tdkr8d}d}ntdkrJd}d}ntdƒ‚|D ]n}tj	 
|› d	¡}|d k	rV|j ¡ d k	rVtj	 
|› d
¡}t dt› dt ¡ › d|› d| ¡ › d	¡  qÆqV|dkrøzt j tjj¡ W n tk
rö   Y nX zt j tjjj¡ W n tk
r$   Y nX t  dg¡} tjdkr`tt d¡ƒ}t |¡}|  |¡ | j | j¡ t  ¡  |dkrŽ|  tjj!¡ | S )NzInvalid DISPLAY variable>   ÚPyQt6ÚPySide6)ÚPyQt5ÚPySide2é   >   rU   rT   )rR   rS   é   zShould never be herez
.QtWidgetsz.QtCorezMatplotlib is using z which wraps z+ however an instantiated QApplication from z< exists.  Mixing Qt major versions may not work as expected.Ú
matplotlibr6   úimages/matplotlib.svg)"r   rG   rH   ÚmplZ_c_internal_utilsZdisplay_is_validÚRuntimeErrorr   ÚsysÚmodulesÚgetr   Zwarn_externalr   ZqVersionÚsetAttributeÚQtZAA_EnableHighDpiScalingÚAttributeErrorZ#setHighDpiScaleFactorRoundingPolicyZ HighDpiScaleFactorRoundingPolicyZPassThroughÚplatformÚstrr   Ú_get_data_pathr   ÚQIconÚsetWindowIconZlastWindowClosedÚconnectÚquitZ_setup_new_guiappZAA_UseHighDpiPixmaps)ZappZother_bindingsZ
qt_versionZbindingr@   Z
other_coreÚimageÚiconr%   r%   r&   Ú_create_qAppd   sP    


$ÿÿ


rk   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 rF   )r   ÚQTimerÚ_timerÚtimeoutrg   Z	_on_timerr?   Ú__init__©rJ   ÚargsÚkwargs©Ú	__class__r%   r&   rp   ¢   s    
zTimerQT.__init__c                 C   s   t | jƒs|  ¡  d S rF   )r   rn   Ú_timer_stoprI   r%   r%   r&   Ú__del__©   s    
zTimerQT.__del__c                 C   s   | j  | j¡ d S rF   )rn   ZsetSingleShotZ_singlerI   r%   r%   r&   Ú_timer_set_single_shot¯   s    zTimerQT._timer_set_single_shotc                 C   s   | j  | j¡ d S rF   )rn   ZsetIntervalZ	_intervalrI   r%   r%   r&   Ú_timer_set_interval²   s    zTimerQT._timer_set_intervalc                 C   s   | j  ¡  d S rF   )rn   ÚstartrI   r%   r%   r&   Ú_timer_startµ   s    zTimerQT._timer_startc                 C   s   | j  ¡  d S rF   )rn   ÚstoprI   r%   r%   r&   rv   ¸   s    zTimerQT._timer_stop)rM   rN   rO   Ú__doc__rp   rw   rx   ry   r{   rv   Ú__classcell__r%   r%   rt   r&   rl   Ÿ   s   rl   c                       sZ  e Zd ZdZeZe dd„ ¡Zdd„ de	j
fde	jfde	jfd	e	jfd
e	jffD ƒZdF‡ fdd„	Zdd„ Zdd„ Zdd„ Zdd„ ZdGd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!e"dHdd0œd1d2„ƒZ#d3d4„ Z$d5d6„ Z%dId8d9„Z&dJd:d;„Z'‡ fd<d=„Z(d>d?„ Z)dKd@dA„Z*dBdC„ Z+dDdE„ Z,‡  Z-S )LÚFigureCanvasQTZqtc                 C   s   t S rF   )ÚFigureManagerQT)Úclsr%   r%   r&   rK   ¿   rL   zFigureCanvasQT.<lambda>c                 C   s    i | ]\}}t td ƒ|ƒ|“qS )zQtCore.Qt.MouseButtonrC   r!   r%   r%   r&   r'   Á   s     zFigureCanvasQT.<dictcomp>Z
LeftButtonZRightButtonZMiddleButtonZXButton1ZXButton2Nc                    sv   t ƒ  tƒ j|d d| _d| _dd„ | _d| _|  tdƒj	¡ |  
d¡ | j|  ¡ Ž  t t d¡¡}|  |¡ d S )N)ÚfigureFc                 S   s   d S rF   r%   ©Úpainterr%   r%   r&   rK   Ñ   rL   z)FigureCanvasQT.__init__.<locals>.<lambda>zQtCore.Qt.WidgetAttributeTÚwhite)rk   r?   rp   Ú_draw_pendingÚ_is_drawingÚ_draw_rect_callbackÚ_in_resize_eventr_   r   ZWA_OpaquePaintEventZsetMouseTrackingÚresizeÚget_width_heightr   ZQPaletteÚQColorZ
setPalette)rJ   r‚   Úpalettert   r%   r&   rp   Ë   s    
ÿ
zFigureCanvasQT.__init__c                 C   s4   |   |  ¡ pd¡r0t |  ¡ |  ¡ ¡}|  |¡ d S )Nr   )Z_set_device_pixel_ratioÚdevicePixelRatioFr   ZQResizeEventÚsizeÚresizeEvent©rJ   Úeventr%   r%   r&   Ú_update_pixel_ratioÜ   s
    
ÿz"FigureCanvasQT._update_pixel_ratioc                 C   s0   |   ¡  |d k	r,|j | j ¡ |j | j ¡ d S rF   )r“   ZphysicalDotsPerInchChangedrg   ZlogicalDotsPerInchChanged)rJ   Úscreenr%   r%   r&   Ú_update_screenå   s    zFigureCanvasQT._update_screenc                 C   s,   |   ¡  ¡ }|j | j¡ |  | ¡ ¡ d S rF   )ÚwindowZwindowHandleZscreenChangedrg   r•   r”   )rJ   r’   r–   r%   r%   r&   Ú	showEventì   s    zFigureCanvasQT.showEventc                 C   s   |   tjt|d¡ d S )N)Úcursor)Z	setCursorr   Zcheck_getitemÚcursord)rJ   r˜   r%   r%   r&   Ú
set_cursoró   s    zFigureCanvasQT.set_cursorc                 C   st   |dkr|   tj ¡ ¡}n&t|dƒr.| ¡ }nt|dƒr@| ¡ }| ¡ }| jjj	| j
 | ¡  }|| j
 || j
 fS )aI  
        Calculate mouse coordinates in physical pixels.

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

        Also, the origin is different and needs to be corrected.
        NÚpositionÚpos)ZmapFromGlobalr   ZQCursorrœ   Úhasattrr›   Úxr‚   ÚbboxÚheightÚdevice_pixel_ratioÚy)rJ   rœ   rž   r¢   r%   r%   r&   ÚmouseEventCoords÷   s    



zFigureCanvasQT.mouseEventCoordsc                 C   s:   t j ¡  ¡ }td| f|  |¡ž|  |¡|dœŽ ¡  d S )NZfigure_enter_event©Ú	modifiersÚguiEvent)r   rG   rH   ZqueryKeyboardModifiersr   r£   Ú_mpl_modifiersÚ_process)rJ   r’   Úmodsr%   r%   r&   Ú
enterEvent  s    ÿýzFigureCanvasQT.enterEventc                 C   s2   t j ¡  td| f|  ¡ ž|  ¡ |dœŽ ¡  d S )NZfigure_leave_eventr¤   )r   rG   ZrestoreOverrideCursorr   r£   r§   r¨   r‘   r%   r%   r&   Ú
leaveEvent  s    
ÿýzFigureCanvasQT.leaveEventc                 C   sF   | j  | ¡ ¡}|d k	rBtd| f|  |¡|fž|  ¡ |dœŽ ¡  d S )NÚbutton_press_eventr¤   ©Úbuttondr^   Úbuttonr   r£   r§   r¨   ©rJ   r’   r¯   r%   r%   r&   ÚmousePressEvent  s     ÿýzFigureCanvasQT.mousePressEventc                 C   sH   | j  | ¡ ¡}|d k	rDtd| f|  |¡|fžd|  ¡ |dœŽ ¡  d S )Nr¬   T)Zdblclickr¥   r¦   r­   r°   r%   r%   r&   ÚmouseDoubleClickEvent%  s     ÿýz$FigureCanvasQT.mouseDoubleClickEventc                 C   s*   t d| f|  |¡ž|  ¡ |dœŽ ¡  d S )NZmotion_notify_eventr¤   )r   r£   r§   r¨   r‘   r%   r%   r&   ÚmouseMoveEvent-  s    ÿýzFigureCanvasQT.mouseMoveEventc                 C   sF   | j  | ¡ ¡}|d k	rBtd| f|  |¡|fž|  ¡ |dœŽ ¡  d S )NZbutton_release_eventr¤   r­   r°   r%   r%   r&   ÚmouseReleaseEvent3  s     ÿýz FigureCanvasQT.mouseReleaseEventc                 C   sl   |  ¡  ¡ stj ¡  ¡ dkr0| ¡  ¡ d }n|  ¡  ¡ }|rhtd| f|  	|¡ž||  
¡ |dœŽ ¡  d S )NZxcbéx   Zscroll_event)Ústepr¥   r¦   )Z
pixelDeltaZisNullr   rG   rH   ZplatformNameZ
angleDeltar¢   r   r£   r§   r¨   )rJ   r’   Zstepsr%   r%   r&   Ú
wheelEvent;  s    ÿÿýzFigureCanvasQT.wheelEventc                 C   s6   |   |¡}|d k	r2td| |f|  ¡ žd|iŽ ¡  d S )NZkey_press_eventr¦   ©Ú_get_keyr   r£   r¨   ©rJ   r’   rA   r%   r%   r&   ÚkeyPressEventI  s    
ÿÿþzFigureCanvasQT.keyPressEventc                 C   s6   |   |¡}|d k	r2td| |f|  ¡ žd|iŽ ¡  d S )NZkey_release_eventr¦   r¸   rº   r%   r%   r&   ÚkeyReleaseEventP  s    
ÿÿþzFigureCanvasQT.keyReleaseEventc                 C   s”   | j r
d S d| _ zv| ¡  ¡ | j }| ¡  ¡ | j }| jj}|| }|| }| jj||dd tj	 
| |¡ td| ƒ ¡  |  ¡  W 5 d| _ X d S )NTF)ÚforwardZresize_event)r‰   r   Úwidthr¡   r    r‚   ZdpiZset_size_inchesr   ÚQWidgetr   r   r¨   Ú	draw_idle)rJ   r’   ÚwÚhZdpivalZwinchZhinchr%   r%   r&   r   W  s    zFigureCanvasQT.resizeEventc                 C   s   |   ¡ \}}t ||¡S rF   )r‹   r   ÚQSize)rJ   rÁ   rÂ   r%   r%   r&   ÚsizeHintj  s    zFigureCanvasQT.sizeHintc                 C   s   t  dd¡S )Né
   )r   rÃ   rI   r%   r%   r&   ÚminumumSizeHintn  s    zFigureCanvasQT.minumumSizeHint©Úexcludec                   s2   ˆd krt j ¡  ¡ ‰tˆƒ‰‡ ‡fdd„tD ƒS )Nc                    s0   g | ](\}}ˆ |krˆ|@ rt |  d d¡‘qS )r7   Zctrl)ÚSPECIAL_KEYSÚreplace)r"   ÚmaskrA   ©rÈ   r¥   r%   r&   rB   {  s    þz1FigureCanvasQT._mpl_modifiers.<locals>.<listcomp>)r   rG   rH   ZkeyboardModifiersr   Ú_MODIFIER_KEYS)r¥   rÈ   r%   rÌ   r&   r§   q  s    ÿzFigureCanvasQT._mpl_modifiersc                 C   sz   |  ¡ }| j|d}zt| }W nH tk
rh   |tjkr@Y d S t|ƒ}d|kr\| d¡ n| ¡ }Y nX d 	||g ¡S )NrÇ   r4   ú+)
rA   r§   rÉ   ÚKeyErrorr\   Ú
maxunicodeÚchrÚremoveÚlowerÚjoin)rJ   r’   Z	event_keyr©   rA   r%   r%   r&   r¹     s    
zFigureCanvasQT._get_keyc                 C   s   t j ¡  ¡  d S rF   )r   rG   rH   ZprocessEventsrI   r%   r%   r&   Úflush_events™  s    zFigureCanvasQT.flush_eventsr   c              	   C   sl   t | dƒr| j ¡ rtdƒ‚t ¡  | _}|dkrJtj t|d ƒ|j	¡}t
|ƒ t |¡ W 5 Q R X d S )NÚ_event_loopzEvent loop already runningr   iè  )r   rÖ   Z	isRunningr[   r   Z
QEventLooprm   Ú
singleShotÚintrh   r   r   Ú_exec)rJ   ro   Z
event_loopÚ_r%   r%   r&   Ústart_event_loop  s    
zFigureCanvasQT.start_event_loopc                 C   s   t | dƒr| j ¡  d S )NrÖ   )r   rÖ   rh   r‘   r%   r%   r&   Ú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)r‡   )r‡   r   Z_setattr_cmr?   ÚdrawÚupdaterI   rt   r%   r&   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.r†   Fr‡   Tr   N)r    r†   r   rm   r×   Ú
_draw_idlerI   r%   r%   r&   rÀ   ·  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Ø   r¡   ©r"   ÚptrI   r%   r&   rB   È  s     z'FigureCanvasQT.blit.<locals>.<listcomp>)r‚   rŸ   ZboundsZrepaintÚrectr    )rJ   rŸ   ÚlÚbrÁ   rÂ   Útr%   rI   r&   Ú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_cntxr†   r    r¾   rÝ   Ú	ExceptionÚ	tracebackÚ	print_excrI   r%   r%   r&   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á   rI   r%   r&   rB   Ý  s     z0FigureCanvasQT.drawRectangle.<locals>.<listcomp>c                    s®   t  t  d¡dˆ j ¡}| ddg¡ t  d¡dft  d¡dffD ]f\}}| |¡ | |¡ |  |¡ |  ˆˆˆˆ¡ |  ˆˆˆˆ¡ |  ˆˆˆˆ¡ |  ˆˆˆˆ¡ qBd S )NÚblackr   é   r   r…   )	r   ZQPenrŒ   r¡   ZsetDashPatternZsetDashOffsetZsetColorZsetPenZdrawLine)r„   ZpenÚcolorÚoffset©rJ   Úx0Úx1Úy0Úy1r%   r&   rˆ   à  s    þþ


z9FigureCanvasQT.drawRectangle.<locals>._draw_rect_callbackc                 S   s   d S rF   r%   rƒ   r%   r%   r&   rˆ   õ  s    )rˆ   rÞ   )rJ   rã   rÁ   rÂ   rˆ   r%   rï   r&   ÚdrawRectangleÙ  s    zFigureCanvasQT.drawRectangle)N)N)N)r   )N)N).rM   rN   rO   Zrequired_interactive_frameworkrl   Z
_timer_clsr   ZclasspropertyZmanager_classr   ÚLEFTÚRIGHTZMIDDLEÚBACKÚFORWARDr®   rp   r“   r•   r—   rš   r£   rª   r«   r±   r²   r³   r´   r·   r»   r¼   r   rÄ   rÆ   Ústaticmethodr§   r¹   rÕ   rÛ   rÜ   rÝ   rÀ   rç   rß   rô   r~   r%   r%   rt   r&   r   ¼   sP   ûÿ
	
	



	r   c                       s$   e Zd Ze ¡ Z‡ fdd„Z‡  ZS )Ú
MainWindowc                    s   | j  ¡  tƒ  |¡ d S rF   )ÚclosingÚemitr?   Ú
closeEventr‘   rt   r%   r&   rý   þ  s    
zMainWindow.closeEvent)rM   rN   rO   r   ÚSignalrû   rý   r~   r%   r%   rt   r&   rú   û  s   rú   c                       sd   e Zd ZdZ‡ fdd„Zdd„ Zdd„ Zdd	„ Zed
d„ ƒZ	dd„ Z
dd„ Zdd„ Zdd„ Z‡  ZS )r€   zù
    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¡ tjdkrTt	t
 d¡ƒ}t |¡}| j |¡ d| j_| jr€| j | j¡ | j ¡  ¡ }nd}| ¡ }| ¡ }|| }| j | ¡ |¡ | j | j¡ t ¡ rØ| j ¡  | j ¡  | j tdƒj¡ | j ¡  | j  ¡  d S )Nr6   rY   Fr   zQtCore.Qt.FocusPolicy)!rú   r–   r?   rp   rû   rg   Ú_widgetclosedr\   rb   rc   r   rd   r   re   rf   Ú_destroyingÚtoolbarZ
addToolBarrÄ   r    rŠ   r¾   ZsetCentralWidgetÚcanvasrZ   Zis_interactiveÚshowrÀ   ZsetFocusPolicyr   ZStrongFocusÚsetFocusÚraise_)	rJ   r  Únumri   rj   Z
tbs_heightÚcsZ	cs_heightr    rt   r%   r&   rp     s.    




zFigureManagerQT.__init__c                 C   s$   | j  ¡ r| j  ¡  n
| j  ¡  d S rF   )r–   ZisFullScreenZ
showNormalZshowFullScreenrI   r%   r%   r&   Úfull_screen_toggle9  s    
z"FigureManagerQT.full_screen_togglec                 C   sL   t d| jƒ ¡  | jjrd S d| j_zt | ¡ W n tk
rF   Y nX d S )NÚclose_eventT)r   r  r¨   r–   r   r   Údestroyra   rI   r%   r%   r&   rÿ   ?  s    zFigureManagerQT._widgetclosedc                 C   sp   t || jj ƒ}t || jj ƒ}| j ¡ | j ¡  }| j ¡ | j ¡  }| j ||¡ | j || || ¡ d S rF   )rØ   r  r¡   r–   r¾   r    rŠ   )rJ   r¾   r    Zextra_widthZextra_heightr%   r%   r&   rŠ   L  s    zFigureManagerQT.resizec              	   C   s0   t j ¡ }|r,t|ƒ t |¡ W 5 Q R X d S rF   )r   rG   rH   r   r   rÙ   )r   Zqappr%   r%   r&   Ústart_main_loopV  s    

zFigureManagerQT.start_main_loopc                 C   s,   | j  ¡  tjd r(| j  ¡  | j  ¡  d S )Nzfigure.raise_window)r–   r  rZ   ÚrcParamsZactivateWindowr  rI   r%   r%   r&   r  ]  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 )NT)r   rG   rH   r–   r   r  r
  Úclose©rJ   rr   r%   r%   r&   r
  c  s    
zFigureManagerQT.destroyc                 C   s
   | j  ¡ S rF   )r–   ZwindowTitlerI   r%   r%   r&   Úget_window_titlen  s    z FigureManagerQT.get_window_titlec                 C   s   | j  |¡ d S rF   )r–   ZsetWindowTitle)rJ   Útitler%   r%   r&   Úset_window_titleq  s    z FigureManagerQT.set_window_title)rM   rN   rO   r}   rp   r  rÿ   rŠ   Úclassmethodr  r  r
  r  r  r~   r%   r%   rt   r&   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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‡  ZS )!ÚNavigationToolbar2QTc                 C   s   g | ]^}}|‘qS r%   r%   )r"   ÚnamerÚ   r%   r%   r&   rB   {  s     zNavigationToolbar2QT.<listcomp>ZSubplotsr   )Ú	Customizez%Edit axis, curve and image parametersZqt4_editor_optionsÚedit_parametersNTc           
      C   sD  t j | |¡ |  tj ttdƒj	ƒttdƒj
ƒB ¡¡ || _i | _d| _| jD ]j\}}}}|dkrn|  ¡  qP|  |  |d ¡|t| |ƒ¡}|| j|< |dkr¨| d¡ |dk	rP| |¡ qP| jr4t  d| ¡| _| j tj ttdƒjƒttdƒjƒB ¡¡ | j t  tdƒjtdƒj¡¡ |  | j¡}	|	  d¡ t! | |¡ dS )	z9coordinates: should we show the coordinates on the right?úQtCore.Qt.ToolBarAreaNú.png)ÚzoomÚpanTÚ úQtCore.Qt.AlignmentFlagúQtWidgets.QSizePolicy.Policy)"r   ÚQToolBarrp   ÚsetAllowedAreasr   r`   ÚToolBarArear   r   ÚTopToolBarAreaÚBottomToolBarAreaÚcoordinatesÚ_actionsÚ_subplot_dialogÚ	toolitemsZaddSeparatorZ	addActionÚ_iconr    ÚsetCheckableÚ
setToolTipÚQLabelÚlocLabelÚsetAlignmentÚAlignmentFlagÚ
AlignRightÚAlignVCenterÚsetSizePolicyÚQSizePolicyÚ	ExpandingÚIgnoredÚ	addWidgetZ
setVisibler	   )
rJ   r  Úparentr#  ÚtextZtooltip_textÚ
image_fileÚcallbackÚaZlabelActionr%   r%   r&   rp     sF    
ÿÿ
 ÿ

ÿÿ
þ
zNavigationToolbar2QT.__init__c                 C   s²   t  d|¡}| |j dd¡¡}t| ¡ r.|n|ƒ}t |¡}| 	|  
¡ pLd¡ |  ¡  |  ¡ ¡ ¡ dk r¨|  ¡  |  ¡ ¡}| t d¡tdƒj¡}| |¡ | |¡ t |¡S )z—
        Construct a `.QIcon` from an image file *name*, including the extension
        and relative to Matplotlib's "images" data directory.
        Zimagesr  z
_large.pngr   é€   rë   zQtCore.Qt.MaskMode)r   rd   Ú	with_namer  rÊ   rc   Úexistsr   ZQPixmapZsetDevicePixelRatiorŽ   r   rí   ZbackgroundRoleÚvalueZforegroundRoleZcreateMaskFromColorrŒ   r   ZMaskOutColorÚfillZsetMaskre   )rJ   r  Zpath_regularZ
path_largeÚfilenameZpmZ
icon_colorrË   r%   r%   r&   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   s^   g | ]V}|  ¡ pX| ¡ pX| d ¡pX| d¡pXd td| ¡ | ¡ gƒ¡pXdt|ƒj› d‘qS )r1   r2   z - Nz<anonymous ú>)Z	get_labelZ	get_titlerÔ   ÚfilterZ
get_xlabelZ
get_ylabelÚtyperM   )r"   Úaxr%   r%   r&   rB   È  s   úÿþýüz8NavigationToolbar2QT.edit_parameters.<locals>.<listcomp>c                    s   g | ]}ˆ   |¡d kr|‘qS )r   )Úcount)r"   r  ©Útitlesr%   r&   rB   Ð  s     z (id: z#xú)r  zSelect axes:r   F)r  r‚   Zget_axesr   ÚQMessageBoxÚwarningr5  ÚlenÚ	enumerateÚidZQInputDialogZgetItemÚindexÚfigureoptionsZfigure_edit)rJ   ZaxesrD  Zduplicate_titlesÚiÚitemÚokr%   rF  r&   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  rI   r%   r%   r&   Ú_update_buttons_checkedÝ  s    

z,NavigationToolbar2QT._update_buttons_checkedc                    s   t ƒ j|Ž  |  ¡  d S rF   )r?   r  rU  r  rt   r%   r&   r  ä  s    zNavigationToolbar2QT.panc                    s   t ƒ j|Ž  |  ¡  d S rF   )r?   r  rU  r  rt   r%   r&   r  è  s    zNavigationToolbar2QT.zoomc                 C   s"   | j  |¡ | jr| j |¡ d S rF   )Úmessagerü   r#  r+  ÚsetText©rJ   Úsr%   r%   r&   Úset_messageì  s    z NavigationToolbar2QT.set_messagec                 C   sJ   | j jjj}|| }|| }dd„ |||| || fD ƒ}| j  |¡ d S )Nc                 S   s   g | ]}t |ƒ‘qS r%   )rØ   )r"   Úvalr%   r%   r&   rB   õ  s     z8NavigationToolbar2QT.draw_rubberband.<locals>.<listcomp>)r  r‚   rŸ   r    rô   )rJ   r’   rð   rò   rñ   ró   r    rã   r%   r%   r&   Údraw_rubberbandñ  s
    z$NavigationToolbar2QT.draw_rubberbandc                 C   s   | j  d ¡ d S rF   )r  rô   rI   r%   r%   r&   Úremove_rubberbandø  s    z&NavigationToolbar2QT.remove_rubberbandc                    sP   ˆ j d kr6tˆ jjˆ j ¡ ƒˆ _ ˆ j d‡ fdd„¡ ˆ j  ¡  ˆ j  ¡  ˆ j S )Nr	  c                    s
   ˆ j  ¡ S rF   )r%  Úreject)ÚerI   r%   r&   rK      rL   z9NavigationToolbar2QT.configure_subplots.<locals>.<lambda>)r%  ÚSubplotToolQtr  r‚   r5  Zmpl_connectÚupdate_from_current_subplotparsr  rI   r%   rI   r&   Úconfigure_subplotsû  s    
 ÿ 
ÿ

z'NavigationToolbar2QT.configure_subplotsc                 G   s8  | 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|||¡\}}|r4|dkrØtj |¡tj	d< z| j j |¡ W nH tk
r2 } z(tj | d	t|ƒtd
ƒjtd
ƒj¡ W 5 d }~X Y nX d S )Nzsavefig.directoryú c                 S   s   g | ]}d | ‘qS )z*.%sr%   )r"   Úextr%   r%   r&   rB     s     z4NavigationToolbar2QT.save_figure.<locals>.<listcomp>z%s (%s)z;;zChoose a filename to save tor  zError saving filez$QtWidgets.QMessageBox.StandardButton)r  Zget_supported_filetypes_groupedÚsortedÚitemsZget_default_filetypeÚosÚpathÚ
expanduserrZ   r  rÔ   Zget_default_filenameÚappendr   Z_getSaveFileNamer5  Údirnamer‚   Zsavefigrè   r   rI  Úcriticalrc   r   ZOkZNoButton)rJ   rr   Ú	filetypesZsorted_filetypesZdefault_filetypeZ	startpathrz   ÚfiltersZselectedFilterr  ÚextsZ	exts_listrB  Úfnamer_  r%   r%   r&   Ú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Ú_posrK  Z	_elementsr$  Z
setEnabled)rJ   Zcan_backwardZcan_forwardr%   r%   r&   Úset_history_buttons%  s    

z(NavigationToolbar2QT.set_history_buttons)NT)rM   rN   rO   r   rþ   rc   rV  r	   r&  r+   rN  rp   r'  r  rU  r  r  rZ  r\  r]  rb  rq  rt  r~   r%   r%   rt   r&   r  u  s$   
ý
(
 r  c                       sD   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Z‡  Z	S )r`  c                    s–  t ƒ  ¡  |  t tt d¡ƒ¡¡ |  d¡ i | _	t
 ¡ }|  |¡ dddddgd| jfgfd	d
dgd| jfd| jfd| jfgffD ]ð\}}}t
 ¡ }| |¡ t
 |¡}| |¡ t
 |¡}	|D ]Z}
t
 ¡  | j	|
< }| dd¡ | d¡ | d¡ | d¡ |j | j¡ |	 |
|¡ qÄ| d¡ |D ]F\}
}t
  |
¡}| !d¡ |j" |¡ | |¡ |
dkr.| #¡  q.q†|| _$i | _%d | _&|  '¡  d S )Nzimages/matplotlib.pngZSubplotToolZBordersÚtopÚbottomr1   r2   zExport valuesZSpacingsZhspaceZwspacezTight layoutZResetÚCloser   r   rì   g{®Gázt?F)(r?   rp   rf   r   re   rc   r   rd   ZsetObjectNameÚ
_spinboxesr   ZQHBoxLayoutÚ	setLayoutÚ_export_valuesÚ_tight_layoutÚ_resetr  ÚQVBoxLayoutZ	addLayoutZ	QGroupBoxr4  ZQFormLayoutZQDoubleSpinBoxÚsetRangeZsetDecimalsZsetSingleStepZsetKeyboardTrackingZvalueChangedrg   Ú_on_value_changedZaddRowZ
addStretchZQPushButtonZsetAutoDefaultÚclickedr  Ú_figureÚ	_defaultsÚ_export_values_dialogra  )rJ   Z	targetfigr5  Zmain_layoutÚgroupÚ	spinboxesZbuttonsÚlayoutZboxÚinnerr  ÚspinboxÚmethodr¯   rt   r%   r&   rp   /  sZ    
ÿ



þþþü	











zSubplotToolQt.__init__c                    s&   ‡ fdd„ˆ j  ¡ D ƒˆ _ˆ  ¡  d S )Nc                    s    i | ]\}}|t ˆ jj|ƒ“qS r%   )r    r  Úsubplotpars)r"   r  rˆ  rI   r%   r&   r'   \  s   ÿ zASubplotToolQt.update_from_current_subplotpars.<locals>.<dictcomp>)rx  rf  r‚  r|  rI   r%   rI   r&   ra  [  s    
ÿz-SubplotToolQt.update_from_current_subplotparsc                 C   s¦   t  ¡ | _t  ¡ }| j |¡ t  ¡ }| d¡ | |¡ | d 	dd„ | j
 ¡ D ƒ¡¡ | ¡ }| t | ¡  ¡ ¡ d| ¡ ¡ ¡ d ¡ | |¡ | j ¡  d S )NTz,
c                 s   s&   | ]\}}|› d |  ¡ d›V  qdS )ú=z.3N©r=  ©r"   Úattrrˆ  r%   r%   r&   Ú	<genexpr>j  s   ÿz/SubplotToolQt._export_values.<locals>.<genexpr>r   é   )r   ÚQDialogrƒ  r}  ry  ZQPlainTextEditZsetReadOnlyr4  ZsetPlainTextrÔ   rx  rf  ZmaximumSizeZ	setHeightr   ZQFontMetricsÚdocumentZdefaultFontr   ZtoPlainTextr    ZsetMaximumSizer  )rJ   r†  r6  r   r%   r%   r&   rz  `  s,    



ÿÿ ÿÿÿ
zSubplotToolQt._export_valuesc                 C   st   | j }dD ]<\}}||  ||  ¡ d ¡ ||  ||  ¡ d ¡ q
| jjf dd„ | ¡ D ƒŽ | jj ¡  d S )N))rv  ru  )r1   r2   gü©ñÒMbP?c                 S   s   i | ]\}}||  ¡ “qS r%   rŒ  r  r%   r%   r&   r'   |  s      z3SubplotToolQt._on_value_changed.<locals>.<dictcomp>)	rx  Z
setMinimumr=  Z
setMaximumr  Zsubplots_adjustrf  r  rÀ   )rJ   r…  rÓ   Zhigherr%   r%   r&   r  u  s    ÿzSubplotToolQt._on_value_changedc                 C   sV   | j  ¡  | j ¡ D ]0\}}| d¡ | t| j j|ƒ¡ | d¡ q| j j 	¡  d S )NTF)
r  Ztight_layoutrx  rf  ÚblockSignalsÚsetValuer    rŠ  r  rÀ   )rJ   rŽ  rˆ  r%   r%   r&   r{    s    

zSubplotToolQt._tight_layoutc                 C   sJ   | j  ¡ D ]2\}}| dd¡ | d¡ | |¡ | d¡ q
|  ¡  d S )Nr   r   TF)r‚  rf  r~  r“  r”  r  )rJ   rˆ  r=  r%   r%   r&   r|  ‡  s    

zSubplotToolQt._reset)
rM   rN   rO   rp   ra  rz  r  r{  r|  r~   r%   r%   rt   r&   r`  .  s   ,
r`  c                   @   s>   e Zd Zddd„Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ ZdS )Ú	ToolbarQtNc                 C   s²   t  | |¡ tj | |¡ |  tj tt	dƒj
ƒtt	dƒjƒB ¡¡ t d¡}| tj tt	dƒjƒtt	dƒjƒB ¡¡ | t t	dƒjt	dƒj¡¡ |  |¡| _i | _i | _d S )Nr  r  r  r  )r   rp   r   r  r  r   r`   r   r   r   r!  r"  r*  r,  r-  r.  r/  r0  r1  r2  r3  r4  Ú_message_actionÚ
_toolitemsÚ_groups)rJ   Ztoolmanagerr5  Zmessage_labelr%   r%   r&   rp   ‘  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 rF   )Ztrigger_toolr%   ©r  rJ   r%   r&   Úhandler­  s    z'ToolbarQt.add_toolitem.<locals>.handlerT)r   ZQToolButtonZsetIconr  r'  rW  r)  r(  Útoggledrg   r€  r—  Ú
setdefaultÚ_add_to_grouprj  )	rJ   r  r„  r›   r7  ÚdescriptionZtoggler¯   rš  r%   r™  r&   Úadd_toolitem£  s    



zToolbarQt.add_toolitemc           	      C   sV   | j  |g ¡}|s(|  | j¡}| |¡ || }|  ||¡}| ||¡ || j |< d S rF   )r˜  r^   ZinsertSeparatorr–  rj  ZinsertWidgetr+   )	rJ   r„  r  r¯   r›   ZgrÚsepÚbeforeZwidgetr%   r%   r&   r  ¹  s    
zToolbarQt._add_to_groupc                 C   sH   || j krd S | j | D ]*\}}|j |¡ | |¡ |j |¡ qd S rF   )r—  r›  Z
disconnectrS  rg   )rJ   r  r›  r¯   rš  r%   r%   r&   Útoggle_toolitemÃ  s    

zToolbarQt.toggle_toolitemc                 C   s*   | j | D ]\}}| d ¡ q
| j |= d S rF   )r—  Ú	setParent)rJ   r  r¯   rš  r%   r%   r&   Úremove_toolitemË  s    zToolbarQt.remove_toolitemc                 C   s   |   | j¡ |¡ d S rF   )ZwidgetForActionr–  rW  rX  r%   r%   r&   rZ  Ð  s    zToolbarQt.set_message)N)	rM   rN   rO   rp   rŸ  r  r¢  r¤  rZ  r%   r%   r%   r&   r•    s   

r•  c                       s$   e Zd Z‡ fdd„Zdd„ Z‡  ZS )ÚConfigureSubplotsQtc                    s   t ƒ j||Ž d | _d S rF   )r?   rp   r%  rq   rt   r%   r&   rp   Ö  s    zConfigureSubplotsQt.__init__c                 G   s   t  | ¡ d S rF   )r  rb  r  r%   r%   r&   ÚtriggerÚ  s    zConfigureSubplotsQt.trigger)rM   rN   rO   rp   r¦  r~   r%   r%   rt   r&   r¥  Ô  s   r¥  c                   @   s   e Zd Zdd„ ZdS )ÚSaveFigureQtc                 G   s   t  |  ¡ ¡ d S rF   )r  rq  Ú"_make_classic_style_pseudo_toolbarr  r%   r%   r&   r¦  à  s    ÿzSaveFigureQt.triggerN©rM   rN   rO   r¦  r%   r%   r%   r&   r§  Þ  s   r§  c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚRubberbandQtc                 C   s   t  |  ¡ d ||||¡ d S rF   )r  r\  r¨  )rJ   rð   rò   rñ   ró   r%   r%   r&   r\  ç  s         ÿzRubberbandQt.draw_rubberbandc                 C   s   t  |  ¡ ¡ d S rF   )r  r]  r¨  rI   r%   r%   r&   r]  ë  s    ÿzRubberbandQt.remove_rubberbandN)rM   rN   rO   r\  r]  r%   r%   r%   r&   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   rI  ZinformationZ_get_help_htmlr  r%   r%   r&   r¦  ò  s    zHelpQt.triggerNr©  r%   r%   r%   r&   r«  ð  s   r«  c                   @   s   e Zd Zdd„ ZdS )ÚToolCopyToClipboardQTc                 O   s"   | j  ¡ }tj ¡  ¡  |¡ d S rF   )r  Zgrabr   rG   rH   Z	clipboardZ	setPixmap)rJ   rr   rs   Zpixmapr%   r%   r&   r¦  ø  s    
zToolCopyToClipboardQT.triggerNr©  r%   r%   r%   r&   r¬  ö  s   r¬  c                   @   s   e Zd ZeZeZeZej	Z
dS )Ú
_BackendQTN)rM   rN   rO   r   Zbackend_versionr   ZFigureCanvasr€   ZFigureManagerr  Zmainloopr%   r%   r%   r&   r­    s   r­  )QÚ	functoolsrg  r\   ré   rX   rZ   r   r   r   Zmatplotlib._pylab_helpersr   Zmatplotlib.backend_basesr   r   r   r	   r
   r   r   r   r   r   r   r   r   Z+matplotlib.backends.qt_editor.figureoptionsÚbackendsZ	qt_editorrO  r  r   r   r   r   r   r   r   r   r   r   rb   rÉ   rÍ   ZMOVEZHANDÚPOINTERZSELECT_REGIONZWAITZRESIZE_HORIZONTALZRESIZE_VERTICALr™   Zcaching_module_getattrrD   Ú	lru_cacherk   rl   r¿   r   ZQMainWindowrú   r€   r  r  r‘  r`  r•  Z_register_tool_classZConfigureSubplotsBaser¥  ZSaveFigureBaser§  ZRubberbandBaserª  ZToolHelpBaser«  ZToolCopyToClipboardBaser¬  Z_toolbar2_classZ_toolmanager_toolbar_classÚexportr­  r%   r%   r%   r&   Ú<module>   s¶   <,Úÿ-ý
ùÿ
:  Ar :bD	
