<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>

f fW                 @   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 a Gd d   d  Z Gd	 d
   d
 e
  Z Gd d   d e
  Z Gd d   d e
  Z d d   Z e d k rd d l m Z e e  n  d S)a  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)PyShell)ListedToplevel)TreeNodeTreeItemScrolledCanvas)idleConfc               @   sR   e  Z d  Z d d d  Z d d d  Z d d   Z d	 d
   Z d d   Z d S)ClassBrowserFc             C   s[   | s t  j j a n  | |  _ t j j | d |  j d  |  _ | |  _	 |  j
 |  d S)zH
        _htest - bool, change box when location running htest.
        r   z.pyN)r   flistopen	file_opennameospathjoinfile_htestinit)selfr	   r   r   r    r   9/opt/alt/python34/lib64/python3.4/idlelib/ClassBrowser.py__init__   s    	#	zClassBrowser.__init__Nc             C   s   |  j  j   |  j j   d  S)N)topZdestroynode)r   Zeventr   r   r   close)   s    zClassBrowser.closec             C   s8  | |  _  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   } t j | d  d } t | d | d d	 d
 d } | j j d d d d  |  j   } t | j d  |  |  _ } | j   | j   d  S)NZWM_DELETE_WINDOWz<Escape>z+%d+%d   Znormal
backgroundZbgZhighlightthicknessr   Z	takefocus   expandZfillZboth)r	   pyclbrZ_modulesclearr   rootr   Zprotocolr   Zbindr   ZgeometryZwinfo_rootxZwinfo_rootysettitleZ	focus_setr   ZCurrentThemeZGetHighlightr   ZframeZpackrootnoder   Zcanvasr   updater   )r   r	   r   Zthemer   Zscitemr   r   r   r   r   -   s$    			'


zClassBrowser.initc             C   s+   |  j  j d |  j  |  j  j d  d  S)NzClass Browser - zClass Browser)r   Zwm_titler   Zwm_iconname)r   r   r   r   r!   D   s    zClassBrowser.settitlec             C   s   t  |  j  S)N)ModuleBrowserTreeItemr   )r   r   r   r   r"   H   s    zClassBrowser.rootnode)__name__
__module____qualname__r   r   r   r!   r"   r   r   r   r   r      s
   r   c               @   sd   e  Z d  Z d d   Z d d   Z d d   Z d d   Z d	 d
   Z d d   Z d d   Z	 d S)r%   c             C   s   | |  _  d  S)N)r   )r   r   r   r   r   r   M   s    zModuleBrowserTreeItem.__init__c             C   s   t  j j |  j  S)N)r   r   basenamer   )r   r   r   r   GetTextP   s    zModuleBrowserTreeItem.GetTextc             C   s   d S)Npythonr   )r   r   r   r   GetIconNameS   s    z!ModuleBrowserTreeItem.GetIconNamec             C   sF   g  } x9 |  j    D]+ } t | |  j |  j  } | j |  q W| S)N)listclassesClassBrowserTreeItemclassesr   append)r   sublistr   r$   r   r   r   
GetSubListV   s
    z ModuleBrowserTreeItem.GetSubListc             C   sY   t  j j |  j d d    d k r) d  St  j j |  j  sB d  St j j |  j  d  S)N   z.py)r   r   normcaser   existsr   r	   r
   )r   r   r   r   OnDoubleClick]   s
    %z#ModuleBrowserTreeItem.OnDoubleClickc             C   s#   t  j j |  j d d    d k S)Nr3   z.pyr4   )r   r   r5   r   )r   r   r   r   IsExpandabled   s    z"ModuleBrowserTreeItem.IsExpandablec             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  SYn Xg  } i  |  _
 x | j   D] \ } } | j | k r | }	 t | d  rp| j rpg  }
 xp | j D]e } t |  t d  k r| } n1 | j } | j | j k rE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)Nz.pysuper z%s.%sz(%s)z, )r   r   splitr   splitextr5   r   Zreadmodule_exsysImportErrorr/   itemsmodulehasattrr9   typer   r0   r   linenosort)r   dirr   r   Zextdictr?   keyclsZsupersZsupZsnamelistr$   r   r   r   r-   g   s<     				
z!ModuleBrowserTreeItem.listclassesN)
r&   r'   r(   r   r*   r,   r2   r7   r8   r-   r   r   r   r   r%   K   s   r%   c               @   sd   e  Z d  Z d d   Z d d   Z d d   Z d d   Z d	 d
   Z d d   Z d d   Z	 d S)r.   c             C   sr   | |  _  | |  _ | |  _ y |  j |  j  |  _ Wn! t t f k
 rU d  |  _ Yn Xt |  j t j  |  _	 d  S)N)
r   r/   r   rH   
IndexErrorKeyError
isinstancer   ZFunction
isfunction)r   r   r/   r   r   r   r   r      s    			zClassBrowserTreeItem.__init__c             C   s'   |  j  r d |  j d Sd |  j Sd  S)Nzdef z(...)zclass )rN   r   )r   r   r   r   r*      s    	zClassBrowserTreeItem.GetTextc             C   s   |  j  r d Sd Sd  S)Nr+   Zfolder)rN   )r   r   r   r   r,      s    	z ClassBrowserTreeItem.GetIconNamec             C   s9   |  j  r5 y |  j  j SWq5 t k
 r1 d SYq5 Xn  d  S)NF)rH   methodsAttributeError)r   r   r   r   r8      s
    	z!ClassBrowserTreeItem.IsExpandablec             C   sS   |  j  s g  Sg  } x9 |  j   D]+ } t | |  j  |  j  } | j |  q  W| S)N)rH   listmethodsMethodBrowserTreeItemr   r0   )r   r1   r   r$   r   r   r   r2      s    	zClassBrowserTreeItem.GetSubListc             C   sZ   t  j j |  j  s d  St |  j  } t |  j d  rV |  j j } | j |  n  d  S)NrC   )	r   r   r6   r   r   rA   rH   rC   gotoline)r   editrC   r   r   r   r7      s    z"ClassBrowserTreeItem.OnDoubleClickc             C   s   |  j  s g  Sg  } x3 |  j  j j   D] \ } } | j | | f  q& W| j   g  } x! | D] \ } } | j |  q` W| S)N)rH   rO   r?   r0   rD   )r   r?   r   rC   rJ   r$   r   r   r   rQ      s    	
z ClassBrowserTreeItem.listmethodsN)
r&   r'   r(   r   r*   r,   r8   r2   r7   rQ   r   r   r   r   r.      s   
	r.   c               @   sL   e  Z d  Z d d   Z d d   Z d d   Z d d   Z d	 d
   Z d S)rR   c             C   s   | |  _  | |  _ | |  _ d  S)N)r   rH   r   )r   r   rH   r   r   r   r   r      s    		zMethodBrowserTreeItem.__init__c             C   s   d |  j  d S)Nzdef z(...))r   )r   r   r   r   r*      s    zMethodBrowserTreeItem.GetTextc             C   s   d S)Nr+   r   )r   r   r   r   r,      s    z!MethodBrowserTreeItem.GetIconNamec             C   s   d S)Nr   r   )r   r   r   r   r8      s    z"MethodBrowserTreeItem.IsExpandablec             C   sF   t  j j |  j  s d  St |  j  } | j |  j j |  j  d  S)N)	r   r   r6   r   r   rS   rH   rO   r   )r   rT   r   r   r   r7      s    z#MethodBrowserTreeItem.OnDoubleClickN)r&   r'   r(   r   r*   r,   r8   r7   r   r   r   r   rR      s
   rR   c             C   s   y
 t  } WnO t k
 r[ t j d } t j d d   rJ t j d } n t j d } Yn Xt j j |  \ } } t j j |  d } t j	 |   } | j
 a t | | | g d d d  S)Nr   r   r   T)__file__	NameErrorr=   argvr   r   r;   r<   r   ZPyShellFileListr
   r   r   )parentr   rE   r   r	   r   r   r   _class_browser   s    
	rY   __main__)run)__doc__r   r=   r   Zidlelibr   Zidlelib.WindowListr   Zidlelib.TreeWidgetr   r   r   Zidlelib.configHandlerr   r   r   r%   r.   rR   rY   r&   Zidlelib.idle_test.htestr[   r   r   r   r   <module>   s    2=<