o
    ä¸GfÊ™  ã                	   @   s0  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& dd	„ g 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/‘d0‘d1‘d2‘R D ƒZ(d3d4„ d5D ƒZ)d6d	„ ej*d7fej+d8fej,d9fej-d:fej.d;fej/d<fej0d=ffD ƒZ1e  2d¡d>d?„ ƒZ3G d@dA„ dAeƒZ4G dBdC„ dCee!j5ƒZ6G dDdE„ dEe!j7ƒZ8G dFdG„ dGeƒZ9G dHdI„ dIee!j:ƒZ;G dJdK„ dKe!j<ƒZ=G dLdM„ dMee!j:ƒZ>e ?e6¡G dNdO„ dOej@ƒƒZAe ?e6¡G dPdQ„ dQejBƒƒZCe ?e6¡G dRdS„ dSejDƒƒZEe ?e6¡G dTdU„ dUejFƒƒZGe ?e6¡G dVdW„ dWejHƒƒZIe;e9_Je>e9_KejLG dXdY„ dYeƒƒZMdS )Zé    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Ú_to_intÚ
_isdeletedÚ_maybe_allow_interruptc                 C   s$   i | ]\}}t ttjj|ƒƒ|“qS © )r   Úgetattrr   ÚQtÚKey©Ú.0ÚkÚvr   r   ú>lib/python3.10/site-packages/matplotlib/backends/backend_qt.pyÚ
<dictcomp>   s    ÿr&   )Z
Key_EscapeÚescape)ZKey_TabZ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jj|ƒƒt ttjj|ƒƒf‘qS r   )r   r   r   r   ZKeyboardModifierr    )r"   ÚmodÚkeyr   r   r%   Ú
<listcomp>D   s    þÿÿr@   ))ZControlModifierr3   )ZAltModifierr9   )ZShiftModifierr1   )ZMetaModifierr7   c                 C   s    i | ]\}}|t tjj|ƒ“qS r   )r   r   r   ZCursorShaper!   r   r   r%   r&   N   ó    ÿZSizeAllCursorZPointingHandCursorZArrowCursorZCrossCursorZ
WaitCursorZSizeHorCursorZSizeVerCursorc                  C   s‚  t j ¡ } | d u r¿tj ¡ stdƒ‚tdv rd}d}ntdv r$d}d}ntdƒ‚|D ]7}tj	 
|› d	¡}|d ura|j ¡ d uratj	 
|› d
¡}t dt› dt ¡ › d|› d| ¡ › d	¡  nq*|dkrzz
t j tjj¡ W n	 tyy   Y nw zt j tjjj¡ W n	 tyŽ   Y nw t  dg¡} tjdkr«tt d¡ƒ}t |¡}|  |¡ |  d¡ t ¡  |dkr¿|  tjj¡ | S )NzInvalid DISPLAY variable>   ÚPySide6ÚPyQt6)ÚPyQt5ÚPySide2é   >   rE   rD   )rC   rB   é   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.Ú
matplotlibr4   úimages/matplotlib.svgT) r   ÚQApplicationÚinstanceÚmplZ_c_internal_utilsZdisplay_is_validÚRuntimeErrorr   ÚsysÚmodulesÚgetr   Zwarn_externalr   ZqVersionÚsetAttributer   ZAA_EnableHighDpiScalingÚAttributeErrorZ#setHighDpiScaleFactorRoundingPolicyZ HighDpiScaleFactorRoundingPolicyZPassThroughÚplatformÚstrr   Ú_get_data_pathr   ÚQIconÚsetWindowIconZsetQuitOnLastWindowClosedZ_setup_new_guiappZAA_UseHighDpiPixmaps)ZappZother_bindingsZ
qt_versionZbindingr>   Z
other_coreÚimageÚiconr   r   r%   Ú_create_qApp]   sb   

ÿþýÿ€ÿÿÿ



rZ   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                    s0   t  ¡ | _| jj | j¡ tƒ j|i |¤Ž d S ©N)r   ÚQTimerÚ_timerÚtimeoutÚconnectZ	_on_timerr=   Ú__init__©ÚselfÚargsÚkwargs©Ú	__class__r   r%   ra   š   s   
zTimerQT.__init__c                 C   s   t | jƒs|  ¡  d S d S r\   )r   r^   Ú_timer_stop©rc   r   r   r%   Ú__del__¡   s   
ÿzTimerQT.__del__c                 C   ó   | j  | j¡ d S r\   )r^   ZsetSingleShotZ_singleri   r   r   r%   Ú_timer_set_single_shot§   ó   zTimerQT._timer_set_single_shotc                 C   rk   r\   )r^   ZsetIntervalZ	_intervalri   r   r   r%   Ú_timer_set_intervalª   rm   zTimerQT._timer_set_intervalc                 C   ó   | j  ¡  d S r\   )r^   Ústartri   r   r   r%   Ú_timer_start­   ó   zTimerQT._timer_startc                 C   ro   r\   )r^   Ústopri   r   r   r%   rh   °   rr   zTimerQT._timer_stop)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ra   rj   rl   rn   rq   rh   Ú__classcell__r   r   rf   r%   r[   —   s    r[   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dFd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"dFdd0œd1d2„ƒZ#d3d4„ Z$d5d6„ Z%dGd8d9„Z&dFd:d;„Z'‡ fd<d=„Z(d>d?„ Z)dFd@dA„Z*dBdC„ Z+dDdE„ Z,‡  Z-S )HÚFigureCanvasQTZqtc                 C   s   t S r\   )ÚFigureManagerQT)Úclsr   r   r%   Ú<lambda>·   ó    zFigureCanvasQT.<lambda>c                 C   s    i | ]\}}t tjj|ƒ|“qS r   )r   r   r   r   r!   r   r   r%   r&   ¹   rA   zFigureCanvasQT.<dictcomp>Z
LeftButtonZRightButtonZMiddleButtonZXButton1ZXButton2Nc                    sv   t ƒ  tƒ j|d d| _d| _dd„ | _d| _|  tj	j
j¡ |  d¡ | j|  ¡ Ž  t t d¡¡}|  |¡ d S )N)ÚfigureFc                 S   ó   d S r\   r   ©Úpainterr   r   r%   r|   É   r}   z)FigureCanvasQT.__init__.<locals>.<lambda>TÚwhite)rZ   r=   ra   Ú_draw_pendingÚ_is_drawingÚ_draw_rect_callbackÚ_in_resize_eventrQ   r   r   ZWidgetAttributeZWA_OpaquePaintEventZsetMouseTrackingÚresizeÚget_width_heightr   ZQPaletteÚQColorZ
setPalette)rc   r~   Úpaletterf   r   r%   ra   Ã   s   

zFigureCanvasQT.__init__c                 C   s8   |   |  ¡ pd¡rt |  ¡ |  ¡ ¡}|  |¡ d S d S )Nr   )Z_set_device_pixel_ratioÚdevicePixelRatioFr   ZQResizeEventÚsizeÚresizeEvent©rc   Úeventr   r   r%   Ú_update_pixel_ratioÓ   s   
ÿúz"FigureCanvasQT._update_pixel_ratioc                 C   s4   |   ¡  |d ur|j | j ¡ |j | j ¡ d S d S r\   )r   ZphysicalDotsPerInchChangedr`   ZlogicalDotsPerInchChanged)rc   Úscreenr   r   r%   Ú_update_screenÜ   s
   þzFigureCanvasQT._update_screenc                 C   s,   |   ¡  ¡ }|j | j¡ |  | ¡ ¡ d S r\   )ÚwindowZwindowHandleZscreenChangedr`   r’   r‘   )rc   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)rc   r•   r   r   r%   Ú
set_cursorê   s   zFigureCanvasQT.set_cursorc                 C   st   |du 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)rc   r™   r›   rŸ   r   r   r%   ÚmouseEventCoordsî   s   



zFigureCanvasQT.mouseEventCoordsc                 C   s<   t j ¡  ¡ }td| g|  |¡¢R |  |¡|dœŽ ¡  d S )NZfigure_enter_event©Ú	modifiersÚguiEvent)r   rJ   rK   ZqueryKeyboardModifiersr   r    Ú_mpl_modifiersÚ_process)rc   r   Úmodsr   r   r%   Ú
enterEvent  s   ÿý
zFigureCanvasQT.enterEventc                 C   s4   t j ¡  td| g|  ¡ ¢R |  ¡ |dœŽ ¡  d S )NZfigure_leave_eventr¡   )r   rJ   ZrestoreOverrideCursorr   r    r¤   r¥   rŽ   r   r   r%   Ú
leaveEvent  s   
ÿý
zFigureCanvasQT.leaveEventc                 C   óL   | j  | ¡ ¡}|d ur$td| g|  |¡¢|‘R |  ¡ |dœŽ ¡  d S d S )NÚbutton_press_eventr¡   ©ÚbuttondrP   Úbuttonr   r    r¤   r¥   ©rc   r   r­   r   r   r%   ÚmousePressEvent  ó   ÿÿý
üzFigureCanvasQT.mousePressEventc                 C   sN   | j  | ¡ ¡}|d ur%td| g|  |¡¢|‘R d|  ¡ |dœŽ ¡  d S d S )Nrª   T)Zdblclickr¢   r£   r«   r®   r   r   r%   ÚmouseDoubleClickEvent  s   ÿÿý
üz$FigureCanvasQT.mouseDoubleClickEventc                 C   s,   t d| g|  |¡¢R |  ¡ |dœŽ ¡  d S )NZmotion_notify_eventr¡   )r   r    r¤   r¥   rŽ   r   r   r%   ÚmouseMoveEvent$  s   ÿý
zFigureCanvasQT.mouseMoveEventc                 C   r©   )NZbutton_release_eventr¡   r«   r®   r   r   r%   ÚmouseReleaseEvent*  r°   z FigureCanvasQT.mouseReleaseEventc                 C   sr   |  ¡  ¡ stj ¡  ¡ dkr| ¡  ¡ d }n|  ¡  ¡ }|r7td| g|  	|¡¢R ||  
¡ |dœŽ ¡  d S d S )NZxcbéx   Zscroll_event)Ústepr¢   r£   )Z
pixelDeltaZisNullr   rJ   rK   ZplatformNameZ
angleDeltarŸ   r   r    r¤   r¥   )rc   r   Zstepsr   r   r%   Ú
wheelEvent2  s   ÿý
üzFigureCanvasQT.wheelEventc                 C   ó<   |   |¡}|d urtd| |g|  ¡ ¢R d|iŽ ¡  d S d S )NZkey_press_eventr£   ©Ú_get_keyr   r    r¥   ©rc   r   r?   r   r   r%   ÚkeyPressEvent@  ó   
ÿÿþ
ýzFigureCanvasQT.keyPressEventc                 C   r·   )NZkey_release_eventr£   r¸   rº   r   r   r%   ÚkeyReleaseEventG  r¼   zFigureCanvasQT.keyReleaseEventc                 C   s˜   | j rd S d| _ z?| ¡  ¡ | j }| ¡  ¡ | j }| jj}|| }|| }| jj||dd tj	 
| |¡ td| ƒ ¡  |  ¡  W d| _ d S d| _ w )NTF)ÚforwardZresize_event)r†   rŒ   Úwidthrž   r   r~   ZdpiZset_size_inchesr   ÚQWidgetr   r   r¥   Ú	draw_idle)rc   r   ÚwÚhZdpivalZwinchZhinchr   r   r%   r   N  s   
zFigureCanvasQT.resizeEventc                 C   s   |   ¡ \}}t ||¡S r\   )rˆ   r   ÚQSize)rc   rÂ   rÃ   r   r   r%   ÚsizeHinta  ó   zFigureCanvasQT.sizeHintc                 C   s   t  dd¡S )Né
   )r   rÄ   ri   r   r   r%   ÚminumumSizeHinte  s   zFigureCanvasQT.minumumSizeHint©Úexcludec                   s2   ˆd u rt j ¡  ¡ ‰tˆƒ‰‡ ‡fdd„tD ƒS )Nc                    s0   g | ]\}}ˆ |krˆ|@ rt |  d d¡‘qS )r5   Zctrl)ÚSPECIAL_KEYSÚreplace)r"   Úmaskr?   ©rÊ   r¢   r   r%   r@   r  s
    þz1FigureCanvasQT._mpl_modifiers.<locals>.<listcomp>)r   rJ   rK   ZkeyboardModifiersr   Ú_MODIFIER_KEYS)r¢   rÊ   r   rÎ   r%   r¤   h  s   ÿzFigureCanvasQT._mpl_modifiersc                 C   sx   |  ¡ }| j|d}zt| }W n# ty3   |tjkrY d S t|ƒ}d|v r-| d¡ n| ¡ }Y nw d 	||g ¡S )NrÉ   r2   ú+)
r?   r¤   rË   ÚKeyErrorrN   Ú
maxunicodeÚchrÚremoveÚlowerÚjoin)rc   r   Z	event_keyr¦   r?   r   r   r%   r¹   v  s   
€ñzFigureCanvasQT._get_keyc                 C   s   t j ¡  ¡  d S r\   )r   rJ   rK   ZprocessEventsri   r   r   r%   Úflush_events  s   zFigureCanvasQT.flush_eventsr   c                 C   s‚   t | dƒr| j ¡ rtdƒ‚t ¡  | _}|dkr%tj t|d ƒ|j	¡}t
|ƒ t |¡ W d   ƒ d S 1 s:w   Y  d S )NÚ_event_loopzEvent loop already runningr   iè  )rš   rØ   Z	isRunningrM   r   Z
QEventLoopr]   Ú
singleShotÚintÚquitr   r   Ú_exec)rc   r_   Z
event_loopÚ_r   r   r%   Ústart_event_loop”  s   
"ÿzFigureCanvasQT.start_event_loopc                 C   s   t | dƒr| j ¡  d S d S )NrØ   )rš   rØ   rÛ   rŽ   r   r   r%   Ústop_event_loopŸ  s   
ÿzFigureCanvasQT.stop_event_loopc                    sN   | j rdS tj| dd tƒ  ¡  W d  ƒ n1 sw   Y  |  ¡  dS )z5Render the figure, and queue a request for a Qt draw.NT)r„   )r„   r   Z_setattr_cmr=   ÚdrawÚupdateri   rf   r   r%   rà   ¤  s   ÿzFigureCanvasQT.drawc                 C   s:   t | ddƒst | ddƒsd| _tj d| j¡ dS dS dS )z9Queue redraw of the Agg buffer and request Qt paintEvent.rƒ   Fr„   Tr   N)r   rƒ   r   r]   rÙ   Ú
_draw_idleri   r   r   r%   rÁ   ®  s   
ÿýzFigureCanvasQT.draw_idlec                    sZ   |d u rˆ j rˆ j j}‡ fdd„|jD ƒ\}}}}|| }ˆ  |ˆ  ¡  ¡ | ||¡ d S )Nc                    ó   g | ]	}t |ˆ j ƒ‘qS r   ©rÚ   rž   ©r"   Úptri   r   r%   r@   ¿  ó    z'FigureCanvasQT.blit.<locals>.<listcomp>)r~   rœ   ZboundsZrepaintÚrectr   )rc   rœ   ÚlÚbrÂ   rÃ   Útr   ri   r%   Úblitº  s
    zFigureCanvasQT.blitc              	   C   s®   |   ¡ I | js	 W d   ƒ d S d| _|  ¡ dk s |  ¡ dk r)	 W d   ƒ d S z|  ¡  W n ty<   t ¡  Y n	w W d   ƒ d S W d   ƒ d S 1 sPw   Y  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 ur$‡ fdd„|D ƒ\‰‰}}ˆ| ‰ˆ| ‰‡ ‡‡‡‡fdd„}ndd„ }|ˆ _ ˆ  ¡  d S )Nc                    rã   r   rä   rå   ri   r   r%   r@   Ô  rç   z0FigureCanvasQT.drawRectangle.<locals>.<listcomp>c                    s®   t  t  d¡dˆ j ¡}| ddg¡ t  d¡dft  d¡dffD ]3\}}| |¡ | |¡ |  |¡ |  ˆˆˆˆ¡ |  ˆˆˆˆ¡ |  ˆˆˆˆ¡ |  ˆˆˆˆ¡ q!d S )NÚblackr   é   r   r‚   )	r   ZQPenr‰   rž   ZsetDashPatternZsetDashOffsetZsetColorZsetPenZdrawLine)r   ZpenÚcolorÚoffset©rc   Úx0Úx1Úy0Úy1r   r%   r…   ×  s    þþ


ôz9FigureCanvasQT.drawRectangle.<locals>._draw_rect_callbackc                 S   r   r\   r   r€   r   r   r%   r…   ì  s   )r…   rá   )rc   rè   rÂ   rÃ   r…   r   rô   r%   ÚdrawRectangleÐ  s   zFigureCanvasQT.drawRectangler\   )r   ).rt   ru   rv   Zrequired_interactive_frameworkr[   Z
_timer_clsr   ZclasspropertyZmanager_classr   ZLEFTZRIGHTZMIDDLEZBACKZFORWARDr¬   ra   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ù   rx   r   r   rf   r%   ry   ´   sR    ûÿ
	
	



	ry   c                       s$   e Zd Ze ¡ Z‡ fdd„Z‡  ZS )Ú
MainWindowc                    s   | j  ¡  tƒ  |¡ d S r\   )ÚclosingÚemitr=   Ú
closeEventrŽ   rf   r   r%   rþ   õ  s   
zMainWindow.closeEvent)rt   ru   rv   r   ÚSignalrü   rþ   rx   r   r   rf   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 )rz   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r*t	t
 d¡ƒ}t |¡}| j |¡ d| j_| jr@| j | j¡ | j ¡  ¡ }nd}| ¡ }| ¡ }|| }| j | ¡ |¡ | j | j¡ t ¡ rl| j ¡  | j ¡  | j tjjj ¡ | j !¡  | j "¡  d S )Nr4   rI   Fr   )#rû   r“   r=   ra   rü   r`   Ú_widgetclosedrN   rS   rT   r   rU   r   rV   rW   Ú_destroyingÚtoolbarZ
addToolBarrÅ   r   r‡   r¿   ZsetCentralWidgetÚcanvasrL   Zis_interactiveÚshowrÁ   ZsetFocusPolicyr   r   ZFocusPolicyZStrongFocusÚsetFocusÚraise_)	rc   r  ZnumrX   rY   Z
tbs_heightÚcsZ	cs_heightr   rf   r   r%   ra     s.   




zFigureManagerQT.__init__c                 C   s&   | j  ¡ r| j  ¡  d S | j  ¡  d S r\   )r“   ZisFullScreenZ
showNormalZshowFullScreenri   r   r   r%   Úfull_screen_toggle0  s   
z"FigureManagerQT.full_screen_togglec                 C   sJ   t d| jƒ ¡  | jjrd S d| j_zt | ¡ W d S  ty$   Y d S w )NÚclose_eventT)r   r  r¥   r“   r  r   ÚdestroyrR   ri   r   r   r%   r   6  s   ÿzFigureManagerQT._widgetclosedc                 C   sp   t || jj ƒ}t || jj ƒ}| j ¡ | j ¡  }| j ¡ | j ¡  }| j ||¡ | j || || ¡ d S r\   )rÚ   r  rž   r“   r¿   r   r‡   )rc   r¿   r   Zextra_widthZextra_heightr   r   r%   r‡   C  s   zFigureManagerQT.resizec                 C   sJ   t j ¡ }|r#t|ƒ t |¡ W d   ƒ d S 1 sw   Y  d S d S r\   )r   rJ   rK   r   r   rÜ   )r{   Zqappr   r   r%   Ústart_main_loopM  s   

"ÿÿzFigureManagerQT.start_main_loopc                 C   s0   | j  ¡  tjd r| j  ¡  | j  ¡  d S d S )Nzfigure.raise_window)r“   r  rL   ÚrcParamsZactivateWindowr  ri   r   r   r%   r  T  s
   


þzFigureManagerQT.showc                 G   sD   t j ¡ d u r	d S | jjrd S d| j_| jr| j ¡  | j ¡  d S ©NT)r   rJ   rK   r“   r  r  r
  Úclose©rc   rd   r   r   r%   r
  Z  s   
zFigureManagerQT.destroyc                 C   s
   | j  ¡ S r\   )r“   ZwindowTitleri   r   r   r%   Úget_window_titlee  s   
z FigureManagerQT.get_window_titlec                 C   s   | j  |¡ d S r\   )r“   ZsetWindowTitle)rc   Útitler   r   r%   Úset_window_titleh  ó   z FigureManagerQT.set_window_title)rt   ru   rv   rw   ra   r  r   r‡   Úclassmethodr  r  r
  r  r  rx   r   r   rf   r%   rz   ú  s    (

rz   c                       s¸   e Zd Ze e¡Ze d¡Z	g 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 )"ÚNavigationToolbar2QTz3.8c                 C   s   g | ]^}}|‘qS r   r   )r"   ÚnamerÝ   r   r   r%   r@   s  ó    zNavigationToolbar2QT.<listcomp>ZSubplotsr   )Ú	Customizez%Edit axis, curve and image parametersZqt4_editor_optionsÚedit_parametersNTc           
      C   sB  t j | |¡ |  tj ttjjjƒttjjj	ƒB ¡¡ || _
i | _d| _| jD ]5\}}}}|du r7|  ¡  q(|  |  |d ¡|t| |ƒ¡}|| j|< |dv rT| d¡ |dur]| |¡ q(| j
r™t  d| ¡| _| j tj ttjjjƒttjjjƒB ¡¡ | j t  t jjjt jjj¡¡ |  | j¡}	|	  d¡ t! | |¡ dS )z9coordinates: should we show the coordinates on the right?Nú.png)ÚzoomÚpanTÚ )"r   ÚQToolBarra   ÚsetAllowedAreasr   r   ÚToolBarArear   ÚTopToolBarAreaÚBottomToolBarAreaÚcoordinatesÚ_actionsÚ_subplot_dialogÚ	toolitemsZaddSeparatorZ	addActionÚ_iconr   ÚsetCheckableÚ
setToolTipÚQLabelÚlocLabelÚsetAlignmentÚAlignmentFlagÚ
AlignRightÚAlignVCenterÚsetSizePolicyÚQSizePolicyÚPolicyÚ	ExpandingÚIgnoredÚ	addWidgetZ
setVisibler	   )
rc   r  Úparentr#  ÚtextZtooltip_textÚ
image_fileÚcallbackÚaZlabelActionr   r   r%   ra   w  sF   
ÿÿ

ÿ


€ÿÿ
þ
zNavigationToolbar2QT.__init__c                 C   s²   t  d|¡}| |j dd¡¡}t| ¡ r|n|ƒ}t |¡}| 	|  
¡ p&d¡ |  ¡  |  ¡ ¡ ¡ dk rT|  ¡  |  ¡ ¡}| t d¡tjj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ð   )r   rU   Z	with_namer  rÌ   rT   Úexistsr   ZQPixmapZsetDevicePixelRatior‹   rŠ   rò   ZbackgroundRoleÚvalueZforegroundRoleZcreateMaskFromColorr‰   r   r   ZMaskModeZMaskOutColorÚfillZsetMaskrV   )rc   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|\}nIdd„ |D ƒ‰ ‡ fdd„ˆ D ƒ}t|ƒD ]\}}ˆ | |v rLˆ |  dt	|ƒd›d	7  < q3tj
 | j  ¡ d
dˆ dd¡\}}|sad S |ˆ  |¡ }t || ¡ d S )NÚErrorzThere are no axes to edit.r   c              	   S   s^   g | ]+}|  ¡ p,| ¡ p,| d ¡p,| d¡p,d td| ¡ | ¡ gƒ¡p,dt|ƒj› d‘qS )r/   r0   z - Nz<anonymous ú>)Z	get_labelZ	get_titlerÖ   ÚfilterZ
get_xlabelZ
get_ylabelÚtypert   )r"   Úaxr   r   r%   r@   À  s    úÿþýüúz8NavigationToolbar2QT.edit_parameters.<locals>.<listcomp>c                    s   g | ]}ˆ   |¡d kr|‘qS )r   )Úcount)r"   r  ©Ztitlesr   r%   r@   È  s    z (id: z#xú)r  zSelect axes:r   F)r  r~   Zget_axesr   ÚQMessageBoxZwarningr6  ÚlenÚ	enumerateÚidZQInputDialogZgetItemÚindexÚfigureoptionsZfigure_edit)rc   ZaxesrD  Zduplicate_titlesÚiÚitemÚokr   rF  r%   r  ·  s4   ÿù
ÿ€
þz$NavigationToolbar2QT.edit_parametersc                 C   sL   d| j v r| j d  | jjdk¡ d| j v r$| j d  | jjdk¡ d S d S )Nr  ZPANr  ZZOOM)r$  Ú
setCheckedÚmoder  ri   r   r   r%   Ú_update_buttons_checkedÕ  s
   

ÿz,NavigationToolbar2QT._update_buttons_checkedc                    ó   t ƒ j|Ž  |  ¡  d S r\   )r=   r  rS  r  rf   r   r%   r  Ü  rÆ   zNavigationToolbar2QT.panc                    rT  r\   )r=   r  rS  r  rf   r   r%   r  à  rÆ   zNavigationToolbar2QT.zoomc                 C   s&   | j  |¡ | jr| j |¡ d S d S r\   )Ú_messagerý   r#  r+  ÚsetText©rc   Ú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%   r@   í  r  z8NavigationToolbar2QT.draw_rubberband.<locals>.<listcomp>)r  r~   rœ   r   rù   )rc   r   rõ   r÷   rö   rø   r   rè   r   r   r%   Údraw_rubberbandé  s
   z$NavigationToolbar2QT.draw_rubberbandc                 C   s   | j  d ¡ d S r\   )r  rù   ri   r   r   r%   Úremove_rubberbandð  r  z&NavigationToolbar2QT.remove_rubberbandc                    sP   ˆ j d u rtˆ jjˆ j ¡ ƒˆ _ ˆ j d‡ fdd„¡ ˆ j  ¡  ˆ j  ¡  ˆ j S )Nr	  c                    s
   ˆ j  ¡ S r\   )r%  Zreject)Úeri   r   r%   r|   ø  s   
 z9NavigationToolbar2QT.configure_subplots.<locals>.<lambda>)r%  ÚSubplotToolQtr  r~   r6  Zmpl_connectÚupdate_from_current_subplotparsr  ri   r   ri   r%   Úconfigure_subplotsó  s   
ÿÿ

z'NavigationToolbar2QT.configure_subplotsc              
   G   s@  | j  ¡ }t| ¡ ƒ}| j  ¡ }tj tj	d ¡}tj 
|| j  ¡ ¡}g }d }|D ]!\}	}
d 
dd„ |
D ƒ¡}|	› d|› d}||
v rE|}| |¡ q)d 
|¡}tj | j  ¡ d|||¡\}}|rž|d	krntj |¡tj	d< z
| j j |¡ W d S  ty } ztj | d
t|ƒtjjjtjjj¡ W Y d }~d S d }~ww d S )Nzsavefig.directoryú c                 S   s   g | ]}d | ‘qS )z*.%sr   )r"   Úextr   r   r%   r@     r  z4NavigationToolbar2QT.save_figure.<locals>.<listcomp>z (rG  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Ú
expanduserrL   r  rÖ   Zget_default_filenameÚappendr   ZQFileDialogZgetSaveFileNamer6  Údirnamer~   Zsavefigrí   rH  ZcriticalrT   ZStandardButtonZOkZNoButton)rc   rd   Z	filetypesZsorted_filetypesZdefault_filetypeZ	startpathrp   ÚfiltersZselectedFilterr  ZextsZ	exts_listrB  Úfnamer]  r   r   r%   Úsave_figureý  s@   


þ
ý€ÿúz NavigationToolbar2QT.save_figurec                 C   s^   | j jdk}| j jt| j ƒd k }d| jv r| jd  |¡ d| jv r-| jd  |¡ d S d S )Nr   r   Zbackr¾   )Z
_nav_stackÚ_posrI  r$  Z
setEnabled)rc   Zcan_backwardZcan_forwardr   r   r%   Úset_history_buttons  s   

ÿz(NavigationToolbar2QT.set_history_buttonsr  )rt   ru   rv   r   rÿ   rT   rU  r   Zdeprecate_privatize_attributeÚmessager	   r&  r)   rL  ra   r'  r  rS  r  r  rY  r[  r\  r`  rl  rn  rx   r   r   rf   r%   r  l  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g d¢d| jfgfdddgd	| jfd
| jfd| jfgffD ]v\}}}t
 ¡ }| |¡ t
 |¡}| |¡ t
 |¡}	|D ]-}
t
 ¡  | j	|
< }| dd¡ | d¡ | d¡ | d¡ |j | j¡ |	 |
|¡ q`| d¡ |D ]!\}
}t
  |
¡}| !d¡ |j" |¡ | |¡ |
dkr¶| #¡  q•qA|| _$i | _%d | _&|  '¡  d S )Nzimages/matplotlib.pngZSubplotToolZBorders)ÚtopÚbottomr/   r0   zExport valuesZSpacingsZhspaceZwspacezTight layoutZResetZCloser   r   rñ   g{®Gázt?F)(r=   ra   rW   r   rV   rT   r   rU   ZsetObjectNameÚ
_spinboxesr   ZQHBoxLayoutÚ	setLayoutÚ_export_valuesÚ_tight_layoutÚ_resetr  ÚQVBoxLayoutZ	addLayoutZ	QGroupBoxr5  ZQFormLayoutZQDoubleSpinBoxÚsetRangeZsetDecimalsZsetSingleStepZsetKeyboardTrackingZvalueChangedr`   Ú_on_value_changedZaddRowZ
addStretchZQPushButtonZsetAutoDefaultÚclickedr  Ú_figureÚ	_defaultsÚ_export_values_dialogr_  )rc   Z	targetfigr6  Zmain_layoutÚgroupÚ	spinboxesZbuttonsÚlayoutZboxÚinnerr  ÚspinboxÚmethodr­   rf   r   r%   ra   '  s^   
ÿ


þþþü	










€ù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&   T  s    ÿzASubplotToolQt.update_from_current_subplotpars.<locals>.<dictcomp>)rr  rd  r|  rv  ri   r   ri   r%   r_  S  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>b  s   € ÿz/SubplotToolQt._export_values.<locals>.<genexpr>r   é   )r   ÚQDialogr}  rw  rs  ZQPlainTextEditZsetReadOnlyr5  ZsetPlainTextrÖ   rr  rd  ZmaximumSizeZ	setHeightr   ZQFontMetricsZdocumentZdefaultFontrŒ   ZtoPlainTextr   ZsetMaximumSizer  )rc   r€  r7  rŒ   r   r   r%   rt  X  s&   



ÿÿÿÿ
zSubplotToolQt._export_valuesc                 C   sx   | j }dD ]\}}||  ||  ¡ d ¡ ||  ||  ¡ d ¡ q| jjdi dd„ | ¡ D ƒ¤Ž | jj ¡  d S )N))rq  rp  )r/   r0   gü©ñÒMbP?c                 S   s   i | ]	\}}||  ¡ “qS r   r†  r‡  r   r   r%   r&   t  rç   z3SubplotToolQt._on_value_changed.<locals>.<dictcomp>r   )	rr  Z
setMinimumr=  Z
setMaximumr{  Zsubplots_adjustrd  r  rÁ   )rc   r  rÕ   Zhigherr   r   r%   ry  m  s   
ÿzSubplotToolQt._on_value_changedc                 C   sV   | j  ¡  | j ¡ D ]\}}| d¡ | t| j j|ƒ¡ | d¡ q
| j j 	¡  d S )NTF)
r{  Ztight_layoutrr  rd  ÚblockSignalsÚsetValuer   r„  r  rÁ   )rc   rˆ  r‚  r   r   r%   ru  w  s   

zSubplotToolQt._tight_layoutc                 C   sJ   | j  ¡ D ]\}}| dd¡ | d¡ | |¡ | d¡ q|  ¡  d S )Nr   r   TF)r|  rd  rx  rŒ  r  ry  )rc   r‚  r=  r   r   r%   rv    s   

zSubplotToolQt._reset)
rt   ru   rv   ra   r_  rt  ry  ru  rv  rx   r   r   rf   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jjj	ƒttjjj
ƒB ¡¡ t d¡}| tj ttjjjƒttjjjƒB ¡¡ | t tjjjtjjj¡¡ |  |¡| _i | _i | _d S )Nr  )r   ra   r   r  r  r   r   r   r   r!  r"  r*  r,  r-  r.  r/  r0  r1  r2  r3  r4  r5  Ú_message_actionÚ
_toolitemsÚ_groups)rc   Ztoolmanagerr6  Zmessage_labelr   r   r%   ra   ‰  s(   
ÿÿ

ÿÿþ
zToolbarQt.__init__c           	         s¤   t  ˆ¡}|r| t ˆ|¡¡ | ˆ ¡ |r| |¡ ‡ ‡fdd„}|r1| d¡ |j 	|¡ n|j
 	|¡ ˆj ˆ g ¡ ˆ |ˆ ||¡ ˆjˆ   ||f¡ d S )Nc                      s   ˆ  ˆ ¡ d S r\   )Ztrigger_toolr   ©r  rc   r   r%   Úhandler¥  rr   z'ToolbarQt.add_toolitem.<locals>.handlerT)r   ZQToolButtonZsetIconr  r'  rV  r)  r(  Útoggledr`   rz  r  Ú
setdefaultÚ_add_to_grouprh  )	rc   r  r~  r˜   r8  ÚdescriptionZtoggler­   r“  r   r’  r%   Úadd_toolitem›  s   



zToolbarQt.add_toolitemc           	      C   sV   | j  |g ¡}|s|  | j¡}| |¡ || }|  ||¡}| ||¡ || j |< d S r\   )r‘  rP   ZinsertSeparatorr  rh  ZinsertWidgetr)   )	rc   r~  r  r­   r˜   ZgrÚsepZbeforeZwidgetr   r   r%   r–  ±  s   
zToolbarQt._add_to_groupc                 C   sH   || j vrd S | j | D ]\}}|j |¡ | |¡ |j |¡ qd S r\   )r  r”  Z
disconnectrQ  r`   )rc   r  r”  r­   r“  r   r   r%   Útoggle_toolitem»  s   

ýzToolbarQt.toggle_toolitemc                 C   s*   | j | D ]	\}}| d ¡ q| j |= d S r\   )r  Z	setParent)rc   r  r­   r“  r   r   r%   Úremove_toolitemÃ  s   zToolbarQt.remove_toolitemc                 C   s   |   | j¡ |¡ d S r\   )ZwidgetForActionr  rV  rW  r   r   r%   rY  È  s   zToolbarQt.set_messager\   )	rt   ru   rv   ra   r˜  r–  rš  r›  rY  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|i |¤Ž d | _d S r\   )r=   ra   r%  rb   rf   r   r%   ra   Î  s   
zConfigureSubplotsQt.__init__c                 G   s   t  | ¡ d S r\   )r  r`  r  r   r   r%   ÚtriggerÒ  rr   zConfigureSubplotsQt.trigger)rt   ru   rv   ra   r  rx   r   r   rf   r%   rœ  Ì  s    rœ  c                   @   ó   e Zd Zdd„ ZdS )ÚSaveFigureQtc                 G   ó   t  |  ¡ ¡ d S r\   )r  rl  Ú"_make_classic_style_pseudo_toolbarr  r   r   r%   r  Ø  ó   ÿzSaveFigureQt.triggerN©rt   ru   rv   r  r   r   r   r%   rŸ  Ö  ó    rŸ  c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚRubberbandQtc                 C   s   t  |  ¡ d ||||¡ d S r\   )r  r[  r¡  )rc   rõ   r÷   rö   rø   r   r   r%   r[  ß  s   ÿzRubberbandQt.draw_rubberbandc                 C   r   r\   )r  r\  r¡  ri   r   r   r%   r\  ã  r¢  zRubberbandQt.remove_rubberbandN)rt   ru   rv   r[  r\  r   r   r   r%   r¥  Ý  s    r¥  c                   @   rž  )ÚHelpQtc                 G   s   t j d d|  ¡ ¡ d S )NZHelp)r   rH  ZinformationZ_get_help_htmlr  r   r   r%   r  ê  s   zHelpQt.triggerNr£  r   r   r   r%   r¦  è  r¤  r¦  c                   @   rž  )ÚToolCopyToClipboardQTc                 O   s"   | j  ¡ }tj ¡  ¡  |¡ d S r\   )r  Zgrabr   rJ   rK   Z	clipboardZ	setPixmap)rc   rd   re   Zpixmapr   r   r%   r  ð  s   
zToolCopyToClipboardQT.triggerNr£  r   r   r   r%   r§  î  r¤  r§  c                   @   s   e Zd ZeZeZeZej	Z
dS )Ú
_BackendQTN)rt   ru   rv   r   Zbackend_versionry   ZFigureCanvasrz   ZFigureManagerr  Zmainloopr   r   r   r%   r¨  ù  s
    
r¨  )NÚ	functoolsre  rN   rî   rH   rL   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.figureoptionsZbackendsZ	qt_editorrM  r  r   r   r   r   r   r   r   r   r   rS   rË   rÏ   ZMOVEZHANDZPOINTERZSELECT_REGIONZWAITZRESIZE_HORIZONTALZRESIZE_VERTICALr–   Ú	lru_cacherZ   r[   rÀ   ry   ZQMainWindowrû   rz   r  r  r‹  r^  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þ    <(ÿþýüûúùø	÷
öõôóòñðïîíëêéèçæåäãâá à!ß"Þ#Ý$Ü%Û&Úÿ-ý
ùÿ
9  @r ;bD	
