ó
t®¸Qc           @   sî   d  Z  d d l Z d d l Z d d l Z d d l m Z d d l m Z d d l m	 Z	 m
 Z
 m Z d d l m Z d d d „  ƒ  YZ d	 e
 f d
 „  ƒ  YZ d e
 f d „  ƒ  YZ d e
 f d „  ƒ  YZ d „  Z e d k rê e ƒ  n  d S(   s„  Class browser.

XXX TO DO:

- reparse when source changed (maybe just a button would be OK?)
    (or recheck on window popup)
- add popup menu with more options (e.g. doc strings, base classes, imports)
- show function argument list? (have to do pattern matching on source)
- should the classes and methods lists also be in the module's menu bar?
- add base classes to class browser tree
iÿÿÿÿN(   t   PyShell(   t   ListedToplevel(   t   TreeNodet   TreeItemt   ScrolledCanvas(   t   idleConft   ClassBrowserc           B   s8   e  Z d  „  Z d d „ Z d „  Z d „  Z d „  Z RS(   c         C   s=   | |  _  t j j | d |  j  d ƒ |  _ |  j | ƒ d  S(   Ni    s   .py(   t   namet   ost   patht   joint   filet   init(   t   selft   flistR   R	   (    (    s*   /sys/lib/python2.7/idlelib/ClassBrowser.pyt   __init__   s    	#c         C   s   |  j  j ƒ  |  j j ƒ  d  S(   N(   t   topt   destroyt   node(   R   t   event(    (    s*   /sys/lib/python2.7/idlelib/ClassBrowser.pyt   close   s    c         C   s  | |  _  t j j ƒ  t | j ƒ |  _ } | j d |  j ƒ | j	 d |  j ƒ |  j
 ƒ  | j ƒ  t j d d d ƒ } t j | d ƒ d } t | d | d	 d
 d d ƒ} | j j d d d d ƒ |  j ƒ  } t | j d  | ƒ |  _ } | j ƒ  | j ƒ  d  S(   Nt   WM_DELETE_WINDOWs   <Escape>t   maint   ThemeR   t   normalt
   backgroundt   bgt   highlightthicknessi    t	   takefocusi   t   expandt   fillt   both(   R   t   pyclbrt   _modulest   clearR   t   rootR   t   protocolR   t   bindt   settitlet	   focus_setR   t	   GetOptiont   GetHighlightR   t   framet   packt   rootnodeR   t   canvast   NoneR   t   updateR   (   R   R   R   t   themeR   t   sct   itemR   (    (    s*   /sys/lib/python2.7/idlelib/ClassBrowser.pyR   #   s    	


c         C   s+   |  j  j d |  j ƒ |  j  j d ƒ d  S(   Ns   Class Browser - s   Class Browser(   R   t   wm_titleR   t   wm_iconname(   R   (    (    s*   /sys/lib/python2.7/idlelib/ClassBrowser.pyR&   7   s    c         C   s   t  |  j ƒ S(   N(   t   ModuleBrowserTreeItemR   (   R   (    (    s*   /sys/lib/python2.7/idlelib/ClassBrowser.pyR,   ;   s    N(   t   __name__t
   __module__R   R.   R   R   R&   R,   (    (    (    s*   /sys/lib/python2.7/idlelib/ClassBrowser.pyR      s
   			R5   c           B   sG   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   c         C   s   | |  _  d  S(   N(   R   (   R   R   (    (    s*   /sys/lib/python2.7/idlelib/ClassBrowser.pyR   @   s    c         C   s   t  j j |  j ƒ S(   N(   R   R	   t   basenameR   (   R   (    (    s*   /sys/lib/python2.7/idlelib/ClassBrowser.pyt   GetTextC   s    c         C   s   d S(   Nt   python(    (   R   (    (    s*   /sys/lib/python2.7/idlelib/ClassBrowser.pyt   GetIconNameF   s    c         C   sF   g  } x9 |  j  ƒ  D]+ } t | |  j |  j ƒ } | j | ƒ q W| S(   N(   t   listclassest   ClassBrowserTreeItemt   classesR   t   append(   R   t   sublistR   R2   (    (    s*   /sys/lib/python2.7/idlelib/ClassBrowser.pyt
   GetSubListI   s
    c         C   sS   t  j j |  j d ƒ d k r# d  St  j j |  j ƒ s< d  St j j |  j ƒ d  S(   Niýÿÿÿs   .py(   R   R	   t   normcaseR   t   existsR    R   t   open(   R   (    (    s*   /sys/lib/python2.7/idlelib/ClassBrowser.pyt   OnDoubleClickP   s
    c         C   s   t  j j |  j d ƒ d k S(   Niýÿÿÿs   .py(   R   R	   RB   R   (   R   (    (    s*   /sys/lib/python2.7/idlelib/ClassBrowser.pyt   IsExpandableW   s    c         C   sÐ  t  j j |  j ƒ \ } } t  j j | ƒ \ } } t  j j | ƒ d k rO g  Sy  t j | | g t j ƒ } Wn t	 k
 r… } g  SXg  } i  |  _
 x | j ƒ  D]ò \ } }	 |	 j | k r¢ | }
 t |	 d ƒ rn|	 j rng  } xp |	 j D]e } t | ƒ t d ƒ k r| } n1 | j } | j |	 j k rCd | j | f } n  | j | ƒ që W|
 d d j | ƒ }
 n  | j |	 j |
 f ƒ |	 |  j
 |
 <q¢ q¢ W| j ƒ  g  } x! | D] \ } }
 | j |
 ƒ q¯W| S(   Ns   .pyt   supert    s   %s.%ss   (%s)s   , (   R   R	   t   splitR   t   splitextRB   R    t   readmodule_ext   syst   ImportErrorR>   t   itemst   modulet   hasattrRG   t   typeR   R?   R
   t   linenot   sort(   R   t   dirR   R   t   extt   dictt   msgRN   t   keyt   clt   st   superst   supt   snamet   listR2   (    (    s*   /sys/lib/python2.7/idlelib/ClassBrowser.pyR<   Z   s<     			
(	   R6   R7   R   R9   R;   RA   RE   RF   R<   (    (    (    s*   /sys/lib/python2.7/idlelib/ClassBrowser.pyR5   >   s   						R=   c           B   sG   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   c         C   sq   | |  _  | |  _ | |  _ y |  j |  j  |  _ Wn  t t f k
 rT d  |  _ n Xt |  j t j	 ƒ |  _
 d  S(   N(   R   R>   R   RY   t
   IndexErrort   KeyErrorR.   t
   isinstanceR    t   Functiont
   isfunction(   R   R   R>   R   (    (    s*   /sys/lib/python2.7/idlelib/ClassBrowser.pyR   }   s    			c         C   s'   |  j  r d |  j d Sd |  j Sd  S(   Ns   def s   (...)s   class (   Rc   R   (   R   (    (    s*   /sys/lib/python2.7/idlelib/ClassBrowser.pyR9   ‡   s    	c         C   s   |  j  r d Sd Sd  S(   NR:   t   folder(   Rc   (   R   (    (    s*   /sys/lib/python2.7/idlelib/ClassBrowser.pyR;      s    	c         C   s5   |  j  r1 y |  j  j SWq1 t k
 r- t SXn  d  S(   N(   RY   t   methodst   AttributeErrort   False(   R   (    (    s*   /sys/lib/python2.7/idlelib/ClassBrowser.pyRF   “   s
    	c         C   sS   |  j  s g  Sg  } x9 |  j ƒ  D]+ } t | |  j  |  j ƒ } | j | ƒ q  W| S(   N(   RY   t   listmethodst   MethodBrowserTreeItemR   R?   (   R   R@   R   R2   (    (    s*   /sys/lib/python2.7/idlelib/ClassBrowser.pyRA   š   s    	c         C   s`   t  j j |  j ƒ s d  St j j |  j ƒ } t |  j d ƒ r\ |  j j	 } | j
 | ƒ n  d  S(   NRR   (   R   R	   RC   R   R    R   RD   RP   RY   RR   t   gotoline(   R   t   editRR   (    (    s*   /sys/lib/python2.7/idlelib/ClassBrowser.pyRE   £   s    c         C   s   |  j  s g  Sg  } x3 |  j  j j ƒ  D] \ } } | j | | f ƒ q& W| j ƒ  g  } x! | D] \ } } | j | ƒ q` W| S(   N(   RY   Re   RN   R?   RS   (   R   RN   R   RR   R^   R2   (    (    s*   /sys/lib/python2.7/idlelib/ClassBrowser.pyRh   «   s    	
(	   R6   R7   R   R9   R;   RF   RA   RE   Rh   (    (    (    s*   /sys/lib/python2.7/idlelib/ClassBrowser.pyR=   {   s   	
						Ri   c           B   s5   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z RS(   c         C   s   | |  _  | |  _ | |  _ d  S(   N(   R   RY   R   (   R   R   RY   R   (    (    s*   /sys/lib/python2.7/idlelib/ClassBrowser.pyR   ¹   s    		c         C   s   d |  j  d S(   Ns   def s   (...)(   R   (   R   (    (    s*   /sys/lib/python2.7/idlelib/ClassBrowser.pyR9   ¾   s    c         C   s   d S(   NR:   (    (   R   (    (    s*   /sys/lib/python2.7/idlelib/ClassBrowser.pyR;   Á   s    c         C   s   d S(   Ni    (    (   R   (    (    s*   /sys/lib/python2.7/idlelib/ClassBrowser.pyRF   Ä   s    c         C   sL   t  j j |  j ƒ s d  St j j |  j ƒ } | j |  j j	 |  j
 ƒ d  S(   N(   R   R	   RC   R   R    R   RD   Rj   RY   Re   R   (   R   Rk   (    (    s*   /sys/lib/python2.7/idlelib/ClassBrowser.pyRE   Ç   s    (   R6   R7   R   R9   R;   RF   RE   (    (    (    s*   /sys/lib/python2.7/idlelib/ClassBrowser.pyRi   ·   s
   				c          C   s¹   y
 t  }  WnH t k
 rT t j d }  t j d rD t j d }  qU t j d }  n Xt j j |  ƒ \ } }  t j j |  ƒ d } t t	 j
 | | g ƒ t j t j k rµ t ƒ  n  d  S(   Ni    i   (   t   __file__t	   NameErrorRL   t   argvR   R	   RI   RJ   R   R    R   t   stdint	   __stdin__t   mainloop(   R   RT   R   (    (    s*   /sys/lib/python2.7/idlelib/ClassBrowser.pyR   Í   s    
t   __main__(    (   t   __doc__R   RL   R    t   idlelibR    t   idlelib.WindowListR   t   idlelib.TreeWidgetR   R   R   t   idlelib.configHandlerR   R   R5   R=   Ri   R   R6   (    (    (    s*   /sys/lib/python2.7/idlelib/ClassBrowser.pyt   <module>   s   (=<	