o
    ¡:´a­–  ã                	   @   s>  d dl Z d dlZd dlZd dlZd dlZd dlZd dl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 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	„ 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j0d<fej1d=ffD ƒZ2da3d>d?„ Z4d@dA„ Z5G dBdC„ dCeƒZ6G dDdE„ dEej7eƒZ8G dFdG„ dGej9ƒZ:G dHdI„ dIeƒZ;G dJdK„ dKeej<ƒZ=G dLdM„ dMej>ƒZ?G dNdO„ dOeej<ƒZ@G dPdQ„ dQe	jAƒZBG dRdS„ dSe	jCƒZDejEdTdUdVG dWdX„ dXe	jFƒƒZGG dYdZ„ dZe	jHƒZIG d[d\„ d\e	jJƒZKG d]d^„ d^e	jLƒZMeDe	_NeBe	_OeIe	_PeKe	_QeMe	_RejSG d_d`„ d`eƒƒZTdS )aé    N)Ú_apiÚbackend_toolsÚcbook)ÚGcf)Ú_BackendÚFigureCanvasBaseÚFigureManagerBaseÚNavigationToolbar2Ú	TimerBaseÚcursorsÚToolContainerBaseÚMouseButtoné   )Ú	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"   ú@/usr/lib/python3/dist-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d ƒ|ƒƒt ttdƒ|ƒƒf‘qS )zQtCore.Qt.KeyboardModifierr   r   ©r   ÚmodÚkeyr"   r"   r#   Ú
<listcomp>I   s    þÿÿr?   ))ZControlModifierr1   )ZAltModifierr7   )ZShiftModifierr/   )ZMetaModifierr5   c                 C   s    i | ]\}}|t td ƒ|ƒ“qS )zQtCore.Qt.CursorShape©r   r   r   r"   r"   r#   r$   S   ó    ÿZSizeAllCursorZPointingHandCursorZArrowCursorZCrossCursorZ
WaitCursorZSizeHorCursorZSizeVerCursorc                  C   sÐ   t du rStj ¡ } | du rQtj ¡ stdƒ‚z
tj t	j
j¡ W n	 ty)   Y nw ztj t	j
jj¡ W n	 ty>   Y nw t dg¡a t j t j¡ t ¡  n| a z
t  t	j
j¡ W dS  tyg   Y dS w )zJ
    Only one qApp can exist at a time, so check before creating one.
    NzInvalid DISPLAY variableÚ
matplotlib)ÚqAppr   ÚQApplicationÚinstanceÚmplZ_c_internal_utilsZdisplay_is_validÚRuntimeErrorÚsetAttributer   ÚQtZAA_EnableHighDpiScalingÚAttributeErrorZ#setHighDpiScaleFactorRoundingPolicyZ HighDpiScaleFactorRoundingPolicyZPassThroughZlastWindowClosedÚconnectÚquitr   Z_setup_new_guiappZAA_UseHighDpiPixmaps)Zappr"   r"   r#   Ú_create_qAppd   s8   

ÿÿÿÿ
ÿrM   c                    s<   t dv rˆ S tjj‰‡fdd„‰t ˆ ¡‡ ‡fdd„ƒ}|S )zN
    Decorator for ``__init__`` to allow ``super().__init__`` on PySide2.
    )ZPyQt5ÚPyQt6c                    sT   ˆ | ƒ t | ƒj}tdd„ || tj¡d d … D ƒƒ}|j| g|¢R i |¤Ž d S )Nc                 s   s(    | ]}|j  d ¡d dvr|V  qdS )Ú.r   )ZPySide2ÚPySide6ZShibokenN)Ú
__module__Úsplit)r   Úclsr"   r"   r#   Ú	<genexpr>Ÿ   s   € þ
ÿzF_allow_super_init.<locals>.cooperative_qwidget_init.<locals>.<genexpr>r   )ÚtypeÚ__mro__ÚnextÚindexr   ÚQWidgetÚ__init__)ÚselfÚargsÚkwargsÚmroZnext_coop_init)Úqwidget_initr"   r#   Úcooperative_qwidget_initœ   s   
ÿz3_allow_super_init.<locals>.cooperative_qwidget_initc                    sL   t jtjˆd ˆ | g|¢R i |¤Ž W d   ƒ d S 1 sw   Y  d S )N)rZ   )r   Ú_setattr_cmr   rY   ©r[   r\   r]   )rZ   r`   r"   r#   Úwrapper¦   s
   ÿ"þz"_allow_super_init.<locals>.wrapper)r   r   rY   rZ   Ú	functoolsÚwraps)rZ   rc   r"   )rZ   r`   r_   r#   Ú_allow_super_init‡   s   
rf   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ÚtimeoutrK   Z	_on_timerr;   rZ   rb   ©Ú	__class__r"   r#   rZ   ²   s   
zTimerQT.__init__c                 C   s   t | jƒs|  ¡  d S d S rh   )r   rj   Ú_timer_stop©r[   r"   r"   r#   Ú__del__¹   s   
ÿzTimerQT.__del__c                 C   ó   | j  | j¡ d S rh   )rj   ZsetSingleShotZ_singlero   r"   r"   r#   Ú_timer_set_single_shot¿   ó   zTimerQT._timer_set_single_shotc                 C   rq   rh   )rj   ZsetIntervalZ	_intervalro   r"   r"   r#   Ú_timer_set_intervalÂ   rs   zTimerQT._timer_set_intervalc                 C   ó   | j  ¡  d S rh   )rj   Ústartro   r"   r"   r#   Ú_timer_startÅ   ó   zTimerQT._timer_startc                 C   ru   rh   )rj   Ústopro   r"   r"   r#   rn   È   rx   zTimerQT._timer_stop)Ú__name__rQ   Ú__qualname__Ú__doc__rZ   rp   rr   rt   rw   rn   Ú__classcell__r"   r"   rl   r#   rg   ¯   s    rg   c                       sP  e Zd ZdZe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edD‡ fd
d„	ƒZdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Ze edv rLdn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/d0„ Z#d1d2„ Z$d3d4„ Z%dEd6d7„Z&dDd8d9„Z'‡ fd:d;„Z(d<d=„ Z)dDd>d?„Z*d@dA„ Z+dBdC„ Z,‡  Z-S )FÚFigureCanvasQTZqtc                 C   s    i | ]\}}t td ƒ|ƒ|“qS )zQtCore.Qt.MouseButtonr@   r   r"   r"   r#   r$   Ð   rA   zFigureCanvasQT.<dictcomp>Z
LeftButtonZRightButtonZMiddleButtonZXButton1ZXButton2Nc                    sp   t ƒ  tƒ j|d d| _d| _dd„ | _|  tdƒj¡ |  	d¡ | j
|  ¡ Ž  t t d¡¡}|  |¡ d S )N)ÚfigureFc                 S   ó   d S rh   r"   ©Úpainterr"   r"   r#   Ú<lambda>á   s    z)FigureCanvasQT.__init__.<locals>.<lambda>zQtCore.Qt.WidgetAttributeTÚwhite)rM   r;   rZ   Ú_draw_pendingÚ_is_drawingÚ_draw_rect_callbackrH   r   ZWA_OpaquePaintEventZsetMouseTrackingÚresizeÚget_width_heightr   ZQPaletteÚQColorZ
setPalette)r[   r   Úpaletterl   r"   r#   rZ   Ú   s   
ÿ
zFigureCanvasQT.__init__c                 C   s4   |   t| ƒ¡rt |  ¡ |  ¡ ¡}|  |¡ d S d S rh   )Z_set_device_pixel_ratior   r   ZQResizeEventÚsizeÚresizeEvent©r[   Ú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 rh   )r   ZphysicalDotsPerInchChangedrK   ZlogicalDotsPerInchChanged)r[   Úscreenr"   r"   r#   Ú_update_screenó   s
   þzFigureCanvasQT._update_screenc                 C   s,   |   ¡  ¡ }|j | j¡ |  | ¡ ¡ d S rh   )ÚwindowZwindowHandleZscreenChangedrK   r’   r‘   )r[   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©r[   r•   r"   r"   r#   Ú
set_cursor  s   zFigureCanvasQT.set_cursorc                 C   s,   |   |  |¡¡\}}tj| |||fd d S )N)ÚguiEventZxy)ÚmouseEventCoordsÚ_get_positionr   Zenter_notify_event©r[   r   ÚxÚyr"   r"   r#   Ú
enterEvent  s   zFigureCanvasQT.enterEventc                 C   s   t j ¡  tj| |d d S ©N©r™   )r   rD   ZrestoreOverrideCursorr   Zleave_notify_eventrŽ   r"   r"   r#   Ú
leaveEvent	  ó   
zFigureCanvasQT.leaveEvent)rN   rP   ÚpositionÚposc                 C   s4   |  ¡ }| 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.
        )r   r   ÚbboxÚheightÚdevice_pixel_ratiorž   )r[   r¥   r   rž   r"   r"   r#   rš     s   
zFigureCanvasQT.mouseEventCoordsc                 C   óH   |   |  |¡¡\}}| j | ¡ ¡}|d ur"tj| ||||d d S d S r    ©rš   r›   ÚbuttondÚgetÚbuttonr   Zbutton_press_event©r[   r   r   rž   r­   r"   r"   r#   ÚmousePressEvent  ó   
ÿÿzFigureCanvasQT.mousePressEventc                 C   sJ   |   |  |¡¡\}}| j | ¡ ¡}|d ur#tj| |||d|d d S d S )NT)Zdblclickr™   rª   r®   r"   r"   r#   ÚmouseDoubleClickEvent&  s   

þÿz$FigureCanvasQT.mouseDoubleClickEventc                 C   s*   |   |  |¡¡\}}tj| |||d d S r    )rš   r›   r   Zmotion_notify_eventrœ   r"   r"   r#   ÚmouseMoveEvent.  s   zFigureCanvasQT.mouseMoveEventc                 C   r©   r    )rš   r›   r«   r¬   r­   r   Zbutton_release_eventr®   r"   r"   r#   ÚmouseReleaseEvent2  r°   z FigureCanvasQT.mouseReleaseEventc                 C   sp   |   |  |¡¡\}}| ¡  ¡ stj ¡  ¡ dkr"| ¡  	¡ d }n| ¡  	¡ }|r6t
j| ||||d d S d S )NZxcbéx   r¡   )rš   r›   Z
pixelDeltaZisNullr   rD   rE   ZplatformNameZ
angleDeltarž   r   Zscroll_event)r[   r   r   rž   Zstepsr"   r"   r#   Ú
wheelEvent9  s   ÿ

ÿÿzFigureCanvasQT.wheelEventc                 C   ó*   |   |¡}|d urtj| ||d d S d S r    )Ú_get_keyr   Zkey_press_event©r[   r   r>   r"   r"   r#   ÚkeyPressEventF  ó   
ÿzFigureCanvasQT.keyPressEventc                 C   r¶   r    )r·   r   Zkey_release_eventr¸   r"   r"   r#   ÚkeyReleaseEventK  rº   zFigureCanvasQT.keyReleaseEventc                 C   sŠ   t  ¡ }|jt|jdd ƒu rd S | ¡  ¡ | j }| ¡  ¡ | j }| j	j
}|| }|| }| j	j||dd tj | |¡ t | ¡ d S )NÚf_codeF)Úforward)ÚsysÚ	_getframer¼   r   Úf_backrŒ   Úwidthr¨   r§   r   ZdpiZset_size_inchesr   rY   r   r   Zresize_event)r[   r   ÚframeÚwÚhZdpivalZwinchZhinchr"   r"   r#   r   P  s   zFigureCanvasQT.resizeEventc                 C   s   |   ¡ \}}t ||¡S rh   )r‰   r   ÚQSize)r[   rÃ   rÄ   r"   r"   r#   ÚsizeHinta  ó   zFigureCanvasQT.sizeHintc                 C   s   t  dd¡S )Né
   )r   rÅ   ro   r"   r"   r#   ÚminumumSizeHinte  s   zFigureCanvasQT.minumumSizeHintc                    sŒ   |  ¡ ‰ t| ¡ ƒ‰‡ ‡fdd„tD ƒ}ztˆ  }W n# ty=   ˆ tjkr)Y d S tˆ ƒ}d|v r7| 	d¡ n| 
¡ }Y nw d ||g ¡S )Nc                    s0   g | ]\}}ˆ |krˆ|@ rt |  d d¡‘qS )r3   Zctrl)ÚSPECIAL_KEYSÚreplacer<   ©Z	event_keyZ
event_modsr"   r#   r?   q  s    þþz+FigureCanvasQT._get_key.<locals>.<listcomp>r0   ú+)r>   r   Ú	modifiersÚ_MODIFIER_KEYSrÊ   ÚKeyErrorr¾   Ú
maxunicodeÚchrÚremoveÚlowerÚjoin)r[   r   Zmodsr>   r"   rÌ   r#   r·   h  s"   ÿ
€ñzFigureCanvasQT._get_keyc                 C   s   t  ¡  d S rh   )rC   ZprocessEventsro   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è  )Úhasattrr×   Z	isRunningrG   r   Z
QEventLoopri   Ú
singleShotÚintrL   r   r   Ú_exec)r[   rk   Z
event_loopZtimerr"   r"   r#   Ústart_event_loop  s   ÿ
"ÿzFigureCanvasQT.start_event_loopc                 C   s   t | dƒr| j ¡  d S d S )Nr×   )rØ   r×   rL   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   ra   r;   ÚdrawÚupdatero   rl   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   ri   rÙ   Ú
_draw_idlero   r"   r"   r#   Ú	draw_idleª  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   Úptro   r"   r#   r?   »  ó    z'FigureCanvasQT.blit.<locals>.<listcomp>)r   r¦   ZboundsZrepaintÚrectr§   )r[   r¦   ÚlÚbrÃ   rÄ   Útr"   ro   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_excro   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ä   ro   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©r[   Úx0Úx1Úy0Úy1r"   r#   r‡   Ó  s    þþ


ôz9FigureCanvasQT.drawRectangle.<locals>._draw_rect_callbackc                 S   r€   rh   r"   r   r"   r"   r#   r‡   è  s   )r‡   rß   )r[   rç   rÃ   rÄ   r‡   r"   ró   r#   ÚdrawRectangleÌ  s   zFigureCanvasQT.drawRectanglerh   )r   ).rz   rQ   r{   Zrequired_interactive_frameworkrg   Z
_timer_clsr   ZLEFTZRIGHTZMIDDLEZBACKZFORWARDr«   rf   rZ   r   r’   r”   r˜   rŸ   r¢   ÚoperatorÚmethodcallerr   r›   rš   r¯   r±   r²   r³   rµ   r¹   r»   r   rÆ   rÉ   r·   rÖ   rÜ   rÝ   rÞ   rá   rë   rà   rø   r}   r"   r"   rl   r#   r~   Ì   sT    ûÿ
ÿ#



	r~   c                       s$   e Zd Ze ¡ Z‡ fdd„Z‡  ZS )Ú
MainWindowc                    s   | j  ¡  tƒ  |¡ d S rh   )ÚclosingÚemitr;   Ú
closeEventrŽ   rl   r"   r#   rþ   ñ  s   
zMainWindow.closeEvent)rz   rQ   r{   r   ÚSignalrü   rþ   r}   r"   r"   rl   r#   rû   î  s    rû   c                       s`   e Zd ZdZ‡ fdd„Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ Zdd„ Z‡  ZS )ÚFigureManagerQTzù
    Attributes
    ----------
    canvas : `FigureCanvas`
        The FigureCanvas instance
    num : int or str
        The Figure number
    toolbar : qt.QToolBar
        The qt.QToolBar
    window : qt.QMainWindow
        The qt.QMainWindow
    c                    s:  t ƒ | _tƒ  ||¡ | jj |j¡ | jj | j¡ tt	 
d¡ƒ}| j t |¡¡ d| j_|  | j| j¡| _| jrJt | j¡ | jrJt | j¡ | jr\| j | j¡ | j ¡  ¡ }nd}| ¡ }| ¡ }|| }| j | ¡ |¡ | j | j¡ t ¡ rˆ| j ¡  | j ¡  | j  t!dƒj"¡ | j #¡  | j $¡  d S )Nzimages/matplotlib.svgFr   zQtCore.Qt.FocusPolicy)%rû   r“   r;   rZ   rü   rK   Úclose_eventÚ_widgetclosedÚstrr   Ú_get_data_pathÚsetWindowIconr   ÚQIconÚ_destroyingÚ_get_toolbarÚcanvasÚtoolbarÚtoolmanagerr   Zadd_tools_to_managerZadd_tools_to_containerZ
addToolBarrÆ   r§   rˆ   rÁ   ZsetCentralWidgetrF   Zis_interactiveÚshowrá   ZsetFocusPolicyr   ZStrongFocusÚsetFocusÚraise_)r[   r	  ZnumZimageZ
tbs_heightÚcsZ	cs_heightr§   rl   r"   r#   rZ     s6   


zFigureManagerQT.__init__c                 C   s&   | j  ¡ r| j  ¡  d S | j  ¡  d S rh   )r“   ZisFullScreenZ
showNormalZshowFullScreenro   r"   r"   r#   Úfull_screen_toggle2  s   
z"FigureManagerQT.full_screen_togglec                 C   s:   | j jrd S d| j _zt | ¡ W d S  ty   Y d S w ©NT)r“   r  r   ÚdestroyrJ   ro   r"   r"   r#   r  8  s   ÿzFigureManagerQT._widgetclosedc                 C   sF   t jd dkrt||dƒ}|S t jd dkrt| j| jƒ}|S d }|S )Nr
  Ztoolbar2Tr  )rF   ÚrcParamsÚNavigationToolbar2QTÚ	ToolbarQtr  r“   )r[   r	  Úparentr
  r"   r"   r#   r  D  s   üÿzFigureManagerQT._get_toolbarc                 C   sp   t || jj ƒ}t || jj ƒ}| j ¡ | j ¡  }| j ¡ | j ¡  }| j ||¡ | j || || ¡ d S rh   )rÚ   r	  r¨   r“   rÁ   r§   rˆ   )r[   rÁ   r§   Zextra_widthZextra_heightr"   r"   r#   rˆ   O  s   zFigureManagerQT.resizec                 C   s0   | j  ¡  tjd r| j  ¡  | j  ¡  d S d S )Nzfigure.raise_window)r“   r  rF   r  ZactivateWindowr  ro   r"   r"   r#   r  Y  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 r  )r   rD   rE   r“   r  r
  r  Úclose©r[   r\   r"   r"   r#   r  _  s   
zFigureManagerQT.destroyc                 C   s
   | j  ¡ S rh   )r“   ZwindowTitlero   r"   r"   r#   Úget_window_titlej  s   
z FigureManagerQT.get_window_titlec                 C   s   | j  |¡ d S rh   )r“   ZsetWindowTitle)r[   Útitler"   r"   r#   Úset_window_titlem  ó   z FigureManagerQT.set_window_title)rz   rQ   r{   r|   rZ   r  r  r  rˆ   r  r  r  r  r}   r"   r"   rl   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 ) r  c                 C   s   g | ]^}}|‘qS r"   r"   )r   ÚnameÚ_r"   r"   r#   r?   w  ó    zNavigationToolbar2QT.<listcomp>ZSubplotsr   )Ú	Customizez%Edit axis, curve and image parametersZqt4_editor_optionsÚedit_parametersTc           
      C   sB  t j | |¡ |  tj ttdƒj	ƒttdƒ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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   ÚQToolBarrZ   ÚsetAllowedAreasr   rI   Ú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	   )
r[   r	  r  r.  ÚtextZtooltip_textÚ
image_fileÚcallbackÚaZlabelActionr"   r"   r#   rZ   {  sF   
ÿÿ

ÿ


€ÿÿ
þ
zNavigationToolbar2QT.__init__c                 C   s’   |  dd¡}t tt d|¡ƒ¡}t|t| ƒƒ |  ¡  	|  
¡ ¡ ¡ dk rD|  ¡  	|  ¡ ¡}| 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.
        r#  z
_large.pngZimagesé€   rï   zQtCore.Qt.MaskMode)rË   r   ZQPixmapr  r   r  r   r   r‹   rñ   ZbackgroundRoleÚvalueZforegroundRoleZcreateMaskFromColorrŠ   r   ZMaskOutColorÚfillZsetMaskr  )r[   r  ZpmZ
icon_colorÚmaskr"   r"   r#   r2  £  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-   r.   z - Nz<anonymous ú>)Z	get_labelZ	get_titlerÕ   ÚfilterZ
get_xlabelZ
get_ylabelrU   rz   )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warningr  ÚlenÚ	enumerateÚidZQInputDialogZgetItemrX   ÚfigureoptionsZfigure_edit)r[   ZaxesrK  Zduplicate_titlesÚiÚitemÚokr"   rM  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  ro   r"   r"   r#   Ú_update_buttons_checkedÒ  s
   

ÿz,NavigationToolbar2QT._update_buttons_checkedc                    ó   t ƒ j|Ž  |  ¡  d S rh   )r;   r%  rY  r  rl   r"   r#   r%  Ù  rÇ   zNavigationToolbar2QT.panc                    rZ  rh   )r;   r$  rY  r  rl   r"   r#   r$  Ý  rÇ   zNavigationToolbar2QT.zoomc                 C   s&   | j  |¡ | jr| j |¡ d S d S rh   )Úmessagerý   r.  r6  ÚsetText©r[   Ú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ø   )r[   r   rô   rö   rõ   r÷   r§   rç   r"   r"   r#   Údraw_rubberbandæ  s
   z$NavigationToolbar2QT.draw_rubberbandc                 C   s   | j  d ¡ d S rh   )r	  rø   ro   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 rh   )r0  Zreject)Úero   r"   r#   rƒ   õ  s   
 z9NavigationToolbar2QT.configure_subplots.<locals>.<lambda>)r0  ÚSubplotToolQtr	  r   r  Zmpl_connectÚupdate_from_current_subplotparsr  ro   r"   ro   r#   Úconfigure_subplotsð  s   
ÿÿ

z'NavigationToolbar2QT.configure_subplotsc              
   G   s6  | j  ¡ }t| ¡ ƒ}| j  ¡ }tj tj	d ¡}tj 
|| j  ¡ ¡}g }d }|D ]\}	}
d 
dd„ |
D ƒ¡}d|	|f }||
v rC|}| |¡ q)d 
|¡}t | j  ¡ d|||¡\}}|r™|dkrktj |¡tj	d< z
| j j |¡ W d S  ty˜ } ztj | d	t|ƒtjjt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%s (%s)z;;zChoose a filename to save tor&  zError saving file)r	  Zget_supported_filetypes_groupedÚsortedÚitemsZget_default_filetypeÚosÚpathÚ
expanduserrF   r  rÕ   Zget_default_filenameÚappendr   Z_getSaveFileNamer  Údirnamer   Zsavefigrì   r   rO  Zcriticalr  ZOkZNoButton)r[   r\   Z	filetypesZsorted_filetypesZdefault_filetypeZ	startpathrv   ÚfiltersZselectedFilterr  ZextsZ	exts_listrJ  Úfnamerc  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 r.| jd  |¡ d S d S )Nr   r   Zbackr½   )Z
_nav_stackÚ_posrP  Z	_elementsr/  Z
setEnabled)r[   Zcan_backwardZcan_forwardr"   r"   r#   Úset_history_buttons  s   

ÿz(NavigationToolbar2QT.set_history_buttons)T)rz   rQ   r{   r   rÿ   r  r[  r	   r1  r'   rX   rZ   r2  r!  rY  r%  r$  r_  ra  rb  rf  rr  rt  r}   r"   r"   rl   r#   r  q  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 )rd  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-   r.   zExport valuesZSpacingsZhspaceZwspacezTight layoutZResetZCloser   r   rð   g{®Gázt?F)(r;   rZ   r  r   r  r  r   r  ZsetObjectNameÚ
_spinboxesr   ZQHBoxLayoutÚ	setLayoutÚ_export_valuesÚ_tight_layoutÚ_resetr  ÚQVBoxLayoutZ	addLayoutZ	QGroupBoxr?  ZQFormLayoutZQDoubleSpinBoxÚsetRangeZsetDecimalsZsetSingleStepZsetKeyboardTrackingZvalueChangedrK   Ú_on_value_changedZaddRowZ
addStretchZQPushButtonZsetAutoDefaultÚclickedr  Ú_figureÚ	_defaultsÚ_export_values_dialogre  )r[   Z	targetfigr  Zmain_layoutÚgroupÚ	spinboxesZbuttonsÚlayoutZboxÚinnerr  ÚspinboxÚmethodr­   rl   r"   r#   rZ   #  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‡  ro   r"   r#   r$   P  s    ÿzASubplotToolQt.update_from_current_subplotpars.<locals>.<dictcomp>)rw  rj  r  r{  ro   r"   ro   r#   re  O  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©rE  ©r   Úattrr‡  r"   r"   r#   rT   ^  s   € ÿz/SubplotToolQt._export_values.<locals>.<genexpr>r   é   )r   ÚQDialogr‚  r|  rx  ZQPlainTextEditZsetReadOnlyr?  ZsetPlainTextrÕ   rw  rj  ZmaximumSizeZ	setHeightr   ZQFontMetricsZdocumentZdefaultFontrŒ   ZtoPlainTextr§   ZsetMaximumSizer  )r[   r…  r@  rŒ   r"   r"   r#   ry  T  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))rv  ru  )r-   r.   gü©ñÒMbP?c                 S   s   i | ]	\}}||  ¡ “qS r"   r‹  rŒ  r"   r"   r#   r$   p  ræ   z3SubplotToolQt._on_value_changed.<locals>.<dictcomp>r"   )	rw  Z
setMinimumrE  Z
setMaximumr€  Zsubplots_adjustrj  r	  rá   )r[   r„  rÔ   Zhigherr"   r"   r#   r~  i  s   
ÿzSubplotToolQt._on_value_changedc                 C   sX   | j  ¡  | j ¡ D ]\}}| d¡ | t| j jƒ| ¡ | d¡ q
| j j 	¡  d S )NTF)
r€  Ztight_layoutrw  rj  ÚblockSignalsÚsetValueÚvarsr‰  r	  rá   )r[   r  r‡  r"   r"   r#   rz  s  s   

zSubplotToolQt._tight_layoutc                 C   sJ   | j  ¡ D ]\}}| dd¡ | d¡ | |¡ | d¡ q|  ¡  d S )Nr   r   TF)r  rj  r}  r  r‘  r~  )r[   r‡  rE  r"   r"   r#   r{  {  s   

zSubplotToolQt._reset)
rz   rQ   r{   rZ   re  ry  r~  rz  r{  r}   r"   r"   rl   r#   rd  "  s    ,
rd  c                   @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )r  c                 C   s²   t  | |¡ tj | |¡ |  tj 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   rZ   r   r)  r*  r   rI   r+  r   r   r,  r-  r5  r7  r8  r9  r:  r;  r<  r=  r>  r?  Ú_message_actionÚ
_toolitemsÚ_groups)r[   r  r  Zmessage_labelr"   r"   r#   rZ   …  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 rh   )Ztrigger_toolr"   ©r  r[   r"   r#   Úhandler¡  rx   z'ToolbarQt.add_toolitem.<locals>.handlerT)r   ZQToolButtonZsetIconr  r2  r\  r4  r3  ÚtoggledrK   r  r”  Ú
setdefaultÚ_add_to_grouprn  )	r[   r  rƒ  r¤   rA  ÚdescriptionZtoggler­   r—  r"   r–  r#   Úadd_toolitem—  s   



zToolbarQt.add_toolitemc           	      C   sV   | j  |g ¡}|s|  | j¡}| |¡ || }|  ||¡}| ||¡ || j |< d S rh   )r•  r¬   ZinsertSeparatorr“  rn  ZinsertWidgetr'   )	r[   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 rh   )r”  r˜  Z
disconnectrW  rK   )r[   r  r˜  r­   r—  r"   r"   r#   Útoggle_toolitem·  s   

ýzToolbarQt.toggle_toolitemc                 C   s*   | j | D ]	\}}| d ¡ q| j |= d S rh   )r”  Z	setParent)r[   r  r­   r—  r"   r"   r#   Úremove_toolitem¿  s   zToolbarQt.remove_toolitemc                 C   s   |   | j¡ |¡ d S rh   )ZwidgetForActionr“  r\  r]  r"   r"   r#   r_  Ä  s   zToolbarQt.set_messageN)	rz   rQ   r{   rZ   rœ  rš  rž  rŸ  r_  r"   r"   r"   r#   r  „  s    
r  c                   @   ó   e Zd Zdd„ ZdS )ÚConfigureSubplotsQtc                 G   ó   t  |  ¡ ¡ d S rh   )r  rf  Ú"_make_classic_style_pseudo_toolbarr  r"   r"   r#   ÚtriggerÉ  ó   ÿzConfigureSubplotsQt.triggerN©rz   rQ   r{   r¤  r"   r"   r"   r#   r¡  È  ó    r¡  c                   @   r   )ÚSaveFigureQtc                 G   r¢  rh   )r  rr  r£  r  r"   r"   r#   r¤  Ï  r¥  zSaveFigureQt.triggerNr¦  r"   r"   r"   r#   r¨  Î  r§  r¨  z3.5ZToolSetCursor)Zalternativec                   @   r   )ÚSetCursorQtc                 C   s   t  |  ¡ |¡ d S rh   )r  r˜   r£  r—   r"   r"   r#   r˜   Ö  s   ÿzSetCursorQt.set_cursorN)rz   rQ   r{   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 rh   )r  ra  r£  )r[   rô   rö   rõ   r÷   r"   r"   r#   ra  Ü  s   ÿzRubberbandQt.draw_rubberbandc                 C   r¢  rh   )r  rb  r£  ro   r"   r"   r#   rb  à  r¥  zRubberbandQt.remove_rubberbandN)rz   rQ   r{   ra  rb  r"   r"   r"   r#   rª  Û  s    rª  c                   @   r   )ÚHelpQtc                 G   s   t j d d|  ¡ ¡ d S )NZHelp)r   rO  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 ¡  |¡ d S rh   )r	  ZgrabrC   Z	clipboardZ	setPixmap)r[   r\   r]   Zpixmapr"   r"   r#   r¤  ë  r£   zToolCopyToClipboardQT.triggerNr¦  r"   r"   r"   r#   r¬  ê  r§  r¬  c                   @   s    e Zd ZeZeZedd„ ƒZdS )Ú
_BackendQTc                   C   s8   t tƒ t t¡ W d   ƒ d S 1 sw   Y  d S rh   )r   rC   r   rÛ   r"   r"   r"   r#   Úmainloopü  s   
"ÿz_BackendQT.mainloopN)	rz   rQ   r{   r~   ZFigureCanvasr   ZFigureManagerÚstaticmethodr®  r"   r"   r"   r#   r­  ÷  s
    r­  )Urd   rù   rk  Úsignalr¾   rí   rB   rF   r   r   r   Zmatplotlib._pylab_helpersr   Zmatplotlib.backend_basesr   r   r   r	   r
   r   r   r   Z+matplotlib.backends.qt_editor.figureoptionsZbackendsZ	qt_editorrS  r&  r   r   r   r   r   r   r   r   r   r   r   r   Zbackend_versionÚplatformrÊ   rÏ   ZMOVEZHANDZPOINTERZSELECT_REGIONZWAITZRESIZE_HORIZONTALZRESIZE_VERTICALr–   rC   rM   rf   rg   rY   r~   ZQMainWindowrû   r   r)  r  r  rd  r  ZConfigureSubplotsBaser¡  ZSaveFigureBaser¨  Z
deprecatedZSetCursorBaser©  ZRubberbandBaserª  ZToolHelpBaser«  ZToolCopyToClipboardBaser¬  ZToolSaveFigureZToolConfigureSubplotsZToolRubberbandZToolHelpZToolCopyToClipboardZexportr­  r"   r"   r"   r#   Ú<module>   s   (4ÿþýüûúùø	÷
öõôóòñðïîíëêéèçæåäãâá à!ß"Þ#Ý$Ü%Û&Úÿ-ý
ùÿ#(  ${ 2bD
