
 m[c           @` s  d  d l  m Z m Z m Z m Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l	 Z	 e j
 rz e	 j d e  n  y1 d  d l Z d  d l Z e j Z d  d l Z Wn e k
 r e d   n Xd d d  f Z e j e k  re d e j e   n  [ e j d d	 k Z d  d l Z d  d
 l m Z d  d l m Z m Z m Z m Z m Z m Z d  d l m  Z  m! Z! d  d l" m# Z# m$ Z$ d  d l% m& Z& d  d l' m( Z( d  d l m) Z) m* Z+ m, Z, m- Z- m. Z. e j/ e0  Z1 d e j Z2 d Z3 e	 j4 d d e j5  i e j6 e j7  e j8 6e j6 e j9  e j: 6e j6 e j;  e j< 6e j6 e j=  e j> 6e j6 e j?  e j@ 6ZA d   ZB d e f d     YZC d e jD e f d     YZE d e f d     YZF d e e jG f d     YZH d e jI f d     YZI d  eJ f d!     YZK yV e j d d" d  f k  pFe jL d# k rRd$ ZM n d% ZM e jN jO e. d& d' eM  ZP Wn' eQ ZP e1 jR d( e jS   d  n XeQ d)  ZT e jU d* e f d+     Y ZV d S(,   i    (   t   absolute_importt   divisiont   print_functiont   unicode_literalsNu6   The gtk* backends have not been tested with Python 3.xu,   Gtk* backend requires pygtk to be installed.i   i   u?   PyGTK %d.%d.%d is installed
PyGTK %d.%d.%d or later is requiredi   i   (   t   Gcf(   t   _Backendt   FigureCanvasBaset   FigureManagerBaset   NavigationToolbar2t	   TimerBaset   cursors(   t   RendererGDKt   FigureCanvasGDK(   t   is_writable_file_liket   warn_deprecated(   t   Figure(   t   SubplotTool(   t   cbookt   colorst   linest   markerst   rcParamsu   %d.%d.%di`   u   ignoreu(   .*Unable to retrieve the file info for.*c         C` s0   |  j    } | t j @d k o/ | t j @d k S(   Ni    (   t   flagst   gtkt   VISIBLEt   MAPPED(   t   wR   (    (    s>   lib/python2.7/site-packages/matplotlib/backends/backend_gtk.pyt   GTK_WIDGET_DRAWABLEB   s    t   TimerGTKc           B` s2   e  Z d  Z d   Z d   Z d   Z d   Z RS(   uN  
    Subclass of :class:`backend_bases.TimerBase` using GTK for timer events.

    Attributes
    ----------
    interval : int
        The time between timer events in milliseconds. Default is 1000 ms.
    single_shot : bool
        Boolean flag indicating whether this timer should operate as single
        shot (run once and then stop). Defaults to False.
    callbacks : list
        Stores list of (func, args) tuples that will be called upon timer
        events. This list can be manipulated directly, or the functions
        `add_callback` and `remove_callback` can be used.

    c         C` s)   |  j    t j |  j |  j  |  _ d  S(   N(   t   _timer_stopt   gobjectt   timeout_addt	   _intervalt	   _on_timert   _timer(   t   self(    (    s>   lib/python2.7/site-packages/matplotlib/backends/backend_gtk.pyt   _timer_startX   s    
c         C` s/   |  j  d  k	 r+ t j |  j   d  |  _  n  d  S(   N(   R"   t   NoneR   t   source_remove(   R#   (    (    s>   lib/python2.7/site-packages/matplotlib/backends/backend_gtk.pyR   ^   s    c         C` s*   |  j  d  k	 r& |  j   |  j   n  d  S(   N(   R"   R%   R   R$   (   R#   (    (    s>   lib/python2.7/site-packages/matplotlib/backends/backend_gtk.pyt   _timer_set_intervalc   s    
c         C` sA   t  j |   t |  j  d k r0 |  j r0 t Sd  |  _ t Sd  S(   Ni    (	   R	   R!   t   lent	   callbackst   _singlet   TrueR%   R"   t   False(   R#   (    (    s>   lib/python2.7/site-packages/matplotlib/backends/backend_gtk.pyR!   i   s
    	(   t   __name__t
   __module__t   __doc__R$   R   R'   R!   (    (    (    s>   lib/python2.7/site-packages/matplotlib/backends/backend_gtk.pyR   G   s
   			t   FigureCanvasGTKc           B` s  e  Z i5 d  d 6d d 6d d 6d  d 6d d 6d d 6d	 d
 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d  6d! d" 6d# d$ 6d% d& 6d' d( 6d) d* 6d+ d, 6d- d. 6d/ d0 6d1 d2 6d3 d4 6d5 d6 6d7 d8 6d9 d: 6d; d< 6d= d> 6d? d@ 6dA dB 6dC dD 6dE dF 6dG dH 6dI dJ 6dK dL 6dM dN 6dO dP 6dQ dR 6dS dT 6dU dV 6dW dX 6dY dZ 6d[ d\ 6d1 d] 6d^ d_ 6d^ d` 6d da 6db dc 6Z e j e j Be j Be j Be j Be j	 Be j
 Be j Be j BZ dd   Z de   Z df   Z dg   Z dh   Z di   Z dj   Z dk   Z dl   Z dm   Z dn   Z do   Z dp   Z dq   Z dr   Z ds   Z dt   Z du   Z e  j! j"   Z! dv e! dw <dv e! dx <dy e! dz <d{   Z# e# Z$ d|   Z% d}   Z& d~   Z' d   Z( RS(   u   controli  u   shifti  u   alti  i  i  i  u   leftiQ  u   upiR  u   rightiS  u   downiT  u   escapei  u   f1i  u   f2i  u   f3i  u   f4i  u   f5i  u   f6i  u   f7i  u   f8i  u   f9i  u   f10i  u   f11i  u   f12i  u   scroll_locki  u   breaki  u	   backspacei  u   enteri  u   insertic  u   deletei  u   homeiP  u   endiW  u   pageupiU  u   pagedowniV  u   0i  u   1i  u   2i  u   3i  u   4i  u   5i  u   6i  u   7i  u   8i  u   9i  u   +i  u   -i  u   *i  u   /i  u   deci  i  u   superi  i  i~  u   tabi	  c         C` s  |  j  t j j j k r1 t d d d d d n  t j |  |  t j	 j |   d |  _
 t |  _ d |  _ d |  _ d  |  _ |  j d |  j  |  j d	 |  j  |  j d
 |  j  |  j d |  j  |  j d |  j  |  j d |  j  |  j d |  j  |  j d |  j  |  j d |  j  |  j d |  j  |  j |  j  j  |  j t  |  j  t j!  |  j"   i  |  _# d  S(   Nu   2.0t   messageu   The GTK backend is deprecated. It is untested, known to be broken and will be removed in Matplotlib 3.0. Use the GTKAgg backend instead. See Matplotlib usage FAQ for more info on backends.t   alternativeu   GTKAggi    iu   scroll_eventu   button_press_eventu   button_release_eventu   configure_eventu   expose_eventu   key_press_eventu   key_release_eventu   motion_notify_eventu   leave_notify_eventu   enter_notify_event($   t	   __class__t
   matplotlibt   backendst   backend_gtkR0   R   R   t   __init__R   t   DrawingAreat   _idle_draw_idR+   t   _need_redrawt   _pixmap_widtht   _pixmap_heightR%   t   _lastCursort   connectt   scroll_eventt   button_press_eventt   button_release_eventt   configure_eventt   expose_eventt   key_press_eventt   key_release_eventt   motion_notify_eventt   leave_notify_eventt   enter_notify_eventt
   set_eventst
   event_maskt   set_double_bufferedR,   t	   set_flagst	   CAN_FOCUSt   _renderer_initt   last_downclick(   R#   t   figure(    (    s>   lib/python2.7/site-packages/matplotlib/backends/backend_gtk.pyR7      s2    
					
c         C` s0   |  j    |  j d k r, t j |  j  n  d  S(   Ni    (   t   close_eventR9   R   R&   (   R#   (    (    s>   lib/python2.7/site-packages/matplotlib/backends/backend_gtk.pyt   destroy   s    
c         C` s]   | j  } |  j j | j } | j t j k r7 d } n d } t j |  | | | d | t	 S(   Ni   it   guiEvent(
   t   xt
   allocationt   heightt   yt	   directiont   gdkt	   SCROLL_UPR   R?   R,   (   R#   t   widgett   eventRT   RW   t   step(    (    s>   lib/python2.7/site-packages/matplotlib/backends/backend_gtk.pyR?      s    		c   
   	   C` s   | j  } |  j j | j } | j t j k } | s | j   } |  j j	 | j
 d  } t j t j    j d  } | | }	 |	 | k  r |  j | j
 =t S| |  j | j
 <n  t j |  | | | j
 d | d | t S(   Ni    u   gtk-double-click-timet   dblclickRS   (   RT   RU   RV   RW   t   typeRY   t   _2BUTTON_PRESSt   get_timeRO   t   gett   buttonR   t   settings_get_for_screent   screen_get_defaultt   get_propertyR,   R   R@   (
   R#   R[   R\   RT   RW   R^   t   current_timet	   last_timet   dblclick_timet
   delta_time(    (    s>   lib/python2.7/site-packages/matplotlib/backends/backend_gtk.pyR@      s    	
%c         C` s?   | j  } |  j j | j } t j |  | | | j d | t S(   NRS   (   RT   RU   RV   RW   R   RA   Rc   R,   (   R#   R[   R\   RT   RW   (    (    s>   lib/python2.7/site-packages/matplotlib/backends/backend_gtk.pyRA     s    	c         C` s)   |  j  |  } t j |  | d | t S(   NRS   (   t   _get_keyR   RD   R+   (   R#   R[   R\   t   key(    (    s>   lib/python2.7/site-packages/matplotlib/backends/backend_gtk.pyRD     s    c         C` s)   |  j  |  } t j |  | d | t S(   NRS   (   Rk   R   RE   R+   (   R#   R[   R\   Rl   (    (    s>   lib/python2.7/site-packages/matplotlib/backends/backend_gtk.pyRE     s    c         C` sn   | j  r$ | j j   \ } } } n | j | j | j } } } |  j j | } t j	 |  | | d | t
 S(   NRS   (   t   is_hintt   windowt   get_pointerRT   RW   t   stateRU   RV   R   RF   R,   (   R#   R[   R\   RT   RW   Rp   (    (    s>   lib/python2.7/site-packages/matplotlib/backends/backend_gtk.pyRF     s    	c         C` s   t  j |  |  d  S(   N(   R   RG   (   R#   R[   R\   (    (    s>   lib/python2.7/site-packages/matplotlib/backends/backend_gtk.pyRG   "  s    c         C` s8   | j  j   \ } } } t j |  | d | | f d  S(   Nt   xy(   Rn   Ro   R   RH   (   R#   R[   R\   RT   RW   Rp   (    (    s>   lib/python2.7/site-packages/matplotlib/backends/backend_gtk.pyRH   %  s    c         C` s   | j  |  j k r% |  j | j  } n' | j  d k  rF t | j   } n d  } xZ t j d g t j d g t j d g f D]. \ } } | j | @rw d j	 | |  } qw qw W| S(   Ni   u   superu   altu   ctrlu   {0}+{1}(
   t   keyvalt   keyvaldt   chrR%   RY   t	   MOD4_MASKt	   MOD1_MASKt   CONTROL_MASKRp   t   format(   R#   R\   Rl   t   key_maskt   prefix(    (    s>   lib/python2.7/site-packages/matplotlib/backends/backend_gtk.pyRk   )  s    c         C` s|   | j  d  k r d  S| j | j } } | d k  s> | d k  rB d  S|  j j } |  j j | | | | d t t |  _	 t S(   Ni   t   forward(
   Rn   R%   t   widthRV   RP   t   dpit   set_size_inchesR,   R+   R:   (   R#   R[   R\   R   t   hR}   (    (    s>   lib/python2.7/site-packages/matplotlib/backends/backend_gtk.pyRB   :  s    !	c         C` s6   t  |  _ t |   r2 |  j   |  j j t  n  d  S(   N(   R+   R:   R   t
   queue_drawRn   t   process_updatesR,   (   R#   (    (    s>   lib/python2.7/site-packages/matplotlib/backends/backend_gtk.pyt   drawH  s    	
c         ` s8     j  d k r d  S  f d   } t j |    _  d  S(   Ni    c          ` s   z   j    Wd  d   _ Xt S(   Ni    (   R   R9   R,   (   t   args(   R#   (    s>   lib/python2.7/site-packages/matplotlib/backends/backend_gtk.pyt	   idle_drawV  s    
(   R9   R   t   idle_add(   R#   R   (    (   R#   s>   lib/python2.7/site-packages/matplotlib/backends/backend_gtk.pyt	   draw_idleS  s    c         C` s   t  |  |  j j  |  _ d S(   u   Override by GTK backends to select a different renderer
        Renderer should provide the methods:
            set_pixmap ()
            set_width_height ()
        that are used by
            _render_figure() / _pixmap_prepare()
        N(   R   RP   R}   t	   _renderer(   R#   (    (    s>   lib/python2.7/site-packages/matplotlib/backends/backend_gtk.pyRN   _  s    c         C` s   t  } | |  j k r= t t |  j d  |  |  _ t } n  | |  j k rt t t |  j d  |  |  _ t } n  | r t j |  j |  j |  j  |  _	 |  j
 j |  j	  n  d S(   ug   
        Make sure _._pixmap is at least width, height,
        create new pixmap if necessary
        g?N(   R,   R;   t   maxt   intR+   R<   RY   t   PixmapRn   t   _pixmapR   t
   set_pixmap(   R#   R|   RV   t   create_pixmap(    (    s>   lib/python2.7/site-packages/matplotlib/backends/backend_gtk.pyt   _pixmap_preparej  s    		c         C` s*   |  j  j | |  |  j j |  j   d S(   u3   used by GTK and GTKcairo. GTKAgg overrides
        N(   R   t   set_width_heightRP   R   (   R#   t   pixmapR|   RV   (    (    s>   lib/python2.7/site-packages/matplotlib/backends/backend_gtk.pyt   _render_figure  s    c      	   C` s   |  j  } t |   r |  j re |  j \ } } } } |  j | |  |  j |  j | |  t |  _ n  | j \ } } } } |  j	 j
 |  j j |  j |  j | | | | | |  n  t S(   uE   Expose_event for all GTK backends. Should not be overridden.
        (   t   toolbarR   R:   RU   R   R   R   R,   t   areaRn   t   draw_drawablet   stylet   fg_gcRp   (   R#   R[   R\   R   RT   RW   R   R   (    (    s>   lib/python2.7/site-packages/matplotlib/backends/backend_gtk.pyRC     s    		u   JPEGu   jpgu   jpegu   Portable Network Graphicsu   pngc         O` s   |  j  | d  S(   Nu   jpeg(   t   _print_image(   R#   t   filenameR   t   kwargs(    (    s>   lib/python2.7/site-packages/matplotlib/backends/backend_gtk.pyt
   print_jpeg  s    c         O` s   |  j  | d  S(   Nu   png(   R   (   R#   R   R   R   (    (    s>   lib/python2.7/site-packages/matplotlib/backends/backend_gtk.pyt	   print_png  s    c      	   ` s  |  j    t j @d k r, t j j |   n  |  j   \ } } t j |  j | |  } |  j	 j
 |  |  j | | |  t j t j d d | |  } | j | | j   d d d d | |    f d   d g D }	 | d k r|	 j d t d  t |	 d  |	 d <n  t | t j  rny | j | | d |	 Wqt j k
 rj}
 t d	 |
 f d
 |  qXn t |  rt | d  rd  d  } y  | j | | d | d |	 Wqt j k
 r}
 t d	 |
 f d
 |  qXqt d   n t d   d  S(   Ni    i   c         ` s)   i  |  ] } |   k r   | |  q S(    (    (   t   .0t   k(   R   (    s>   lib/python2.7/site-packages/matplotlib/backends/backend_gtk.pys
   <dictcomp>  s   	 u   qualityu   jpgu   jpegu   savefig.jpeg_qualityt   optionsu   Save figure failure:
%st   parentu   save_to_callbackc         S` s   | j  |   d  S(   N(   t   write(   t   buft   data(    (    s>   lib/python2.7/site-packages/matplotlib/backends/backend_gtk.pyt   save_callback  s    t	   user_datauE   Saving to a Python file-like object is only supported by PyGTK >= 2.8u-   filename must be a path or a file-like object(   u   jpgu   jpeg(   R   R   t   REALIZEDR8   t   realizet   get_width_heightRY   R   Rn   R   R   R   t   Pixbuft   COLORSPACE_RGBt   get_from_drawablet   get_colormapt
   setdefaultR   t   strt
   isinstancet   sixt   string_typest   saveR   t   GErrort   error_msg_gtkR   t   hasattrR%   t   save_to_callbackt
   ValueError(   R#   R   Rx   R   R   R|   RV   R   t   pixbufR   t   excR   (    (   R   s>   lib/python2.7/site-packages/matplotlib/backends/backend_gtk.pyR     s6     c         O` s   t  | |   S(   u  
        Creates a new backend-specific subclass of :class:`backend_bases.Timer`.
        This is useful for getting periodic events through the backend's native
        event loop. Implemented only for backends with GUIs.

        Other Parameters
        ----------------
        interval : scalar
            Timer interval in milliseconds
        callbacks : list
            Sequence of (func, args, kwargs) where ``func(*args, **kwargs)``
            will be executed by the timer every *interval*.
        (   R   (   R#   R   R   (    (    s>   lib/python2.7/site-packages/matplotlib/backends/backend_gtk.pyt	   new_timer  s    c         C` sK   t  j j   x t  j   r, t  j t  q Wt  j j   t  j j   d  S(   N(   R   RY   t   threads_entert   events_pendingt   main_iterationR+   t   flusht   threads_leave(   R#   (    (    s>   lib/python2.7/site-packages/matplotlib/backends/backend_gtk.pyt   flush_events  s
    ()   R-   R.   Rs   RY   t   BUTTON_PRESS_MASKt   BUTTON_RELEASE_MASKt   EXPOSURE_MASKt   KEY_PRESS_MASKt   KEY_RELEASE_MASKt   ENTER_NOTIFY_MASKt   LEAVE_NOTIFY_MASKt   POINTER_MOTION_MASKt   POINTER_MOTION_HINT_MASKRJ   R7   RR   R?   R@   RA   RD   RE   RF   RG   RH   Rk   RB   R   R   RN   R   R   RC   R   t	   filetypest   copyR   t	   print_jpgR   R   R   R   (    (    (    s>   lib/python2.7/site-packages/matplotlib/backends/backend_gtk.pyR0   u   s   

7
	%																	


			*	t   FigureManagerGTKc           B` s\   e  Z d  Z d   Z d   Z d   Z d   Z e Z d   Z	 d   Z
 d   Z d   Z RS(	   ua  
    Attributes
    ----------
    canvas : `FigureCanvas`
        The FigureCanvas instance
    num : int or str
        The Figure number
    toolbar : gtk.Toolbar
        The gtk.Toolbar  (gtk only)
    vbox : gtk.VBox
        The gtk.VBox containing the canvas and toolbar (gtk only)
    window : gtk.Window
        The gtk.Window   (gtk only)

    c   	      ` s  t  j  |    t j    _  j j d d   j d    t r y  j j t  Wq t	 j
 d t j   d  q Xn  t j    _  j j  j   j j    j j    j j  j t t   j |   _ t  j j j j  } t  j j j j  }  j d  k	 ru j j    j j  j t t   j j   \ } } | | 7} n   j j | |    f d   }  j j  d |   j j  d |  t! j"   r j j    j j#   n   f d	   }  j j j$ |   j j%   d  S(
   Nu
   matplotlibu
   Matplotlibu	   Figure %du"   Could not load matplotlib icon: %si   c          ` s   t  j    d  S(   N(   R   RR   (   R   (   t   num(    s>   lib/python2.7/site-packages/matplotlib/backends/backend_gtk.pyRR      s    u   destroyu   delete_eventc         ` s#     j  d k	 r   j  j   n  d S(   u8   this will be called whenever the current axes is changedN(   R   R%   t   update(   t   fig(   R#   (    s>   lib/python2.7/site-packages/matplotlib/backends/backend_gtk.pyt   notify_axes_change(  s     (&   R   R7   R   t   WindowRn   t   set_wmclasst   set_window_titlet   window_icont   set_icon_from_filet   _logt   infot   syst   exc_infot   VBoxt   vboxt   addt   showt   canvast
   pack_startR+   t   _get_toolbarR   R   RP   t   bboxR|   RV   R%   t   pack_endR,   t   size_requestt   set_default_sizeR>   R4   t   is_interactiveR   t   add_axobservert
   grab_focus(	   R#   R   R   R   R   t   tb_wt   tb_hRR   R   (    (   R   R#   s>   lib/python2.7/site-packages/matplotlib/backends/backend_gtk.pyR7     sB    	c         G` s   t  |  d  r. |  j d  k	 r. |  j j   n  t  |  d  rM |  j j   n  t  |  d  rl |  j j   n  t  |  d  r |  j j   n  |  j j   t	 j
   d k r t j   r t j   d k r t j   n  d  S(   Nu   toolbaru   vboxu   windowu   canvasi    i   (   R   R   R%   RR   R   Rn   R   t   __dict__t   clearR   t   get_num_fig_managersR4   R   R   t
   main_levelt	   main_quit(   R#   R   (    (    s>   lib/python2.7/site-packages/matplotlib/backends/backend_gtk.pyRR   /  s    c         C` s1   |  j  j   |  j  j t  |  j  j t  d  S(   N(   Rn   R   t   set_keep_aboveR+   R,   (   R#   (    (    s>   lib/python2.7/site-packages/matplotlib/backends/backend_gtk.pyR   ?  s    c         C` s7   |  j  |  _  |  j  r& |  j j   n |  j j   d  S(   N(   t   _full_screen_flagRn   t
   fullscreent   unfullscreen(   R#   (    (    s>   lib/python2.7/site-packages/matplotlib/backends/backend_gtk.pyt   full_screen_toggleF  s    	c         C` s/   t  d d k r% t | |  j  } n d  } | S(   Nu   toolbaru   toolbar2(   R   t   NavigationToolbar2GTKRn   R%   (   R#   R   R   (    (    s>   lib/python2.7/site-packages/matplotlib/backends/backend_gtk.pyR   O  s    c         C` s   |  j  j   S(   N(   Rn   t	   get_title(   R#   (    (    s>   lib/python2.7/site-packages/matplotlib/backends/backend_gtk.pyt   get_window_titleX  s    c         C` s   |  j  j |  d  S(   N(   Rn   t	   set_title(   R#   t   title(    (    s>   lib/python2.7/site-packages/matplotlib/backends/backend_gtk.pyR   [  s    c         C` s   |  j  j | |  d S(   u   set the canvas size in pixelsN(   Rn   t   resize(   R#   R|   RV   (    (    s>   lib/python2.7/site-packages/matplotlib/backends/backend_gtk.pyR   ^  s    (   R-   R.   R/   R7   RR   R   R   R,   R   R   R   R   R   (    (    (    s>   lib/python2.7/site-packages/matplotlib/backends/backend_gtk.pyR     s   	6							R   c           B` sk   e  Z d    Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z	 d   Z
 d	   Z d
   Z RS(   c         C` s-   | |  _  t j j |   t j |  |  d  S(   N(   t   winR   t   ToolbarR7   R   (   R#   R   Rn   (    (    s>   lib/python2.7/site-packages/matplotlib/backends/backend_gtk.pyR7   g  s    	c         C` s   |  j  j |  d  S(   N(   R1   t	   set_label(   R#   t   s(    (    s>   lib/python2.7/site-packages/matplotlib/backends/backend_gtk.pyt   set_messagel  s    c         C` s%   |  j  j j t |  t j   d  S(   N(   R   Rn   t
   set_cursort   cursordR   R   (   R#   t   cursor(    (    s>   lib/python2.7/site-packages/matplotlib/backends/backend_gtk.pyR   o  s    c         C` s"   y
 |  `  Wn t k
 r n Xd  S(   N(   t   _pixmapBackt   AttributeError(   R#   R\   (    (    s>   lib/python2.7/site-packages/matplotlib/backends/backend_gtk.pyt   releases  s     
 c      	   C` s  |  j  j } | d k r d S| j   } |  j  j j j } | | } | | } t | |  }	 t | |  }
 g  t | |  t | |  |	 |
 f D] } t	 |  ^ q } y |  j
 \ } } Wn t k
 r| j d k r d S| j } g  | j j D] } t	 |  ^ q \ } } }	 }
 t	 |  | |
 } | | |	 |
 f } | t j j | |	 |
  f |  _
 |  j
 d j | | | | d d |	 |
  n X| j | | d d |  | j | t |  d S(   uK   adapted from http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/189744Ni   i    (   R   Rn   R%   t   new_gcRP   R   RV   t   abst   minR   R  R  t   inaxest   boundsR   RY   R   R   t   draw_rectangleR,   (   R#   R\   t   x0t   y0t   x1t   y1t   drawablet   gcRV   R   R   t   valt   rectt   lastrectt
   pixmapBackt   axt   lt   bt   axrect(    (    s>   lib/python2.7/site-packages/matplotlib/backends/backend_gtk.pyt   draw_rubberbandw  s.    

=	1!-c         C` s   |  j  t j  |  j   d  S(   N(   t	   set_styleR   t   TOOLBAR_ICONSt   _init_toolbar2_4(   R#   (    (    s>   lib/python2.7/site-packages/matplotlib/backends/backend_gtk.pyt   _init_toolbar  s    c   
      C` s  t  j j t d d  } t s1 t j   |  _ n  x |  j D] \ } } } } | d  k ru |  j
 t j   d  q; n  t  j j | | d  } t j   } | j |  t j | |  } |  j
 | d  | j d t |  |   t r | j |  q; | j |  j | d  q; Wt j   }	 |  j
 |	 d  |	 j t  |	 j t  t j   }	 |  j
 |	 d  t j   |  _ |	 j |  j  |  j   d  S(   Nu   datapathu   imagesiu   .pngu   clickedu   Private(   t   ost   patht   joinR   t   _new_tooltip_apiR   t   Tooltipst   tooltipst	   toolitemsR%   t   insertt   SeparatorToolItemt   Imaget   set_from_filet
   ToolButtonR>   t   getattrt   set_tooltip_textt   set_tooltipt   set_drawR,   t
   set_expandR+   t   ToolItemt   LabelR1   R   t   show_all(
   R#   t   basedirt   textt   tooltip_textt
   image_filet   callbackt   fnamet   imaget   tbuttont   toolitem(    (    s>   lib/python2.7/site-packages/matplotlib/backends/backend_gtk.pyR    s2    c         C` sf   t  d d d |  j d t j j t d  d |  j j   d |  j j    } | j	 |  j j
    | S(   NR   u   Save the figureR   R  u   savefig.directoryR   t   default_filetype(   t   FileChooserDialogR   R  R  t
   expanduserR   R   t   get_supported_filetypest   get_default_filetypet   set_current_namet   get_default_filename(   R#   t   fc(    (    s>   lib/python2.7/site-packages/matplotlib/backends/backend_gtk.pyt   get_filechooser  s    	c         G` s   |  j    } | j   \ } } | j   | r t j j t d  } | d k rr t j j t j	 |   t d <n  y |  j
 j j | d | Wq t k
 r } t t |  d |  q Xn  d  S(   Nu   savefig.directoryu    Rx   R   (   RC  t   get_filename_from_userRR   R  R  R=  R   t   dirnameR   t	   text_typeR   RP   t   savefigt	   ExceptionR   R   (   R#   R   t   chooserR7  Rx   t	   startpatht   e(    (    s>   lib/python2.7/site-packages/matplotlib/backends/backend_gtk.pyt   save_figure  s    
"c   	      C` s  t  d d  } |  j |  } | j d d  t |  j j |  } t | j j  } t | j j	  } t
 j   } t r y | j t  Wq q Xn  | j d  | j | |  t
 j   } | j |  | j   | j   | j | t t  | j   d  S(   Nt   figsizei   i   t   topg?u   Subplot Configuration Tool(   i   i   (   R   t   _get_canvast   subplots_adjustR   R   RP   R   R   R|   RV   R   R   R   R   R   R   R   R   R   R   R+   (	   R#   Rc   t   toolfigR   t   toolR   R   Rn   R   (    (    s>   lib/python2.7/site-packages/matplotlib/backends/backend_gtk.pyt   configure_subplots  s(    

c         C` s
   t  |  S(   N(   R0   (   R#   R   (    (    s>   lib/python2.7/site-packages/matplotlib/backends/backend_gtk.pyRO    s    (   R-   R.   R7   R   R   R  R  R  R  RC  RL  RS  RO  (    (    (    s>   lib/python2.7/site-packages/matplotlib/backends/backend_gtk.pyR   f  s   					"		"	
		R<  c           B` sP   e  Z d  Z d d e j e j e j e j e j	 f d g  d d  Z
 d   Z RS(   u^   GTK+ 2.4 file selector which presents the user with a menu
    of supported image formats
    u	   Save filec         ` s  t  t    j | | | |  t  t    j t    j t j  | sa t j	   t j
 } n    j |    j d |  t j d d  } | j t j d  d t t j t j  }	 t j |	  }
 t j   } |
 j | t  |
 j | d d  | j |
  |   _ t t j |     _ d } xO t   j  D]> \ } \ } } |
 j d | | f  | | k rA| } qAqAW|
 j |  |   _ d    f d	  } |
 j! d
 |  | j"     j# |  d  S(   Nu   image.t   spacingi
   u   File Format:t   expandu   texti    u	   %s (*.%s)c         ` s   t  j j   j    \ } } t  j j |  \ } } | d }   j |  j   d } |   _ |   j k r | d | } n& | d k r | j	 d  d | } n    j
 |  d S(   u   File extension changedi   i    u   .u    N(   R  R  t   splitt   get_filenamet   splitextt   sorted_filetypest
   get_activet   extR   t   rstripR@  (   t   cboxR   t   headR   t   rootR[  t   new_ext(   R#   (    s>   lib/python2.7/site-packages/matplotlib/backends/backend_gtk.pyt   cb_cbox_changed%  s    
	u   changed($   t   superR<  R7   t   set_do_overwrite_confirmationR+   t   set_default_responseR   t   RESPONSE_OKR  t   getcwdt   sept   set_current_folderR@  t   HBoxR   R0  R,   t	   ListStoreR   t   TYPE_STRINGt   ComboBoxt   CellRendererTextt   add_attributeR   t   sortedR   t	   iteritemsRY  t	   enumeratet   append_textt
   set_activeR[  R%   R>   R1  t   set_extra_widget(   R#   R   R   t   actiont   buttonsR  R   R;  t   hboxt	   liststoreR]  t   cellt   defaultt   iR[  t   nameRa  (    (   R#   s>   lib/python2.7/site-packages/matplotlib/backends/backend_gtk.pyR7     s8    
	"	
c         C` sL   x< t  r> d  } |  j   t t j  k r. Pn  |  j   } Pq W| |  j f S(   N(   R+   R%   t   runR   R   Re  RW  R[  (   R#   R   (    (    s>   lib/python2.7/site-packages/matplotlib/backends/backend_gtk.pyRD  8  s    	N(   R-   R.   R/   R%   R   t   FILE_CHOOSER_ACTION_SAVEt   STOCK_CANCELt   RESPONSE_CANCELt
   STOCK_SAVERe  R7   RD  (    (    (    s>   lib/python2.7/site-packages/matplotlib/backends/backend_gtk.pyR<    s   4t   DialogLinepropsc           B` s  e  Z d  Z d Z g  e j j D] Z e j   r e ^ q Z	 d   e
 e	  D Z g  e j j D] Z e e e j  r` e ^ q` Z d	   e
 e  D Z d
   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z RS(   u0   
    A GUI dialog for controlling lineprops
    u   on_combobox_lineprops_changedu   on_combobox_linestyle_changedu   on_combobox_marker_changedu"   on_colorbutton_linestyle_color_setu#   on_colorbutton_markerface_color_setu$   on_dialog_lineprops_okbutton_clickedu(   on_dialog_lineprops_cancelbutton_clickedc         C` s   i  |  ] \ } } | |  q S(    (    (   R   R{  R   (    (    s>   lib/python2.7/site-packages/matplotlib/backends/backend_gtk.pys
   <dictcomp>R  s   	 c         C` s   i  |  ] \ } } | |  q S(    (    (   R   R{  R   (    (    s>   lib/python2.7/site-packages/matplotlib/backends/backend_gtk.pys
   <dictcomp>V  s   	 c         ` s  d d  l  } t j   } t j j | d  } t j j |  sR t d |   n  t   _	 t
   _ | j j | d    _   j j   f d     j D    j j d    _ |   _   j j d  } | j d  |   _   j j d  } x   j D] } | j |  qW| j d  |   _   j j d  } x   j D] } | j |  qJW| j d  |   _ d   _ t
   _	 d  S(	   Ni    u   lineprops.gladeu.   Could not find gladefile lineprops.glade in %su   dialog_linepropsc         ` s"   i  |  ] } t    |  |  q S(    (   R*  (   R   R   (   R#   (    s>   lib/python2.7/site-packages/matplotlib/backends/backend_gtk.pys
   <dictcomp>e  s   	 u   combobox_linepropsu   combobox_linestylesu   combobox_markers(   t	   gtk.gladeR4   t   get_data_pathR  R  R   t   existst   IOErrorR,   t   _initedR+   t
   _updatesont   gladet   XMLt   wtreet   signal_autoconnectt   signalst
   get_widgett   dlgR   Rs  t   cbox_linepropst
   linestylesRr  t   cbox_linestylesR   t   cbox_markerst   _lastcnt(   R#   R   R   t   datadirt	   gladefileR]  t   lst   m(    (   R#   s>   lib/python2.7/site-packages/matplotlib/backends/backend_gtk.pyR7   X  s8    								c         C` s   t  |  _ |  j } x. t |  j d d d  D] } | j |  q, Wx$ |  j D] } | j | j    qM W| j	 d  t
 |  _ t |  j  |  _ |  j j   d S(   u   populate the combo boxi   ii    N(   R,   R  R  t   rangeR  t   remove_textR   Rr  t	   get_labelRs  R+   R(   R  R   (   R#   R]  R{  t   line(    (    s>   lib/python2.7/site-packages/matplotlib/backends/backend_gtk.pyR   }  s    		 	c         C` s    |  j  j   } |  j | } | S(   u   get the active line(   R  RZ  R   (   R#   t   indR  (    (    s>   lib/python2.7/site-packages/matplotlib/backends/backend_gtk.pyt   get_active_line  s    c         C` s    |  j  j   } |  j | } | S(   u   get the active lineinestyle(   R  RZ  R  (   R#   R  R  (    (    s>   lib/python2.7/site-packages/matplotlib/backends/backend_gtk.pyt   get_active_linestyle  s    c         C` s    |  j  j   } |  j | } | S(   u   get the active lineinestyle(   R  RZ  R   (   R#   R  R  (    (    s>   lib/python2.7/site-packages/matplotlib/backends/backend_gtk.pyt   get_active_marker  s    c   
      C` sB  |  j  s |  j r d S|  j   } |  j   } |  j   } | j |  | j |  |  j j d  } | j	   } g  | j
 | j | j f D] } | d ^ q \ } } }	 | j | | |	 f  |  j j d  } | j	   } g  | j
 | j | j f D] } | d ^ q \ } } }	 | j | | |	 f  | j j j   d S(   u-   update the active line props from the widgetsNu   colorbutton_linestyleg    @u   colorbutton_markerface(   R  R  R  R  R  t   set_linestylet
   set_markerR  R  t	   get_colort   redt   greent   bluet	   set_colort   set_markerfacecolorRP   R   R   (
   R#   R  R  t   markerRc   t   colorR  t   rt   gR  (    (    s>   lib/python2.7/site-packages/matplotlib/backends/backend_gtk.pyt   _update  s      88c   	      C` sm  |  j  s d St |  _ |  j   } | j   } | d k rC d } n  |  j j |  j |  | j	   } | d k r{ d } n  |  j
 j |  j |  t j | j    } t j j g  | d  D] } t | d  ^ q   } |  j j d  } | j |  t j | j    } t j j g  | d  D] } t | d  ^ q"  } |  j j d  } | j |  t |  _ d S(   u'   update the widgets from the active lineNu   Nonei   i  u   colorbutton_linestyleu   colorbutton_markerface(   R  R,   R  R  t   get_linestyleR%   R  Rs  t
   linestyledt
   get_markerR  t   markerdt   mcolorst   to_rgbaR  R   RY   t   ColorR   R  R  R  t   get_markerfacecolorR+   (	   R#   t   itemR  R  R  t   rgbaR  R  Rc   (    (    s>   lib/python2.7/site-packages/matplotlib/backends/backend_gtk.pyt   on_combobox_lineprops_changed  s*    	 	 	 	33c         C` s   |  j    d  S(   N(   R  (   R#   R  (    (    s>   lib/python2.7/site-packages/matplotlib/backends/backend_gtk.pyt   on_combobox_linestyle_changed  s    c         C` s   |  j    d  S(   N(   R  (   R#   R  (    (    s>   lib/python2.7/site-packages/matplotlib/backends/backend_gtk.pyt   on_combobox_marker_changed  s    c         C` s   |  j    d  S(   N(   R  (   R#   Rc   (    (    s>   lib/python2.7/site-packages/matplotlib/backends/backend_gtk.pyt"   on_colorbutton_linestyle_color_set  s    c         C` s   |  j    d S(   u!   called colorbutton marker clickedN(   R  (   R#   Rc   (    (    s>   lib/python2.7/site-packages/matplotlib/backends/backend_gtk.pyt#   on_colorbutton_markerface_color_set  s    c         C` s   |  j    |  j j   d  S(   N(   R  R  t   hide(   R#   Rc   (    (    s>   lib/python2.7/site-packages/matplotlib/backends/backend_gtk.pyt$   on_dialog_lineprops_okbutton_clicked  s    
c         C` s   |  j  j   d  S(   N(   R  R  (   R#   Rc   (    (    s>   lib/python2.7/site-packages/matplotlib/backends/backend_gtk.pyt(   on_dialog_lineprops_cancelbutton_clicked  s    (   u   on_combobox_lineprops_changedu   on_combobox_linestyle_changedu   on_combobox_marker_changedu"   on_colorbutton_linestyle_color_setu#   on_colorbutton_markerface_color_setu$   on_dialog_lineprops_okbutton_clickedu(   on_dialog_lineprops_cancelbutton_clicked(    R-   R.   R/   R  R   t   Line2Dt
   lineStylesR  t   stripR  Rq  R  R   t   MarkerStyleR  R   R   R   R  R7   R   R  R  R  R  R  R  R  R  R  R  R  (    (    (    s>   lib/python2.7/site-packages/matplotlib/backends/backend_gtk.pyR  C  s4         +	%											i   u   win32u   matplotlib.pngu   matplotlib.svgu   datapathu   imagesu"   Could not load matplotlib icon: %sc      	   C` s   | d  k	 r= | j   } | j   t j @d k r= d  } q= n  t |  t j  sj d j t	 t
 |    }  n  t j d | d t j d t j d |   } | j   | j   d  S(   Ni    u   ,R   R_   Rv  t   message_format(   R%   t   get_toplevelR   R   t   TOPLEVELR   R   R   R   t   mapR   t   MessageDialogt   MESSAGE_ERRORt
   BUTTONS_OKR}  RR   (   t   msgR   t   dialog(    (    s>   lib/python2.7/site-packages/matplotlib/backends/backend_gtk.pyR     s    				
t   _BackendGTKc           B` s2   e  Z e Z e Z e d     Z e d    Z RS(   c         C` s   |  j  j   d  S(   N(   R   R   (   t   manager(    (    s>   lib/python2.7/site-packages/matplotlib/backends/backend_gtk.pyt   trigger_manager_draw  s    c           C` s#   t  j   d k r t  j   n  d  S(   Ni    (   R   R   t   main(    (    (    s>   lib/python2.7/site-packages/matplotlib/backends/backend_gtk.pyt   mainloop
  s    (	   R-   R.   R0   t   FigureCanvasR   t   FigureManagert   staticmethodR  R  (    (    (    s>   lib/python2.7/site-packages/matplotlib/backends/backend_gtk.pyR    s   (W   t
   __future__R    R   R   R   R   t   loggingR  R   t   warningst   PY3t   warnt   ImportWarningR   R   RY   t   pangot   ImportErrort   pygtk_version_requiredt   pygtk_versionR!  R4   t   matplotlib._pylab_helpersR   t   matplotlib.backend_basesR   R   R   R   R	   R
   t   matplotlib.backends.backend_gdkR   R   t   matplotlib.cbookR   R   t   matplotlib.figureR   t   matplotlib.widgetsR   R   R   R  R   R   R   t	   getLoggerR-   R   t   backend_versiont   PIXELS_PER_INCHt   filterwarningst   Warningt   Cursort   FLEURt   MOVEt   HAND2t   HANDt   LEFT_PTRt   POINTERt   TCROSSt   SELECT_REGIONt   WATCHt   WAITR   R   R   R8   R0   R   R   R   R<  t   objectR  t   platformt   icon_filenameR  R   R   R%   R   R   R   t   exportR  (    (    (    s>   lib/python2.7/site-packages/matplotlib/backends/backend_gtk.pyt   <module>   sv   "	
 	.(	. u}K'	 	