o
    qeʙ                  	   @   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rdnd fd!ej'dkrd"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   ND:\Projects\ConvertPro\env\Lib\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_PauseZpause)Z
Key_SysReqZsysreq)Z	Key_Clearclear)ZKey_Homehome)ZKey_Endend)ZKey_Leftleft)ZKey_Upup)Z	Key_Rightright)ZKey_DownZdown)Z
Key_PageUpZpageup)ZKey_PageDownZpagedown)	Key_ShiftshiftKey_ControldarwincontrolcmdKey_Metameta)Key_AltZalt)ZKey_CapsLockZ	caps_lock)ZKey_F1f1)ZKey_F2f2)ZKey_F3Zf3)ZKey_F4Zf4)ZKey_F5Zf5)ZKey_F6Zf6)ZKey_F7Zf7)ZKey_F8Zf8)ZKey_F9Zf9)Key_F10Zf10)r=   Zf11)ZKey_F12Zf12)ZKey_Super_Lsuper)ZKey_Super_Rr>   c                 C   s4   g | ]\}}t tt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    rA   ))ZControlModifierr4   )ZAltModifierr:   )ZShiftModifierr2   )ZMetaModifierr8   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 rt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rttd}t|}| | | d t  |dkr| tjj | S )NzInvalid DISPLAY variable>   PySide6PyQt6)PyQt5PySide2   >   rF   rE   )rD   rC      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.
matplotlibr5   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   





r[   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%   rb      s   
zTimerQT.__init__c                 C   s   t | js|   d S d S r]   )r   r_   _timer_stoprd   r   r   r%   __del__   s   
zTimerQT.__del__c                 C      | j | j d S r]   )r_   ZsetSingleShotZ_singlerj   r   r   r%   _timer_set_single_shot      zTimerQT._timer_set_single_shotc                 C   rl   r]   )r_   ZsetIntervalZ	_intervalrj   r   r   r%   _timer_set_interval   rn   zTimerQT._timer_set_intervalc                 C      | j   d S r]   )r_   startrj   r   r   r%   _timer_start      zTimerQT._timer_startc                 C   rp   r]   )r_   stoprj   r   r   r%   ri      rs   zTimerQT._timer_stop)__name__
__module____qualname____doc__rb   rk   rm   ro   rr   ri   __classcell__r   r   rg   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&      rB   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)r[   r>   rb   _draw_pending_is_drawing_draw_rect_callback_in_resize_eventrR   r   r   ZWidgetAttributeZWA_OpaquePaintEventZsetMouseTrackingresizeget_width_heightr   ZQPaletteQColorZ
setPalette)rd   r   paletterg   r   r%   rb      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rd   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physicalDotsPerInchChangedra   ZlogicalDotsPerInchChanged)rd   screenr   r   r%   _update_screen   s
   zFigureCanvasQT._update_screenc                 C   s,   |    }|j| j | |  d S r]   )windowZwindowHandleZscreenChangedra   r   r   )rd   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)rd   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)rd   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   rK   rL   ZqueryKeyboardModifiersr   r   _mpl_modifiers_process)rd   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   rK   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   buttondrQ   buttonr   r   r   r   rd   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xcbx   Zscroll_event)stepr   r   )Z
pixelDeltaZisNullr   rK   rL   ZplatformNameZ
angleDeltar   r   r   r   r   )rd   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   rd   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)rd   r   whZdpivalZwinchZhinchr   r   r%   r   N  s   
zFigureCanvasQT.resizeEventc                 C   s   |   \}}t||S r]   )r   r   QSize)rd   r   r   r   r   r%   sizeHinta     zFigureCanvasQT.sizeHintc                 C   s   t ddS )N
   )r   r   rj   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 )r6   Zctrl)SPECIAL_KEYSreplace)r"   maskr@   r   r   r   r%   rA   r  s
    z1FigureCanvasQT._mpl_modifiers.<locals>.<listcomp>)r   rK   rL   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   r3   +)
r@   r   r   KeyErrorrO   
maxunicodechrremovelowerjoin)rd   r   Z	event_keyr   r@   r   r   r%   r   v  s   
zFigureCanvasQT._get_keyc                 C   s   t j   d S r]   )r   rK   rL   ZprocessEventsrj   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	isRunningrN   r   Z
QEventLoopr^   
singleShotintquitr   r   _exec)rd   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updaterj   rg   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_idlerj   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"   ptrj   r   r%   rA         z'FigureCanvasQT.blit.<locals>.<listcomp>)r   r   ZboundsZrepaintrectr   )rd   r   lbr   r   tr   rj   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_excrj   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   rj   r   r%   rA     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   pencoloroffsetrd   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   )rd   r   r   r   r   r   r   r%   drawRectangle  s   zFigureCanvasQT.drawRectangler]   )r   ).ru   rv   rw   Zrequired_interactive_frameworkr\   Z
_timer_clsr   ZclasspropertyZmanager_classr   LEFTRIGHTZMIDDLEZBACKZFORWARDr   rb   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   ry   r   r   rg   r%   rz      sR    
	
	



	rz   c                       s$   e Zd Ze Z fddZ  ZS )
MainWindowc                    s   | j   t | d S r]   )closingemitr>   
closeEventr   rg   r   r%   r    s   
zMainWindow.closeEvent)ru   rv   rw   r   Signalr   r  ry   r   r   rg   r%   r     s    r   c                       sd   e Zd ZdZ fddZdd Zdd Zdd	 Zed
d Z	dd Z
dd Zdd Zdd Z  ZS )r{   z
    Attributes
    ----------
    canvas : `FigureCanvas`
        The FigureCanvas instance
    num : int or str
        The Figure number
    toolbar : qt.QToolBar
        The qt.QToolBar
    window : qt.QMainWindow
        The qt.QMainWindow
    c           	         s  t  | _t || | jj| j tjdk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 )Nr5   rJ   Fr   )#r   r   r>   rb   r   ra   _widgetclosedrO   rT   rU   r   rV   r   rW   rX   _destroyingtoolbarZ
addToolBarr   r   r   r   ZsetCentralWidgetcanvasrM   is_interactiveshowr   ZsetFocusPolicyr   r   ZFocusPolicyZStrongFocussetFocusraise_)	rd   r  numrY   rZ   Z
tbs_heightcsZ	cs_heightr   rg   r   r%   rb     s.   




zFigureManagerQT.__init__c                 C   s&   | j  r| j   d S | j   d S r]   )r   ZisFullScreenZ
showNormalZshowFullScreenrj   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   destroyrS   rj   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   )rd   r   r   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   rK   rL   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	  rM   rcParamsZactivateWindowr  rj   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   rK   rL   r   r  r  r  closerd   re   r   r   r%   r  Z  s   
zFigureManagerQT.destroyc                 C   s
   | j  S r]   )r   ZwindowTitlerj   r   r   r%   get_window_titlee  s   
z FigureManagerQT.get_window_titlec                 C   s   | j | d S r]   )r   ZsetWindowTitle)rd   titler   r   r%   set_window_titleh     z FigureManagerQT.set_window_title)ru   rv   rw   rx   rb   r  r  r   classmethodr  r	  r  r  r  ry   r   r   rg   r%   r{     s    (

r{   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%   rA   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
rt 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   QToolBarrb   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	   )
rd   r  parentr*  textZtooltip_text
image_filecallbackaZlabelActionr   r   r%   rb   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   rV   	with_namer  r   rU   existsr   ZQPixmapZsetDevicePixelRatior   r   r   ZbackgroundRolevalueZforegroundRoleZcreateMaskFromColorr   r   r   ZMaskModeZMaskOutColorfillZsetMaskrW   )rd   r  Zpath_regularZ
path_largefilenamepmZ
icon_colorr   r   r   r%   r.    s$   




zNavigationToolbar2QT._iconc                    s   | j j }|stj| j  dd d S t|dkr|\}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/   r1   z - Nz<anonymous >)Z	get_labelZ	get_titler   filterZ
get_xlabelZ
get_ylabeltyperu   )r"   axr   r   r%   rA     s    z8NavigationToolbar2QT.edit_parameters.<locals>.<listcomp>c                    s   g | ]}  |d kr|qS )r   )count)r"   r  titlesr   r%   rA     s    z (id: z#x)r  zSelect axes:r   F)r  r   Zget_axesr   QMessageBoxwarningr=  len	enumerateidZQInputDialogZgetItemindexfigureoptionsZfigure_edit)rd   ZaxesrM  Zduplicate_titlesiitemokr   rO  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  rj   r   r   r%   _update_buttons_checked  s
   

z,NavigationToolbar2QT._update_buttons_checkedc                       t  j|  |   d S r]   )r>   r#  r^  r  rg   r   r%   r#    r   zNavigationToolbar2QT.panc                    r_  r]   )r>   r"  r^  r  rg   r   r%   r"    r   zNavigationToolbar2QT.zoomc                 C   s&   | j | | jr| j| d S d S r]   )_messager  r*  r2  setTextrd   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%   rA     r  z8NavigationToolbar2QT.draw_rubberband.<locals>.<listcomp>)r  r   r   r   r   )rd   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   rj   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)erj   r   r%   r}     s   
 z9NavigationToolbar2QT.configure_subplots.<locals>.<lambda>)r,  SubplotToolQtr  r   r=  Zmpl_connectupdate_from_current_subplotparsr	  rj   r   rj   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%   rA     r  z4NavigationToolbar2QT.save_figure.<locals>.<listcomp>z (rQ  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
expanduserrM   r  r   Zget_default_filenameappendr   ZQFileDialogZgetSaveFileNamer=  dirnamer   Zsavefigr   rR  criticalrU   ZStandardButtonZOkZNoButton)rd   re   	filetypesZsorted_filetypesZdefault_filetypeZ	startpathrq   filtersZselectedFilterr  extsZ	exts_listrK  fnamerh  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   backr   )Z
_nav_stack_posrT  r+  Z
setEnabled)rd   Zcan_backwardZcan_forwardr   r   r%   set_history_buttons  s   

z(NavigationToolbar2QT.set_history_buttonsr  )ru   rv   rw   r   r  rU   r`  r   Zdeprecate_privatize_attributemessager	   r-  r*   rW  rb   r.  r   r^  r#  r"  rd  rf  rg  rk  rz  r}  ry   r   r   rg   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 )ri  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|#  qqA|| _$i | _%d | _&| '  d S )Nzimages/matplotlib.pngZSubplotToolZBorders)topbottomr/   r1   zExport valuesZSpacingsZhspaceZwspacezTight layoutZResetCloser   r   r   g{Gzt?F)(r>   rb   rX   r   rW   rU   r   rV   ZsetObjectName
_spinboxesr   ZQHBoxLayout	setLayout_export_values_tight_layout_resetr  QVBoxLayoutZ	addLayoutZ	QGroupBoxr<  ZQFormLayoutZQDoubleSpinBoxsetRangeZsetDecimalsZsetSingleStepZsetKeyboardTrackingZvalueChangedra   _on_value_changedZaddRowZ
addStretchZQPushButtonZsetAutoDefaultclickedr
  _figure	_defaults_export_values_dialogrj  )rd   Z	targetfigr=  Zmain_layoutgroup	spinboxesZbuttonslayoutboxinnerr  spinboxmethodr   rg   r   r%   rb   '  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  rj   r   r%   r&   T  s    zASubplotToolQt.update_from_current_subplotpars.<locals>.<dictcomp>)r  ro  r  r  rj   r   rj   r%   rj  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rE  r"   attrr  r   r   r%   	<genexpr>b  s    z/SubplotToolQt._export_values.<locals>.<genexpr>r      )r   QDialogr  r  r  ZQPlainTextEditZsetReadOnlyr<  ZsetPlainTextr   r  ro  ZmaximumSizeZ	setHeightr   ZQFontMetricsZdocumentZdefaultFontr   ZtoPlainTextr   ZsetMaximumSizer	  )rd   r  r>  r   r   r   r%   r  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))r  r  )r/   r1   gMbP?c                 S   s   i | ]	\}}||  qS r   r  r  r   r   r%   r&   t  r   z3SubplotToolQt._on_value_changed.<locals>.<dictcomp>r   )	r  Z
setMinimumrE  Z
setMaximumr  Zsubplots_adjustro  r  r   )rd   r  r   Zhigherr   r   r%   r  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_layoutr  ro  blockSignalssetValuer   r  r  r   )rd   r  r  r   r   r%   r  w  s   

zSubplotToolQt._tight_layoutc                 C   sJ   | j  D ]\}}|dd |d || |d q|   d S )Nr   r   TF)r  ro  r  r  r  r  )rd   r  rE  r   r   r%   r    s   

zSubplotToolQt._reset)
ru   rv   rw   rb   rj  r  r  r  r  ry   r   r   rg   r%   ri  &  s    ,
ri  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   rb   r   r%  r&  r   r   r'  r   r(  r)  r1  r3  r4  r5  r6  r7  r8  r9  r:  r;  r<  _message_action
_toolitems_groups)rd   Ztoolmanagerr=  Zmessage_labelr   r   r%   rb     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  rd   r   r%   handler  rs   z'ToolbarQt.add_toolitem.<locals>.handlerT)r   ZQToolButtonZsetIconr  r.  ra  r0  r/  toggledra   r  r  
setdefault_add_to_grouprs  )	rd   r  r  r   r?  descriptiontoggler   r  r   r  r%   add_toolitem  s   



zToolbarQt.add_toolitemc           	      C   sV   | j |g }|s| | j}|| || }| ||}||| || j |< d S r]   )r  rQ   ZinsertSeparatorr  rs  ZinsertWidgetr*   )	rd   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 r]   )r  r  Z
disconnectr\  ra   )rd   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)rd   r  r   r  r   r   r%   remove_toolitem  s   zToolbarQt.remove_toolitemc                 C   s   |  | j| d S r]   )ZwidgetForActionr  ra  rb  r   r   r%   rd    s   zToolbarQt.set_messager]   )	ru   rv   rw   rb   r  r  r  r  rd  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>   rb   r,  rc   rg   r   r%   rb     s   
zConfigureSubplotsQt.__init__c                 G   s   t |  d S r]   )r  rk  r  r   r   r%   trigger  rs   zConfigureSubplotsQt.trigger)ru   rv   rw   rb   r  ry   r   r   rg   r%   r    s    r  c                   @      e Zd Zdd ZdS )SaveFigureQtc                 G      t |   d S r]   )r  rz  "_make_classic_style_pseudo_toolbarr  r   r   r%   r       zSaveFigureQt.triggerNru   rv   rw   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  rf  r  )rd   r   r   r   r   r   r   r%   rf    s   zRubberbandQt.draw_rubberbandc                 C   r  r]   )r  rg  r  rj   r   r   r%   rg    r  zRubberbandQt.remove_rubberbandN)ru   rv   rw   rf  rg  r   r   r   r%   r    s    r  c                   @   r  )HelpQtc                 G   s   t jd d|   d S )NZHelp)r   rR  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   rK   rL   	clipboardZ	setPixmap)rd   re   rf   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)ru   rv   rw   r   Zbackend_versionrz   ZFigureCanvasr{   ZFigureManagerr  Zmainloopr   r   r   r%   r    s
    
r  )N	functoolsrp  rO   r   rI   rM   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_editorrX  r$  r   r   r   r   r   r   r   r   r   rT   r   r   ZMOVEZHANDPOINTERZSELECT_REGIONZWAITZRESIZE_HORIZONTALZRESIZE_VERTICALr   	lru_cacher[   r\   r   rz   ZQMainWindowr   r{   r%  r  r  ri  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	
