
    (?e                        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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mZmZ ddlmZmZmZ ddl m!Z! ddl"m#Z# ddl$m%Z% ddl&Z& ej'        e(          Z)dZ* ej+        d	          d
             Z, G d de          Z- ej.        dddddd           G d de                      Z/ G d de          Z0 G d dee&j1                  Z2 G d de2          Z3 G d de&j4                  Z5 G d de          Z6d  Z7d! Z8 G d" d#ee&j9                  Z: G d$ d%ee&j9                  Z; ej<        e2           G d& d'ej=                              Z> ej<        e2           G d( d)ej?                              Z@ ej<        e2           G d* d+ejA                              ZB G d, d-e&jC                  ZD ej<        e2           G d. d/ejE                              ZF ej<        e2           G d0 d1ejG                              ZHe:e6_I        e;e6_J        ejK         G d2 d3e                      ZLdS )4z
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FigureCanvasBaseFigureManagerBaseGraphicsContextBaseMouseButtonNavigationToolbar2RendererBase	TimerBaseToolContainerBasecursors
CloseEventKeyEventLocationEvent
MouseEventResizeEvent)_apicbookbackend_tools)Gcf)Path)Affine2DK      c                  ~    t          j        d          } |                     d           t          j                     | S )NFT)wxAppSetExitOnFrameDeleter   _setup_new_guiapp)wxapps    >lib/python3.11/site-packages/matplotlib/backends/backend_wx.py_create_wxappr!   +   s7    F5MME	t$$$	L    c                   4     e Zd ZdZ fdZd Zd Zd Z xZS )TimerWxz/Subclass of `.TimerBase` using wx.Timer events.c                     t          j                    | _        | j        | j        _         t                      j        |i | d S N)r   Timer_timer	_on_timerNotifysuper__init__)selfargskwargs	__class__s      r    r,   zTimerWx.__init__6   s>    hjj!^$)&)))))r"   c                 P    | j                             | j        | j                   d S r&   )r(   Start	_interval_singler-   s    r    _timer_startzTimerWx._timer_start;   s$    $.$,77777r"   c                 8    | j                                          d S r&   )r(   Stopr5   s    r    _timer_stopzTimerWx._timer_stop>   s    r"   c                 d    | j                                         r|                                  d S d S r&   )r(   	IsRunningr6   r5   s    r    _timer_set_intervalzTimerWx._timer_set_intervalA   s:    ;  "" 	 	  	 r"   )	__name__
__module____qualname____doc__r,   r6   r9   r<   __classcell__r0   s   @r    r$   r$   3   sk        99* * * * *
8 8 8               r"   r$   z2.0r   backendz
the futurewxaggz7See the Matplotlib usage FAQ for more info on backends.)nameobj_typeremovalalternativeaddendumc                   "    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 fdZd Zd Zd Zd Zed             Zd$dZd Zd%d Zd! Zd" Zd# Z xZ S )&
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)italicrQ   oblique)SansRomanScript
DecorativeModernCouriercourierc                 4   t                                                       t                              dt	          |                      |                                | _        |                                | _        || _	        i | _
        || _        d| _        dS )z)Initialise a wxWindows renderer instance.%s - __init__()N)r+   r,   _logdebugtypeGetWidthwidth	GetHeightheightbitmapfontddpigc)r-   rj   rl   r0   s      r    r,   zRendererWx.__init__~   sx    

$d4jj111__&&
&&((
r"   c                     dS )NT r5   s    r    flipyzRendererWx.flipy   s    tr"   c                 ,   |rt          j        |          }| j        |                                 }n| j        }|j        }|                     ||          }|                    |t          j                   |	                    |          \  }}}	}
|||	fS r&   )
r   
strip_mathrm   new_gcgfx_ctxget_wx_fontSetFontr   BLACKGetFullTextExtent)r-   spropismathrm   rt   fontwhdescentleadings              r    get_text_width_height_descentz(RendererWx.get_text_width_height_descent   s      	$ ##A7?BBB*4((bh'''!(!:!:1!=!=1gw!W}r"   c                     | j         | j        fS r&   )rg   ri   r5   s    r    get_canvas_width_heightz"RendererWx.get_canvas_width_height   s    z4;&&r"   c                 (   |                                 }||j        }|j        }|j        |k    rb||_        ||                                 d S |                    |d         | j        |d         z
  |d         z
  |d         |d                    d S d S )Nr   r         )get_clip_rectangleboundsrt   _lastcliprect	ResetClipClipri   )r-   rm   
new_boundsrt   s       r    handle_clip_rectanglez RendererWx.handle_clip_rectangle   s    **,,
!#*J* J..$.G!!!!#####Z]![:a=8:a=H']JqM; ; ; ; ; /.r"   c                    |                                  }|                    |          D ]\  }}|t          j        k    r |j        |   |t          j        k    r |j        |  ;|t          j        k    r |j        |  V|t          j	        k    r |j
        |  q|t          j        k    r|                                 |S r&   )
CreatePathiter_segmentsr   MOVETOMoveToPointLINETOAddLineToPointCURVE3AddQuadCurveToPointCURVE4AddCurveToPoint	CLOSEPOLYCloseSubpath)rt   path	transformwxpathpointscodes         r    convert_pathzRendererWx.convert_path   s    ##%% ..y99 
	& 
	&LFDt{""""F+++$$%%v...$$**F333$$&&///''##%%%r"   Nc                    |                                  |                     |           |j        }|t                                          dd                              d| j                  z   }|                     |||          }|P|                    t          j
        |                    |                               |                    |           n|                    |           |                                 d S )Ng      ?g              )selectr   rt   r   scale	translateri   r   SetBrushr   Brushget_wxcolourDrawPath
StrokePathunselect)r-   rm   r   r   rgbFacert   r   s          r    	draw_pathzRendererWx.draw_path   s    
		""2&&&*JJS$''11#t{CCD	""7D)<<RXboog&>&>??@@@V$$$$v&&&
r"   c           	          |                                 }||j        \  }}}}	nd}d}| j        }| j        }	|j        d d         \  }
}t
          j                            ||
|                                          }|	                                 |j
                            |t          |          t          | j        |z
            t          |          t          |	                      |                                 d S )Nr   r   )r   r   rg   ri   shaper   BitmapFromBufferRGBAtobytesr   rt   
DrawBitmapintr   )r-   rm   xyimbboxlbr}   r~   rowscolsrj   s                r    
draw_imagezRendererWx.draw_image   s    $$&&JAq!QQAA
AAXbqb\
d))$bjjllCC
		

fc!ffc$+/.B.B!!ffc1"gg	/ 	/ 	/
r"   Fc	                 $   |rt          j        |          }t                              dt	          |                      |                                 |                     |           |j        }	|                     ||          }
|	                    |
                                          }|	                    |
|           |                     |||          \  }}}t          |          }t          ||z
            }|dk    r|	                    |||           n`t          j        |          }|t          j        |          z  }|t          j        |          z  }|	                    |||z
  ||z
  |           |                                 d S )Nz%s - draw_text()r   )r   rr   rc   rd   re   r   r   rt   ru   r   get_rgbrv   r   r   DrawTextmathradianssincosDrawRotatedTextr   )r-   rm   r   r   ry   rz   angler{   mtextrt   r|   colorr}   r~   dradsxoyos                     r    	draw_textzRendererWx.draw_text   sb     	$ ##A

%tDzz222
		""2&&&*4((

--e$$$44QfEE1aFFAJJC<<Q1%%%%<&&DTXd^^#BTXd^^#B##Aq2vq2vt<<<
r"   c                     t                               dt          |                      t          | j        |           | _        | j                                         | j                                         | j        S )Nz%s - new_gc())rc   rd   re   GraphicsContextWxrj   rm   r   r   r5   s    r    rs   zRendererWx.new_gc   s\    

?DJJ///#DK66wr"   c                 :   t                               dt          |                      t          |          }| j                            |          }||S |                     |                                          }t          j	        t          |          | j                            |                                t          j                  | j        |                                         | j        |                                                   x| j        |<   }|S )z7Return a wx font.  Cache font instances for efficiency.z%s - get_wx_font()N)	pointSizefamilystyleweight)rc   rd   re   hashrk   getpoints_to_pixelsget_size_in_pointsr   Fontround	fontnamesget_nameROMAN
fontangles	get_stylefontweights
get_weight)r-   ry   rz   keyr|   sizes         r    ru   zRendererWx.get_wx_font  s    

'd4444jjz~~c""K$$T%<%<%>%>?? "$Dkk>%%dmmoorx@@/$.."2"23#DOO$5$56	"8 "8 "8 	8
3$
 r"   c                 2    |t           dz  | j        z  dz  z  S )Ng      R@)PIXELS_PER_INCHrl   )r-   r   s     r    r   zRendererWx.points_to_pixels  s    4/$(:TABBr"   r&   )FN)!r=   r>   r?   r@   r   FONTWEIGHT_LIGHTFONTWEIGHT_NORMALFONTWEIGHT_BOLDr   FONTSTYLE_ITALICFONTSTYLE_NORMALFONTSTYLE_SLANTr   FONTFAMILY_SWISSFONTFAMILY_ROMANFONTFAMILY_SCRIPTFONTFAMILY_DECORATIVEFONTFAMILY_MODERNr   r,   rp   r   r   r   staticmethodr   r   r   r   rs   ru   r   rA   rB   s   @r    rK   rK   F   sr       
 R R  	R  	R!	
 	R! 	R! 	R 	R 	R 	b) 	$ 	"& 	"& 	B( 	"  	#!" 	R'#$ 	#% K* %%% J #$&.&'' I	 	 	 	 	    "' ' '; ; ;   \         8    "C C C C C C Cr"   rK   c                        e Zd ZdZej        ej        ej        dZej	        ej
        ej        dZ ej                    Z fdZd Zd Zd fd	Z fd	Z fd
Z fdZd Z xZ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 an 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
projectingr   )bevelmiterr   c                    t                                                       t                              dt	          |           |           | j                            |d          \  }}|Ft          j        |          }t          j	        
                    |          }d |_        ||f| j        |<   || _        || _        || _        t          j        ddt          j                  | _        |                    | j                   || _        d S )Nz%s - __init__(): %s)NNrw   r   )r+   r,   rc   rd   re   _cacher   r   MemoryDCGraphicsContextCreater   rj   dcrt   PenSOLID_penSetPenrenderer)r-   rj   r  r   rt   r0   s        r    r,   zGraphicsContextWx.__init__1  s    

($t**f===koofl;;G:V$$B(//33G$(G!"$g+DKF7Arx00	ty!!! r"   c                 v    t           j        dk    r(| j                            | j                   d| _        dS dS )z2Select the current bitmap into this wxDC instance.win32TN)sysplatformr   SelectObjectrj   
IsSelectedr5   s    r    r   zGraphicsContextWx.selectD  s:    <7""G  ---"DOOO #"r"   c                     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  r5   s    r    r   zGraphicsContextWx.unselectJ  s:    <7""G  ///#DOOO #"r"   Nc                    t                               dt          |                      |                                  t	                                          ||           | j                            |                     | 	                                                     | j
                            | j                   |                                  d S )Nz%s - set_foreground())rc   rd   re   r   r+   set_foregroundr   	SetColourr   r   rt   r   r   )r-   fgisRGBAr0   s      r    r  z GraphicsContextWx.set_foregroundP  s     	

*DJJ777r6***	D--dllnn==>>>DI&&&r"   c                    t          |          }t                              dt          |                      |                                  d|cxk     rdk     rn nd}t                                          |           t          | j        	                    | j
                            }|dk    rd}| j                            |           | j                            | j                   |                                  d S )Nz%s - set_linewidth()r   r   )floatrc   rd   re   r   r+   set_linewidthr   r  r   
_linewidthr   SetWidthrt   r   r   )r-   r}   lwr0   s      r    r  zGraphicsContextWx.set_linewidth_  s    !HH

)4::666q9999199999Aa   //@@AA77B	2DI&&&r"   c                    t                               dt          |                      |                                  t	                                          |           | j                            t          j	        | j
                            | j                            | j                   |                                  d S )Nz%s - set_capstyle())rc   rd   re   r   r+   set_capstyler   SetCapr   _capd	_capstylert   r   r   )r-   csr0   s     r    r  zGraphicsContextWx.set_capstylen  s    

($t**555R   	*0@AAADI&&&r"   c                    t                               dt          |                      |                                  t	                                          |           | j                            t          j	        | j
                            | j                            | j                   |                                  d S )Nz%s - set_joinstyle())rc   rd   re   r   r+   set_joinstyler   SetJoinr   _joind
_joinstylert   r   r   )r-   jsr0   s     r    r  zGraphicsContextWx.set_joinstylew  s    

)4::666b!!!	+24?CDDDDI&&&r"   c                     t                               dt          |                      t          j        d |D              S )z'Convert an RGB(A) color to a wx.Colour.z%s - get_wx_color()c                 2    g | ]}t          d |z            S )   )r   ).0r   s     r    
<listcomp>z2GraphicsContextWx.get_wxcolour.<locals>.<listcomp>  s"    777A3sQw<<777r"   )rc   rd   re   r   Colour)r-   r   s     r    r   zGraphicsContextWx.get_wxcolour  s9    

($t**555y7777788r"   r&   )r=   r>   r?   r@   r   CAP_BUTTCAP_PROJECTING	CAP_ROUNDr  
JOIN_BEVEL
JOIN_MITER
JOIN_ROUNDr  weakrefWeakKeyDictionaryr   r,   r   r   r  r  r  r  r   rA   rB   s   @r    r   r     s%         [,l$ $E }}}& &F 'W&((F! ! ! ! !&# # #$ $ $                 9 9 9 9 9 9 9r"   r   c                      e Zd ZdZdZeZ ej        d           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
j0        d)e
j1        d*e
j2        d+e
j3        d,e
j4        d-e
j5        d.e
j6        d/e
j7        d0e
j8        d1e
j9        de
j:        d	e
j;        d
e
j<        de
j=        de
j>        d!e
j?        d"e
j@        de
jA        d e
jB        de
jC        diZDdTd3ZEdTd4ZFd5 ZGd6 ZHdUd8ZIdTd9ZJd: ZKdTd;ZLi eMjN        d<d=d=d>d?d@d@dAdBZNdC ZOdD ZPeQdTd2dEdF            ZRdG ZSdTdHZTdI ZUdJ ZVdK ZWdVdMZXdN ZYdO ZZdP Z[dQ Z\dR Z]dS Z^d2S )W_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   c                     t           S r&   )FigureManagerWx)clss    r    <lambda>z_FigureCanvasWxBase.<lambda>  s    ? r"   controlshiftalt	caps_lock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+-*/decNc           	      	   t          j        | |           t          t          j        | j        j        j                  \  }}t          j	                            | ||t          j
        ||                     t          j        ||          | _        t                              dt          |           ||           d| _        d| _        t          j        ddt          j                  | _        t          j        ddt          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/        | j!                   |                     t          j0        | j1                   |                     t          j2        | j3                   |                     t          j4        | j5                   |                     t          j6        | j7                   |                     t          j8        | j9                   |                     t          j:        | j9                   | ;                    t          j<                   | =                    t          j>                   dS )z
        Initialize a FigureWx instance.

        - Initialize the FigureCanvasBase and wxPanel parents.
        - Set event handlers for resize, paint, and keyboard and mouse
          interaction.
        r   z"%s - __init__() - bitmap w:%d h:%dFNrw   r   WHITE)?r   r,   mapr   ceilfigurer   r   r   PanelSizer   rj   rc   rd   re   _isDrawn_rubberband_rectr   PENSTYLE_SHORT_DASH_rubberband_pen_blackPENSTYLE_SOLID_rubberband_pen_whiteBindEVT_SIZE_on_size	EVT_PAINT	_on_paintEVT_CHAR_HOOK_on_key_down
EVT_KEY_UP
_on_key_upEVT_LEFT_DOWN_on_mouse_button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_MOUSE_AUX1_DOWNEVT_MOUSE_AUX1_UPEVT_MOUSE_AUX2_DOWNEVT_MOUSE_AUX2_UPEVT_MOUSE_AUX1_DCLICKEVT_MOUSE_AUX2_DCLICKEVT_MOUSEWHEEL_on_mouse_wheel
EVT_MOTION
_on_motionEVT_ENTER_WINDOW	_on_enterEVT_LEAVE_WINDOW	_on_leaveEVT_MOUSE_CAPTURE_CHANGED_on_capture_lostEVT_MOUSE_CAPTURE_LOSTSetBackgroundStyleBG_STYLE_PAINTSetBackgroundColourre  )r-   parentidrh  r}   r~   s         r    r,   z_FigureCanvasWxBase.__init__  s    	!$///49dk.3441
$A???i1oo

7dQJJJ $%'VGQ8N%O%O"%'VGQ8I%J%J"		"+t}---		",///		""D$5666		"-111		""D$9:::		"$d&;<<<		".$"7888		"$d&;<<<		"&(=>>>		""D$9:::		"#T%:;;;		"%t'<===		"/4#8999		"($*?@@@		"&(=>>>		"($*?@@@		"&(=>>>		"*D,ABBB		"*D,ABBB		"#T%9:::		"-111		"%t~666		"%t~666		".0EFFF		"+T-BCCC 1222  *****r"   c                    t          j                    }|                    | 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	SetBitmaprj   TheClipboardIsOpenedOpenSetDataFlushClose)r-   eventbmp_objopen_successs       r    Copy_to_Clipboardz%_FigureCanvasWxBase.Copy_to_Clipboard  s    %''$+&&&'')) 	(?//11L (''000%%'''%%'''''	( 	(( (r"   c                     t                               dt          |                      d| _        |                     d           d S )Nz%s - draw_idle()FeraseBackground)rc   rd   re   rk  Refreshr5   s    r    	draw_idlez_FigureCanvasWxBase.draw_idle  s@    

%tDzz222 	U+++++r"   c                 ,    t          j                     d S r&   )r   Yieldr5   s    r    flush_eventsz _FigureCanvasWxBase.flush_events  s    





r"   r   c                    t          | d          rt          d          t          j        | t          j                  }|dk    r`|                    t          |dz            d           |                     t          j        | j	        |
                                           t          j                    | _        | j                                         |                                 d S )N_event_loopzEvent loop already runningr  r   i  T)oneShot)hasattrRuntimeErrorr   r'   ID_ANYr2   r   rq  	EVT_TIMERstop_event_loopGetIdGUIEventLoopr  Runr8   )r-   timeouttimers      r    start_event_loopz$_FigureCanvasWxBase.start_event_loop  s    4'' 	=;<<<"),,,Q;;KKGdN++TK:::IIblD$8U[[]]IKKK?,,

r"   c                     t          | d          r6| j                                        r| j                                         | `d S d S )Nr  )r  r  r;   Exitr-   r  s     r    r  z#_FigureCanvasWxBase.stop_event_loop)  sV    4'' 	!))++ ( %%'''   	! 	!r"   c                    |                                  }|                                 }t          |                                          }g }g }d}t	          |          D ]g\  }\  }}	d                    d |	D                       }
|                    |	d                    | d|
 d|
 }||	v r|}|                    |           hd                    |          }|||fS )z3Return the wildcard string for the filesave dialog.r   ;c                     g | ]}d |z  S )z*.%sro   )r$  exts     r    r%  z@_FigureCanvasWxBase._get_imagesave_wildcards.<locals>.<listcomp>9  s     > > >## > > >r"   z (z)||)get_default_filetypeget_supported_filetypes_groupedsorteditems	enumeratejoinappend)r-   default_filetype	filetypessorted_filetypes	wildcards
extensionsfilter_indexirE   extsext_listwildcards               r    _get_imagesave_wildcardsz,_FigureCanvasWxBase._get_imagesave_wildcards0  s   446688::	!)//"3"344	
()9:: 	' 	'OA|dxx > > > > >??Hd1g&&&88(88h88H4'' X&&&&HHY''	*l22r"   c                    t                               dt          |                      | r|                                 sdS |st	          j        |           }t          j        dk    r\t          | j        j	        
                                t                    r+| j                                                                        n| j        }|                    |dd           | j        mt#          t$          | j                  \  }}}}||||f||||f||||f||||fg}|                    || j                   |                    || j                   dS dS )zu
        Update the displayed image on the GUI canvas, using the supplied
        wx.PaintDC device context.
        z%s - gui_repaint()N	__WXMSW__r   )rc   rd   re   IsShownOnScreenr   ClientDCPlatform
isinstancerh  canvasget_rendererrK   rj   ConvertToImageConvertToBitmapr   rl  rf  r   DrawLineListrp  rn  )r-   drawDCbmpx0y0x1y1rects           r    gui_repaintz_FigureCanvasWxBase.gui_repaintB  sj   
 	

'd444  	--// 	F 	'[&&F +,, !3!@!@!B!BJOO - {))++;;=== K 	 	#q!$$$ , (=>>NBBR$r2r2&6R$r2r2&68Dd&@AAAd&@AAAAA -,r"   zWindows bitmapJPEGPCXzPortable Network GraphicszTagged Image Format FilezX pixmap)r  jpegjpgpcxpngtiftiffxpmc                    t                               dt          |                      t          j        |           }| j        s|                     |           n|                     |           |                                 dS )z$Called when wxPaintEvt is generated.z%s - _on_paint()r  N)	rc   rd   re   r   PaintDCrk  drawr  Destroy)r-   r  r  s      r    ru  z_FigureCanvasWxBase._on_painti  sz    

%tDzz222D!!} 	,IIVI$$$$F+++r"   c                    t                               dt          |                      |                                                                 }|r|                    |           }|r2|r0|j        s)|j        t          j	        z  s| 
                                }n;|                                 }|                    | 
                                           t          | dd          r|| j        | j        fk    rdS |\  | _        | _        d| _        | j        dk    s| j        dk    rdS t          j        | j        | j                  | _        | j        j        }| j        |z  }| j        |z  }| j                            ||d           |                     d           t/          d|                                            |                                  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 - _on_size()_widthNFr   )forwardr  resize_event)rc   rd   re   	GetParentGetSizerGetItem
ProportionFlagr   EXPAND
GetMinSizeGetClientSizeIncTogetattrr  _heightrk  r   rj   rh  rl   set_size_inchesr  r   _processr  )r-   r  szsir   dpivalwinchhinchs           r    rs  z_FigureCanvasWxBase._on_sizes  s    	

$d4jj111^^&&(( 	"D!!B 	*" 	*R] 	*27RY3F 	*??$$DD %%''DJJt(()))44(( 	T\222$(!T\;!t|q00F iT\::f$v%##E5%#@@@
 	U+++ND))22444r"   excludec                    dt           j        t           j        fdt           j        t           j        fdt           j        t           j        fg}| #|                                 fd|D             S d |D             S )Nctrlr7  r6  c                 2    g | ]\  }}}|z  r|k    |S ro   ro   )r$  rE   modr   r  	modifierss       r    r%  z6_FigureCanvasWxBase._mpl_modifiers.<locals>.<listcomp>  s;     ; ; ;^T3 3;+2c>> +9>>r"   c                 B    g | ]\  }}}t          j        |          |S ro   )r   GetKeyState)r$  rE   r  r   s       r    r%  z6_FigureCanvasWxBase._mpl_modifiers.<locals>.<listcomp>  s<     , , ,^T3~c**,D , , ,r"   )r   MOD_CONTROLWXK_CONTROLMOD_ALTWXK_ALT	MOD_SHIFT	WXK_SHIFTGetModifiers)r  r  	mod_tabler  s    ` @r    _mpl_modifiersz"_FigureCanvasWxBase._mpl_modifiers  s     R^R^4BJ
+blBL1
	
 **,,I; ; ; ; ;y ; ; ; ;, ,y , , , ,r"   c                 x   |j         }|| j        v r| j        |         }n@|dk     r8t          |          }|                                s|                                }nd S |                     ||          }d|v r)|                                r|                    d           d                    g ||          S )N   r  r6  r^  )	KeyCodekeyvaldchr	ShiftDownlowerr   isupperremover  )r-   r  keyvalr   modss        r    _get_keyz_FigureCanvasWxBase._get_key  s    T\!!,v&CCc\\f++C ??$$ "iikk4""5&"99d??s{{}}?KK   xx$%%%r"   c                     |7t          j                    }|                     |j        |j                  \  }}n|j        |j        }}|| j        j        j        |z
  fS )zv
        Convert a wx position, defaulting to the current cursor position, to
        Matplotlib coordinates.
        )r   GetMouseStateScreenToClientXYrh  r   ri   )r-   posr   r   s       r    _mpl_coordsz_FigureCanvasWxBase._mpl_coords  s[    
 ;"$$C&&suce44DAqq5#%qA$+")A---r"   c                     t          d| |                     |          g|                                 R d|i                                 | r|                                 dS dS )zCapture key press.key_press_eventguiEventNr   r,  r3  r	  Skipr  s     r    rw  z _FigureCanvasWxBase._on_key_down  sw    "Du%%	!(,(8(8(:(:	! 	! 	!	! 	!!) 	JJLLLLL	 	r"   c                     t          d| |                     |          g|                                 R d|i                                 | r|                                 dS dS )zRelease key.key_release_eventr6  Nr7  r  s     r    ry  z_FigureCanvasWxBase._on_key_up  sw    $du%%	!(,(8(8(:(:	! 	! 	!	! 	!!) 	JJLLLLL	 	r"   c                    t          j        t          j        t          j        t           j        t          j        t           j        t          j        t           j	        t          j
        t           j        t          j        t           j        t          j        t           j        t          j        t           j        i|                    }|                     |           |                                  d S )N)cursor)r   Cursorr   check_getitemr   MOVECURSOR_HANDHANDPOINTERCURSOR_ARROWSELECT_REGIONCURSOR_CROSSWAITCURSOR_WAITRESIZE_HORIZONTALCURSOR_SIZEWERESIZE_VERTICALCURSOR_SIZENS	SetCursorr  )r-   r<  s     r    
set_cursorz_FigureCanvasWxBase.set_cursor  s    4-L".L".OR_!2?L".%r'7#R%5/
      	vr"   Tc                     |                                  r|                                  |r|                                  dS dS )zControl wx mouse capture.N)
HasCaptureReleaseMouseCaptureMouse)r-   captures     r    _set_capturez _FigureCanvasWxBase._set_capture  sP    ?? 	  	 	  	 r"   c                 0    |                      d           dS )zCapture changed or lostFN)rS  r  s     r    r  z$_FigureCanvasWxBase._on_capture_lost  s    %     r"   c           
         |                                  |                     |                                p|                                           |                     |          \  }}t
          j        t          j        t
          j	        t          j
        t
          j        t          j        t
          j        t          j        t
          j        t          j        i}|                                }|                    ||          }|                     |          }|                                r*t)          d| |||||                                           dS |                                r+t)          d| |||d||                                           dS |                                r*t)          d| |||||                                           dS dS )Start measuring on an axis.button_press_eventr  r6  T)dblclickr  r6  button_release_eventN)r8  rS  
ButtonDownButtonDClickr3  r   MOUSE_BTN_LEFTr   LEFTMOUSE_BTN_MIDDLEMIDDLEMOUSE_BTN_RIGHTRIGHTMOUSE_BTN_AUX1BACKMOUSE_BTN_AUX2FORWARD	GetButtonr   r   r   r	  ButtonUp)r-   r  r   r   
button_mapbuttonr  s          r    r{  z$_FigureCanvasWxBase._on_mouse_button  s   

%**,,D0B0B0D0DEEE&&1{/!3 1{/{2

 ""//''..	 		G+T1a!*U< < <<DHJJJJJ!! 	G+T1a $	 %' ' ''/xzzzzz^^ 	G-tQ6!*U< < <<DHJJJJJ	G 	Gr"   c           
         |                      |          \  }}|j        |j        z  |j        z  }|                                 t
          j        dk    r/t          | d          sd| _        n| j        r	d| _        dS d| _        t          d| |||| 
                    |          |                                           dS )z3Translate mouse wheel events into matplotlib events	__WXMAC___skipwheeleventTFNscroll_event)stepr  r6  )r3  LinesPerActionWheelRotation
WheelDeltar8  r   r  r  rm  r   r   r	  )r-   r  r   r   ro  s        r    r  z#_FigureCanvasWxBase._on_mouse_wheel  s    &&1#e&99E<LL

;+%%4!233 ,'+$$% ,',$'+$>4AD!0077!	# 	# 	##+8:::::r"   c                     |                                  t          d| g|                     |          R |                     |          |d                                 dS )rV  motion_notify_eventrX  N)r8  r   r3  r   r	  r  s     r    r  z_FigureCanvasWxBase._on_motion$  sk    

($ 	#$$U++	# 	#!0077!	# 	# 	# $,8:::::r"   c                     |                                  t          d| g|                     |          R |                                 |d                                 dS )zMouse has entered the window.figure_enter_eventrX  Nr8  r   r3  r   r	  r  s     r    r  z_FigureCanvasWxBase._on_enter,  i    

*D 	&''..	& 	& $ 3 3 5 5$	& 	& 	& '/hjjjjjr"   c                     |                                  t          d| g|                     |          R |                                 |d                                 dS )zMouse has left the window.figure_leave_eventrX  Nrw  r  s     r    r  z_FigureCanvasWxBase._on_leave4  rx  r"   r&   )r   T)_r=   r>   r?   r@   required_interactive_frameworkr$   
_timer_clsr   classpropertymanager_classr   r  r  r  WXK_CAPITAL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  ru  rs  r   r   r,  r3  rw  ry  rM  rS  r  r{  r  r  r  r  ro   r"   r    r0  r0    sn         &*"J&D&'B'BCCM:
	:
g: 	
E: 		:
 	V: 		4: 	g: 	V: 	x: 		4: 		4: 		4: 		4: 		4: 		4:  		4!:" 		4#: :$ 		4%:& 	
E':( 	
E):* 	
E+:, 	}-:. 	g/:0 	[1:2 	w3:4 	x5:6 	x7:8 	V9:: 	
E;:< 	x=:> 	?:@ 	A:B 	C:D 	E: : :F 	G:H 	I:J 	K:L 	M:N 	O:P 	Q:R 	S:T 	3U:V 	W:X 	Y:Z 	c[:\ 	u]:^ 	W_:` 	$a:b 	Wc:d 	Fe:f 	Fg: :h 	h


F
5
h
hs: :Gx1+ 1+ 1+ 1+f
( 
( 
( 
(, , ,     ! ! ! !3 3 3$B B B B6


$
*)*
 
 
I  + + +Z ,d , , , , \,& & &". . . .             ! ! !G G G4. . .(. . .1 1 11 1 1 1 1r"   r0  c                   ,   e Zd ZddZd Z ej        eej                  Z	 ej        eej
                  xZZ ej        eej                  Z ej        eej                  Z ej        eej                  xZZ ej        eej                  ZdS )FigureCanvasWxNc                    t                               dt          |                      t          | j        | j        j                  | _        | j                            | 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)rc   rd   re   rK   rj   rh  rl   r  r  rk  r  )r-   r  s     r    r  zFigureCanvasWx.draw@  sq    
 	

=$t**---"4;@@''''''''r"   c                 "   t          j        t          j        | j        j        j                  t          j        | j        j        j                            }| j                            t          || j        j
                             t          j        |          r|                                n|}|                    ||          st          d|           | j        r|                                  | r|                                  d S d S )NzCould not save figure to )r   r   r   rg  rh  r   rg   ri   r  rK   rl   r   is_writable_file_liker  SaveFiler  rk  r  )r-   filetypefilenamerj   	saved_objs        r    _print_imagezFigureCanvasWx._print_imageK  s    49T[%5%;<<9T[%5%<==? ?FDKO<<===3H==!V**,,,  	 !!(H55 	GE8EEFFF
 = 	IIKKK  	LLNNNNN	 	r"   r&   )r=   r>   r?   r  r  	functoolspartialmethodr   BITMAP_TYPE_BMP	print_bmpBITMAP_TYPE_JPEG
print_jpeg	print_jpgBITMAP_TYPE_PCX	print_pcxBITMAP_TYPE_PNG	print_pngBITMAP_TYPE_TIF
print_tiff	print_tifBITMAP_TYPE_XPM	print_xpmro   r"   r    r  r  =  s        	( 	( 	( 	(  ( (	'b(* *I4Y4b)+ + +J'	'b(* *I'	'b(* *I4Y4b(* * *J'	'b(* *IIIr"   r  c                   $     e Zd Z fdZd Z xZS )FigureFrameWxc                B   t           j        dk    rt           j        }nt          j        dd          }t	                                          d d|           t                              dt          |                      t          |             || d|          | _
        t          | j
        ||           }| j
        j        j        }||                     |           t          t           j        |j        j                  \  }}| j
                            t          j        ||                     | j
                            d           | j
                                         |                                  |                     t           j        | j                   d S )Nr     )r  r  r2  rb   )r   r   )r   r  DefaultPositionPointr+   r,   rc   rd   re   _set_frame_iconr  r2  managertoolbar
SetToolBarrf  r   rg  r   r   SetInitialSizerj  
SetMinSizeSetFocusFitrq  	EVT_CLOSE	_on_close)
r-   numfigcanvas_classr2  r  r  r}   r~   r0   s
            r    r,   zFigureFrameWx.__init__n  sR    ;+%%$CC(2r""C555

$d4jj111"l4S11!$+sD99+%-OOG$$$ 49chm,,1""271a==111v&&&


		",/////r"   c                    t                               dt          |                      t          d| j                                                   | j                                         d | j        j        _        t          j
        | j        j                   	 | j                            | j        j        j                   n# t          $ r Y nw xY w|                                 d S )Nz%s - on_close()close_event)rc   rd   re   r   r  r	  r  r  framer   destroympl_disconnectr  _id_dragAttributeErrorr8  r  s     r    r  zFigureFrameWx._on_close  s    

$d4jj111=$+..77999##%%% %)!DK'(((	K&&t{':'CDDDD 	 	 	D	 	

s   )C 
CC)r=   r>   r?   r,   r  rA   rB   s   @r    r  r  m  sG        0 0 0 0 0>      r"   r  c                   r     e Zd ZdZ fdZed             Zed             Zd Zd Z	d Z
d Zd	 Zd
 Z xZS )r2  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                     t                               dt          |                      |x| _        | _        t                                          ||           d S )Nrb   )rc   rd   re   r  windowr+   r,   )r-   r  r  r  r0   s       r    r,   zFigureManagerWx.__init__  sL    

$d4jj111#((
T[%%%%%r"   c                    t          j                    pt                      }t          |||          }|j        j        }t          j                    r2|j        	                                 |j        
                                 |S )N)r  )r   GetAppr!   r  r  r  mplis_interactiver  Showr  )r3  r  rh  r  r   r  r  s          r    create_with_canvasz"FigureManagerWx.create_with_canvas  st     	.}c6EEE-' 	&M   M##%%%r"   c                     t           j                                        s+t          j                    }||                                 d S d S d S r&   )r   r   IsMainLoopRunningr  MainLoop)r3  r   s     r    start_main_loopzFigureManagerWx.start_main_loop  sO    v'')) 	!IKKE      	! 	!  r"   c                     | j                                          | j                                         t          j        d         r| j                                          d S d S )Nzfigure.raise_window)r  r  r  r  r  rcParamsRaiser5   s    r    showzFigureManagerWx.show  s\    
<-. 	J	 	r"   c                     t                               dt          |                      | j        }|rt	          j        |j                   d S d S )Nz%s - destroy())rc   rd   re   r  r   	CallAfterr  )r-   r.   r  s      r    r  zFigureManagerWx.destroy  sP    

#T$ZZ000
 	& L%%%%%	& 	&r"   c                 j    | j                             | j                                                     d S r&   )r  ShowFullScreenIsFullScreenr5   s    r    full_screen_togglez"FigureManagerWx.full_screen_toggle  s/    
!!dj&=&=&?&?"?@@@@@r"   c                 4    | j                                         S r&   )r  GetTitler5   s    r    get_window_titlez FigureManagerWx.get_window_title  s    {##%%%r"   c                 :    | j                             |           d S r&   )r  SetTitle)r-   titles     r    set_window_titlez FigureManagerWx.set_window_title  s    U#####r"   c           
          | j                             | j                             t          j        t          j        |          t          j        |                                         d S r&   )r  SetSizeClientToWindowSizer   rj  r   rg  )r-   rg   ri   s      r    resizezFigureManagerWx.resize  sc     	DK::27Iedi//<1 <1 2 2 	3 	3 	3 	3 	3r"   )r=   r>   r?   r@   r,   classmethodr  r  r  r  r  r  r  r  rA   rB   s   @r    r2  r2    s         & & & & &
   [ ! ! [!  & & &A A A& & &$ $ $3 3 3 3 3 3 3r"   r2  c                 j    t          j        t          t          j        d|                               S )z\
    Load a wx.Bitmap from a file in the "images" directory of the Matplotlib
    data.
    images)r   r   strr   _get_data_path)r  s    r    _load_bitmapr    s)    
 9S-hAABBCCCr"   c                     t          j                    }dD ]O}t          j        t          |                    }|                                s d S |                    |           P|                     |           d S )N)zmatplotlib.pngzmatplotlib_large.png)r   
IconBundleIconr  IsOkAddIconSetIcons)r  bundleimageicons       r    r  r    sw    ]__F;  w|E**++yy{{ 	FFt	NN6r"   c                   z     e Zd Zdej        ddZed             Zd Z fdZ	 fdZ
d Zd	 Zd
 Zd Zd Z xZS )NavigationToolbar2WxTr   c          
      ^   t           j                            | |                                d|           dt           j        v r|                     d           i | _        | j        D ]\  }}}}||                                  | 	                    d| 
                    | d          t           j        |||dv rt           j        nt           j                  j        | j        |<   |                     t           j        t#          | |          | j        |                    || _        | j        rS|                                  t          j        | t           j                  | _        |                     | j                   |                                  t3          j        | |           d S )	Nr  r  wxMac)   r!  z.png)PanZoom)rj   bmpDisabledlabel	shortHelpkindr  )r   ToolBarr,   r  PlatformInfoSetToolBitmapSizewx_ids	toolitemsAddSeparatorAddTool_iconr	  
ITEM_CHECKITEM_NORMALIdrq  EVT_TOOLr  _coordinatesAddStretchableSpace
StaticTextALIGN_RIGHT_label_text
AddControlRealizer   )r-   r  coordinatesr   texttooltip_text
image_filecallbacks           r    r,   zNavigationToolbar2Wx.__init__  s   

D&"2"2"4"4bFFFbo%%""8,,,8< 	, 	,4D,
H|!!###::&9&9&9:: ",+/?+B+B"--!~  0 0  K IIbk74#:#:T*  , , , , ( 	.$$&&&!}THHHDOOD,---#D&11111r"   c                 .   t           j                            t          j        d|                     }t          j        |                    d                    }	 t          j	        
                                                                }n# t          $ r t          j	                            t          j                  }t          j	                            t          j                  }d|j        z  d|j        z  z   d|j        z  z   dz  }d|j        z  d|j        z  z   d|j        z  z   dz  }||z
  dk    }Y nw xY w|rt          j	                            t          j                  }|dd	d
f         dk                        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  RGBAgA`"?gbX9?gv/?r#  g?.Nr   r   r  )axisr   )PILImageopenr   r  nparrayconvertr   SystemSettingsGetAppearanceIsDarkr  	GetColourSYS_COLOUR_WINDOWSYS_COLOUR_WINDOWTEXTredgreenblueallRedGreenBluer   r   r   r   )	rE   pilimgr  darkbgr  bg_lumfg_lum
black_masks	            r    r/  zNavigationToolbar2Wx._icon  s     4Xt D DEE//00		($2244;;==DD 	( 	( 	(",,R-ABBB",,R-EFFBRVmdRXo5rwF#MFRVmdRXo5rwF#MFF?R'DDD	(  	F",,R-EFFBRaR.A-222;;J%'VVXXrxxzz27799$EE*bqb.!y''KNEKNEMMOO= = 	=s   0B B+D:9D:c                     d| j         v r/|                     | j         d         | j        j        dk               d| j         v r1|                     | j         d         | j        j        dk               d S d S )Nr"  PANr#  ZOOM)r+  
ToggleToolmoderE   r5   s    r    _update_buttons_checkedz,NavigationToolbar2Wx._update_buttons_checked5  sr    DKOODK.	%0GHHHT[  OODK/61IJJJJJ ! r"   c                 \     t                      j        |  |                                  d S r&   )r+   zoomra  r-   r.   r0   s     r    rc  zNavigationToolbar2Wx.zoom;  s.    d$$&&&&&r"   c                 \     t                      j        |  |                                  d S r&   )r+   panra  rd  s     r    rf  zNavigationToolbar2Wx.pan?  s.    T$$&&&&&r"   c           	         | j                                         \  }}}| j                                         }t          j        | j                                         dt          j        d         ||t          j        t          j	        z            }|
                    |           |                                t          j        k    rt          j        |                                          }t                               dt%          |           |           ||                                         }|j        dd          }	|	| j                                         v r%||	k    rt                               d|	||	           |	}t          j        d         r!t/          |j                  t          j        d<   	 | j         j                            ||           d S # t6          $ rn}
t          j        | j                                         t/          |
          d          }|                                 |                                 Y d }
~
d S d }
~
ww xY 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)formatzMatplotlib error)r  messagecaption)r  r  get_default_filenamer   
FileDialogr  r  r  FD_SAVEFD_OVERWRITE_PROMPTSetFilterIndex	ShowModalID_OKpathlibr   GetPathrc   rd   re   GetFilterIndexsuffixget_supported_filetypeswarningr  r  rh  savefig	ExceptionMessageDialogr  )r-   r.   r  r  r  default_filedialogr   fmtr  es              r    save_figurez NavigationToolbar2Wx.save_figureC  s&   (,(L(L(N(N%	4{7799K!!##^L,-|YJ//1 1 	l+++))< 0 011DJJ0$t**dCCCv,,../C+abb/Cdk99;;;;s

  < #s, , , |/0 E474D4D01!"**4*<<<<< ! ! !);0022CFF.0 0 0   """         !# *)s   2!G 
IA#IIc                     | j         j        j        j        }|||z
  |||z
  f| j         _        | j                                          d S r&   )r  rh  r   ri   rl  r  )r-   r  r  r  r  r  ri   s          r    draw_rubberbandz$NavigationToolbar2Wx.draw_rubberbandd  sG    #(/(*FRKVb['I$r"   c                 P    d | j         _        | j                                          d S r&   )r  rl  r  r5   s    r    remove_rubberbandz&NavigationToolbar2Wx.remove_rubberbandi  s&    '+$r"   c                 L    | j         r| j                            |           d S d S r&   )r4  r8  SetLabelr-   ry   s     r    set_messagez NavigationToolbar2Wx.set_messagem  s4     	)%%a(((((	) 	)r"   c                    | j         j        dk    }| j         j        t          | j                   dz
  k     }d| j        v r!|                     | j        d         |           d| j        v r#|                     | j        d         |           d S d S )Nr   r   BackForward)
_nav_stack_poslenr+  
EnableTool)r-   can_backwardcan_forwards      r    set_history_buttonsz(NavigationToolbar2Wx.set_history_buttonsq  s    +a/o*S-A-AA-EET[  OODK/>>>##OODK	2K@@@@@ $#r"   r{  )r=   r>   r?   r   	TB_BOTTOMr,   r   r/  ra  rc  rf  r  r  r  r  r  rA   rB   s   @r    r  r    s        2", 2 2 2 2 2@ = = \=4K K K' ' ' ' '' ' ' ' '! ! !B  
  ) ) )A A A A A A Ar"   r  c                   B    e Zd Zdej        fdZd Zd Zd Zd Z	d Z
dS )	ToolbarWxNc                 x   ||j                                         }t          j        | |           t          j                            | |d|           |                                 | _        t	          j        | t          j	                  | _
        |                     | j
                   i | _        i | _        d S )Nr  r  )r  r  r   r,   r   r(  r5  _spacer6  r7  r8  r9  
_toolitems_groups)r-   toolmanagerr  r   s       r    r,   zToolbarWx.__init__}  s    > '1133F"4555

D&"E:::..00=R^DDD()))r"   c                 P      f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                 F    g | ]}                     |          k    |S ro   )GetToolByPos)r$  r2  r-   tools     r    r%  z+ToolbarWx._get_tool_pos.<locals>.<listcomp>  s;     3 3 3$$S))T11 111r"   )range
ToolsCount)r-   r  r2  s   `` r    _get_tool_poszToolbarWx._get_tool_pos  sA    3 3 3 3 3uT_55 3 3 3
r"   c           	          | j         vr5                                           j                             j         |<    j         |         }d t	           j        t           j                            D             }|dk    rC||d         k    rdn3                     ||                    |          dz
                     dz   }	n                     |          dz   }	|	|z   }
|r\t          
                    |          }|st          j        nt          j        }                     |
d|t          j        ||pd          }nk                               d         dz   df}|rt          j         d|          }nt          j         d|          }                     |
|          }                                   fd	}|r"                     t          j        ||           n |                    t          j        |            j                            g             j                                     ||f           d S )
Nc                 b    g | ],}|                                 |                                *|-S ro   )IsSeparatorIsStretchableSpace)r$  ts     r    r%  z*ToolbarWx.add_toolitem.<locals>.<listcomp>  sP     C C Ca==??C+,+?+?+A+AC C C Cr"   r   r   r   
   rd  r%  c                 2                                    d S r&   )trigger_tool)r  rE   r-   s    r    handlerz'ToolbarWx.add_toolitem.<locals>.handler  s    d#####r"   )r  InsertSeparatorr  r  rf  r  r  r  indexr  r/  r   r1  r0  
InsertToolr	  GetTextExtentToggleButtonButtonInsertControlr:  rq  r3  rz  r  
setdefaultr  )r-   rE   grouppositionr>  descriptiontogglesepsepsstartidxr  r'  r  r   r5  r  s   ``               r    add_toolitemzToolbarWx.add_toolitem  so    $$"&"6"6""4;//#1 #1DLl5!C C3t0%2H2HII C C C q== a..QQ,,T$**S//A2E-FGG!K E &&s++a/Eh 	@&,,Z88C)/B2>>R]D??3D#r}d#.#4"6 6DD &&t,,Q/"4b9D ?/$DtDDD)D"d>>>%%c7$%??D	$ 	$ 	$ 	$ 	$ 	$  	4IIbk7D1111LL)7333""4,,,$$dG_55555r"   c                    || j         vrd S | j         |         D ]\\  }}|                                s|                     |j        |           5|                                                    |           ]|                                  d S r&   )r  	IsControlr_  r2  
GetControlSetValuer  )r-   rE   toggledr  r  s        r    toggle_toolitemzToolbarWx.toggle_toolitem  s    t&&F!_T2 	4 	4MD'>>## 41111!!**73333r"   c                 p    | j         |         D ]\  }}|                     |j                    | j         |= d S r&   )r  
DeleteToolr2  )r-   rE   r  r  s       r    remove_toolitemzToolbarWx.remove_toolitem  sC    !_T2 	% 	%MD'OODG$$$$OD!!!r"   c                 :    | j                             |           d S r&   )r8  r  r  s     r    r  zToolbarWx.set_message  s    !!!$$$$$r"   )r=   r>   r?   r   r  r,   r  r  r  r  r  ro   r"   r    r  r  |  s{        +/r| 	 	 	 		 	 	+6 +6 +6Z  " " "
% % % % %r"   r  c                       e Zd Zd ZdS )ConfigureSubplotsWxc                 :    t                               |            d S r&   )r  configure_subplotsr-   r.   s     r    triggerzConfigureSubplotsWx.trigger  s    //55555r"   Nr=   r>   r?   r  ro   r"   r    r  r    s#        6 6 6 6 6r"   r  c                       e Zd Zd ZdS )SaveFigureWxc                 ^    t                               |                                            d S r&   )r  r  "_make_classic_style_pseudo_toolbarr  s     r    r  zSaveFigureWx.trigger  s3    ((3355	7 	7 	7 	7 	7r"   Nr  ro   r"   r    r  r    s#        7 7 7 7 7r"   r  c                       e Zd Zd Zd ZdS )RubberbandWxc                 h    t                               |                                 d ||||           d S r&   )r  r  r  )r-   r  r  r  r  s        r    r  zRubberbandWx.draw_rubberband  sB    ,,3355tRR	M 	M 	M 	M 	Mr"   c                 ^    t                               |                                            d S r&   )r  r  r  r5   s    r    r  zRubberbandWx.remove_rubberband  s3    ..3355	7 	7 	7 	7 	7r"   N)r=   r>   r?   r  r  ro   r"   r    r  r    s5        M M M7 7 7 7 7r"   r  c                   L     e Zd ZdZdgZg dZ fdZd Zed             Z	 xZ
S )_HelpDialogN)Action	ShortcutsDescription)rL      rN   c                 P   t                                          |dt          j        t          j        z             t          j        t          j                  }t          j        dddd          }|                                 	                                }t          | j        |z             D ]~\  }}t          || j                  D ]c\  }}	t          j        | |          }
|dk    r|
                    |           |
                    |	           |                    |
ddd           d|                    |dt          j        d           t          j        | t          j                  }|                    |dt          j        t          j        z  d           |                     |           |                    |            |                                  |                     t          j        | j                   |                    t          j        | j                   d S )NHelp)r  r   r   r         r  )r+   r,   r   DEFAULT_DIALOG_STYLERESIZE_BORDERBoxSizerVERTICALFlexGridSizerGetFontMakeBoldr  headerszipwidthsr6  rv   WrapAddALLr  rq  ALIGN_CENTER_HORIZONTALSetSizerr  Layoutrq  r  r  
EVT_BUTTON)r-   r  help_entriessizer
grid_sizerrT   rrowcolrg   r%  okr0   s               r    r,   z_HelpDialog.__init__  s   v!69II 	 	K 	K 	K BK((%aAq11
||~~&&((| ;<< 	/ 	/FAs #C 5 5 / /ed#66666MM$'''

5!!!uaA..../ 			*a+++YtRX&&		"a3bf<a@@@e		$		",///
t~.....r"   c                 n    d t           _        |                                  |                                 d S r&   )r  	_instanceDestroyLaterr8  r  s     r    r  z_HelpDialog._on_close	  s-     $

r"   c                     | j         r| j                                          d S  | ||          | _         | j                                          d S r&   )r  r  r  )r3  r  r  s      r    r  z_HelpDialog.show  sT     = 	M!!!FFL11r"   )r=   r>   r?   r  r  r  r,   r  r  r  rA   rB   s   @r    r  r    sx        I56G__F/ / / / /2  
   [    r"   r  c                       e Zd Zd ZdS )HelpWxc                     t                               | j        j                                        |                                            d S r&   )r  r  rh  r  GetTopLevelParent_get_help_entriesr  s     r    r  zHelpWx.trigger  sF    +==??//11	3 	3 	3 	3 	3r"   Nr  ro   r"   r    r  r    s#        3 3 3 3 3r"   r  c                       e Zd Zd ZdS )ToolCopyToClipboardWxc                    | j         j        s| j                                          | j         j                                        rt
          j                                        sd S 	 t
          j                            t          j	        | j         j                             t
          j        
                                 d S # t
          j        
                                 w xY wr&   )r  rk  r  rj   r  r   r  r  r  r  r  )r-   r.   r/   s      r    r  zToolCopyToClipboardWx.trigger!  s    {# 	K{!&&(( 	0D0D0F0F 	F	$O##B$78J$K$KLLLO!!#####BO!!####s   %;C    C Nr  ro   r"   r    r  r    s#        $ $ $ $ $r"   r  c                   $    e Zd ZeZeZej        ZdS )
_BackendWxN)	r=   r>   r?   r  FigureCanvasr2  FigureManagerr  mainloopro   r"   r    r  r  0  s         !L#M.HHHr"   r  )Mr@   r  loggingr   rr  r  r-  numpyrF  	PIL.ImagerC  
matplotlibr  matplotlib.backend_basesr   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   matplotlib._pylab_helpersr   matplotlib.pathr   matplotlib.transformsr   r   	getLoggerr=   rc   r   	lru_cacher!   r$   
deprecatedrK   r   ri  r0  r  Framer  r2  r  r  r(  r  r  _register_tool_classConfigureSubplotsBaser  SaveFigureBaser  RubberbandBaser  Dialogr  ToolHelpBaser  ToolCopyToClipboardBaser  _toolbar2_class_toolmanager_toolbar_classexportr  ro   r"   r    <module>r     s           



             B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B 2 1 1 1 1 1 1 1 1 1 ) ) ) ) ) )             * * * * * * 				w""
  Q           i      & 	y,FH H HLC LC LC LC LC LC LC	H HLC^j9 j9 j9 j9 j9+ j9 j9 j9Zt1 t1 t1 t1 t1*BH t1 t1 t1n-* -* -* -* -*( -* -* -*`. . . . .BH . . .bF3 F3 F3 F3 F3' F3 F3 F3RD D D  ~A ~A ~A ~A ~A-rz ~A ~A ~AFT% T% T% T% T%!2: T% T% T%n $#$7886 6 6 6 6-= 6 6 986
 $#$7887 7 7 7 7=/ 7 7 987 $#$7887 7 7 7 7=/ 7 7 987* * * * *") * * *Z $#$7883 3 3 3 3]' 3 3 983 $#$788	$ 	$ 	$ 	$ 	$MA 	$ 	$ 98	$ #7 -6 * 
/ / / / / / / / / /r"   