a
    s=ic­˜  ã                &   @   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'm(Z(m)Z) e"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r4d"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j0d9fej1d:fej2d;fej3d<fej4d=ffD ƒZ5ej6G d>d?„ d?ƒƒZ7e  8d¡d@dA„ ƒZ9G dBdC„ dCeƒZ:G dDdE„ dEee!j;ƒZ<G dFdG„ dGe!j=ƒZ>G dHdI„ dIeƒZ?G dJdK„ dKee!j@ƒZAG dLdM„ dMe!jBƒZCG dNdO„ dOee!j@ƒZDe Ee<¡G dPdQ„ dQejFƒƒZGe Ee<¡G dRdS„ dSejHƒƒZIejJdTdUdVG dWdX„ dXejKƒƒZLe Ee<¡G dYdZ„ dZejMƒƒZNe Ee<¡G d[d\„ d\ejOƒƒZPe Ee<¡G d]d^„ d^ejQƒƒZReAe?_SeDe?_TejUG d_d`„ d`eƒƒZVdS )aé    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Ú_devicePixelRatioFÚ
_isdeletedÚ_setDevicePixelRatioÚ_maybe_allow_interruptc                 C   s$   i | ]\}}t ttd ƒ|ƒƒ|“qS )úQtCore.Qt.Key©r   Úgetattrr   ©Ú.0ÚkÚv© r'   úo/home/droni/.local/share/virtualenvs/DPS-5Je3_V2c/lib/python3.9/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)rA   Zf11)ZKey_F12Zf12)ZKey_Super_LÚsuper)ZKey_Super_RrB   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>H   s   þÿrF   ))ZControlModifierr8   )ZAltModifierr>   )ZShiftModifierr6   )ZMetaModifierr<   c                 C   s    i | ]\}}|t td ƒ|ƒ“qS )zQtCore.Qt.CursorShape©r"   r   r#   r'   r'   r(   r)   R   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>c   ó    z__getattr__.<lambda>N)Ú__name__Ú
__module__Ú__qualname__r   Ú
deprecatedÚpropertyZqAppr'   r'   r'   r(   rH   _   s
   ÿ
þrH   c                  C   sŽ  t j ¡ } | d u rbtj ¡ s&tdƒ‚tdv r4d}ntdv rBd}ntdƒ‚|D ]n}tj	 
|› d¡}|d urN|j ¡ d urNtj	 
|› d¡}t d	t› d
t ¡ › d|› d
| ¡ › d	¡  q¾qNzt j tjj¡ W n tyä   Y n0 zt j tjjj¡ W n ty   Y n0 t  dg¡} tjdkrLtt d¡ƒ}t |¡}|  |¡ | j | j¡ t  ¡  z|  tjj!¡ W n tyˆ   Y n0 | S )NzInvalid DISPLAY variable>   ÚPyQt6ÚPySide6)ÚPyQt5ÚPySide2>   rY   rZ   )rW   rX   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.Ú
matplotlibr9   úimages/matplotlib.svg)"r   rL   rM   Ú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bindingrD   Z
other_coreÚimageÚiconr'   r'   r(   Ú_create_qApph   s^    


ÿþýÿÿÿ

rn   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 rK   )r   ÚQTimerÚ_timerÚtimeoutrj   Z	_on_timerrB   Ú__init__©rO   ÚargsÚkwargs©Ú	__class__r'   r(   rs   ¦   s    
zTimerQT.__init__c                 C   s   t | jƒs|  ¡  d S rK   )r   rq   Ú_timer_stoprN   r'   r'   r(   Ú__del__­   s    
zTimerQT.__del__c                 C   s   | j  | j¡ d S rK   )rq   ZsetSingleShotZ_singlerN   r'   r'   r(   Ú_timer_set_single_shot³   s    zTimerQT._timer_set_single_shotc                 C   s   | j  | j¡ d S rK   )rq   ZsetIntervalÚ	_intervalrN   r'   r'   r(   Ú_timer_set_interval¶   s    zTimerQT._timer_set_intervalc                 C   s   | j  ¡  d S rK   )rq   ÚstartrN   r'   r'   r(   Ú_timer_start¹   s    zTimerQT._timer_startc                 C   s   | j  ¡  d S rK   )rq   ÚstoprN   r'   r'   r(   ry   ¼   s    zTimerQT._timer_stop)rR   rS   rT   Ú__doc__rs   rz   r{   r}   r   ry   Ú__classcell__r'   r'   rw   r(   ro   £   s   ro   c                       sF  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dC‡ fdd„	Zdd„ Zdd„ Zdd„ Zdd„ ZdDd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!d0d1„ Z"d2d3„ Z#dEd5d6„Z$dFd7d8„Z%‡ fd9d:„Z&d;d<„ Z'dGd=d>„Z(d?d@„ Z)dAdB„ Z*‡  Z+S )HÚFigureCanvasQTZqtc                 C   s   t S rK   )ÚFigureManagerQT)Úclsr'   r'   r(   rP   Ã   rQ   zFigureCanvasQT.<lambda>c                 C   s    i | ]\}}t td ƒ|ƒ|“qS )zQtCore.Qt.MouseButtonrG   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 rK   r'   ©Úpainterr'   r'   r(   rP   Õ   rQ   z)FigureCanvasQT.__init__.<locals>.<lambda>zQtCore.Qt.WidgetAttributeTÚwhite)rn   rB   rs   Ú_draw_pendingÚ_is_drawingÚ_draw_rect_callbackÚ_in_resize_eventrb   r   ZWA_OpaquePaintEventZsetMouseTrackingÚresizeÚget_width_heightr   ZQPaletteÚQColorZ
setPalette)rO   r†   Úpaletterw   r'   r(   rs   Ï   s    
ÿ
zFigureCanvasQT.__init__c                 C   s0   |   t| ƒ¡r,t |  ¡ |  ¡ ¡}|  |¡ d S rK   )Z_set_device_pixel_ratior   r   ZQResizeEventÚsizeÚresizeEvent©rO   Úeventr'   r'   r(   Ú_update_pixel_ratioà   s    z"FigureCanvasQT._update_pixel_ratioc                 C   s0   |   ¡  |d ur,|j | j ¡ |j | j ¡ d S rK   )r–   ZphysicalDotsPerInchChangedrj   ZlogicalDotsPerInchChanged)rO   Úscreenr'   r'   r(   Ú_update_screenè   s    zFigureCanvasQT._update_screenc                 C   s,   |   ¡  ¡ }|j | j¡ |  | ¡ ¡ d S rK   )ÚwindowZwindowHandleZscreenChangedrj   r˜   r—   )rO   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©rO   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)rO   r    r¢   r¦   r'   r'   r(   ÚmouseEventCoordsú   s    



zFigureCanvasQT.mouseEventCoordsc                 C   s&   t d| g|  |¡¢R d|iŽ ¡  d S )NZfigure_enter_eventÚguiEvent)r   r§   Ú_processr”   r'   r'   r(   Ú
enterEvent  s
    ÿþzFigureCanvasQT.enterEventc                 C   s.   t j ¡  td| g|  ¡ ¢R d|iŽ ¡  d S )NZfigure_leave_eventr¨   )r   rL   ZrestoreOverrideCursorr   r§   r©   r”   r'   r'   r(   Ú
leaveEvent  s    
ÿþzFigureCanvasQT.leaveEventc                 C   sB   | j  | ¡ ¡}|d ur>td| g|  |¡¢|‘R d|iŽ ¡  d S )NÚbutton_press_eventr¨   ©Úbuttondra   Úbuttonr   r§   r©   ©rO   r•   r¯   r'   r'   r(   ÚmousePressEvent  s    ÿÿþzFigureCanvasQT.mousePressEventc                 C   sD   | j  | ¡ ¡}|d ur@td| g|  |¡¢|‘R d|dœŽ ¡  d S )Nr¬   T)Zdblclickr¨   r­   r°   r'   r'   r(   ÚmouseDoubleClickEvent"  s    ÿÿþz$FigureCanvasQT.mouseDoubleClickEventc                 C   s&   t d| g|  |¡¢R d|iŽ ¡  d S )NZmotion_notify_eventr¨   )r   r§   r©   r”   r'   r'   r(   ÚmouseMoveEvent)  s
    ÿþzFigureCanvasQT.mouseMoveEventc                 C   sB   | j  | ¡ ¡}|d ur>td| g|  |¡¢|‘R d|iŽ ¡  d S )NZbutton_release_eventr¨   r­   r°   r'   r'   r(   ÚmouseReleaseEvent.  s    ÿÿþz FigureCanvasQT.mouseReleaseEventc                 C   sh   |  ¡  ¡ stj ¡  ¡ dkr0| ¡  ¡ d }n|  ¡  ¡ }|rdtd| g|  	|¡¢R ||dœŽ 
¡  d S )NZxcbéx   Zscroll_event)Ústepr¨   )Z
pixelDeltaZisNullr   rL   rM   ZplatformNameZ
angleDeltar¦   r   r§   r©   )rO   r•   Zstepsr'   r'   r(   Ú
wheelEvent5  s    ÿÿþzFigureCanvasQT.wheelEventc                 C   s8   |   |¡}|d ur4td| |g|  ¡ ¢R d|iŽ ¡  d S )NZkey_press_eventr¨   ©Ú_get_keyr   r§   r©   ©rO   r•   rE   r'   r'   r(   ÚkeyPressEventB  s    
ÿÿþzFigureCanvasQT.keyPressEventc                 C   s8   |   |¡}|d ur4td| |g|  ¡ ¢R d|iŽ ¡  d S )NZkey_release_eventr¨   r¸   rº   r'   r'   r(   ÚkeyReleaseEventI  s    
ÿÿþ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| _ nd| _ 0 d S )NTF)ÚforwardZresize_event)r   r’   Úwidthr¥   r¤   r†   ZdpiZset_size_inchesr   ÚQWidgetr“   r   r©   Ú	draw_idle)rO   r•   ÚwÚhZdpivalZwinchZhinchr'   r'   r(   r“   P  s    
zFigureCanvasQT.resizeEventc                 C   s   |   ¡ \}}t ||¡S rK   )r   r   ÚQSize)rO   rÁ   rÂ   r'   r'   r(   ÚsizeHintc  s    zFigureCanvasQT.sizeHintc                 C   s   t  dd¡S )Né
   )r   rÃ   rN   r'   r'   r(   ÚminumumSizeHintg  s    zFigureCanvasQT.minumumSizeHintc                    sŒ   |  ¡ ‰ t| ¡ ƒ‰‡ ‡fdd„tD ƒ}ztˆ  }W nF tyz   ˆ tjkrRY d S tˆ ƒ}d|v rn| 	d¡ n| 
¡ }Y n0 d ||g ¡S )Nc                    s0   g | ](\}}ˆ |krˆ|@ rt |  d d¡‘qS )r:   Zctrl)ÚSPECIAL_KEYSÚreplacerC   ©Z	event_keyZ
event_modsr'   r(   rF   s  s   þz+FigureCanvasQT._get_key.<locals>.<listcomp>r7   ú+)rE   r   Ú	modifiersÚ_MODIFIER_KEYSrÇ   ÚKeyErrorr_   Ú
maxunicodeÚchrÚremoveÚlowerÚjoin)rO   r•   ÚmodsrE   r'   rÉ   r(   r¹   j  s    ÿ
zFigureCanvasQT._get_keyc                 C   s   t j ¡  ¡  d S rK   )r   rL   rM   ZprocessEventsrN   r'   r'   r(   Úflush_events  s    zFigureCanvasQT.flush_eventsr   c                 C   s€   t | dƒr| j ¡ rtdƒ‚t ¡  | _}|dkrJtj t|d ƒ|j	¡}t
|ƒ t |¡ W d   ƒ n1 sr0    Y  d S )NÚ_event_loopzEvent loop already runningr   iè  )r¡   rÕ   Z	isRunningr^   r   Z
QEventLooprp   Ú
singleShotÚintrk   r   r   Ú_exec)rO   rr   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Õ   rk   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 s80    Y  |  ¡  dS )z5Render the figure, and queue a request for a Qt draw.NT)r‹   )r‹   r   Z_setattr_cmrB   ÚdrawÚupdaterN   rw   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   rp   rÖ   Ú
_draw_idlerN   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                    s   g | ]}t |ˆ j ƒ‘qS r'   ©r×   r¥   ©r$   ÚptrN   r'   r(   rF   ¼  rQ   z'FigureCanvasQT.blit.<locals>.<listcomp>)r†   r£   ZboundsZrepaintÚrectr¤   )rO   r£   ÚlÚbrÁ   rÂ   Útr'   rN   r(   Úblit·  s
    zFigureCanvasQT.blitc              	   C   s˜   |   ¡ | | js W d   ƒ d S d| _|  ¡ dk s>|  ¡ dk rNW d   ƒ d S z|  ¡  W n tyt   t ¡  Y n0 W d   ƒ n1 sŠ0    Y  d S )NFr   )Z_idle_draw_cntxrŠ   r¤   r¾   rÜ   Ú	ExceptionÚ	tracebackÚ	print_excrN   r'   r'   r(   rÞ   À  s    
zFigureCanvasQT._draw_idlec                    sb   |d urH‡ fdd„|D ƒ\‰‰}}ˆ| ‰ˆ| ‰‡ ‡‡‡‡fdd„}ndd„ }|ˆ _ ˆ  ¡  d S )Nc                    s   g | ]}t |ˆ j ƒ‘qS r'   rß   rà   rN   r'   r(   rF   Ñ  rQ   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©rO   Úx0Úx1Úy0Úy1r'   r(   rŒ   Ô  s    þþ


z9FigureCanvasQT.drawRectangle.<locals>._draw_rect_callbackc                 S   s   d S rK   r'   r‡   r'   r'   r(   rŒ   é  s    )rŒ   rÝ   )rO   râ   rÁ   rÂ   rŒ   r'   rï   r(   ÚdrawRectangleÍ  s    zFigureCanvasQT.drawRectangle)N)N)r   )N)N),rR   rS   rT   Zrequired_interactive_frameworkro   Z
_timer_clsr   ZclasspropertyZmanager_classr   ÚLEFTÚRIGHTZMIDDLEÚBACKÚFORWARDr®   rs   r–   r˜   rš   rž   r§   rª   r«   r±   r²   r³   r´   r·   r»   r¼   r“   rÄ   rÆ   r¹   rÔ   rÚ   rÛ   rÜ   rÀ   ræ   rÞ   rô   r‚   r'   r'   rw   r(   rƒ   À   sL   ûÿ

#



	rƒ   c                       s$   e Zd Ze ¡ Z‡ fdd„Z‡  ZS )Ú
MainWindowc                    s   | j  ¡  tƒ  |¡ d S rK   )ÚclosingÚemitrB   Ú
closeEventr”   rw   r'   r(   rü   ò  s    
zMainWindow.closeEvent)rR   rS   rT   r   ÚSignalrú   rü   r‚   r'   r'   rw   r(   rù   ï  s   rù   c                       sX   e Zd ZdZ‡ fdd„Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ Z‡  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'   rN   r'   r(   rP   
  rQ   z*FigureManagerQT.__init__.<locals>.<lambda>r9   r\   Fr   zQtCore.Qt.FocusPolicy)!rù   r™   rB   rs   rú   rj   Ú_widgetclosedr_   re   rf   r   rg   r   rh   ri   Ú_destroyingÚtoolbarZ
addToolBarrÄ   r¤   rŽ   r¾   ZsetCentralWidgetrÿ   r]   Úis_interactiveÚshowrÀ   ZsetFocusPolicyr   ZStrongFocusÚsetFocusÚraise_)	rO   rÿ   Únumrl   rm   Z
tbs_heightÚcsZ	cs_heightr¤   rw   rN   r(   rs     s4    
þ




zFigureManagerQT.__init__c                 C   s$   | j  ¡ r| j  ¡  n
| j  ¡  d S rK   )r™   ZisFullScreenZ
showNormalZshowFullScreenrN   r'   r'   r(   Úfull_screen_toggle0  s    
z"FigureManagerQT.full_screen_togglec                 C   s:   | j jrd S d| j _zt | ¡ W n ty4   Y n0 d S ©NT)r™   r  r   Údestroyrd   rN   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 rK   )r×   rÿ   r¥   r™   r¾   r¤   rŽ   )rO   r¾   r¤   Úextra_widthZextra_heightr'   r'   r(   rŽ   B  s    zFigureManagerQT.resizec                 C   s,   | j  ¡  tjd r(| j  ¡  | j  ¡  d S )Nzfigure.raise_window)r™   r  r]   ÚrcParamsZactivateWindowr  rN   r'   r'   r(   r  L  s    


zFigureManagerQT.showc                 G   sD   t j ¡ d u rd S | jjrd S d| j_| jr6| j ¡  | j ¡  d S r
  )r   rL   rM   r™   r  r  r  Úclose©rO   ru   r'   r'   r(   r  R  s    
zFigureManagerQT.destroyc                 C   s
   | j  ¡ S rK   )r™   ZwindowTitlerN   r'   r'   r(   Úget_window_title]  s    z FigureManagerQT.get_window_titlec                 C   s   | j  |¡ d S rK   )r™   ZsetWindowTitle)rO   Útitler'   r'   r(   Úset_window_title`  s    z FigureManagerQT.set_window_title)rR   rS   rT   r   rs   r	  r   rŽ   r  r  r  r  r‚   r'   r'   rw   r(   r„   ÷  s   +
r„   c                       s®   e Zd Ze e¡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 )!ÚNavigationToolbar2QTc                 C   s   g | ]^}}|‘qS r'   r'   )r$   ÚnamerÙ   r'   r'   r(   rF   j  rQ   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u rn|  ¡  qP|  |  |d ¡|t| |ƒ¡}|| j|< |dv r¨| d¡ |du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   ÚQToolBarrs   ÚsetAllowedAreasr   rc   Ú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	   )
rO   rÿ   Úparentr#  ÚtextZtooltip_textÚ
image_fileÚcallbackÚaZlabelActionr'   r'   r(   rs   n  sD    
ÿÿ

ÿ

ÿÿ
þ
zNavigationToolbar2QT.__init__c                 C   s®   t  d|¡}| |j dd¡¡}t| ¡ r.|n|ƒ}t |¡}t	|t
| ƒƒ |  ¡  |  ¡ ¡ ¡ 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.pngé€   rê   zQtCore.Qt.MaskMode)r   rg   Ú	with_namer  rÈ   rf   Úexistsr   ZQPixmapr   r   r‘   rí   ZbackgroundRoleÚvalueZforegroundRoleZcreateMaskFromColorr   r   ZMaskOutColorÚfillZsetMaskrh   )rO   r  Zpath_regularZ
path_largeÚfilenameÚpmZ
icon_colorÚmaskr'   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\}}ˆ | |v 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 )r3   r5   z - Nz<anonymous ú>)Z	get_labelZ	get_titlerÒ   ÚfilterZ
get_xlabelZ
get_ylabelÚtyperR   )r$   Úaxr'   r'   r(   rF   ¶  s   úÿþýüz8NavigationToolbar2QT.edit_parameters.<locals>.<listcomp>c                    s   g | ]}ˆ   |¡d kr|‘qS )r   )Úcount)r$   r  ©Útitlesr'   r(   rF   ¾  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)rO   ZaxesrF  Zduplicate_titlesÚiÚitemÚokr'   rH  r(   r  ­  s2    ÿù
ÿ 
þz$NavigationToolbar2QT.edit_parametersc                 C   sH   d| j v r"| j d  | jjdk¡ d| j v rD| j d  | jjdk¡ d S )Nr  ZPANr  ZZOOM)r$  Ú
setCheckedÚmoder  rN   r'   r'   r(   Ú_update_buttons_checkedË  s    

z,NavigationToolbar2QT._update_buttons_checkedc                    s   t ƒ j|Ž  |  ¡  d S rK   )rB   r  rW  r  rw   r'   r(   r  Ò  s    zNavigationToolbar2QT.panc                    s   t ƒ j|Ž  |  ¡  d S rK   )rB   r  rW  r  rw   r'   r(   r  Ö  s    zNavigationToolbar2QT.zoomc                 C   s"   | j  |¡ | jr| j |¡ d S rK   )Úmessagerû   r#  r+  ÚsetText©rO   Ú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(   rF   ã  rQ   z8NavigationToolbar2QT.draw_rubberband.<locals>.<listcomp>)rÿ   r†   r£   r¤   rô   )rO   r•   rð   rò   rñ   ró   r¤   râ   r'   r'   r(   Údraw_rubberbandß  s
    z$NavigationToolbar2QT.draw_rubberbandc                 C   s   | j  d ¡ d S rK   )rÿ   rô   rN   r'   r'   r(   Úremove_rubberbandæ  s    z&NavigationToolbar2QT.remove_rubberbandc                    sP   ˆ j d u r6tˆ jjˆ j ¡ ƒˆ _ ˆ j d‡ fdd„¡ ˆ j  ¡  ˆ j  ¡  ˆ j S )Nrþ   c                    s
   ˆ j  ¡ S rK   )r%  Zreject)ÚerN   r'   r(   rP   î  rQ   z9NavigationToolbar2QT.configure_subplots.<locals>.<lambda>)r%  ÚSubplotToolQtrÿ   r†   r5  Zmpl_connectÚupdate_from_current_subplotparsr  rN   r'   rN   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|	|f }||
v r†|}| |¡ qRd 
|¡}t | j  ¡ d|||¡\}}|r6|dkrØtj |¡tj	d< z| j j |¡ W nJ ty4 } z0tj | d	t|ƒtd
ƒjtd
ƒj¡ W Y d }~n
d }~0 0 d S )Nzsavefig.directoryú c                 S   s   g | ]}d | ‘qS )z*.%sr'   )r$   Úextr'   r'   r(   rF   ý  rQ   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Ú
expanduserr]   r  rÒ   Zget_default_filenameÚappendr   Z_getSaveFileNamer5  Údirnamer†   Zsavefigrç   r   rK  Úcriticalrf   r   ZOkZNoButton)rO   ru   Ú	filetypesZsorted_filetypesZdefault_filetypeZ	startpathr~   ÚfiltersZselectedFilterr  ÚextsZ	exts_listrD  Úfnamer`  r'   r'   r(   Úsave_figureó  s:    


þ
ýz NavigationToolbar2QT.save_figurec                 C   s\   | j jdk}| j jt| j jƒd k }d| jv r>| jd  |¡ d| jv rX| jd  |¡ d S )Nr   r   Úbackr½   )Z
_nav_stackÚ_posrM  Z	_elementsr$  Z
setEnabled)rO   Zcan_backwardZcan_forwardr'   r'   r(   Úset_history_buttons  s    

z(NavigationToolbar2QT.set_history_buttons)NT)rR   rS   rT   r   rý   rf   rX  r	   r&  r-   rP  rs   r'  r  rW  r  r  r\  r^  r_  rc  rr  ru  r‚   r'   r'   rw   r(   r  d  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g d¢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Úbottomr3   r5   zExport valuesZSpacingsZhspaceZwspacezTight layoutZResetÚCloser   r   rë   g{®Gázt?F)(rB   rs   ri   r   rh   rf   r   rg   ZsetObjectNameÚ
_spinboxesr   ZQHBoxLayoutÚ	setLayoutÚ_export_valuesÚ_tight_layoutÚ_resetr  ÚQVBoxLayoutZ	addLayoutZ	QGroupBoxr4  ZQFormLayoutZQDoubleSpinBoxÚsetRangeZsetDecimalsZsetSingleStepZsetKeyboardTrackingZvalueChangedrj   Ú_on_value_changedZaddRowZ
addStretchZQPushButtonZsetAutoDefaultÚclickedr  Ú_figureÚ	_defaultsÚ_export_values_dialogrb  )rO   Z	targetfigr5  Zmain_layoutÚgroupÚ	spinboxesZbuttonsÚlayoutÚboxÚinnerr  ÚspinboxÚmethodr¯   rw   r'   r(   rs     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Š  rN   r'   r(   r)   J  s   ÿzASubplotToolQt.update_from_current_subplotpars.<locals>.<dictcomp>)ry  rg  rƒ  r}  rN   r'   rN   r(   rb  I  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>X  s   ÿz/SubplotToolQt._export_values.<locals>.<genexpr>r   é   )r   ÚQDialogr„  r~  rz  ZQPlainTextEditZsetReadOnlyr4  ZsetPlainTextrÒ   ry  rg  ZmaximumSizeZ	setHeightr   ZQFontMetricsÚdocumentZdefaultFontr’   ZtoPlainTextr¤   ZsetMaximumSizer  )rO   r‡  r6  r’   r'   r'   r(   r{  N  s*    



ÿÿÿÿÿ
zSubplotToolQt._export_valuesc                 C   sx   | j }dD ]<\}}||  ||  ¡ d ¡ ||  ||  ¡ d ¡ q
| jjf i dd„ | ¡ D ƒ¤Ž | jj ¡  d S )N))rw  rv  )r3   r5   gü©ñÒMbP?c                 S   s   i | ]\}}||  ¡ “qS r'   rŽ  r  r'   r'   r(   r)   j  rQ   z3SubplotToolQt._on_value_changed.<locals>.<dictcomp>)	ry  Z
setMinimumr=  Z
setMaximumr‚  Zsubplots_adjustrg  rÿ   rÀ   )rO   r†  rÑ   Zhigherr'   r'   r(   r€  c  s    
ÿzSubplotToolQt._on_value_changedc                 C   sX   | j  ¡  | j ¡ D ]2\}}| d¡ | t| j jƒ| ¡ | d¡ q| j j 	¡  d S )NTF)
r‚  Ztight_layoutry  rg  ÚblockSignalsÚsetValueÚvarsrŒ  rÿ   rÀ   )rO   r  rŠ  r'   r'   r(   r|  m  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€  )rO   rŠ  r=  r'   r'   r(   r}  u  s    

zSubplotToolQt._reset)
rR   rS   rT   rs   rb  r{  r€  r|  r}  r‚   r'   r'   rw   r(   ra    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   rs   r   r  r  r   rc   r   r   r   r!  r"  r*  r,  r-  r.  r/  r0  r1  r2  r3  r4  Ú_message_actionÚ
_toolitemsÚ_groups)rO   Ztoolmanagerr5  Zmessage_labelr'   r'   r(   rs     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 rK   )Ztrigger_toolr'   ©r  rO   r'   r(   Úhandler›  s    z'ToolbarQt.add_toolitem.<locals>.handlerT)r   ZQToolButtonZsetIconr  r'  rY  r)  r(  Útoggledrj   r  rš  Ú
setdefaultÚ_add_to_grouprk  )	rO   r  r…  rŸ   r7  ÚdescriptionÚtoggler¯   r  r'   rœ  r(   Úadd_toolitem‘  s    



zToolbarQt.add_toolitemc           	      C   sV   | j  |g ¡}|s(|  | j¡}| |¡ || }|  ||¡}| ||¡ || j |< d S rK   )r›  ra   ZinsertSeparatorr™  rk  ZinsertWidgetr-   )	rO   r…  r  r¯   rŸ   ÚgrÚsepÚ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 rK   )rš  rž  Z
disconnectrU  rj   )rO   r  rž  r¯   r  r'   r'   r(   Útoggle_toolitem±  s    

zToolbarQt.toggle_toolitemc                 C   s*   | j | D ]\}}| d ¡ q
| j |= d S rK   )rš  Z	setParent)rO   r  r¯   r  r'   r'   r(   Úremove_toolitem¹  s    zToolbarQt.remove_toolitemc                 C   s   |   | j¡ |¡ d S rK   )ZwidgetForActionr™  rY  rZ  r'   r'   r(   r\  ¾  s    zToolbarQt.set_message)N)	rR   rS   rT   rs   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|i |¤Ž d | _d S rK   )rB   rs   r%  rt   rw   r'   r(   rs   Ä  s    zConfigureSubplotsQt.__init__c                 G   s   t  | ¡ d S rK   )r  rc  r  r'   r'   r(   ÚtriggerÈ  s    zConfigureSubplotsQt.trigger)rR   rS   rT   rs   rª  r‚   r'   r'   rw   r(   r©  Â  s   r©  c                   @   s   e Zd Zdd„ ZdS )ÚSaveFigureQtc                 G   s   t  |  ¡ ¡ d S rK   )r  rr  Ú"_make_classic_style_pseudo_toolbarr  r'   r'   r(   rª  Î  s    ÿzSaveFigureQt.triggerN©rR   rS   rT   rª  r'   r'   r'   r(   r«  Ì  s   r«  z3.5ZToolSetCursorrI   c                   @   s   e Zd Zdd„ ZdS )ÚSetCursorQtc                 C   s   t  |  ¡ |¡ d S rK   )r  rž   r¬  r   r'   r'   r(   rž   Õ  s    ÿzSetCursorQt.set_cursorN)rR   rS   rT   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 rK   )r  r^  r¬  )rO   rð   rò   rñ   ró   r'   r'   r(   r^  Ü  s    ÿzRubberbandQt.draw_rubberbandc                 C   s   t  |  ¡ ¡ d S rK   )r  r_  r¬  rN   r'   r'   r(   r_  à  s    ÿzRubberbandQt.remove_rubberbandN)rR   rS   rT   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 rK   )rÿ   Zgrabr   rL   rM   Ú	clipboardZ	setPixmap)rO   ru   rv   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dd„ ƒZdS )Ú
_BackendQTc                  C   s@   t j ¡ } t| ƒ t | ¡ W d   ƒ n1 s20    Y  d S rK   )r   rL   rM   r   r   rØ   )Zqappr'   r'   r(   Úmainloopû  s    

z_BackendQT.mainloopN)	rR   rS   rT   rƒ   ZFigureCanvasr„   ZFigureManagerÚstaticmethodrµ  r'   r'   r'   r(   r´  ö  s   r´  )WÚ	functoolsrh  r_   rè   r[   r]   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   r   r   Zbackend_versionre   rÇ   rÌ   ZMOVEZHANDÚPOINTERZSELECT_REGIONZWAITZRESIZE_HORIZONTALZRESIZE_VERTICALrœ   Zcaching_module_getattrrH   Ú	lru_cachern   ro   r¿   rƒ   ZQMainWindowrù   r„   r  r  r“  ra  r˜  Z_register_tool_classZConfigureSubplotsBaser©  ZSaveFigureBaser«  rU   ZSetCursorBaser®  ZRubberbandBaser¯  ZToolHelpBaser°  ZToolCopyToClipboardBaser²  Z_toolbar2_classZ_toolmanager_toolbar_classÚexportr´  r'   r'   r'   r(   Ú<module>   s¼   <4Úÿ-ý
ùÿ
:  1m 9bD	
