U
    Âmœdk›  ã                &   @   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%   úW/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/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_UpÚ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   þÿrC   ))ZControlModifierr6   )ZAltModifierr<   )ZShiftModifierr4   )ZMetaModifierr:   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&   rE   [   s    ÿ
þrE   c                  C   s”  t j ¡ } | d krftj ¡ s&tdƒ‚tdkr4d}ntdkrBd}ntdƒ‚|D ]n}tj	 
|› d¡}|d k	rN|j ¡ d k	rNtj	 
|› d¡}t d	t› d
t ¡ › d|› d
| ¡ › d	¡  q¾qNz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rPtt d¡ƒ}t |¡}|  |¡ | j | j¡ t  ¡  z|  tjj!¡ W n tk
rŽ   Y nX | S )NzInvalid DISPLAY variable>   ÚPySide6ÚPyQt6)ÚPyQt5ÚPySide2>   rV   rU   )rT   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.Ú
matplotlibr7   úimages/matplotlib.svg)"r   rH   rI   Ú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bindingrA   Z
other_coreÚimageÚiconr%   r%   r&   Ú_create_qAppd   sR    


$ÿÿÿ

rj   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 rG   )r   ÚQTimerÚ_timerÚtimeoutrf   Z	_on_timerr@   Ú__init__©rK   ÚargsÚkwargs©Ú	__class__r%   r&   ro   ¢   s    
zTimerQT.__init__c                 C   s   t | jƒs|  ¡  d S rG   )r   rm   Ú_timer_stoprJ   r%   r%   r&   Ú__del__©   s    
zTimerQT.__del__c                 C   s   | j  | j¡ d S rG   )rm   ZsetSingleShotZ_singlerJ   r%   r%   r&   Ú_timer_set_single_shot¯   s    zTimerQT._timer_set_single_shotc                 C   s   | j  | j¡ d S rG   )rm   ZsetIntervalZ	_intervalrJ   r%   r%   r&   Ú_timer_set_interval²   s    zTimerQT._timer_set_intervalc                 C   s   | j  ¡  d S rG   )rm   ÚstartrJ   r%   r%   r&   Ú_timer_startµ   s    zTimerQT._timer_startc                 C   s   | j  ¡  d S rG   )rm   ÚstoprJ   r%   r%   r&   ru   ¸   s    zTimerQT._timer_stop)rN   rO   rP   Ú__doc__ro   rv   rw   rx   rz   ru   Ú__classcell__r%   r%   rs   r&   rk   Ÿ   s   rk   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 rG   )ÚFigureManagerQT)Úclsr%   r%   r&   rL   ¿   rM   zFigureCanvasQT.<lambda>c                 C   s    i | ]\}}t td ƒ|ƒ|“qS )zQtCore.Qt.MouseButtonrD   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 rG   r%   ©Úpainterr%   r%   r&   rL   Ñ   rM   z)FigureCanvasQT.__init__.<locals>.<lambda>zQtCore.Qt.WidgetAttributeTÚwhite)rj   r@   ro   Ú_draw_pendingÚ_is_drawingÚ_draw_rect_callbackÚ_in_resize_eventr^   r   ZWA_OpaquePaintEventZsetMouseTrackingÚresizeÚget_width_heightr   ZQPaletteÚQColorZ
setPalette)rK   r   Úpaletters   r%   r&   ro   Ë   s    
ÿ
zFigureCanvasQT.__init__c                 C   s4   |   |  ¡ pd¡r0t |  ¡ |  ¡ ¡}|  |¡ d S )Nr   )Z_set_device_pixel_ratioÚdevicePixelRatioFr   ZQResizeEventÚsizeÚresizeEvent©rK   Úeventr%   r%   r&   Ú_update_pixel_ratioÜ   s
    
ÿz"FigureCanvasQT._update_pixel_ratioc                 C   s0   |   ¡  |d k	r,|j | j ¡ |j | j ¡ d S rG   )r’   ZphysicalDotsPerInchChangedrf   ZlogicalDotsPerInchChanged)rK   Úscreenr%   r%   r&   Ú_update_screenå   s    zFigureCanvasQT._update_screenc                 C   s,   |   ¡  ¡ }|j | j¡ |  | ¡ ¡ d S rG   )ÚwindowZwindowHandleZscreenChangedrf   r”   r“   )rK   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)rK   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)rK   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   rH   rI   ZqueryKeyboardModifiersr   r¢   Ú_mpl_modifiersÚ_process)rK   r‘   Úmodsr%   r%   r&   Ú
enterEvent  s    ÿýzFigureCanvasQT.enterEventc                 C   s2   t j ¡  td| f|  ¡ ž|  ¡ |dœŽ ¡  d S )NZfigure_leave_eventr£   )r   rH   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§   ©rK   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   rH   rI   ZplatformNameZ
angleDeltar¡   r   r¢   r¦   r§   )rK   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§   ©rK   r‘   rB   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)rK   r‘   ÚwÚhZdpivalZwinchZhinchr%   r%   r&   r   W  s    zFigureCanvasQT.resizeEventc                 C   s   |   ¡ \}}t ||¡S rG   )rŠ   r   ÚQSize)rK   rÀ   rÁ   r%   r%   r&   ÚsizeHintj  s    zFigureCanvasQT.sizeHintc                 C   s   t  dd¡S )Né
   )r   rÂ   rJ   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 )r8   Zctrl)ÚSPECIAL_KEYSÚreplace)r"   ÚmaskrB   ©rÇ   r¤   r%   r&   rC   {  s    þz1FigureCanvasQT._mpl_modifiers.<locals>.<listcomp>)r   rH   rI   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Æ   r5   ú+)
rB   r¦   rÈ   ÚKeyErrorr[   Ú
maxunicodeÚchrÚremoveÚlowerÚjoin)rK   r‘   Z	event_keyr¨   rB   r%   r%   r&   r¸     s    
zFigureCanvasQT._get_keyc                 C   s   t j ¡  ¡  d S rG   )r   rH   rI   ZprocessEventsrJ   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	isRunningrZ   r   Z
QEventLooprl   Ú
singleShotÚintrg   r   r   Ú_exec)rK   rn   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Õ   rg   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ÚupdaterJ   rs   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   rl   rÖ   Ú
_draw_idlerJ   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"   ÚptrJ   r%   r&   rC   È  s     z'FigureCanvasQT.blit.<locals>.<listcomp>)r   rž   ZboundsZrepaintÚrectrŸ   )rK   rž   ÚlÚbrÀ   rÁ   Útr%   rJ   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_excrJ   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à   rJ   r%   r&   rC   Ý  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ƒ   ÚpenÚcolorÚoffset©rK   Úx0Úx1Úy0Úy1r%   r&   r‡   à  s    þþ


z9FigureCanvasQT.drawRectangle.<locals>._draw_rect_callbackc                 S   s   d S rG   r%   r‚   r%   r%   r&   r‡   õ  s    )r‡   rÝ   )rK   râ   rÀ   rÁ   r‡   r%   rï   r&   ÚdrawRectangleÙ  s    zFigureCanvasQT.drawRectangle)N)N)N)r   )N)N).rN   rO   rP   Zrequired_interactive_frameworkrk   Z
_timer_clsr   ZclasspropertyZmanager_classr   ÚLEFTÚRIGHTZMIDDLEZBACKZFORWARDr­   ro   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%   rs   r&   r~   ¼   sP   ûÿ
	
	



	r~   c                       s$   e Zd Ze ¡ Z‡ fdd„Z‡  ZS )Ú
MainWindowc                    s   | j  ¡  tƒ  |¡ d S rG   )ÚclosingÚemitr@   Ú
closeEventr   rs   r%   r&   rû   þ  s    
zMainWindow.closeEvent)rN   rO   rP   r   ÚSignalrù   rû   r}   r%   r%   rs   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 ‡ fdd„¡ ˆ jj ˆ j¡ tjdkrjt	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 )Nc                      s   t dˆ jƒ ¡ S )NÚclose_event)r   Úcanvasr§   r%   rJ   r%   r&   rL     rM   z*FigureManagerQT.__init__.<locals>.<lambda>r7   rX   Fr   zQtCore.Qt.FocusPolicy)!rø   r•   r@   ro   rù   rf   Ú_widgetclosedr[   ra   rb   r   rc   r   rd   re   Ú_destroyingÚtoolbarZ
addToolBarrÃ   rŸ   r‰   r½   ZsetCentralWidgetrþ   rY   Úis_interactiveÚshowr¿   ZsetFocusPolicyr   ZStrongFocusÚsetFocusÚraise_)	rK   rþ   Únumrh   ri   Z
tbs_heightÚcsZ	cs_heightrŸ   rs   rJ   r&   ro     s4    
þ




zFigureManagerQT.__init__c                 C   s$   | j  ¡ r| j  ¡  n
| j  ¡  d S rG   )r•   ZisFullScreenZ
showNormalZshowFullScreenrJ   r%   r%   r&   Ú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`   rJ   r%   r%   r&   rÿ   B  s    zFigureManagerQT._widgetclosedc                 C   sp   t || jj ƒ}t || jj ƒ}| j ¡ | j ¡  }| j ¡ | j ¡  }| j ||¡ | j || || ¡ d S rG   )r×   rþ   r    r•   r½   rŸ   r‰   )rK   r½   rŸ   Úextra_widthZextra_heightr%   r%   r&   r‰   N  s    zFigureManagerQT.resizec              	   C   s0   t j ¡ }|r,t|ƒ t |¡ W 5 Q R X d S rG   )r   rH   rI   r   r   rØ   )r€   Zqappr%   r%   r&   Ústart_main_loopX  s    

zFigureManagerQT.start_main_loopc                 C   s,   | j  ¡  tjd r(| j  ¡  | j  ¡  d S )Nzfigure.raise_window)r•   r  rY   ÚrcParamsZactivateWindowr  rJ   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 r	  )r   rH   rI   r•   r   r  r
  Úclose©rK   rq   r%   r%   r&   r
  e  s    
zFigureManagerQT.destroyc                 C   s
   | j  ¡ S rG   )r•   ZwindowTitlerJ   r%   r%   r&   Úget_window_titlep  s    z FigureManagerQT.get_window_titlec                 C   s   | j  |¡ d S rG   )r•   ZsetWindowTitle)rK   Útitler%   r%   r&   Úset_window_titles  s    z FigureManagerQT.set_window_title)rN   rO   rP   r|   ro   r  rÿ   r‰   Úclassmethodr  r  r
  r  r  r}   r%   r%   rs   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&   rC   }  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   ÚQToolBarro   Ú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	   )
rK   rþ   Úparentr$  ÚtextZtooltip_textÚ
image_fileÚcallbackÚaZlabelActionr%   r%   r&   ro     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   rc   Ú	with_namer  rÉ   rb   Úexistsr   ZQPixmapZsetDevicePixelRatior   rŒ   rí   ZbackgroundRoleÚvalueZforegroundRoleZcreateMaskFromColorr‹   r   ZMaskOutColorÚfillZsetMaskrd   )rK   r  Zpath_regularZ
path_largeÚfilenameÚ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   r3   z - Nz<anonymous ú>)Z	get_labelZ	get_titlerÓ   ÚfilterZ
get_xlabelZ
get_ylabelÚtyperN   )r"   Úaxr%   r%   r&   rC   Ê  s   úÿþýüz8NavigationToolbar2QT.edit_parameters.<locals>.<listcomp>c                    s   g | ]}ˆ   |¡d kr|‘qS )r   )Úcount)r"   r  ©Útitlesr%   r&   rC   Ò  s     z (id: z#xú)r  zSelect axes:r   F)rþ   r   Zget_axesr   ÚQMessageBoxÚwarningr6  ÚlenÚ	enumerateÚidZQInputDialogZgetItemÚindexÚfigureoptionsZfigure_edit)rK   ZaxesrF  Zduplicate_titlesÚiÚitemÚokr%   rH  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  rJ   r%   r%   r&   Ú_update_buttons_checkedß  s    

z,NavigationToolbar2QT._update_buttons_checkedc                    s   t ƒ j|Ž  |  ¡  d S rG   )r@   r  rW  r  rs   r%   r&   r  æ  s    zNavigationToolbar2QT.panc                    s   t ƒ j|Ž  |  ¡  d S rG   )r@   r  rW  r  rs   r%   r&   r  ê  s    zNavigationToolbar2QT.zoomc                 C   s"   | j  |¡ | jr| j |¡ d S rG   )Úmessagerú   r$  r,  ÚsetText©rK   Ú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&   rC   ÷  s     z8NavigationToolbar2QT.draw_rubberband.<locals>.<listcomp>)rþ   r   rž   rŸ   rô   )rK   r‘   rð   rò   rñ   ró   rŸ   râ   r%   r%   r&   Údraw_rubberbandó  s
    z$NavigationToolbar2QT.draw_rubberbandc                 C   s   | j  d ¡ d S rG   )rþ   rô   rJ   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 rG   )r&  Zreject)ÚerJ   r%   r&   rL     rM   z9NavigationToolbar2QT.configure_subplots.<locals>.<lambda>)r&  ÚSubplotToolQtrþ   r   r6  Zmpl_connectÚupdate_from_current_subplotparsr  rJ   r%   rJ   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&   rC     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Ú
expanduserrY   r  rÓ   Zget_default_filenameÚappendr   Z_getSaveFileNamer6  Údirnamer   Zsavefigrç   r   rK  Úcriticalrb   r   ZOkZNoButton)rK   rq   Ú	filetypesZsorted_filetypesZdefault_filetypeZ	startpathry   ÚfiltersZselectedFilterr  ÚextsZ	exts_listrD  Ú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Ú_posrM  Z	_elementsr%  Z
setEnabled)rK   Zcan_backwardZcan_forwardr%   r%   r&   Úset_history_buttons'  s    

z(NavigationToolbar2QT.set_history_buttons)NT)rN   rO   rP   r   rü   rb   rX  r	   r'  r+   rP  ro   r(  r  rW  r  r  r\  r^  r_  rc  rr  ru  r}   r%   r%   rs   r&   r  w  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 )ra  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   r3   zExport valuesZSpacingsZhspaceZwspacezTight layoutÚResetÚCloser   r   rë   g{®Gázt?F)(r@   ro   re   r   rd   rb   r   rc   ZsetObjectNameÚ
_spinboxesr   ZQHBoxLayoutÚ	setLayoutÚ_export_valuesÚ_tight_layoutÚ_resetr  ÚQVBoxLayoutZ	addLayoutZ	QGroupBoxr5  ZQFormLayoutZQDoubleSpinBoxÚsetRangeZsetDecimalsZsetSingleStepZsetKeyboardTrackingZvalueChangedrf   Ú_on_value_changedZaddRowZ
addStretchZQPushButtonZsetAutoDefaultÚclickedr  Ú_figureÚ	_defaultsÚ_export_values_dialogrb  )rK   Z	targetfigr6  Zmain_layoutÚgroupÚ	spinboxesZbuttonsÚlayoutÚboxÚinnerr  ÚspinboxÚmethodr®   rs   r%   r&   ro   1  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‹  rJ   r%   r&   r'   ^  s   ÿ zASubplotToolQt.update_from_current_subplotpars.<locals>.<dictcomp>)rz  rg  r„  r~  rJ   r%   rJ   r&   rb  ]  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>l  s   ÿz/SubplotToolQt._export_values.<locals>.<genexpr>r   é   )r   ÚQDialogr…  r  r{  ZQPlainTextEditZsetReadOnlyr5  ZsetPlainTextrÓ   rz  rg  ZmaximumSizeZ	setHeightr   ZQFontMetricsZdocumentZdefaultFontrŽ   ZtoPlainTextrŸ   ZsetMaximumSizer  )rK   rˆ  r7  rŽ   r%   r%   r&   r|  b  s,    



ÿÿ ÿÿÿ
zSubplotToolQt._export_valuesc                 C   st   | j }dD ]<\}}||  ||  ¡ d ¡ ||  ||  ¡ d ¡ q
| jjf dd„ | ¡ D ƒŽ | jj ¡  d S )N))rw  rv  )r1   r3   gü©ñÒMbP?c                 S   s   i | ]\}}||  ¡ “qS r%   r  r  r%   r%   r&   r'   ~  s      z3SubplotToolQt._on_value_changed.<locals>.<dictcomp>)	rz  Z
setMinimumr>  Z
setMaximumrƒ  Zsubplots_adjustrg  rþ   r¿   )rK   r‡  rÒ   Zhigherr%   r%   r&   r  w  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_layoutrz  rg  ÚblockSignalsÚsetValuer    r  rþ   r¿   )rK   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„  rg  r€  r•  r–  r  )rK   r‹  r>  r%   r%   r&   r~  ‰  s    

zSubplotToolQt._reset)
rN   rO   rP   ro   rb  r|  r  r}  r~  r}   r%   r%   rs   r&   ra  0  s   ,
ra  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   ro   r   r  r   r   r_   r!  r   r   r"  r#  r+  r-  r.  r/  r0  r1  r2  r3  r4  r5  Ú_message_actionÚ
_toolitemsÚ_groups)rK   Ztoolmanagerr6  Zmessage_labelr%   r%   r&   ro   “  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 rG   )Ztrigger_toolr%   ©r  rK   r%   r&   Úhandler¯  s    z'ToolbarQt.add_toolitem.<locals>.handlerT)r   ZQToolButtonZsetIconr  r(  rY  r*  r)  Útoggledrf   r‚  r™  Ú
setdefaultÚ_add_to_grouprk  )	rK   r  r†  rš   r8  ÚdescriptionÚtoggler®   rœ  r%   r›  r&   Úadd_toolitem¥  s    



zToolbarQt.add_toolitemc           	      C   sV   | j  |g ¡}|s(|  | j¡}| |¡ || }|  ||¡}| ||¡ || j |< d S rG   )rš  r]   ZinsertSeparatorr˜  rk  ZinsertWidgetr+   )	rK   r†  r  r®   rš   Ú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 rG   )r™  r  Z
disconnectrU  rf   )rK   r  r  r®   rœ  r%   r%   r&   Útoggle_toolitemÅ  s    

zToolbarQt.toggle_toolitemc                 C   s*   | j | D ]\}}| d ¡ q
| j |= d S rG   )r™  Z	setParent)rK   r  r®   rœ  r%   r%   r&   Úremove_toolitemÍ  s    zToolbarQt.remove_toolitemc                 C   s   |   | j¡ |¡ d S rG   )ZwidgetForActionr˜  rY  rZ  r%   r%   r&   r\  Ò  s    zToolbarQt.set_message)N)	rN   rO   rP   ro   r¢  rŸ  r¦  r§  r\  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 rG   )r@   ro   r&  rp   rs   r%   r&   ro   Ø  s    zConfigureSubplotsQt.__init__c                 G   s   t  | ¡ d S rG   )r  rc  r  r%   r%   r&   ÚtriggerÜ  s    zConfigureSubplotsQt.trigger)rN   rO   rP   ro   r©  r}   r%   r%   rs   r&   r¨  Ö  s   r¨  c                   @   s   e Zd Zdd„ ZdS )ÚSaveFigureQtc                 G   s   t  |  ¡ ¡ d S rG   )r  rr  Ú"_make_classic_style_pseudo_toolbarr  r%   r%   r&   r©  â  s    ÿzSaveFigureQt.triggerN©rN   rO   rP   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 rG   )r  r^  r«  )rK   rð   rò   rñ   ró   r%   r%   r&   r^  é  s         ÿzRubberbandQt.draw_rubberbandc                 C   s   t  |  ¡ ¡ d S rG   )r  r_  r«  rJ   r%   r%   r&   r_  í  s    ÿzRubberbandQt.remove_rubberbandN)rN   rO   rP   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   rK  Ú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 rG   )rþ   Zgrabr   rH   rI   Ú	clipboardZ	setPixmap)rK   rq   rr   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)rN   rO   rP   r   Zbackend_versionr~   ZFigureCanvasr   ZFigureManagerr  Zmainloopr%   r%   r%   r&   r²    s   r²  )QÚ	functoolsrh  r[   rè   rW   rY   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_editorrQ  r  r   r   r   r   r   r   r   r   r   r   ra   rÈ   rÌ   ZMOVEZHANDZPOINTERZSELECT_REGIONZWAITZRESIZE_HORIZONTALZRESIZE_VERTICALr˜   Zcaching_module_getattrrE   Ú	lru_cacherj   rk   r¾   r~   ZQMainWindowrø   r   r  r  r”  ra  r—  Z_register_tool_classZConfigureSubplotsBaser¨  ZSaveFigureBaserª  ZRubberbandBaser­  ZToolHelpBaser®  ZToolCopyToClipboardBaser°  Z_toolbar2_classZ_toolmanager_toolbar_classZexportr²  r%   r%   r%   r&   Ú<module>   s¶   <,Úÿ-ý
ùÿ
:  At :bD	
