o
    i                  
   @   s  d 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Zddl	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 ddl	mZmZ ddlmZ ddlmZ ddlmZ ddl m!Z! dd	l"m#Z# dd
l$m%Z% ddl&Z&e'e(Z)dZ*dddddZ+e,ddDddZ-dZ.dZ/dEddZ0G dd deZ1G dd deZ2G dd deZ3G dd dee&j4Z5G d d! d!e5Z6G d"d# d#e&j7Z8G d$d% d%eZ9d&d' Z:d(d) Z;ej<e&j=ej>e&j=ej?e&j@ejAe&jBejCe&jDiZEG d*d+ d+ee&jFZGe,dG d,d- d-e&jHZIG d.d/ d/ee&jFZJe,dG d0d1 d1ee&jHZKG d2d3 d3ejLZMG d4d5 d5ejNZOG d6d7 d7ejPZQd8e&jRvrDG d9d: d:ejSZTn	G d;d: d:ejSZTG d<d= d=e&jUZVG d>d? d?ejWZXG d@dA dAejYZZeOe_[eMe_\eQe_]eTe_^eXe__eZe_`ejaG dBdC dCeZbdS )Fz
A wxPython backend for matplotlib.

Originally contributed by Jeremy O'Donoghue (jeremy@o-donoghue.com) and John
Hunter (jdhunter@ace.bsd.uchicago.edu).

Copyright (C) Jeremy O'Donoghue & John Hunter, 2003-4.
    N)_Backend_check_savefig_extra_argsFigureCanvasBaseFigureManagerBaseGraphicsContextBaseMouseButtonNavigationToolbar2RendererBaseStatusbarBase	TimerBaseToolContainerBasecursors)cbookbackend_tools)Gcf)ToolManager)Figure)Path)Affine2D)SubplotTool   zLow zMed HighError)            3.3r   c                 C   s0   |t krtt|  d|  dt|  d S d S )Nz- z in )_DEBUGprint_DEBUG_lvlstype)stringlvlo r%   Y/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/matplotlib/backends/backend_wx.py	DEBUG_MSG.   s   $r'   K   c                 C   s.   t j|| dt jt jB d}|  |  dS )z4Signal an error condition with a popup error dialog.zMatplotlib backend_wx error)parentmessagecaptionstyleN)wxMessageDialogOKCENTRE	ShowModalDestroy)msgr)   dialogr%   r%   r&   error_msg_wx=   s   
r5   c                   @   s0   e Zd ZdZdd Zdd Zdd Zdd	 Zd
S )TimerWxz/Subclass of `.TimerBase` using wx.Timer events.c                 O   s0   t  | _| j| j_tj| g|R i | d S N)r-   Timer_timer	_on_timerNotifyr   __init__selfargskwargsr%   r%   r&   r<   K   s   

zTimerWx.__init__c                 C   s   | j | j| j d S r7   )r9   Start	_interval_singler>   r%   r%   r&   _timer_startP   s   zTimerWx._timer_startc                 C      | j   d S r7   )r9   StoprD   r%   r%   r&   _timer_stopS      zTimerWx._timer_stopc                 C   s   | j  r|   d S d S r7   )r9   	IsRunningrE   rD   r%   r%   r&   _timer_set_intervalV   s   
zTimerWx._timer_set_intervalN)__name__
__module____qualname____doc__r<   rE   rH   rK   r%   r%   r%   r&   r6   H   s    r6   c                   @   s`  e Zd ZdZi dejdejdejdejdejdejdejd	ejd
ejdejdejdejdejdejdejdejdejdejiZej	ej
ejdZejejejejejejejdZdd Zdd Zdd Zdd Zdd Zd d! Zed"d# Zd7d%d&Zd'd( Zd8d*d+Zd,d- Zej d.d/d0d1d2 Z!d3d4 Z"d5d6 Z#d$S )9
RendererWxz
    The renderer handles all the drawing primitives using a graphics
    context instance that controls the colors/styles. It acts as the
    'renderer' instance used by many classes in the hierarchy.
    d      ,  i  i  iX  i  i   i  
ultralightlightnormalmediumsemiboldboldheavy	ultraboldblack)italicrV   oblique)SansRomanScript
DecorativeModernCouriercourierc                 C   s`   t jddddddd t|  tdt|  | | _|	 | _
|| _i | _|| _d	| _d	S )
z)Initialise a wxWindows renderer instance.z2.0r-   backendz
the futurewxaggz7See the Matplotlib usage FAQ for more info on backends.)nameobj_typeremovalalternativeaddendum%s - __init__()N)r   warn_deprecatedr	   r<   _logdebugr!   GetWidthwidth	GetHeightheightbitmapfontddpigc)r>   ru   rw   r%   r%   r&   r<      s   



zRendererWx.__init__c                 C      dS NTr%   rD   r%   r%   r&   flipy   s   zRendererWx.flipyc                 C   ry   rz   r%   rD   r%   r%   r&   offset_text_height   s   zRendererWx.offset_text_heightc                 C   sd   |rt |}| jd u r|  }n| j}|j}| ||}||tj |	|\}}}	}
|||	fS r7   )
r   
strip_mathrx   new_gcgfx_ctxget_wx_fontSetFontr-   BLACKGetFullTextExtent)r>   spropismathrx   r   fontwhdescentleadingr%   r%   r&   get_text_width_height_descent   s   



z(RendererWx.get_text_width_height_descentc                 C   s   | j | jfS r7   )rr   rt   rD   r%   r%   r&   get_canvas_width_height      z"RendererWx.get_canvas_width_heightc                 C   sv   |  }|d ur|j}|j}|j|kr9||_|d u r |  d S ||d | j|d  |d  |d |d  d S d S )Nr   r   r   r   )get_clip_rectangleboundsr   _lastcliprect	ResetClipCliprt   )r>   rx   
new_boundsr   r%   r%   r&   handle_clip_rectangle   s   

z RendererWx.handle_clip_rectanglec                 C   s   |   }||D ]9\}}|tjkr|j|  q	|tjkr#|j|  q	|tjkr.|j|  q	|tj	kr9|j
|  q	|tjkrB|  q	|S r7   )
CreatePathiter_segmentsr   MOVETOMoveToPointLINETOAddLineToPointCURVE3AddQuadCurveToPointCURVE4AddCurveToPoint	CLOSEPOLYCloseSubpath)r   path	transformwxpathpointscoder%   r%   r&   convert_path   s   




zRendererWx.convert_pathNc                 C   s   |   | | |j}|t ddd| j }| |||}|d ur6|t	
|| || n|| |  d S )Ng      ?g              )selectr   r   r   scale	translatert   r   SetBrushr-   Brushget_wxcolourDrawPath
StrokePathunselect)r>   rx   r   r   rgbFacer   r   r%   r%   r&   	draw_path   s   

zRendererWx.draw_pathc                 C   s   |  }|d ur|j\}}}}	n
d}d}| j}| j}	|jd d \}
}tj||
| }|	  |j
|t|t| j| t|t|	  |  d S )Nr   r   )r   r   rr   rt   shaper-   BitmapFromBufferRGBAtobytesr   r   
DrawBitmapintr   )r>   rx   xyimbboxlbr   r   rowscolsru   r%   r%   r&   
draw_image   s   zRendererWx.draw_imageFc	                 C   s   |rt |}tdt|  |  | | |j}	| ||}
|	|
 }|	|
| | |||\}}}t|}t|| }|dkrN|	||| nt|}|t| }|t| }|	||| || | |  d S )Nz%s - draw_text()r   )r   r}   ro   rp   r!   r   r   r   r   r   get_rgbr   r   r   DrawTextmathradianssincosDrawRotatedTextr   )r>   rx   r   r   r   r   angler   mtextr   r   colorr   r   dradsxoyor%   r%   r&   	draw_text   s&   


zRendererWx.draw_textc                 C   s8   t dt|  t| j| | _| j  | j  | jS )Nz%s - new_gc())ro   rp   r!   GraphicsContextWxru   rx   r   r   rD   r%   r%   r&   r~     s
   

zRendererWx.new_gcr   z.gcrk   c                 C   s   | j dus	J d| j S )z.
        Fetch the locally cached gc.
        Nzgc must be defined)rx   rD   r%   r%   r&   get_gc  s   zRendererWx.get_gcc                 C   s~   t dt|  t|}| j|}|dur|S tj| |	 | j
| tj| j|  | j|  d | j|< }|S )z7Return a wx font.  Cache font instances for efficiency.z%s - get_wx_font()N)	pointSizefamilyr,   weight)ro   rp   r!   hashrv   getr-   Fontpoints_to_pixelsget_size_in_points	fontnamesget_nameROMAN
fontangles	get_stylefontweights
get_weight)r>   r   r   keyr   r%   r%   r&   r   %  s   zRendererWx.get_wx_fontc                 C   s   |t d | j d  S )Ng      R@)PIXELS_PER_INCHrw   )r>   r   r%   r%   r&   r   5  s   zRendererWx.points_to_pixelsr7   )FN)$rL   rM   rN   rO   r-   FONTWEIGHT_LIGHTFONTWEIGHT_NORMALFONTWEIGHT_BOLDr   FONTSTYLE_ITALICFONTSTYLE_NORMALFONTSTYLE_SLANTr   FONTFAMILY_SWISSFONTFAMILY_ROMANFONTFAMILY_SCRIPTFONTFAMILY_DECORATIVEFONTFAMILY_MODERNr   r<   r{   r|   r   r   r   staticmethodr   r   r   r   r~   r   
deprecatedr   r   r   r%   r%   r%   r&   rP   [   s    	






	rP   c                   @   s~   e Zd ZdZejejejdZej	ej
ejdZe Zdd Zdd Zdd	 ZdddZdd Zdd Zdd Zdd Zd
S )r   a=  
    The graphics context provides the color, line styles, etc...

    This class stores a reference to a wxMemoryDC, and a
    wxGraphicsContext that draws to it.  Creating a wxGraphicsContext
    seems to be fairly heavy, so these objects are cached based on the
    bitmap object that is passed in.

    The base GraphicsContext stores colors as a RGB tuple on the unit
    interval, e.g., (0.5, 0.0, 1.0).  wxPython uses an int interval, but
    since wxPython colour management is rather simple, I have not chosen
    to implement a separate colour manager class.
    )butt
projectinground)bevelmiterr   c                 C   s   t |  tdt| | | j|d\}}|d u r4t }|	| tj
|}d |_||f| j|< || _|| _|| _tddtj| _|| j || _d S )Nz%s - __init__(): %s)NNr   r   )r   r<   ro   rp   r!   _cacher   r-   MemoryDCSelectObjectGraphicsContextCreater   ru   dcr   PenSOLID_penSetPenrenderer)r>   ru   r  r   r   r%   r%   r&   r<   R  s   


zGraphicsContextWx.__init__c                 C   s&   t jdkr| j| j d| _dS dS )z2Select the current bitmap into this wxDC instance.win32TN)sysplatformr   r   ru   
IsSelectedrD   r%   r%   r&   r   f     

zGraphicsContextWx.selectc                 C   s&   t jdkr| jtj d| _dS dS )z-Select a Null bitmap into this wxDC instance.r  FN)r  r  r   r   r-   
NullBitmapr  rD   r%   r%   r&   r   l  r  zGraphicsContextWx.unselectNc                 C   sV   t dt|  |   t| || | j| | 	  | j
| j |   d S )Nz%s - set_foreground())ro   rp   r!   r   r   set_foregroundr   	SetColourr   r   r   r  r   )r>   fgisRGBAr%   r%   r&   r	  r  s   z GraphicsContextWx.set_foregroundc                 C   s   t |}tdt|  |   d|  k rdk rn nd}t| | t| j	| j
}|dkr3d}| j| | j| j |   d S )Nz%s - set_linewidth()r   r   )floatro   rp   r!   r   r   set_linewidthr   r  r   
_linewidthr   SetWidthr   r  r   )r>   r   lwr%   r%   r&   r    s   zGraphicsContextWx.set_linewidthc                 C   R   t dt|  |   t| | | jtj	| j
  | j| j |   d S )Nz%s - set_capstyle())ro   rp   r!   r   r   set_capstyler   SetCapr   _capd	_capstyler   r  r   )r>   csr%   r%   r&   r       zGraphicsContextWx.set_capstylec                 C   r  )Nz%s - set_joinstyle())ro   rp   r!   r   r   set_joinstyler   SetJoinr   _joind
_joinstyler   r  r   )r>   jsr%   r%   r&   r    r  zGraphicsContextWx.set_joinstylec                 C   s   t dt|  t|dkr-|\}}}|d9 }|d9 }|d9 }tjt|t|t|dS |\}}}}|d9 }|d9 }|d9 }|d9 }tjt|t|t|t|dS )z&Convert a RGB(A) color to a wx.Colour.z%s - get_wx_color()r      )redgreenblue)r  r   r!  alpha)ro   rp   r!   lenr-   Colourr   )r>   r   rgr   ar%   r%   r&   r     s$   
zGraphicsContextWx.get_wxcolourr7   )rL   rM   rN   rO   r-   CAP_BUTTCAP_PROJECTING	CAP_ROUNDr  
JOIN_BEVEL
JOIN_MITER
JOIN_ROUNDr  weakrefWeakKeyDictionaryr   r<   r   r   r	  r  r  r  r   r%   r%   r%   r&   r   :  s&    
		r   c                       s  e Zd ZdZdZeZi ejdej	dej
dejdejdejdejd	ejd
ejdejdejdejdejdejdejdejdejdi ejdejdejdejdejdejdejdej dej!dej"dej#dej$dej%d ej&d!ej'd"ej(d#ej)d$i ej*d%ej+d&ej,d'ej-d(ej.d)ej/d*ej0d+ej1d,ej2d-ej3d.ej4d/ej5dej6dej7dej8d	ej9dej:dej;d ej<dej=dej>dej?diZ@d0d1 ZAded3d4ZBd5d6 ZCd7d8 ZDdfd:d;ZEded<d=ZFd>d? ZGdgdAdBZHi eIjJdCdDdDdEdFdGdGdHdIZJ fdJdKZKdLdM ZLdNdO ZMdPdQ ZNdRdS ZOdTdU ZPdhdWdXZQdYdZ ZRd[d\ ZSd]d^ ZTd_d` ZUdadb ZVdcdd ZW  ZXS )i_FigureCanvasWxBaseaa  
    The FigureCanvas contains the figure and does event handling.

    In the wxPython backend, it is derived from wxPanel, and (usually) lives
    inside a frame instantiated by a FigureManagerWx. The parent window
    probably implements a wx.Sizer to control the displayed control size - but
    we give a hint as to our preferred minimum size.
    r-   controlshiftaltleftuprightdownescapef1f2f3f4f5f6f7f8f9f10f11f12scroll_lockbreak	backspaceenterinsertdeletehomeendpageuppagedown0123456789+-*/decc                 C   s  t | | ttj|jj\}}tjj| ||t	||d t
||| _tdt| || d| _| tj| j | tj| j | tj| j | tj| j | tj| j | tj| j | tj| j | tj| j | tj| j | tj| j | tj | j | tj!| j | tj"| j | tj#| j$ | tj%| j& | tj'| j( | tj)| j* | tj+| j, | tj-| j, | .tj/ | 0tj1 dS )z
        Initialize a FigureWx instance.

        - Initialize the FigureCanvasBase and wxPanel parents.
        - Set event handlers for resize, paint, and keyboard and mouse
          interaction.
        sizez"%s - __init__() - bitmap w:%d h:%dFN)2r   r<   mapr   ceilr   r_  r-   PanelSizer   ru   ro   rp   r!   _isDrawnBindEVT_SIZE_onSize	EVT_PAINT_onPaintEVT_KEY_DOWN
_onKeyDown
EVT_KEY_UP_onKeyUpEVT_LEFT_DOWN_onMouseButtonEVT_LEFT_DCLICKEVT_LEFT_UPEVT_MIDDLE_DOWNEVT_MIDDLE_DCLICKEVT_MIDDLE_UPEVT_RIGHT_DOWNEVT_RIGHT_DCLICKEVT_RIGHT_UPEVT_MOUSEWHEEL_onMouseWheel
EVT_MOTION	_onMotionEVT_LEAVE_WINDOW_onLeaveEVT_ENTER_WINDOW_onEnterEVT_MOUSE_CAPTURE_CHANGED_onCaptureLostEVT_MOUSE_CAPTURE_LOSTSetBackgroundStyleBG_STYLE_PAINTSetBackgroundColourWHITE)r>   r)   idfigurer   r   r%   r%   r&   r<      s6   	z_FigureCanvasWxBase.__init__Nc                 C   sX   t  }|| j t j s(t j }|r*t j| t j  t j	  dS dS dS )z*Copy bitmap of canvas to system clipboard.N)
r-   BitmapDataObject	SetBitmapru   TheClipboardIsOpenedOpenSetDataCloseFlush)r>   eventbmp_objopen_successr%   r%   r&   Copy_to_Clipboard+  s   


z%_FigureCanvasWxBase.Copy_to_Clipboardc                 C   s&   t dt|  d| _| jdd d S )Nz%s - draw_idle()FeraseBackground)ro   rp   r!   rd  RefreshrD   r%   r%   r&   	draw_idle7  s   z_FigureCanvasWxBase.draw_idlec                 C   s   t   d S r7   )r-   YieldrD   r%   r%   r&   flush_events@  r   z _FigureCanvasWxBase.flush_eventsr   c                 C   st   t | dr	tdtj| tjd}|dkr*|j|d dd | jtj| j|	 d t
 | _| j  |  d S )N_event_loopzEvent loop already runningr  r   i  T)oneShot)hasattrRuntimeErrorr-   r8   ID_ANYrA   re  	EVT_TIMERstop_event_loopGetIdGUIEventLoopr  RunrG   )r>   timeouttimerr%   r%   r&   start_event_loopD  s   


z$_FigureCanvasWxBase.start_event_loopc                 C   s*   t | dr| j r| j  | `d S d S )Nr  )r  r  rJ   Exitr>   r  r%   r%   r&   r  Q  s
   


z#_FigureCanvasWxBase.stop_event_loopc                 C   s   |   }|  }t| }g }g }d}t|D ])\}\}}	ddd |	D }
||	d  d||
|
f }||	v r<|}|| qd|}|||fS )z3Return the wildcard string for the filesave dialog.r   ;c                 S   s   g | ]}d | qS )z*.%sr%   ).0extr%   r%   r&   
<listcomp>a  s    z@_FigureCanvasWxBase._get_imagesave_wildcards.<locals>.<listcomp>z
%s (%s)|%s|)get_default_filetypeget_supported_filetypes_groupedsorteditems	enumeratejoinappend)r>   default_filetype	filetypessorted_filetypes	wildcards
extensionsfilter_indexirh   extsext_listwildcardr%   r%   r&   _get_imagesave_wildcardsX  s   

z,_FigureCanvasWxBase._get_imagesave_wildcardsWXc                 C   s|   t dt|  | r:|  r<|st| }tjdkr0|dkr0| j }|	 }|
|dd dS |
| jdd dS dS dS )z
        Performs update of the displayed image on the GUI canvas, using the
        supplied wx.PaintDC device context.

        The 'WXAgg' backend sets origin accordingly.
        z%s - gui_repaint()	__WXMSW__r  r   N)ro   rp   r!   IsShownOnScreenr-   ClientDCPlatformru   ConvertToImageConvertToBitmapr   )r>   drawDCoriginimgbmpr%   r%   r&   gui_repaintj  s   

z_FigureCanvasWxBase.gui_repaintzWindows bitmapJPEGPCXzPortable Network GraphicszTagged Image Format FilezX pixmap)r  jpegjpgpcxpngtiftiffxpmc                    s0   t  j|g|R i | | jr|   d S d S r7   )superprint_figurerd  drawr>   filenamer?   r@   	__class__r%   r&   r    s   z _FigureCanvasWxBase.print_figurec                 C   sF   t dt|  t| }| js| j|d n| j|d |  dS )z$Called when wxPaintEvt is generated.z%s - _onPaint()r  N)	ro   rp   r!   r-   PaintDCrd  r  r  r2   )r>   r  r  r%   r%   r&   ri    s   
z_FigureCanvasWxBase._onPaintc                 C   s  t dt|  |   }|r|| }|r'|r'|js'|jtj	@ s'| 
 }n|  }|| 
  t| ddrB|| j| jfkrBdS |\| _| _d| _| jdksU| jdkrWdS t| j| j| _| jj}| j| }| j| }| jj||dd | jdd t|  dS )z
        Called when wxEventSize is generated.

        In this application we attempt to resize to fit the window, so it
        is better to take the performance hit and redraw the whole window.
        z%s - _onSize()_widthNFr   )forwardr  )ro   rp   r!   	GetParentGetSizerGetItem
ProportionFlagr-   EXPAND
GetMinSizeGetClientSizeIncTogetattrr  _heightrd  r   ru   r  rw   set_size_inchesr  r   resize_event)r>   r  szsir_  dpivalwinchhinchr%   r%   r&   rg    s,   



z_FigureCanvasWxBase._onSizec                 C   sv   |j }|| jv r| j| }n|dk rt|}| s| }nd }|jdg|jdgfD ]\}}| r8d||}q+|S )N   r3  ctrlz{0}+{1})KeyCodekeyvaldchr	ShiftDownlowerAltDownControlDownformat)r>   r  keyvalr   methprefixr%   r%   r&   _get_key  s    
z_FigureCanvasWxBase._get_keyc                 C   .   |  |}tj| ||d | r|  dS dS )zCapture key press.guiEventN)r  r   key_press_eventSkipr>   r  r   r%   r%   r&   rk    
   
z_FigureCanvasWxBase._onKeyDownc                 C   r  )zRelease key.r  N)r  r   key_release_eventr  r  r%   r%   r&   rm    r  z_FigureCanvasWxBase._onKeyUpTc                 C   s$   |   r|   |r|   dS dS )zControl wx mouse capture.N)
HasCaptureReleaseMouseCaptureMouse)r>   capturer%   r%   r&   _set_capture  s
   z _FigureCanvasWxBase._set_capturec                 C   s   |  d dS )zCapture changed or lostFN)r  r  r%   r%   r&   r       z"_FigureCanvasWxBase._onCaptureLostc                 C   s   |   | | p|  |j}| jjj|j }t	j
tjt	jtjt	jtji}| }|||}| rA| j||||d dS | rQ| j|||d|d dS | r`| j||||d dS dS )Start measuring on an axis.r  T)dblclickr  N)r  r  
ButtonDownButtonDClickXr  r   rt   Yr-   MOUSE_BTN_LEFTr   LEFTMOUSE_BTN_MIDDLEMIDDLEMOUSE_BTN_RIGHTRIGHT	GetButtonr   button_press_eventButtonUpbutton_release_event)r>   r  r   r   
button_mapbuttonr%   r%   r&   ro    s&   
z"_FigureCanvasWxBase._onMouseButtonc                 C   s~   |  }| jjj|  }|j|j |j }|  t	j
dkr3t| ds(d| _n| jr0d| _dS d| _tj| ||||d dS )z3Translate mouse wheel events into matplotlib events	__WXMAC___skipwheeleventTFNr  )GetXr  r   rt   GetYLinesPerActionWheelRotation
WheelDeltar  r-   r  r  r#  r   scroll_event)r>   r  r   r   stepr%   r%   r&   ry    s   

z!_FigureCanvasWxBase._onMouseWheelc                 C   s8   |  }| jjj|  }|  tj| |||d dS )r  r  N)r$  r  r   rt   r%  r  r   motion_notify_eventr>   r  r   r   r%   r%   r&   r{  &  s   z_FigureCanvasWxBase._onMotionc                 C   s   |   tj| |d dS )zMouse has left the window.r  N)r  r   leave_notify_eventr  r%   r%   r&   r}  -  s   z_FigureCanvasWxBase._onLeavec                 C   s:   |  }| jjj|  }|  tj| |||fd dS )zMouse has entered the window.)r  xyN)r$  r  r   rt   r%  r  r   enter_notify_eventr,  r%   r%   r&   r  2  s   z_FigureCanvasWxBase._onEnterr7   )r   )Nr  T)YrL   rM   rN   rO   required_interactive_frameworkr6   
_timer_clsr-   WXK_CONTROL	WXK_SHIFTWXK_ALTWXK_LEFTWXK_UP	WXK_RIGHTWXK_DOWN
WXK_ESCAPEWXK_F1WXK_F2WXK_F3WXK_F4WXK_F5WXK_F6WXK_F7WXK_F8WXK_F9WXK_F10WXK_F11WXK_F12
WXK_SCROLL	WXK_PAUSEWXK_BACK
WXK_RETURN
WXK_INSERT
WXK_DELETEWXK_HOMEWXK_END
WXK_PAGEUPWXK_PAGEDOWNWXK_NUMPAD0WXK_NUMPAD1WXK_NUMPAD2WXK_NUMPAD3WXK_NUMPAD4WXK_NUMPAD5WXK_NUMPAD6WXK_NUMPAD7WXK_NUMPAD8WXK_NUMPAD9WXK_NUMPAD_ADDWXK_NUMPAD_SUBTRACTWXK_NUMPAD_MULTIPLYWXK_NUMPAD_DIVIDEWXK_NUMPAD_DECIMALWXK_NUMPAD_ENTERWXK_NUMPAD_UPWXK_NUMPAD_RIGHTWXK_NUMPAD_DOWNWXK_NUMPAD_LEFTWXK_NUMPAD_PAGEUPWXK_NUMPAD_PAGEDOWNWXK_NUMPAD_HOMEWXK_NUMPAD_ENDWXK_NUMPAD_INSERTWXK_NUMPAD_DELETEr  r<   r  r  r  r  r  r  r  r   r  r  ri  rg  r  rk  rm  r  r  ro  ry  r{  r}  r  __classcell__r%   r%   r  r&   r0    s$   		
 !"#$%&'()*+,-./01234;
+	


	
,
r0  c                   @   s`   e Zd ZdddZdd Zdd ZeZdd	 Zd
d Zdd Z	e	Z
dd ZeddddZdS )FigureCanvasWxNc                 C   sF   t dt|  t| j| jj| _| j| j d| _	| j
|d dS )z
        Render the figure using RendererWx instance renderer, or using a
        previously defined renderer if none is specified.
        z%s - draw()Tr  N)ro   rp   r!   rP   ru   r  rw   r  r  rd  r  )r>   r  r%   r%   r&   r  =  s
   zFigureCanvasWx.drawc                 O      | j |tjg|R i |S r7   )_print_imager-   BITMAP_TYPE_BMPr  r%   r%   r&   	print_bmpH     zFigureCanvasWx.print_bmpc                 O   rm  r7   )rn  r-   BITMAP_TYPE_JPEGr  r%   r%   r&   
print_jpegK  s
   zFigureCanvasWx.print_jpegc                 O   rm  r7   )rn  r-   BITMAP_TYPE_PCXr  r%   r%   r&   	print_pcxP  rq  zFigureCanvasWx.print_pcxc                 O   rm  r7   )rn  r-   BITMAP_TYPE_PNGr  r%   r%   r&   	print_pngS  rq  zFigureCanvasWx.print_pngc                 O   rm  r7   )rn  r-   BITMAP_TYPE_TIFr  r%   r%   r&   
print_tiffV  rq  zFigureCanvasWx.print_tiffc                 O   rm  r7   )rn  r-   BITMAP_TYPE_XPMr  r%   r%   r&   	print_xpmZ  rq  zFigureCanvasWx.print_xpm)qualityc                C   s   | j }tt| jjjt| jjj| _ t	| j | jj
}| }| j| | j }|tjkrI|d u r;ttjd}| j  }|tjt| t|rXt|tjsX| }|||setd| || _ | jro|   | rw|   d S d S )Nzsavefig.jpeg_qualityzCould not save figure to )ru   r-   r   r   ra  r  r   rr   rt   rP   rw   r~   r  rr  dict__getitem__mplrcParamsr  	SetOptionIMAGE_OPTION_QUALITYstrr   is_writable_file_like
isinstanceImageSaveFiler  rd  r  )r>   r  filetyper|  
origBitmapr  rx   imager%   r%   r&   rn  ]  s6   



zFigureCanvasWx._print_imager7   )rL   rM   rN   r  rp  rs  	print_jpgru  rw  ry  	print_tifr{  r   rn  r%   r%   r%   r&   rl  :  s    
rl  c                   @   sj   e Zd Zdd Zejdddedd Zedd	 Zd
d Z	dd Z
dd Zdd Zdd Zdd ZdS )FigureFrameWxc                 C   s  t jdkr	t j}nt dd}t jj| d d|d| d tdt|  || _	t
|  | || _| jt |jj|jj | j  t t j| _| j| jdt jt jB t jB  t| j|| | _|  | _| jjr|t | jj | jr|t!| j | jd ur| j"  | j# \}}| j# \}}| j$t || | j| jdt jt jB  | %| j | &  | j'd	 | (t j)| j* d S )
Nr     z	Figure %d)r)   r  postitlerm   r   r   )r   r   )+r-   r  DefaultPositionPointFramer<   ro   rp   r!   num_set_frame_icon
get_canvascanvasSetInitialSizerc  r   rr   rt   SetFocusBoxSizerVERTICALsizerAddTOPr  r  FigureManagerWxfigmgr_get_toolbartoolbartoolmanagerr   add_tools_to_manageradd_tools_to_containerRealizeGetSizeSetSizeSetSizerFit
SetMinSizere  	EVT_CLOSE_onClose)r>   r  figr  twthfwfhr%   r%   r&   r<     s<   

 


zFigureFrameWx.__init__3.2zself.GetStatusBar()r   c                 C   s   |   S r7   )GetStatusBarrD   r%   r%   r&   	statusbar  s   zFigureFrameWx.statusbarc                 C   s   | j jS r7   )r  r  rD   r%   r%   r&   r    s   zFigureFrameWx.toolmanagerc                 C   sB   t jd dkrt| j}|S t jd dkrt| j| }|S d }|S )Nr  toolbar2r  )r  r  NavigationToolbar2Wxr  	ToolbarWxr  )r>   r  r%   r%   r&   r    s   
zFigureFrameWx._get_toolbarc                 C   s   t | d|S Nr  )rl  )r>   r  r%   r%   r&   r    s   zFigureFrameWx.get_canvasc                 C   s   t dt|  | jS )Nz%s - get_figure_manager())ro   rp   r!   r  rD   r%   r%   r&   get_figure_manager  s   z FigureFrameWx.get_figure_managerc                 C   sB   t dt|  | j  | j  t|  | r|   d S d S )Nz%s - onClose())	ro   rp   r!   r  close_eventr  r   destroyr2   r  r%   r%   r&   r    s   


zFigureFrameWx._onClosec                 C   s   | j S )z=Override wxFrame::GetToolBar as we don't have managed toolbar)r  rD   r%   r%   r&   
GetToolBar  s   zFigureFrameWx.GetToolBarc                 O   sz   z
| j | jj W n	 ty   Y nw | r;|  s;tjj| g|R i | | jd ur1| j  t	 }|r;|
  dS rz   )r  mpl_disconnectr  _id_dragAttributeErrorIsBeingDeletedr-   r  r2   GetAppr  )r>   r?   r@   wxappr%   r%   r&   r2     s   

zFigureFrameWx.DestroyN)rL   rM   rN   r<   r   r   propertyr  r  r  r  r  r  r  r2   r%   r%   r%   r&   r    s    0
	r  c                   @   sZ   e Zd ZdZdd Zedd Zejdd Zdd Zd	d
 Z	dd Z
dd Zdd ZdS )r  a  
    Container/controller for the FigureCanvas and GUI frame.

    It is instantiated by Gcf whenever a new figure is created.  Gcf is
    responsible for managing multiple instances of FigureManagerWx.

    Attributes
    ----------
    canvas : `FigureCanvas`
        a FigureCanvasWx(wx.Panel) instance
    window : wxFrame
        a wxFrame instance - wxpython.org/Phoenix/docs/html/Frame.html
    c                 C   s.   t dt|  t| || || _|| _d S )Nrm   )ro   rp   r!   r   r<   framewindow)r>   r  r  r  r%   r%   r&   r<     s   
zFigureManagerWx.__init__c                 C   
   | j  S r7   )r  r  rD   r%   r%   r&   r       
zFigureManagerWx.toolbarc                 C   s   |d us	t | drtdd S )Nr  zcan't set attribute)r  r  )r>   valuer%   r%   r&   r    s   c                 C   s0   | j   | j  tjd r| j   d S d S )Nzfigure.raise_window)r  Showr  r  r  r  RaiserD   r%   r%   r&   show  s
   


zFigureManagerWx.showc                 G   s>   t dt|  | j}|r|  t }|r|  d S d S )Nz%s - destroy())ro   rp   r!   r  r  r-   r  r  )r>   r?   r  r  r%   r%   r&   r    s   zFigureManagerWx.destroyc                 C   r  r7   )r  GetTitlerD   r%   r%   r&   get_window_title'  r  z FigureManagerWx.get_window_titlec                 C      | j | d S r7   )r  SetTitle)r>   r  r%   r%   r&   set_window_title+  s   z FigureManagerWx.set_window_titlec                 C   s*   | j t|| | j | j d S r7   )r  r  r-   rc  r  r  r  )r>   rr   rt   r%   r%   r&   resize/  s   zFigureManagerWx.resizeN)rL   rM   rN   rO   r<   r  r  setterr  r  r  r  r  r%   r%   r%   r&   r    s    


r  c                 C   s   t ttd| S )z\
    Load a wx.Bitmap from a file in the "images" directory of the Matplotlib
    data.
    images)r-   r   r  r   _get_data_path)r  r%   r%   r&   _load_bitmap5  s   r  c                 C   sF   t  }dD ]}t t|}| s d S || q| | d S )N)zmatplotlib.pngzmatplotlib_large.png)r-   
IconBundleIconr  IsOkAddIconSetIcons)r  bundler  iconr%   r%   r&   r  =  s   r  c                       s   e Zd Zd$ddZedZedZedZedZ	edZ
edZedZedd Zdd Zd	d
 Zdd Zdd Zdd Zdd Z fddZ fddZdd Zeddd Zejdddedd Zd d! Zd"d# Z  ZS )%r  Tc              	   C   s
  t j| | d dt jv r| d i | _| jD ]<\}}}}|d u r)|   q| j	d| 
| dt j|||dv r>t jnt jdj| j|< | jt jt| || j| d q|| _| jrm|   t | | _| | j |   t| | d| _d | _dt jv | _d S )	Nr  wxMac)   r  z.png)PanZoom)ru   bmpDisabledlabel	shortHelpkindr  T)r-   ToolBarr<   r  PlatformInfoSetToolBitmapSizewx_ids	toolitemsAddSeparatorAddTool_iconr  
ITEM_CHECKITEM_NORMALIdre  EVT_TOOLr  _coordinatesAddStretchableSpace
StaticText_label_text
AddControlr  r   _idle_prevZoomRect
_retinaFix)r>   r  coordinatestexttooltip_text
image_filecallbackr%   r%   r&   r<   Q  s>   

	zNavigationToolbar2Wx.__init__r   c                 C   s  t tjtd| }z	tj	 
 }W n? tyU   tjtj}tjtj}d|j d|j  d|j  d }d|j d|j  d|j  d }|| dk}Y nw |r~tjtj}|ddd	f d
kjdd}| | | f||dd	f< tj|jd |jd
 | S )z
        Construct a `wx.Bitmap` suitable for use as icon from an image file
        *name*, including the extension and relative to Matplotlib's "images"
        data directory.
        r  gA`"?gbX9?gv/?r  g?.Nr   r   r  )axisr   )nparrayPILr  openr   r  r-   SystemSettingsGetAppearanceIsDarkr  	GetColourSYS_COLOUR_WINDOWSYS_COLOUR_WINDOWTEXTr  r   r!  allRedGreenBluer   r   r   r   )rh   r  darkbgr  bg_lumfg_lum
black_maskr%   r%   r&   r    s"   """zNavigationToolbar2Wx._iconc                 C      t | j|d|S r  r!   r  r>   r  r  r%   r%   r&   r    s   zNavigationToolbar2Wx.get_canvasc                 G   (   |  | jd d tj| g|R   d S )Nr  F)
ToggleToolr  r   zoomr>   r?   r%   r%   r&   r       zNavigationToolbar2Wx.zoomc                 G   r  )Nr  F)r  r  r   panr  r%   r%   r&   r    r  zNavigationToolbar2Wx.panc                 G   s   t d dd}t| td}t| j|d|}t|d| t t j}|	|dt j
t jB t jB  || |  t| jj| |  d S Nr  zConfigure subplots)   r   r   )r-   r  r  r   r!   r  FigureManagerr  r  r  r  r  GROWr  r  r   r  r  )r>   r?   r  toolfigr  r  r%   r%   r&   configure_subplots  s   
z'NavigationToolbar2Wx.configure_subplotsc              
   G   s,  | j  \}}}| j  }t| j  dtjd ||tjtj	B }|
| | tjkrt| }tdt| | ||  }|jdd  }	|	| j  v r_||	kr_td|	||	 |	}tjd rlt|jtjd< z| j jjt||d W d S  ty }
 ztt|
 W Y d }
~
d S d }
~
ww d S )NzSave to filezsavefig.directoryz%s - Save file path: %sr   zDextension %s did not match the selected image type %s; going with %s)r  )r  r  get_default_filenamer-   
FileDialogr  r  r  FD_SAVEFD_OVERWRITE_PROMPTSetFilterIndexr1   ID_OKpathlibr   GetPathro   rp   r!   GetFilterIndexsuffixget_supported_filetypeswarningr  r)   r  savefig	Exceptionr5   )r>   r?   r  r  r  default_filedlgr   fmtr  er%   r%   r&   save_figure  s6   




z NavigationToolbar2Wx.save_figurec                 C   s(   t t| }| j| | j  d S r7   )r-   Cursorcursordr  	SetCursorUpdater>   cursorr%   r%   r&   
set_cursor  s   zNavigationToolbar2Wx.set_cursorc                    sl   t  | | jjdkr2| jst | _d S |jd ur4| j	
|jj| _|j| _|j| _|j| _d S d S d S )NZOOM)r  
press_zoommoderh   r  r-   Overlay
_wxoverlayinaxesr  copy_from_bboxr   _savedRetinaImagexdata_zoomStartXydata_zoomStartY	_zoomAxesr  r  r%   r&   r>    s   
zNavigationToolbar2Wx.press_zoomc                    sh   t  | | jjdkr0| js| j  | `d S | `| jr(| j	d
  d | _| jr2d | _d S d S d S )Nr=  r   )r  release_zoomr?  rh   r  rA  ResetrD  r  popremoverI  r  r  r%   r&   rJ    s   

z!NavigationToolbar2Wx.release_zoomc                 C   s  | j rQd}| jr| jd  | j| j | j|j}}| j	|j
}	}
|||||f}|	|
|
|	|	f}| jj||d|d| _| j| jd  | j| jj d S t| j}t| j|}|  dtjvrlt|}| jjjj}|| }|| }||k r||}}||k r||}}|| }|| }t||||}d}t|}|t|d |d\}}}}||||d |t | |!| d S )	N#C0C0FFr   rZ  )r   r  r   T`   )"r  r  rL  rM  r  restore_regionrD  rF  rE  rH  rG  rI  plotdraw_artistblitr   r-   r  	DCOverlayrA  Clearr  GCDCr  rt   Rectr$  r  r   GetSetr   r   DrawRectangle)r>   r  x0y0x1y1rubberBandColorX0X1Y0Y1lineXlineYr   odcrt   r   r   rectr   r%  r&  r   r'  r%   r%   r&   draw_rubberband  sJ   




z$NavigationToolbar2Wx.draw_rubberbandr  c                 C   s   |   | d S r7   )GetTopLevelParentSetStatusBar)r>   statbarr%   r%   r&   set_status_bar-     z#NavigationToolbar2Wx.set_status_barz'self.GetTopLevelParent().GetStatusBar()r   c                 C   s   |    S r7   )ri  r  rD   r%   r%   r&   rk  1  s   zNavigationToolbar2Wx.statbarc                 C   s   | j r| j| d S d S r7   )r  r  SetLabelr>   r   r%   r%   r&   set_message7  s   z NavigationToolbar2Wx.set_messagec                 C   sd   | j jdk}| j jt| j jd k }d| jv r | | jd | d| jv r0| | jd | d S d S )Nr   r   BackForward)
_nav_stack_posr#  	_elementsr  
EnableTool)r>   can_backwardcan_forwardr%   r%   r&   set_history_buttons;  s   

z(NavigationToolbar2Wx.set_history_buttonsr0  )rL   rM   rN   r<   r   _deprecate_privatize_attributeprevZoomRect	retinaFixsavedRetinaImage	wxoverlayzoomAxes
zoomStartX
zoomStartYr   r  r  r  r  r"  r5  r<  r>  rJ  rh  r   rl  r  rk  rp  ry  rk  r%   r%   r  r&   r  P  s:    

'






6
r  c                   @       e Zd ZdZdd Zdd ZdS )StatusBarWxz
    A status bar is added to _FigureFrame to allow measurements and the
    previously selected scroll function to be displayed as a user convenience.
    c                 O   s   t j| |d | d d S )Nr  r   )r-   	StatusBarr<   SetFieldsCountr>   r)   r?   r@   r%   r%   r&   r<   K  s   zStatusBarWx.__init__c                 C   s   |  d| d d S )Nz%sr   SetStatusText)r>   r"   r%   r%   r&   set_functionO  s   zStatusBarWx.set_functionN)rL   rM   rN   rO   r<   r  r%   r%   r%   r&   r  D  s    r  c                   @   sB   e Zd ZejfddZdd Zdd Zdd Zd	d
 Z	dd Z
dS )r  c                 C   sR   t | | tjj| |d|d |  | _t| | _| | j i | _	i | _
d S )Nr  )r,   )r   r<   r-   r  r  _spacer  r  r  
_toolitems_groups)r>   r  r)   r,   r%   r%   r&   r<   V  s   

zToolbarWx.__init__c                    s     fddt  jD \}|S )z
        Find the position (index) of a wx.ToolBarToolBase in a ToolBar.

        ``ToolBar.GetToolPos`` is not useful because wx assigns the same Id to
        all Separators and StretchableSpaces.
        c                    s   g | ]}  |kr|qS r%   )GetToolByPos)r  r  r>   toolr%   r&   r  f  s    z+ToolbarWx._get_tool_pos.<locals>.<listcomp>)range
ToolsCount)r>   r  r  r%   r  r&   _get_tool_pos_  s   zToolbarWx._get_tool_posc              	      s  |j vrjj |< j | }dd tjtjD }|dkr?||d kr0dn|||d  d }	n|d }	|	| }
|rht	
|}|sVtjntj}|
d |tj||ped}n( d d df}|rtjd |d}n	tjd |d}j|
| d	}   fd
d}|rtj|| n|tj| j g  j  ||f d S )Nc                 S   s    g | ]}|  r| s|qS r%   )IsSeparatorIsStretchableSpace)r  tr%   r%   r&   r  r  s
    
z*ToolbarWx.add_toolitem.<locals>.<listcomp>r   r   r   
   r^  r  c                    s      d S r7   )trigger_tool)r  rh   r>   r%   r&   handler  rI   z'ToolbarWx.add_toolitem.<locals>.handler)r  InsertSeparatorr  r  r`  r  r  r  indexr  r  r-   r  r  
InsertToolr  GetTextExtentToggleButtonButtonInsertControlr  re  r  rn  r  
setdefaultr  )r>   rh   grouppositionr  descriptiontogglesepsepsstartidxr  r  r  r_  r1  r  r%   r  r&   add_toolitemj  s<   




zToolbarWx.add_toolitemc                 C   sT   || j vrd S | j | D ]\}}| s| |j| q| | q|   d S r7   )r  	IsControlr  r  
GetControlSetValuer  )r>   rh   toggledr  r  r%   r%   r&   toggle_toolitem  s   
zToolbarWx.toggle_toolitemc                 C   s,   | j | D ]
\}}| |j q| j |= d S r7   )r  
DeleteToolr  )r>   rh   r  r  r%   r%   r&   remove_toolitem  s   zToolbarWx.remove_toolitemc                 C   r  r7   )r  rn  ro  r%   r%   r&   rp    s   zToolbarWx.set_messageN)rL   rM   rN   r-   TB_HORIZONTALr<   r  r  r  r  rp  r%   r%   r%   r&   r  U  s    	-
r  c                   @   r  )StatusbarWxzFor use with ToolManager.c                 O   s@   t j| g|R i | tj| |d | d | d d S )Nr  r   r  )r
   r<   r-   r  r  r  r  r%   r%   r&   r<     s   
zStatusbarWx.__init__c                 C   s   |  | d S r7   r  ro  r%   r%   r&   rp    rI   zStatusbarWx.set_messageN)rL   rM   rN   rO   r<   rp  r%   r%   r%   r&   r    s    r  c                   @   s8   e Zd Zdd Zeddd Zeddd ZdS )	ConfigureSubplotsWxc                 G      t |   d S r7   )r  r"  "_make_classic_style_pseudo_toolbarr  r%   r%   r&   trigger     zConfigureSubplotsWx.triggerr  c                 C   s~   t d dd}t| td}| ||}t t j}||dt jt j	B t j
B  || |  t| jj| |  d S 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"    s   
z&ConfigureSubplotsWx.configure_subplotsc                 C   r  r  r  r  r%   r%   r&   r    rm  zConfigureSubplotsWx.get_canvasN)rL   rM   rN   r  r   r   r"  r  r%   r%   r%   r&   r    s    
r  c                   @      e Zd Zdd ZdS )SaveFigureWxc                 G   r  r7   )r  r5  r  r  r%   r%   r&   r    r  zSaveFigureWx.triggerNrL   rM   rN   r  r%   r%   r%   r&   r        r  c                   @   r  )SetCursorWxc                 C   s   t |  | d S r7   )r  r<  r  r:  r%   r%   r&   r<    s   zSetCursorWx.set_cursorN)rL   rM   rN   r<  r%   r%   r%   r&   r    r  r  r  c                   @   s$   e Zd Zdd Zdd Zdd ZdS )RubberbandWxc                 O   $   t jj| g|R i | d | _d S r7   )r   RubberbandBaser<   rA  r=   r%   r%   r&   r<        
RubberbandWx.__init__c                 C   s   | j d u r
t | _ t| j}t| j |}|  t|}| jjj	j
}|| }|| }||k r7||}}||k r@||}}|| }|| }	t||||	}
d}t|}|t|d |d\}}}}||||d |t| ||
 d S )NrN  r   TrO  )rA  r-   r@  r  r  rT  rU  rV  r  r   rt   rW  r$  r  r   rX  rY  r   r   rZ  )r>   r[  r\  r]  r^  r   rf  rt   r   r   rg  r_  r   r%  r&  r   r'  r%   r%   r&   rh    s.   





RubberbandWx.draw_rubberbandc                 C   s"   | j d u rd S | j   d | _ d S r7   )rA  rK  rD   r%   r%   r&   remove_rubberband  s   


RubberbandWx.remove_rubberbandNrL   rM   rN   r<   rh  r  r%   r%   r%   r&   r    s    #r  c                   @   s&   e Zd Zdd Zdd ZdddZdS )	r  c                 O   r  r7   )r   r  r<   _rectr=   r%   r%   r&   r<     r  r  c                 C   sp   t | j}| jr| | |t t jdt j |	t j
 || jj| || | | f| _|| j d S )Nr   )r-   r  r  r  r  r  r   r   r   r   TRANSPARENT_BRUSHr  rZ  )r>   r[  r\  r]  r^  r   r%   r%   r&   rh    s   
 r  Nc                 C   sB   | j sd S | jjr|d u rt| j}|| jjdd d | _ d S )Nr   )r  r  ru   r-   r  r   )r>   r   r%   r%   r&   r  '  s   
r  r7   r  r%   r%   r%   r&   r    s    c                   @   s:   e Zd ZdZdgZg dZdd Zdd Zedd	 Z	dS )
_HelpDialogN)Action	ShortcutsDescription)rQ      rS   c                 C   s$  t jj| |dt jt jB d t t j}t dddd}|  	 }t
| j| D ],\}}t|| jD ]!\}}	t j| |d}
|dkrG|
| |
|	 ||
ddd q3q)||dt jd t | t j}||dt jt jB d | | ||  |   | t j| j |t j| j d S )NHelp)r  r,   r   r      r  r  )r-   Dialogr<   DEFAULT_DIALOG_STYLERESIZE_BORDERr  r  FlexGridSizerGetFontMakeBoldr  headerszipwidthsr  r   Wrapr  ALLr  r(  ALIGN_CENTER_HORIZONTALr  r  Layoutre  r  OnClose
EVT_BUTTON)r>   r)   help_entriesr  
grid_sizerrY   r%  rowcolrr   r  r/   r%   r%   r&   r<   :  s,   




z_HelpDialog.__init__c                 C   s   d t _|   |  d S r7   )r  	_instanceDestroyLaterr  r  r%   r%   r&   r  S  s   z_HelpDialog.OnClosec                 C   s.   | j r
| j   d S | ||| _ | j   d S r7   )r  r  r  )clsr)   r  r%   r%   r&   r  X  s
   
z_HelpDialog.show)
rL   rM   rN   r  r  r  r<   r  classmethodr  r%   r%   r%   r&   r  5  s    r  c                   @   r  )HelpWxc                 G   s   t | jj |   d S r7   )r  r  r  r  ri  _get_help_entriesr  r%   r%   r&   r  c  s   zHelpWx.triggerNr  r%   r%   r%   r&   r  b  r  r  c                   @   r  )ToolCopyToClipboardWxc                 O   s`   | j js	| j   | j j rtj sd S ztjt	| j j W tj
  d S tj
  w r7   )r  rd  r  ru   r  r-   r  r  r  r  r  r=   r%   r%   r&   r  i  s   
zToolCopyToClipboardWx.triggerNr  r%   r%   r%   r&   r  h  r  r  c                       sP   e Zd ZeZeZeZe	dd Z
e fddZedd Ze	dd Z  ZS )	
_BackendWxc                 C   rF   r7   )r  r  )managerr%   r%   r&   trigger_manager_draw  r  z_BackendWx.trigger_manager_drawc                    sD   t  }|d u rt d}|d |t_t j|g|R i |S )NFT)r-   r  AppSetExitOnFrameDeleter  	_theWxAppr  new_figure_manager)r  r  r?   r@   r  r  r%   r&   r    s   

z_BackendWx.new_figure_managerc                 C   s4   |  ||}| }t r|j  |j  |S r7   )_frame_classr  r  is_interactiver  r  r  r  )r  r  r  r  r  r%   r%   r&   new_figure_manager_given_figure  s   

z*_BackendWx.new_figure_manager_given_figurec                  C   s.   t j st  } | d ur|   d S d S d S r7   )r-   r  IsMainLoopRunningr  MainLoop)r  r%   r%   r&   mainloop  s   
z_BackendWx.mainloop)rL   rM   rN   rl  FigureCanvasr  r  r  r  r   r  r  r  r  r  rk  r%   r%   r  r&   r  |  s    

r  )r   Nr7   )crO   loggingr   r)  r  r.  numpyr  r  
matplotlibr  matplotlib.backend_basesr   r   r   r   r   r   r   r	   r
   r   r   r   r   r   matplotlib._pylab_helpersr   matplotlib.backend_managersr   matplotlib.figurer   matplotlib.pathr   matplotlib.transformsr   matplotlib.widgetsr   r-   	getLoggerrL   ro   r   r    r   r'   r   
IDLE_DELAYr5   r6   rP   r   rb  r0  rl  r  r  r  r  r  MOVECURSOR_HANDHANDPOINTERCURSOR_ARROWSELECT_REGIONCURSOR_CROSSWAITCURSOR_WAITr7  r  r  r  r  r  r  ConfigureSubplotsBaser  SaveFigureBaser  SetCursorBaser  r  r  r  r  r  ToolHelpBaser  ToolCopyToClipboardBaser  ToolSaveFigureToolConfigureSubplotsToolSetCursorToolRubberbandToolHelpToolCopyToClipboardexportr  r%   r%   r%   r&   <module>   s    	8

 `~   Si?	 uU2#-