ó
§xxTc           @   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ý d d l m Z e 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   s;   e  Z e d  „ Z d d „ Z d „  Z d „  Z d „  Z RS(   c         C   sF   | |  _  t j j | d |  j  d ƒ |  _ | |  _ |  j | ƒ d S(   sH   
        _htest - bool, change box when location running htest.
        i    s   .pyN(   t   namet   ost   patht   joint   filet   _htestt   init(   t   selft   flistR   R	   R   (    (    s@   /opt/xtal/ccp4-6.5-linux32/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@   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/idlelib/ClassBrowser.pyt   close#   s    c         C   sA  | |  _  t j j ƒ  t | j ƒ |  _ } | j d |  j ƒ | j	 d |  j ƒ |  j
 r‹ | j d | j j ƒ  | j j ƒ  d f ƒ n  |  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>s   +%d+%diÈ   t   maint   ThemeR   t   normalt
   backgroundt   bgt   highlightthicknessi    t	   takefocusi   t   expandt   fillt   both(   R   t   pyclbrt   _modulest   clearR   t   rootR   t   protocolR   t   bindR   t   geometryt   winfo_rootxt   winfo_rootyt   settitlet	   focus_setR   t	   GetOptiont   GetHighlightR   t   framet   packt   rootnodeR   t   canvast   NoneR   t   updateR   (   R   R   R   t   themeR   t   sct   itemR   (    (    s@   /opt/xtal/ccp4-6.5-linux32/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@   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/idlelib/ClassBrowser.pyR*   >   s    c         C   s   t  |  j ƒ S(   N(   t   ModuleBrowserTreeItemR   (   R   (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/idlelib/ClassBrowser.pyR0   B   s    N(	   t   __name__t
   __module__t   FalseR   R2   R   R   R*   R0   (    (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/idlelib/ClassBrowser.pyR      s
   		R9   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@   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/idlelib/ClassBrowser.pyR   G   s    c         C   s   t  j j |  j ƒ S(   N(   R   R	   t   basenameR   (   R   (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/idlelib/ClassBrowser.pyt   GetTextJ   s    c         C   s   d S(   Nt   python(    (   R   (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/idlelib/ClassBrowser.pyt   GetIconNameM   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   R6   (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/idlelib/ClassBrowser.pyt
   GetSubListP   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@   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/idlelib/ClassBrowser.pyt   OnDoubleClickW   s
    c         C   s   t  j j |  j d ƒ d k S(   Niýÿÿÿs   .py(   R   R	   RG   R   (   R   (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/idlelib/ClassBrowser.pyt   IsExpandable^   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   splitextRG   R!   t   readmodule_ext   syst   ImportErrorRC   t   itemst   modulet   hasattrRL   t   typeR   RD   R
   t   linenot   sort(   R   t   dirR   R   t   extt   dictt   msgRS   t   keyt   clt   st   superst   supt   snamet   listR6   (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/idlelib/ClassBrowser.pyRA   a   s<     			
(	   R:   R;   R   R>   R@   RF   RJ   RK   RA   (    (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/idlelib/ClassBrowser.pyR9   E   s   						RB   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   RC   R   R^   t
   IndexErrort   KeyErrorR2   t
   isinstanceR!   t   Functiont
   isfunction(   R   R   RC   R   (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/idlelib/ClassBrowser.pyR   „   s    			c         C   s'   |  j  r d |  j d Sd |  j Sd  S(   Ns   def s   (...)s   class (   Rh   R   (   R   (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/idlelib/ClassBrowser.pyR>   Ž   s    	c         C   s   |  j  r d Sd Sd  S(   NR?   t   folder(   Rh   (   R   (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/idlelib/ClassBrowser.pyR@   ”   s    	c         C   s5   |  j  r1 y |  j  j SWq1 t k
 r- t SXn  d  S(   N(   R^   t   methodst   AttributeErrorR<   (   R   (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/idlelib/ClassBrowser.pyRK   š   s
    	c         C   sS   |  j  s g  Sg  } x9 |  j ƒ  D]+ } t | |  j  |  j ƒ } | j | ƒ q  W| S(   N(   R^   t   listmethodst   MethodBrowserTreeItemR   RD   (   R   RE   R   R6   (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/idlelib/ClassBrowser.pyRF   ¡   s    	c         C   s`   t  j j |  j ƒ s d  St j j |  j ƒ } t |  j d ƒ r\ |  j j	 } | j
 | ƒ n  d  S(   NRW   (   R   R	   RH   R   R    R   RI   RU   R^   RW   t   gotoline(   R   t   editRW   (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/idlelib/ClassBrowser.pyRJ   ª   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(   R^   Rj   RS   RD   RX   (   R   RS   R   RW   Rc   R6   (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/idlelib/ClassBrowser.pyRl   ²   s    	
(	   R:   R;   R   R>   R@   RK   RF   RJ   Rl   (    (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/idlelib/ClassBrowser.pyRB   ‚   s   	
						Rm   c           B   s5   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z RS(   c         C   s   | |  _  | |  _ | |  _ d  S(   N(   R   R^   R   (   R   R   R^   R   (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/idlelib/ClassBrowser.pyR   À   s    		c         C   s   d |  j  d S(   Ns   def s   (...)(   R   (   R   (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/idlelib/ClassBrowser.pyR>   Å   s    c         C   s   d S(   NR?   (    (   R   (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/idlelib/ClassBrowser.pyR@   È   s    c         C   s   d S(   Ni    (    (   R   (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/idlelib/ClassBrowser.pyRK   Ë   s    c         C   sL   t  j j |  j ƒ s d  St j j |  j ƒ } | j |  j j	 |  j
 ƒ d  S(   N(   R   R	   RH   R   R    R   RI   Rn   R^   Rj   R   (   R   Ro   (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/idlelib/ClassBrowser.pyRJ   Î   s    (   R:   R;   R   R>   R@   RK   RJ   (    (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/idlelib/ClassBrowser.pyRm   ¾   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 j	 |  ƒ } t
 | | | g d t ƒ|  j ƒ  d  S(   Ni    i   R   (   t   __file__t	   NameErrorRQ   t   argvR   R	   RN   RO   R    t   PyShellFileListR   t   Truet   mainloop(   t   parentR   RY   R   R   (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/idlelib/ClassBrowser.pyt   _class_browserÔ   s    
t   __main__(   t   run(    (   t   __doc__R   RQ   R!   t   idlelibR    t   idlelib.WindowListR   t   idlelib.TreeWidgetR   R   R   t   idlelib.configHandlerR   R   R9   RB   Rm   Rw   R:   t   idlelib.idle_test.htestRy   (    (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/idlelib/ClassBrowser.pyt   <module>   s   /=<	