
    G8cx                     d   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jL                  e'      Z(dZ)ejT                   G d	 d
             Z+ ejX                  d      d=d       Z- ej\                  d      d        Z/ G d de      Z0 ejX                  dddddd       G d de             Z1 G d de      Z2 G d dee%jf                        Z4 G d de4      Z5 G d  d!e%jl                        Z7 G d" d#e      Z8d$ Z9d% Z: G d& d'ee%jv                        Z< G d( d)ee%jv                        Z= ej|                  e4       G d* d+ej~                               Z@ ej|                  e4       G d, d-ej                               ZB ejX                  d.d/0       G d1 d2ej                               ZD ej|                  e4       G d3 d4ej                               ZF G d5 d6e%j                        ZH ej|                  e4       G d7 d8ej                               ZJ ej|                  e4       G d9 d:ej                               ZLe<e8_M        e=e8_N        ej                   G d; d<e             ZPy)>z
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                   N    e Zd Z  ej                  dd       ed             Zy)__getattr__3.5 )obj_typec                    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S N)r   MOVEwxCURSOR_HANDHANDPOINTERCURSOR_ARROWSELECT_REGIONCURSOR_CROSSWAITCURSOR_WAITRESIZE_HORIZONTALCURSOR_SIZEWERESIZE_VERTICALCURSOR_SIZENSselfs    @/usr/lib/python3/dist-packages/matplotlib/backends/backend_wx.py<lambda>z__getattr__.<lambda>,   so    bnnbnnrbnn!!2#3#3!1!1I     N)__name__
__module____qualname__r   
deprecatedpropertycursord r2   r0   r   r   *   s'    1odooeb1( < 3 Gr2   r   3.6c                     t        j                  || dt         j                  t         j                  z        }|j	                          |j                          y)z4Signal an error condition with a popup error dialog.zMatplotlib backend_wx error)parentmessagecaptionstyleN)r!   MessageDialogOKCENTRE	ShowModalDestroy)msgr<   dialogs      r0   error_msg_wxrG   7   sG     V&)&C$&EEBII$57F 
NNr2      c                  z    t        j                  d      } | j                  d       t        j                          | S )NFT)r!   AppSetExitOnFrameDeleter   _setup_new_guiappwxapps    r0   _create_wxapprO   D   s.    FF5ME	t$	Lr2   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        |   |i | y r   )r!   Timer_timer	_on_timerNotifysuper__init__)r/   argskwargs	__class__s      r0   rX   zTimerWx.__init__O   s2    hhj!^^$)&)r2   c                 d    | j                   j                  | j                  | j                         y r   )rT   Start	_interval_singler.   s    r0   _timer_startzTimerWx._timer_startT   s    $..$,,7r2   c                 8    | j                   j                          y r   )rT   Stopr.   s    r0   _timer_stopzTimerWx._timer_stopW   s    r2   c                 Z    | j                   j                         r| j                          y y r   )rT   	IsRunningr`   r.   s    r0   _timer_set_intervalzTimerWx._timer_set_intervalZ   s#    ;;  " #r2   )	r3   r4   r5   __doc__rX   r`   rc   rf   __classcell__r[   s   @r0   rQ   rQ   L   s    9*
8 r2   rQ   z2.0r!   backendz
the futurewxaggz7See the Matplotlib usage FAQ for more info on backends.)namer   removalalternativeaddendumc                   d    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 ej,                  d      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)italicrw   oblique)SansRomanScript
DecorativeModernCouriercourierc                     t         |           t        j                  dt	        |              |j                         | _        |j                         | _        || _	        i | _
        || _        d| _        y)z)Initialise a wxWindows renderer instance.%s - __init__()N)rW   rX   _logdebugtypeGetWidthwidth	GetHeightheightbitmapfontddpigc)r/   r   r   r[   s      r0   rX   zRendererWx.__init__   s[    

$d4j1__&
&&(
r2   c                      yNTr9   r.   s    r0   flipyzRendererWx.flipy       r2   r:   c                      yr   r9   r.   s    r0   offset_text_heightzRendererWx.offset_text_height   r   r2   c                 4   |rt        j                  |      }| j                  | j                         }n| j                  }|j                  }| j                  ||      }|j                  |t        j                         |j                  |      \  }}}	}
|||	fS r   )
r   
strip_mathr   new_gcgfx_ctxget_wx_fontSetFontr!   BLACKGetFullTextExtent)r/   spropismathr   r   fontwhdescentleadings              r0   get_text_width_height_descentz(RendererWx.get_text_width_height_descent   s       #A77?BB**4(bhh'!(!:!:1!=1gw!W}r2   c                 2    | j                   | j                  fS r   )r   r   r.   s    r0   get_canvas_width_heightz"RendererWx.get_canvas_width_height   s    zz4;;&&r2   c                    |j                         }||j                  }|j                  }|j                  |k7  rN||_        ||j	                          y |j                  |d   | j                  |d   z
  |d   z
  |d   |d          y y )Nr   rH         )get_clip_rectangleboundsr   _lastcliprect	ResetClipClipr   )r/   r   
new_boundsr   s       r0   handle_clip_rectanglez RendererWx.handle_clip_rectangle   s    **,
!#**J**  J.$.G!!!!#Z]![[:a=8:a=H']JqM; /r2   c                    | j                         }|j                  |      D ]  \  }}|t        j                  k(  r |j                  |  )|t        j
                  k(  r |j                  |  L|t        j                  k(  r |j                  |  o|t        j                  k(  r |j                  |  |t        j                  k(  s|j                           |S r   )
CreatePathiter_segmentsr   MOVETOMoveToPointLINETOAddLineToPointCURVE3AddQuadCurveToPointCURVE4AddCurveToPoint	CLOSEPOLYCloseSubpath)r   path	transformwxpathpointscodes         r0   convert_pathzRendererWx.convert_path   s    ##% ..y9 
	&LFDt{{""""F+$%%%v.$***F3$&&&/'##%
	& r2   c                    |j                          | j                  |       |j                  }|t               j	                  dd      j                  d| j                        z   }| j                  |||      }|E|j                  t        j                  |j                  |                   |j                  |       n|j                  |       |j                          y )Ng      ?g              )selectr   r   r   scale	translater   r   SetBrushr!   Brushget_wxcolourDrawPath
StrokePathunselect)r/   r   r   r   rgbFacer   r   s          r0   	draw_pathzRendererWx.draw_path   s    
		""2&**JS$'11#t{{CD	""7D)<RXXboog&>?@V$v&
r2   c           	         |j                         }||j                  \  }}}}	nd}d}| j                  }| j                  }	|j                  d d \  }
}t
        j                  j                  ||
|j                               }|j                          |j                  j                  |t        |      t        | j                  |z
        t        |      t        |	              |j                          y )Nr   r   )r   r   r   r   shaper!   BitmapFromBufferRGBAtobytesr   r   
DrawBitmapintr   )r/   r   xyimbboxlbr   r   rowscolsr   s                r0   
draw_imagezRendererWx.draw_image   s    $$&JAq!QAA

AAXXbq\
d))$bjjlC
		


fc!fc$++/.B!!fc1"g	/
r2   c	                    |rt        j                  |      }t        j                  dt	        |              |j                          | j                  |       |j                  }	| j                  ||      }
|j                  |j                               }|	j                  |
|       | j                  |||      \  }}}t        |      }t        ||z
        }|dk(  r|	j                  |||       n_t        j                   |      }|t        j"                  |      z  }|t        j$                  |      z  }|	j'                  |||z
  ||z
  |       |j)                          y )Nz%s - draw_text()r   )r   r   r   r   r   r   r   r   r   r   get_rgbr   r   r   DrawTextmathradianssincosDrawRotatedTextr   )r/   r   r   r   r   r   angler   mtextr   r   colorr   r   dradsxoyos                     r0   	draw_textzRendererWx.draw_text   s      #A

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

-e$44QfE1aFAJC<Q1%<<&DTXXd^#BTXXd^#B##Aq2vq2vt<
r2   c                     t         j                  dt        |              t        | j                  |       | _        | j
                  j                          | j
                  j                          | j
                  S )Nz%s - new_gc())r   r   r   GraphicsContextWxr   r   r   r   r.   s    r0   r   zRendererWx.new_gc  sM    

?DJ/#DKK6wwr2   c                    t         j                  dt        |              t        |      }| j                  j                  |      }||S | j                  |j                               }t        j                  t        |dz         | j                  j                  |j                         t        j                        | j                  |j                            | j                   |j#                                  x| j                  |<   }|S )z7Return a wx font.  Cache font instances for efficiency.z%s - get_wx_font()g      ?)	pointSizefamilyr?   weight)r   r   r   hashr   getpoints_to_pixelsget_size_in_pointsr!   Fontr   	fontnamesget_nameROMAN
fontangles	get_stylefontweights
get_weight)r/   r   r   keyr   sizes         r0   r   zRendererWx.get_wx_font   s    

'd44jzz~~c"K$$T%<%<%>? "$$*o>>%%dmmorxx@//$.."23##DOO$56	"8 	8

3$
 r2   c                 :    |t         dz  | j                  z  dz  z  S )Ng      R@)PIXELS_PER_INCHr   )r/   r   s     r0   r   zRendererWx.points_to_pixels1  s     4/$((:TABBr2   r   )FN)$r3   r4   r5   rg   r!   FONTWEIGHT_LIGHTFONTWEIGHT_NORMALFONTWEIGHT_BOLDr  FONTSTYLE_ITALICFONTSTYLE_NORMALFONTSTYLE_SLANTr  FONTFAMILY_SWISSFONTFAMILY_ROMANFONTFAMILY_SCRIPTFONTFAMILY_DECORATIVEFONTFAMILY_MODERNr  rX   r   r   r6   r   r   r   r   staticmethodr   r   r   r   r   r   r   rh   ri   s   @r0   rq   rq   _   s&   
R  R   	R   	R!!	
 	R!! 	R!! 	R 	R 	R 	b)) 	$$ 	"&& 	"&& 	B(( 	""  	##!" 	R''#$ 	##%K* %%%%%%J ##$$&&..&&''''I	 T__U "';   8"Cr2   rq   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 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                    t         |           t        j                  dt	        |       |       | j
                  j                  |d      \  }}|Lt        j                  |      }t        j                  j                  |      }d |_        ||f| j
                  |<   || _        || _        || _        t        j                  ddt        j                         | _        |j%                  | j"                         || _        y )Nz%s - __init__(): %s)NNr   rH   )rW   rX   r   r   r   _cacher   r!   MemoryDCGraphicsContextCreater   r   dcr   PenSOLID_penSetPenrenderer)r/   r   r)  r$  r   r[   s        r0   rX   zGraphicsContextWx.__init__N  s    

($t*f=kkoofl;G:V$B((//3G$(G!"$g+DKKFF7Arxx0	tyy! r2   c                     t         j                  dk(  r-| j                  j                  | j                         d| _        yy)z2Select the current bitmap into this wxDC instance.win32TN)sysplatformr$  SelectObjectr   
IsSelectedr.   s    r0   r   zGraphicsContextWx.selecta  s0    <<7"GG  -"DO #r2   c                     t         j                  dk(  r1| j                  j                  t        j
                         d| _        yy)z-Select a Null bitmap into this wxDC instance.r+  FN)r,  r-  r$  r.  r!   
NullBitmapr/  r.   s    r0   r   zGraphicsContextWx.unselectg  s0    <<7"GG  /#DO #r2   c                 ^   t         j                  dt        |              | j                          t        |   ||       | j                  j                  | j                  | j                                      | j                  j                  | j                         | j                          y )Nz%s - set_foreground())r   r   r   r   rW   set_foregroundr'  	SetColourr   r   r   r(  r   )r/   fgisRGBAr[   s      r0   r3  z GraphicsContextWx.set_foregroundm  sr     	

*DJ7r6*		D--dlln=>DII&r2   c                    t        |      }t        j                  dt        |              | j	                          d|cxk  rdk  rn nd}t
        |   |       t        | j                  j                  | j                              }|dk(  rd}| j                  j                  |       | j                  j                  | j                         | j                          y )Nz%s - set_linewidth()r   rH   )floatr   r   r   r   rW   set_linewidthr   r)  r   
_linewidthr'  SetWidthr   r(  r   )r/   r   lwr[   s      r0   r9  zGraphicsContextWx.set_linewidth|  s    !H

)4:6q919Aa //@A7B		2DII&r2   c                 X   t         j                  dt        |              | j                          t        |   |       | j                  j                  t        j                  | j                            | j                  j                  | j                         | j                          y )Nz%s - set_capstyle())r   r   r   r   rW   set_capstyler'  SetCapr   _capd	_capstyler   r(  r   )r/   csr[   s     r0   r>  zGraphicsContextWx.set_capstyle  sm    

($t*5R 		*00@ADII&r2   c                 X   t         j                  dt        |              | j                          t        |   |       | j                  j                  t        j                  | j                            | j                  j                  | j                         | j                          y )Nz%s - set_joinstyle())r   r   r   r   rW   set_joinstyler'  SetJoinr   _joind
_joinstyler   r(  r   )r/   jsr[   s     r0   rD  zGraphicsContextWx.set_joinstyle  sm    

)4:6b!		+224??CDDII&r2   c           	          t         j                  dt        |              t        j                  |D cg c]  }t        d|z         c} S c c}w )z&Convert a RGB(A) color to a wx.Colour.z%s - get_wx_color()   )r   r   r   r!   Colourr   )r/   r   r   s      r0   r   zGraphicsContextWx.get_wxcolour  s:    

($t*5yy7A3sQw<7887s   Ar   )r3   r4   r5   rg   r!   CAP_BUTTCAP_PROJECTING	CAP_ROUNDr@  
JOIN_BEVEL
JOIN_MITER
JOIN_ROUNDrF  weakrefWeakKeyDictionaryr   rX   r   r   r3  r9  r>  rD  r   rh   ri   s   @r0   r   r   6  s     [[,,ll$E }}}}}}&F 'W&&(F!&#$9r2   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
j0                  de
j2                  de
j4                  de
j6                  di e
j8                  de
j:                  de
j<                  de
j>                  de
j@                  de
jB                  de
jD                  de
jF                  de
jH                  de
jJ                  de
jL                  de
jN                  d e
jP                  d!e
jR                  d"e
jT                  d#e
jV                  d$e
jX                  d%i e
jZ                  d&e
j\                  d'e
j^                  d(e
j`                  d)e
jb                  d*e
jd                  d+e
jf                  d,e
jh                  d-e
jj                  d.e
jl                  d/e
jn                  d0e
jp                  d1e
jr                  de
jt                  d	e
jv                  d
e
jx                  de
jz                  de
j|                  d!e
j~                  d"e
j                  de
j                  d e
j                  de
j                  diZDdPd2ZEdPd3ZFd4 ZGd5 ZHdQd6ZIdPd7ZJd8 ZKdPd9ZLi eMj                  d:d;d;d<d=d>d>d?d@ZN fdAZOdB ZPdC ZQdD ZRdPdEZSdF ZTdG ZUdH ZVdRdIZWdJ ZXdK ZYdL ZZdM Z[dN Z\dO Z] xZ^S )S_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    r0   r1   z_FigureCanvasWxBase.<lambda>  s    ? r2   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+-*/decc           	          t        j                  | |       t        t        j                  | j
                  j                  j                        \  }}t        j                  j                  | ||t        j                  ||             t        j                  ||      | _        t        j                  dt        |       ||       d| _        d| _        t        j$                  ddt        j&                        | _        t        j$                  ddt        j*                        | _        | j/                  t        j0                  | j2                         | j/                  t        j4                  | j6                         | j/                  t        j8                  | j:                         | j/                  t        j<                  | j>                         | j/                  t        j@                  | jB                         | j/                  t        jD                  | jB                         | j/                  t        jF                  | jB                         | j/                  t        jH                  | jB                         | j/                  t        jJ                  | jB                         | j/                  t        jL                  | jB                         | j/                  t        jN                  | jB                         | j/                  t        jP                  | jB                         | j/                  t        jR                  | jB                         | j/                  t        jT                  | jB                         | j/                  t        jV                  | jB                         | j/                  t        jX                  | jB                         | j/                  t        jZ                  | jB                         | j/                  t        j\                  | jB                         | j/                  t        j^                  | jB                         | j/                  t        j`                  | jb                         | j/                  t        jd                  | jf                         | j/                  t        jh                  | jj                         | j/                  t        jl                  | jn                         | j/                  t        jp                  | jr                         | j/                  t        jt                  | jr                         | jw                  t        jx                         | j{                  t        j|                         y)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:%dFNr   rH   WHITE)?r   rX   mapr   ceilfigurer   r
  r!   PanelSizer   r   r   r   r   _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SetBackgroundColourr  )r/   r<   idr  r   r   s         r0   rX   z_FigureCanvasWxBase.__init__  sb    	!!$/499dkk..3341
$A?ii1o

7dQJ $%'VVGQ8N8N%O"%'VVGQ8I8I%J"		"++t}}-		",,/		"""D$5$56		"--1		"""D$9$9:		"$$d&;&;<		"..$"7"78		"$$d&;&;<		"&&(=(=>		"""D$9$9:		"##T%:%:;		"%%t'<'<=		"//4#8#89		"(($*?*?@		"&&(=(=>		"(($*?*?@		"&&(=(=>		"**D,A,AB		"**D,A,AB		"##T%9%9:		"--1		"%%t~~6		"%%t~~6		"..0E0EF		"++T-B-BC 1 12  *r2   c                    t        j                         }|j                  | j                         t         j                  j                         s}t         j                  j                         }|r\t         j                  j                  |       t         j                  j                          t         j                  j                          yyy)z*Copy bitmap of canvas to system clipboard.N)
r!   BitmapDataObject	SetBitmapr   TheClipboardIsOpenedOpenSetDataCloseFlush)r/   eventbmp_objopen_successs       r0   Copy_to_Clipboardz%_FigureCanvasWxBase.Copy_to_Clipboard   s    %%'$++&'')??//1L''0%%'%%'  *r2   c                 t    t         j                  dt        |              d| _        | j	                  d       y )Nz%s - draw_idle()FeraseBackground)r   r   r   r  Refreshr.   s    r0   	draw_idlez_FigureCanvasWxBase.draw_idle,  s,    

%tDz2 	U+r2   c                 ,    t        j                          y r   )r!   Yieldr.   s    r0   flush_eventsz _FigureCanvasWxBase.flush_events5  s    

r2   c                    t        | d      rt        d      t        j                  | t        j                        }|dkD  rY|j                  t        |dz        d       | j                  t        j                  | j                  |j                                t        j                         | _        | j                  j                          |j                          y )N_event_loopzEvent loop already runningr  r   i  T)oneShot)hasattrRuntimeErrorr!   rS   ID_ANYr]   r   r  	EVT_TIMERstop_event_loopGetIdGUIEventLoopr  Runrb   )r/   timeouttimers      r0   start_event_loopz$_FigureCanvasWxBase.start_event_loop9  s    4';<<")),Q;KKGdN+TK:IIbllD$8$8U[[]IK??,

r2   c                     t        | d      r7| j                  j                         r| j                  j                          | `y y )Nr  )r  r  re   Exitr/   r  s     r0   r  z#_FigureCanvasWxBase.stop_event_loopF  s;    4'))+  %%'  (r2   c                    | j                         }| j                         }t        |j                               }g }g }d}t	        |      D ]_  \  }\  }}	dj                  |	D 
cg c]  }
d|
z  	 c}
      }|j                  |	d          |d|d|}||	v r|}|j                  |       a dj                  |      }|||fS c c}
w )z3Return the wildcard string for the filesave dialog.r   ;z*.%sz (z)||)get_default_filetypeget_supported_filetypes_groupedsorteditems	enumeratejoinappend)r/   default_filetype	filetypessorted_filetypes	wildcards
extensionsfilter_indexirl   extsextext_listwildcards                r0   _get_imagesave_wildcardsz,_FigureCanvasWxBase._get_imagesave_wildcardsM  s    44688:	!)//"34	
()9: 	'OA|dxx >## >?Hd1g&'+Xx@H4' X&	' HHY'	*l22 !?s   #C
c                    t         j                  dt        |              | r| j                         sy|st	        j
                  |       }t        j                  dk(  rZt        | j                  j                  j                         t              r(| j                  j                         j                         n| j                  }|j                  |dd       | j                   nt#        t$        | j                         \  }}}}||||f||||f||||f||||fg}|j'                  || j(                         |j'                  || j*                         yy)z
        Update the displayed image on the GUI canvas, using the supplied
        wx.PaintDC device context.

        The 'WXAgg' backend sets origin accordingly.
        z%s - gui_repaint()N	__WXMSW__r   )r   r   r   IsShownOnScreenr!   ClientDCPlatform
isinstancer  canvasget_rendererrq   r   ConvertToImageConvertToBitmapr   r  r  r  DrawLineListr  r  )r/   drawDCbmpx0y0x1y1rects           r0   gui_repaintz_FigureCanvasWxBase.gui_repaint_  s/    	

'd4 --/[[&F ++, !3!3!@!@!BJO {{))+;;= KK 	 	#q!$  , (=(=>NBBR$r2r2&6R$r2r2&68Dd&@&@Ad&@&@A -r2   zWindows bitmapJPEGPCXzPortable Network GraphicszTagged Image Format FilezX pixmap)r  jpegjpgpcxpngtiftiffxpmc                 f    t        |   |g|i | | j                  r| j                          y y r   )rW   print_figurer  draw)r/   filenamerY   rZ   r[   s       r0   r  z _FigureCanvasWxBase.print_figure  s1    X777 ==IIK r2   c                     t         j                  dt        |              t        j                  |       }| j
                  s| j                  |       n| j                  |       |j                          y)z$Called when wxPaintEvt is generated.z%s - _on_paint()r  N)	r   r   r   r!   PaintDCr  r  r  rD   )r/   r  r  s      r0   r  z_FigureCanvasWxBase._on_paint  sS    

%tDz2D!}}IIVI$F+r2   c                    t         j                  dt        |              | j                         j	                         }|r|j                  |       }|r<r:|j                  s.|j                  t        j                  z  s| j                         }n/| j                         }|j                  | j                                t        | dd      r|| j                  | j                  fk(  ry|\  | _        | _        d| _        | j                  dk  s| j                  dk  ryt        j"                  | j                  | j                        | _        | j&                  j(                  }| j                  |z  }| j                  |z  }| j&                  j+                  ||d       | j-                  d       t/        d|       j1                          | j3                          y)	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()_widthNFrH   )forwardr  resize_event)r   r   r   	GetParentGetSizerGetItem
ProportionFlagr!   EXPAND
GetMinSizeGetClientSizeIncTogetattrr  _heightr  r   r   r  r   set_size_inchesr  r   _processr  )r/   r  szsir
  dpivalwinchhinchs           r0   r  z_FigureCanvasWxBase._on_size  sd    	

$d4j1^^&&(D!B"R]]277RYY3F??$D %%'DJJt()44(T\\22$(!T\;;!t||q0 iiT\\:f$v%##E5%#@
 	U+ND)224r2   c                    |j                   }|| j                  v r| j                  |   }n3|dk  r,t        |      }|j                         s|j	                         }nd }|j
                  ddf|j                  ddf|j                  ddffD ]<  \  }}} |       s||k7  s|dk(  r|j                         r+dj                  ||      }> |S )N   ctrlrY  r[  rZ  z{0}+{1})	KeyCodekeyvaldchr	ShiftDownlowerControlDownAltDownisupperformat)r/   r  keyvalr	  methprefixkey_names          r0   _get_keyz_FigureCanvasWxBase._get_key  s    T\\!,,v&Cc\f+C ??$iikC ""FI6u-'73'
 	8"D&(
 v(c/ G+#**637C	8 
r2   c                     |>t        j                         }| 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Yr  r   r   )r/   posr   r   s       r0   _mpl_coordsz_FigureCanvasWxBase._mpl_coords  sf    
 ;""$C&&suucee4DAq55#%%qA$++""))A---r2   c                     t        d| | j                  |      g| j                         d|ij                          | r|j	                          yy)zCapture key press.key_press_eventguiEventNr   rC  rJ  r-  Skipr  s     r0   r  z _FigureCanvasWxBase._on_key_down  sL    "Du%	!(,(8(8(:	!	!!)JJL r2   c                     t        d| | j                  |      g| j                         d|ij                          | r|j	                          yy)zRelease key.key_release_eventrM  NrN  r  s     r0   r  z_FigureCanvasWxBase._on_key_up  sL    $du%	!(,(8(8(:	!	!!)JJL r2   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|            }| j%                  |       | j'                          y )N)cursor)r!   Cursorr   check_getitemr   r    r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   	SetCursorr  r/   rS  s     r0   
set_cursorz_FigureCanvasWxBase.set_cursor  s    4--LL"..LL"..OOR__!!2??LL"..%%r'7'7##R%5%5/
   	vr2   c                 j    | j                         r| j                          |r| j                          yy)zControl wx mouse capture.N)
HasCaptureReleaseMouseCaptureMouse)r/   captures     r0   _set_capturez _FigureCanvasWxBase._set_capture  s,    ?? r2   c                 &    | j                  d       y)zCapture changed or lostFN)r^  r  s     r0   r  z$_FigureCanvasWxBase._on_capture_lost  s    % r2   c           
      D   |j                          | j                  |j                         xs |j                                | j	                  |      \  }}t
        j                  t        j                  t
        j                  t        j                  t
        j                  t        j                  t
        j                  t        j                  t
        j                  t        j                   i}|j#                         }|j%                  ||      }|j                         r t'        d| ||||      j)                          y|j                         r!t'        d| |||d|      j)                          y|j+                         r t'        d| ||||      j)                          yy)Start measuring on an axis.button_press_event)rM  T)dblclickrM  button_release_eventN)rO  r^  
ButtonDownButtonDClickrJ  r!   MOUSE_BTN_LEFTr   LEFTMOUSE_BTN_MIDDLEMIDDLEMOUSE_BTN_RIGHTRIGHTMOUSE_BTN_AUX1BACKMOUSE_BTN_AUX2FORWARD	GetButtonr   r   r-  ButtonUp)r/   r  r   r   
button_mapbuttons         r0   r  z$_FigureCanvasWxBase._on_mouse_button  s?   

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

 "/+T!Ve55=XZ!+T!VdUDDLHJ^^-t!Ve55=XZ r2   c                 Z   | j                  |      \  }}|j                  |j                  z  |j                  z  }|j	                          t
        j                  dk(  r/t        | d      sd| _        n| j                  rd| _        yd| _        t        d| ||||      j                          y)z3Translate mouse wheel events into matplotlib events	__WXMAC___skipwheeleventTFNscroll_event)steprM  )rJ  LinesPerActionWheelRotation
WheelDeltarO  r!   r  r  rw  r   r-  )r/   r  r   r   ry  s        r0   r  z#_FigureCanvasWxBase._on_mouse_wheel/  s    &1##e&9&99E<L<LL

;;+%4!23'+$%%',$'+$>4adU	44<HJr2   c                 ~    |j                          t        d| g| j                  |      d|ij                          y)ra  motion_notify_eventrM  N)rO  r   rJ  r-  r  s     r0   r  z_FigureCanvasWxBase._on_motionB  s:    

($ 	#$$U+	#!	##+8:r2   c                 ~    |j                          t        d| g| j                  |      d|ij                          y)zMouse has entered the window.figure_enter_eventrM  NrO  r   rJ  r-  r  s     r0   r  z_FigureCanvasWxBase._on_enterI  :    

*D 	&''.	&$	&&.hjr2   c                 ~    |j                          t        d| g| j                  |      d|ij                          y)zMouse has left the window.figure_leave_eventrM  Nr  r  s     r0   r  z_FigureCanvasWxBase._on_leaveP  r  r2   r   )r   T)_r3   r4   r5   rg   required_interactive_frameworkrQ   
_timer_clsr   classpropertymanager_classr!   WXK_CONTROL	WXK_SHIFTWXK_ALT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_DELETEr7  rX   r  r  r  r  r  r  r  r   r  r  r  r  rC  rJ  r  r  rX  r^  r  r  r  r  r  r  rh   ri   s   @r0   rU  rU    s    &*"J&D&&'B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+f
(,!3$B:


$
$
*)*
I+Z2. !@0?&.11r2   rU  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y)FigureCanvasWxNc                    t         j                  dt        |              t        | j                  | j
                  j                        | _        | j
                  j                  | j                         d| _	        | j                  |       y)z
        Render the figure using RendererWx instance renderer, or using a
        previously defined renderer if none is specified.
        z%s - draw()Tr  N)r   r   r   rq   r   r  r   r)  r  r  r  )r/   r  s     r0   r  zFigureCanvasWx.draw[  s^    
 	

=$t*-"4;;@''r2   c                 R   t        j                  t        j                  | j                  j
                  j                        t        j                  | j                  j
                  j                              }| j                  j                  t        || j                  j                               t        j                  |      r|j                         n|}|j                  ||      st        d|       | j                   r| j                          | r| j#                          y y )NzCould not save figure to )r!   r   r   r  r  r   r   r   r  rq   r   r   is_writable_file_liker  SaveFiler  r  r  )r/   filetyper  r   	saved_objs        r0   _print_imagezFigureCanvasWx._print_imagef  s    499T[[%5%5%;%;<99T[[%5%5%<%<=?FDKKOO<=33H= **,  	 !!(H5!:8*EFF
 ==IIK LLN r2   r   )r3   r4   r5   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_xpmr9   r2   r0   r  r  X  s    	(( (	''b((*I4Y44b))+ +J'	''b((*I'	''b((*I4Y44b((* *J'	''b((*Ir2   r  c                       e Zd Zdd fd
Z  ej
                  dd       ed             Z  ej
                  dd       ed	             Z  ej
                  dd
       ed             Z	  ej
                  dd       ed             Z
  ej
                  dd       ed             Z ej
                  dd      d        Z ej
                  dd      d        Zd Z xZS )FigureFrameWxNcanvas_classc                   t         j                  dk(  rt         j                  }nt        j                  dd      }t        	|   d d|       t        j                  dt        |              t        |        | || d|      | _
        n-t        j                  dd       | j                  |      | _
        t        | j                  ||       }| j                  j                  j                   }|| j#                  |       t%        t&        j(                  |j*                  j,                        \  }}| j                  j/                  t        j0                  ||             | j                  j3                  d	       | j                  j5                          | j7                          | j9                  t         j:                  | j<                         y )
Nr     )r<   r  rI  r   r:   zvThe canvas_class parameter will become required after the deprecation period starting in Matplotlib %(since)s elapses.)r=   )r   r   )r!   r  DefaultPositionPointrW   rX   r   r   r   _set_frame_iconr   r   warn_deprecated
get_canvasrW  managertoolbar
SetToolBarr  r   r  r   r
  SetInitialSizer  
SetMinSizeSetFocusFitr  	EVT_CLOSE	_on_close)
r/   numfigr  rI  r  r  r   r   r[   s
            r0   rX   zFigureFrameWx.__init__  sQ    ;;+%$$C((2r"C5

$d4j1 #&tR5DK    %& //#.DK "$++sD9++%%--OOG$ 499chhmm,1""2771a=1v&
		",,/r2   r:   zframe.GetSizer()rn   c                 "    | j                         S r   )r"  r.   s    r0   r1   zFigureFrameWx.<lambda>  s    dmmo r2   zframe.canvas.managerc                 .    | j                   j                  S r   )r   r  r.   s    r0   r1   zFigureFrameWx.<lambda>  s    dkk11 r2   zframe.canvas.manager.numc                 B    | j                   j                  j                  S r   )r   r  r  r.   s    r0   r1   zFigureFrameWx.<lambda>  s    dkk1155 r2   zframe.GetToolBar()c                 "    | j                         S r   )
GetToolBarr.   s    r0   r1   zFigureFrameWx.<lambda>  s    doo/ r2   z frame.canvas.manager.toolmanagerc                 B    | j                   j                  j                  S r   )r   r  toolmanagerr.   s    r0   r1   zFigureFrameWx.<lambda>  s    $++"5"5"A"A r2   z&the canvas_class constructor parameterc                     t        | d|      S )Nr  )r  )r/   r  s     r0   r  zFigureFrameWx.get_canvas  s     dB,,r2   c                 l    t         j                  dt        |              | j                  j                  S )Nz%s - get_figure_manager())r   r   r   r   r  r.   s    r0   get_figure_managerz FigureFrameWx.get_figure_manager  s%    

.T
;{{"""r2   c                    t         j                  dt        |              t        d| j                        j                          | j                  j                          d | j                  j                  _        t        j                  | j                  j                         	 | j                  j                  | j                  j                  j                         |j                          y # t        $ r Y w xY w)Nz%s - on_close()close_event)r   r   r   r   r   r-  r  r  framer   destroympl_disconnectr  _id_dragAttributeErrorrO  r  s     r0   r  zFigureFrameWx._on_close  s    

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

  		s   #9C- -	C98C9)r3   r4   r5   rX   r   r6   r7   sizerfigmgrr  r  r  r  r  r  rh   ri   s   @r0   r  r    s   15 &0P CODOOE/AB-.0EG_T__U0FG124F
H/$//%-G
H568CFodooe1EF/02G?/$//=?ABDK T__CE-E- T__U(>?# @#r2   r  c                   V     e Zd ZdZ fdZed        Zd Zd Zd Z	d Z
d Zd	 Z xZS )
rW  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         j                  dt        |              |x| _        | _        t
        |   ||       y )Nr   )r   r   r   r   windowrW   rX   )r/   r   r  r   r[   s       r0   rX   zFigureManagerWx.__init__  s3    

$d4j1#((
T[%r2   c                    t        j                         xs
 t               }t        |||      }|j                  j
                  }t        j                         r4|j                  j                          |j                  j                          |S )Nr  )r!   GetApprO   r  r   r  mplis_interactiver   Showr  )rX  r  r  r  rN   r   r  s          r0   create_with_canvasz"FigureManagerWx.create_with_canvas  sd     		.}c6E--''MM MM##%r2   c                     | j                   j                          | j                  j                          t        j
                  d   r| j                   j                          y y )Nzfigure.raise_window)r   r  r   r  r  rcParamsRaiser.   s    r0   showzFigureManagerWx.show  sB    

<<-.JJ /r2   c                     t         j                  dt        |              | j                  }|r t	        j
                  |j                         y y )Nz%s - destroy())r   r   r   r   r!   	CallAfterr  )r/   rY   r   s      r0   r  zFigureManagerWx.destroy  s8    

#T$Z0

 LL% r2   c                 l    | j                   j                  | j                   j                                 y r   )r   ShowFullScreenIsFullScreenr.   s    r0   full_screen_togglez"FigureManagerWx.full_screen_toggle  s$    

!!djj&=&=&?"?@r2   c                 6    | j                   j                         S r   )r	  GetTitler.   s    r0   get_window_titlez FigureManagerWx.get_window_title  s    {{##%%r2   c                 :    | j                   j                  |       y r   )r	  SetTitle)r/   titles     r0   set_window_titlez FigureManagerWx.set_window_title  s    U#r2   c           
          | j                   j                  | j                   j                  t        j                  t        j                  |      t        j                  |                         y r   )r	  SetSizeClientToWindowSizer!   r  r   r  )r/   r   r   s      r0   resizezFigureManagerWx.resize  sI     	DKK::277IIedii/<1 2 	3r2   )r3   r4   r5   rg   rX   classmethodr  r  r  r  r  r   r$  rh   ri   s   @r0   rW  rW    s@    &
  &A&$3r2   rW  c                 f    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    r0   _load_bitmapr*    s%    
 99S--hABCCr2   c                     t        j                         }dD ]C  }t        j                  t        |            }|j	                         s y |j                  |       E | j                  |       y )N)zmatplotlib.pngzmatplotlib_large.png)r!   
IconBundleIconr*  IsOkAddIconSetIcons)r   bundleimageicons       r0   r  r  "  sU    ]]_F; ww|E*+yy{t	
 
NN6r2   c                   ~     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 )NavigationToolbar2Wxr?   c          
      z   t         j                  j                  | |j                         d|       dt         j                  v r| j                  d       i | _        | j                  D ]  \  }}}}|| j                          | j                  d| j                  | d      t         j                  |||dv rt         j                  nt         j                        j                  | j                  |<   | j                  t         j                   t#        | |      | j                  |           || _        | j$                  rU| j'                          t        j(                  | t         j*                        | _        | j/                  | j,                         | j1                          t3        j                  | |       y )	Nr  r6  wxMac)   r9  z.png)PanZoom)r   bmpDisabledlabel	shortHelpkindr  )r!   ToolBarrX   r!  PlatformInfoSetToolBitmapSizewx_ids	toolitemsAddSeparatorAddTool_iconr1  
ITEM_CHECKITEM_NORMALIdr  EVT_TOOLr*  _coordinatesAddStretchableSpace
StaticTextALIGN_RIGHT_label_text
AddControlRealizer   )r/   r   coordinatesr?   texttooltip_text
image_filecallbacks           r0   rX   zNavigationToolbar2Wx.__init__-  sc   


D&"2"2"4bFboo%""8,8< 	,4D,
H|!!#::D&9: ",+/?+B"--!~~  0  KK IIbkk74#:T*  ,	,  ($$&!}}THDOOD,,-##D&1r2   c                 (   t        j                  t        j                  j	                  t        j                  d|                   }	 t        j                  j                         j                         }|rt        j                  j                  t        j                        }|ddd	f   d
k(  j%                  d      }|j'                         |j)                         |j+                         f||dd	f<   t        j,                  j/                  |j0                  d   |j0                  d
   |j3                               S # t        $ r t        j                  j                  t        j                        }t        j                  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kD  }Y w xY w)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/?rJ  g?.Nr   r   r  )axisrH   )nparrayPILImageopenr   r)  r!   SystemSettingsGetAppearanceIsDarkr  	GetColourSYS_COLOUR_WINDOWSYS_COLOUR_WINDOWTEXTredgreenblueallRedGreenBluer   r   r   r   )rl   r2  darkbgr5  bg_lumfg_lum
black_masks           r0   rG  zNavigationToolbar2Wx._iconM  s    (<(<Xt(LMN		($$224;;=D "",,R-E-EFBRaR.A-222;J%'VVXrxxz2779$EE*bqb.!yy''KKNEKKNEMMO= 	=  	("",,R-A-ABB"",,R-E-EFBRVVmdRXXo5rwwF#MFRVVmdRXXo5rwwF#MFF?R'D	(s   ,D> >CHHc                    d| j                   v r6| j                  | j                   d   | j                  j                  dk(         d| j                   v r7| j                  | j                   d   | j                  j                  dk(         y y )Nr:  PANr;  ZOOM)rC  
ToggleToolmoderl   r.   s    r0   _update_buttons_checkedz,NavigationToolbar2Wx._update_buttons_checkedf  sg    DKKOODKK.		%0GHT[[ OODKK/61IJ !r2   c                 >    t        |   |  | j                          y r   )rW   zoomrv  r/   rY   r[   s     r0   rx  zNavigationToolbar2Wx.zooml  s    d$$&r2   c                 >    t        |   |  | j                          y r   )rW   panrv  ry  s     r0   r{  zNavigationToolbar2Wx.panp  s    T$$&r2   c           	         | j                   j                         \  }}}| j                   j                         }t        j                  | j                   j                         dt        j                  d   ||t        j                  t        j                  z        }|j                  |       |j                         t        j                  k(  rt        j                  |j                               }t         j#                  dt%        |       |       ||j'                            }|j(                  dd  }	|	| j                   j+                         v r||	k7  rt         j-                  d|	||	       |	}t        j                  d   r&t/        |j0                        t        j                  d<   	 | j                   j2                  j5                  t/        |      |       y y # t6        $ rc}
t        j8                  | j                   j                         t/        |
      d      }|j                          |j;                          Y d }
~
y d }
~
ww xY w)	NzSave to filezsavefig.directoryz%s - Save file path: %srH   zDextension %s did not match the selected image type %s; going with %s)r>  zMatplotlib error)r<   r=   r>   )r   r  get_default_filenamer!   
FileDialogr!  r  r  FD_SAVEFD_OVERWRITE_PROMPTSetFilterIndexrC   ID_OKpathlibr   GetPathr   r   r   GetFilterIndexsuffixget_supported_filetypeswarningr(  r<   r  savefig	Exceptionr@   rD   )r/   rY   r  r  r  default_filerF   r   fmtr  es              r0   save_figurez NavigationToolbar2Wx.save_figuret  s   (,(L(L(N%	4{{779KK!!#^LL,-|YJJ///1 	l+)<< 01DJJ0$t*dCv,,./C++ab/Cdkk99;;s
  < #s, ||/0474D01!""**3t9S*A! *"  !));;002CF.0   "  !s   (0G 	I#AIIc                     | j                   j                  j                  j                  }|||z
  |||z
  f| j                   _        | j                   j                          y r   )r   r  r   r   r  r  )r/   r  r  r  r	  r
  r   s          r0   draw_rubberbandz$NavigationToolbar2Wx.draw_rubberband  sJ    ##((//(*FRKVb['I$r2   c                 Z    d | j                   _        | j                   j                          y r   )r   r  r  r.   s    r0   remove_rubberbandz&NavigationToolbar2Wx.remove_rubberband  s    '+$r2   c                 T    | j                   r| j                  j                  |       y y r   )rL  rP  SetLabelr/   r   s     r0   set_messagez NavigationToolbar2Wx.set_message  s$    %%a( r2   c                 ^   | j                   j                  dkD  }| j                   j                  t        | j                   j                        dz
  k  }d| j                  v r| j                  | j                  d   |       d| j                  v r | j                  | j                  d   |       y y )Nr   rH   BackForward)
_nav_stack_poslen	_elementsrC  
EnableTool)r/   can_backwardcan_forwards      r0   set_history_buttonsz(NavigationToolbar2Wx.set_history_buttons  s    ++a/oo**S1J1J-Ka-OOT[[ OODKK/>#OODKK	2K@ $r2   r  )r3   r4   r5   r!   	TB_BOTTOMrX   r  rG  rv  rx  r{  r  r  r  r  r  rh   ri   s   @r0   r5  r5  ,  sS    2",, 2@ = =0K''!B
)Ar2   r5  c                   J    e Zd Zdej                  fdZd Zd Zd Zd Z	d Z
y)	ToolbarWxNc                 ~   ||j                   j                         }t        j                  | |       t        j
                  j                  | |d|       | j                         | _        t	        j                  | t        j                        | _
        | j                  | j                         i | _        i | _        y )Nr  r6  )r   r!  r   rX   r!   r@  rM  _spacerN  rO  rP  rQ  
_toolitems_groups)r/   r  r<   r?   s       r0   rX   zToolbarWx.__init__  s    > ''113F""45


D&"E:..0==R^^D(()r2   c                     t        | j                        D cg c]  }| j                  |      |k(  r| c}\  }|S c c}w )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.
        )range
ToolsCountGetToolByPos)r/   toolrI  s      r0   _get_tool_poszToolbarWx._get_tool_pos  sC      %T__5 3$$S)T1  3
3s   <c           
          | j                   vr7 j                   j                   j                               j                   |<    j                   |   }t	         j
                  t         j                              D cg c]$  }|j                         r|j                         s|& }	}|dk\  r4||	d   k(  rdn( j                  |	|	j                  |      dz
           dz   }
n j                  |      dz   }
|
|z   }|rat        j                  |      }|st        j                  nt        j                  } j!                  |d|t        j"                  ||xs d      }nb j%                        d   dz   df}|rt        j&                   d|      }nt        j(                   d|      } j+                  ||      } j-                           fd}|r" j/                  t        j0                  ||       n j/                  t        j2                  |        j4                  j7                  g         j4                     j9                  ||f       y c c}w )	Nr   rH   r  r   
   r  r=  c                 (    j                         y r   )trigger_tool)r  rl   r/   s    r0   handlerz'ToolbarWx.add_toolitem.<locals>.handler  s    d#r2   )r  InsertSeparatorr  r  r  r  r  r  IsSeparatorIsStretchableSpaceindexr5  rG  r!   rI  rH  
InsertToolr1  GetTextExtentToggleButtonButtonInsertControlrR  r  rK  r  r  
setdefaultr  )r/   rl   grouppositionrV  descriptiontoggleseptsepsstartidxr  r?  r  r
  rY  r  s   ``                r0   add_toolitemzToolbarWx.add_toolitem  s    $"&"6"6""4;;/#1DLLll5!t00%2HI Ca==?1+?+?+A  C C q= a.Q,,T$**S/A2E-FG!K  &&s+a/Eh&,,Z8C)/2>>R]]D??3D#r}}d#.#4"6D &&t,Q/"4b9D//$DtD))D"d>%%c7$%?D	$ IIbkk7D1LL))73""4,$$dG_5GCs   )Ic                    || j                   vry | j                   |   D ]Q  \  }}|j                         s| j                  |j                  |       3|j	                         j                  |       S | j                          y r   )r  	IsControlrt  rJ  
GetControlSetValuer  )r/   rl   toggledr  r  s        r0   toggle_toolitemzToolbarWx.toggle_toolitem  si    t&!__T2 	4MD'>>#1!**73		4
 	r2   c                     | j                   |   D ]   \  }}| j                  |j                         " | j                   |= y r   )r  
DeleteToolrJ  )r/   rl   r  r  s       r0   remove_toolitemzToolbarWx.remove_toolitem  s:    !__T2 	%MD'OODGG$	%OOD!r2   c                 :    | j                   j                  |       y r   )rP  r  r  s     r0   r  zToolbarWx.set_message   s    !!!$r2   )r3   r4   r5   r!   r  rX   r  r  r  r  r  r9   r2   r0   r  r    s*    +/r|| 		+6Z"
%r2   r  c                       e Zd Zd Zy)ConfigureSubplotsWxc                 .    t         j                  |        y r   )r5  configure_subplotsr/   rY   s     r0   triggerzConfigureSubplotsWx.trigger  s    //5r2   Nr3   r4   r5   r  r9   r2   r0   r  r    s    6r2   r  c                       e Zd Zd Zy)SaveFigureWxc                 J    t         j                  | j                                y r   )r5  r  "_make_classic_style_pseudo_toolbarr  s     r0   r  zSaveFigureWx.trigger  s    ((335	7r2   Nr  r9   r2   r0   r  r  
  s    7r2   r  r   ToolSetCursorr  c                       e Zd Zd Zy)SetCursorWxc                 L    t         j                  | j                         |       y r   )r5  rX  r  rW  s     r0   rX  zSetCursorWx.set_cursor  s    ''335v	?r2   N)r3   r4   r5   rX  r9   r2   r0   r  r    s    ?r2   r  c                       e Zd Zd Zd Zy)RubberbandWxc                 T    t         j                  | j                         d ||||       y r   )r5  r  r  )r/   r  r  r	  r
  s        r0   r  zRubberbandWx.draw_rubberband  s'    ,,335tRR	Mr2   c                 J    t         j                  | j                                y r   )r5  r  r  r.   s    r0   r  zRubberbandWx.remove_rubberband  s    ..335	7r2   N)r3   r4   r5   r  r  r9   r2   r0   r  r    s    M7r2   r  c                   F     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)rr      rt   c                 8   t         |   |dt        j                  t        j                  z         t        j
                  t        j                        }t        j                  dddd      }| j                         j                         }t        | j                  |z         D ]u  \  }}t        || j                        D ]W  \  }}	t        j                  | |      }
|dk(  r|
j                  |       |
j!                  |	       |j#                  |
ddd       Y w |j#                  |dt        j$                  d       t        j&                  | t        j(                        }|j#                  |dt        j*                  t        j$                  z  d       | j-                  |       |j/                  |        | j1                          | j3                  t        j4                  | j6                         |j3                  t        j8                  | j6                         y )NHelp)r  r?   r   r         r  )rW   rX   r!   DEFAULT_DIALOG_STYLERESIZE_BORDERBoxSizerVERTICALFlexGridSizerGetFontMakeBoldr  headerszipwidthsrN  r   WrapAddALLr  r  ALIGN_CENTER_HORIZONTALSetSizerr  Layoutr  r  r  
EVT_BUTTON)r/   r<   help_entriesr  
grid_sizerrz   rrowcolr   r=  okr[   s               r0   rX   z_HelpDialog.__init__(  s   v!669I9II 	 	K BKK(%%aAq1
||~&&(| ;< 	/FAs #C 5 /ed#66MM$'

5!uaA./	/ 			*a+YYtRXX&		"a33bff<a@e		$		",,/
t~~.r2   c                 Z    d t         _        | j                          |j                          y r   )r  	_instanceDestroyLaterrO  r  s     r0   r  z_HelpDialog._on_closeA  s     $

r2   c                     | j                   r| j                   j                          y  | ||      | _         | j                   j                          y r   )r  r  r  )rX  r<   r  s      r0   r  z_HelpDialog.showF  s<     ==MM!FL1r2   )r3   r4   r5   r  r  r  rX   r  r%  r  rh   ri   s   @r0   r  r  #  s3    I56GF/2
  r2   r  c                       e Zd Zd Zy)HelpWxc                     t         j                  | j                  j                  j	                         | j                                y r   )r  r  r  r   GetTopLevelParent_get_help_entriesr  s     r0   r  zHelpWx.triggerR  s1    ++==?//1	3r2   Nr  r9   r2   r0   r  r  P  s    3r2   r  c                       e Zd Zd Zy)ToolCopyToClipboardWxc                    | j                   j                  s| j                   j                          | j                   j                  j	                         rt
        j                  j                         sy 	 t
        j                  j                  t        j                  | j                   j                               t
        j                  j                          y # t
        j                  j                          w xY wr   )r   r  r  r   r.  r!   r  r  r  r  r  )r/   rY   rZ   s      r0   r  zToolCopyToClipboardWx.triggerY  s    {{##KK{{!!&&(0D0D0F	$OO##B$7$78J8J$KLOO!!#BOO!!#s   5AC  C:Nr  r9   r2   r0   r  r  W  s    $r2   r  c                   $    e Zd ZeZeZed        Zy)
_BackendWxc                      t         j                  j                         s(t        j                         } | | j	                          y y y r   )r!   rJ   IsMainLoopRunningr  MainLooprM   s    r0   mainloopz_BackendWx.mainloopm  s7    vv'')IIKE   ! *r2   N)	r3   r4   r5   r  FigureCanvasrW  FigureManagerr  r  r9   r2   r0   r  r  h  s    !L#M! !r2   r  r   )Qrg   r  loggingr   r  r,  rR  numpyrZ  r\  
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!   	getLoggerr3   r   r  caching_module_getattrr   r6   rG   	lru_cacherO   rQ   rq   r   r  rU  r  Framer  rW  r*  r  r@  r5  r  _register_tool_classConfigureSubplotsBaser  SaveFigureBaser  SetCursorBaser  RubberbandBaser  Dialogr  ToolHelpBaser  ToolCopyToClipboardBaser  _toolbar2_class_toolmanager_toolbar_classexportr  r9   r2   r0   <module>r1     s       
   
 B B B B B 2 1 )   * 	w"
  	 	 	   Q  i  & 	y,FHPC PC	HPCfj9+ j9Zr1*BHH r1j-*( -*`MBHH M`?3' ?3DD|A-rzz |ABT%!2:: T%n $##$786-== 6 96
 $##$787=// 7 97 O4?--- ? 5? $##$787=// 7 97*")) *Z $##$783]'' 3 93 $##$78	$MAA 	$ 9	$ #7 -6 * 
	! 	! 	!r2   