mò
­fIc           @   s×   d  Z  d k Z d k Z d k Z d k Z d k l Z d k l Z l	 Z	 l
 Z
 d k l Z d f  d „  ƒ  YZ d e	 f d „  ƒ  YZ d	 e	 f d
 „  ƒ  YZ d e	 f d „  ƒ  YZ d „  Z e d j o 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
N(   s   ListedToplevel(   s   TreeNodes   TreeItems   ScrolledCanvas(   s   idleConft   ClassBrowserc           B   s8   t  Z d „  Z d  d „ Z d „  Z d „  Z d „  Z RS(   Nc         C   s=   | |  _  t i i | d |  i  d ƒ |  _ |  i | ƒ d  S(   Ni    s   .py(   t   namet   selft   ost   patht   joint   filet   initt   flist(   R   R   R   R   (    (    t1   /mit/python/lib/python2.4/idlelib/ClassBrowser.pyt   __init__   s    	#c         C   s   |  i i ƒ  |  i i ƒ  d  S(   N(   R   t   topt   destroyt   node(   R   t   event(    (    R	   t   close   s    c         C   s  | |  _  t i i ƒ  t | i ƒ |  _ } | i d |  i	 ƒ | i
 d |  i	 ƒ |  i ƒ  | i ƒ  t i d d d ƒ } t i | d ƒ d } t | d | d	 d
 d d ƒ} | i i d d d d ƒ |  i ƒ  } t | i d  | ƒ |  _ } | i ƒ  | i ƒ  d  S(   Nt   WM_DELETE_WINDOWs   <Escape>t   maint   ThemeR   t   normalt
   backgroundt   bgt   highlightthicknessi    t	   takefocusi   t   expandt   fillt   both(   R   R   t   pyclbrt   _modulest   cleart   ListedToplevelt   rootR   t   protocolR   t   bindt   settitlet	   focus_sett   idleConft	   GetOptiont   themet   GetHighlightR   t   ScrolledCanvast   sct   framet   packt   rootnodet   itemt   TreeNodet   canvast   NoneR   t   updateR   (   R   R   R   R-   R&   R   R)   R   (    (    R	   R   #   s    	


c         C   s+   |  i i d |  i ƒ |  i i d ƒ d  S(   Ns   Class Browser - s   Class Browser(   R   R   t   wm_titleR   t   wm_iconname(   R   (    (    R	   R"   7   s    c         C   s   t  |  i ƒ S(   N(   t   ModuleBrowserTreeItemR   R   (   R   (    (    R	   R,   ;   s    (   t   __name__t
   __module__R
   R0   R   R   R"   R,   (    (    (    R	   R       s
   			R4   c           B   sG   t  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   Nc         C   s   | |  _  d  S(   N(   R   R   (   R   R   (    (    R	   R
   @   s    c         C   s   t  i i |  i ƒ S(   N(   R   R   t   basenameR   R   (   R   (    (    R	   t   GetTextC   s    c         C   s   d S(   Nt   python(    (   R   (    (    R	   t   GetIconNameF   s    c         C   sF   g  } x9 |  i ƒ  D]+ } t | |  i |  i ƒ } | i | ƒ q W| S(   N(	   t   sublistR   t   listclassesR   t   ClassBrowserTreeItemt   classesR   R-   t   append(   R   R-   R;   R   (    (    R	   t
   GetSubListI   s     c         C   s]   t  i i |  i d ƒ d j o d  Sn t  i i |  i ƒ p d  Sn t i i |  i ƒ d  S(   Niýÿÿÿs   .py(	   R   R   t   normcaseR   R   t   existst   PyShellR   t   open(   R   (    (    R	   t   OnDoubleClickP   s
     c         C   s   t  i i |  i d ƒ d j S(   Niýÿÿÿs   .py(   R   R   RA   R   R   (   R   (    (    R	   t   IsExpandableW   s    c         C   sã  t  i i |  i ƒ \ } } t  i i | ƒ \ }
 } t  i i	 | ƒ d j o g  Sn y  t
 i |
 | g t i ƒ } Wn t j
 o } g  Sn Xg  } h  |  _ x	| i ƒ  D]û \ }	 } | i |
 j oß |	 } t | d ƒ o¢ | i o˜ g  } xt | i D]i } t | ƒ t d ƒ j o
 | } n4 | i } | i | i j o d | i | f } n | i | ƒ qø W| d d i | ƒ } n | i | i | f ƒ | |  i | <q¬ q¬ W| i ƒ  g  } x! | D] \ } } | i | ƒ qÂW| S(   Ns   .pyt   supert    s   %s.%ss   (%s)s   , ("   R   R   t   splitR   R   t   dirt   splitextR   t   extRA   R   t   readmodule_ext   syst   dictt   ImportErrort   msgt   itemsR>   t   keyt   clt   modulet   st   hasattrRG   t   superst   supt   typet   snameR?   R   t   linenot   sortt   listR-   (   R   RT   R   RL   RO   RY   RQ   RX   R[   RS   R   RR   R^   R-   RV   RJ   (    (    R	   R<   Z   sB     		 
 
	
 (	   R5   R6   R
   R8   R:   R@   RE   RF   R<   (    (    (    R	   R4   >   s   						R=   c           B   sG   t  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   Nc         C   ss   | |  _  | |  _ | |  _ y |  i |  i  |  _ Wn" t t f j
 o d  |  _ n Xt |  i t	 i
 ƒ |  _ d  S(   N(   R   R   R>   R   RT   t
   IndexErrort   KeyErrorR0   t
   isinstanceR   t   Functiont
   isfunction(   R   R   R>   R   (    (    R	   R
   }   s    			c         C   s,   |  i o d |  i d Sn d |  i Sd  S(   Ns   def s   (...)s   class (   R   Rc   R   (   R   (    (    R	   R8   ‡   s    
c         C   s   |  i o d Sn d Sd  S(   NR9   t   folder(   R   Rc   (   R   (    (    R	   R:      s    
c         C   s<   |  i o. y |  i i SWq8 t j
 o t Sq8 Xn d  S(   N(   R   RT   t   methodst   AttributeErrort   False(   R   (    (    R	   RF   “   s
    
c         C   sX   |  i p g  Sn g  } x9 |  i ƒ  D]+ } t | |  i |  i ƒ } | i | ƒ q% W| S(   N(	   R   RT   R;   t   listmethodsR   t   MethodBrowserTreeItemR   R-   R?   (   R   R-   R;   R   (    (    R	   R@   š   s    
 c         C   sg   t  i i |  i ƒ p d  Sn t i i |  i ƒ } t	 |  i
 d ƒ o |  i
 i } | i | ƒ n d  S(   NR\   (   R   R   RB   R   R   RC   R   RD   t   editRW   RT   R\   t   gotoline(   R   Rj   R\   (    (    R	   RE   £   s    c         C   s†   |  i p g  Sn g  } x3 |  i i i ƒ  D] \ } } | i | | f ƒ q+ W| i ƒ  g  } x! | D] \ } } | i | ƒ qe W| S(   N(
   R   RT   RR   Re   R   R\   R?   R]   R^   R-   (   R   R   RR   R^   R-   R\   (    (    R	   Rh   «   s    
 
 (	   R5   R6   R
   R8   R:   RF   R@   RE   Rh   (    (    (    R	   R=   {   s   	
						Ri   c           B   s5   t  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   Nc         C   s   | |  _  | |  _ | |  _ d  S(   N(   R   R   RT   R   (   R   R   RT   R   (    (    R	   R
   ¹   s    		c         C   s   d |  i d S(   Ns   def s   (...)(   R   R   (   R   (    (    R	   R8   ¾   s    c         C   s   d S(   NR9   (    (   R   (    (    R	   R:   Á   s    c         C   s   d S(   Ni    (    (   R   (    (    R	   RF   Ä   s    c         C   sQ   t  i i |  i ƒ p d  Sn t i i |  i ƒ } | i	 |  i
 i |  i ƒ d  S(   N(   R   R   RB   R   R   RC   R   RD   Rj   Rk   RT   Re   R   (   R   Rj   (    (    R	   RE   Ç   s    (   R5   R6   R
   R8   R:   RF   RE   (    (    (    R	   Ri   ·   s
   				c          C   s¿   y
 t  } WnL t j
 o@ t i d } t i d o t i d } qY t i d } n Xt i i | ƒ \ } } t i i	 | ƒ d }  t t i |  | g ƒ t i t i j o t ƒ  n d  S(   Ni    i   (   t   __file__R   t	   NameErrorRN   t   argvR   R   RI   RJ   RK   R   R    RC   R   t   stdint	   __stdin__t   mainloop(   R   R   RJ   (    (    R	   R   Í   s    
t   __main__(   t   __doc__R   RN   R   RC   t
   WindowListR   t
   TreeWidgetR.   t   TreeItemR(   t   configHandlerR$   R    R4   R=   Ri   R   R5   (   R$   R(   R.   Ri   R4   R    RN   RC   R   Rv   R=   R   R   R   (    (    R	   t   ?   s   				(=<	