o
     JAf!                     @   s   	 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lmZ dadZdd	 Zdd
dZG dd dZG dd de	ZG dd de	Zdd Zedkr{eejdkrod dlmZ edddd d dlmZ ee dS dS )    N)idleConf)pyshell)TreeNodeTreeItemScrolledCanvas)py_extensions)ListedToplevel)z.pyic                 C   s,   t j| \}}t j|}|tv o|tvS N)ospathsplitextnormcaser   browseable_extension_blocklist)r   _ext r   &/usr/lib/python3.10/idlelib/browser.pyis_browseable_extension   s   r   c                 C   s   	 g }|   D ]R\}}|d u s|j|krYt|drT|jrT|j|krTg }|jD ] }t|tr0|}n|j}|j|jkrA|j d| }|| q&| jdd	|7  _|| q|S )Nsuper.z({})z, )
itemsmodulehasattrr   name
isinstancestrappendformatjoin)Z
child_dictmodnameZobskeyobjZsuperssupZsnamer   r   r   transform_children#   s"   


r#   c                   @   s@   e Zd Z	 dddddZdddZdd	 Zd
d Zdd ZdS )ModuleBrowserF)_htest_utestc                C   s&   	 || _ || _|| _|| _|   d S r	   )masterr   r%   r&   init)selfr'   r   r%   r&   r   r   r   __init__J   s   zModuleBrowser.__init__Nc                 C   s   	 | j   | j  d S r	   )topZdestroynode)r)   eventr   r   r   closeb   s   
zModuleBrowser.closec           	      C   s  	 | j }| js| jstjnt|}|jatj	
  t| | _}|d| j |d| j | jrA|d| | d f  |   |  t }t|dd }t||ddd	}|jjdd
d |  }t|jd | | _}| js|  |   d S d S )NZWM_DELETE_WINDOWz<Escape>z+%d+%d   Znormal
backgroundr      )bgZhighlightthicknessZ	takefocusZboth)expandfill)!r'   r%   r&   r   flistZPyShellFileListopen	file_openpyclbrZ_modulesclearr   r+   protocolr.   bindZgeometryZwinfo_rootxZwinfo_rootysettitleZ	focus_setr   ZCurrentThemeZGetHighlightr   framepackrootnoder   Zcanvasr,   updater3   )	r)   rootr5   r+   Zthemer0   Zscitemr,   r   r   r   r(   g   s8   
zModuleBrowser.initc                 C   s,   	 | j dtj| j  | j d d S )NzModule Browser - zModule Browser)r+   Zwm_titler
   r   basenameZwm_iconnamer)   r   r   r   r<      s   zModuleBrowser.settitlec                 C      	 t | jS r	   )ModuleBrowserTreeItemr   rD   r   r   r   r?         
zModuleBrowser.rootnoder	   )__name__
__module____qualname__r*   r.   r(   r<   r?   r   r   r   r   r$   C   s    
r$   c                   @   sF   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 )rF   c                 C   s   	 || _ d S r	   )file)r)   rK   r   r   r   r*      s   
zModuleBrowserTreeItem.__init__c                 C   s   	 t j| jS r	   )r
   r   rC   rK   rD   r   r   r   GetText   s   zModuleBrowserTreeItem.GetTextc                 C   s   	 dS )Npythonr   rD   r   r   r   GetIconName   s   z!ModuleBrowserTreeItem.GetIconNamec                 C   s   	 dd |   D S )Nc                 S      g | ]}t |qS r   ChildBrowserTreeItem.0r!   r   r   r   
<listcomp>   s    z4ModuleBrowserTreeItem.GetSubList.<locals>.<listcomp>)listchildrenrD   r   r   r   
GetSubList   s   z ModuleBrowserTreeItem.GetSubListc                 C   s0   	 t | jsd S tj| jsd S t| j d S r	   )r   rK   r
   r   existsr7   rD   r   r   r   OnDoubleClick   s   
z#ModuleBrowserTreeItem.OnDoubleClickc                 C   rE   r	   )r   rK   rD   r   r   r   IsExpandable   rG   z"ModuleBrowserTreeItem.IsExpandablec                 C   sl   	 t | jsg S tj| j\}}tj|\}}zt||gtj }W n t	y0   g  Y S w t
||S r	   )r   rK   r
   r   splitr   r8   Zreadmodule_exsysImportErrorr#   )r)   dirbaser   r   Ztreer   r   r   rU      s   

z"ModuleBrowserTreeItem.listchildrenN)
rH   rI   rJ   r*   rL   rN   rV   rX   rY   rU   r   r   r   r   rF      s    rF   c                   @   s>   e Zd Z	 dd Zdd Zdd Zdd Zd	d
 Zdd ZdS )rQ   c                 C   s"   	 || _ |j| _t|tj| _d S r	   )r!   r   r   r8   ZFunction
isfunction)r)   r!   r   r   r   r*      s   zChildBrowserTreeItem.__init__c                 C   s"   	 | j }| jrd| d S d| S )Nzdef z(...)zclass )r   r_   )r)   r   r   r   r   rL      s
   zChildBrowserTreeItem.GetTextc                 C   s   	 | j rdS dS )NrM   Zfolder)r_   rD   r   r   r   rN      s   z ChildBrowserTreeItem.GetIconNamec                 C   s   	 | j ji kS r	   )r!   childrenrD   r   r   r   rY      s   z!ChildBrowserTreeItem.IsExpandablec                 C   s   	 dd t | jjD S )Nc                 S   rO   r   rP   rR   r   r   r   rT      s    z3ChildBrowserTreeItem.GetSubList.<locals>.<listcomp>)r#   r!   r`   rD   r   r   r   rV      s   
zChildBrowserTreeItem.GetSubListc              	   C   s<   	 zt | jj}|| jj W d S  ttfy   Y d S w r	   )r7   r!   rK   ZgotolinelinenoOSErrorAttributeError)r)   Zeditr   r   r   rX      s   z"ChildBrowserTreeItem.OnDoubleClickN)	rH   rI   rJ   r*   rL   rN   rY   rV   rX   r   r   r   r   rQ      s    rQ   c                 C   sH   t tjdkrtjd }nt}G dd dt}dd }t| |dd d S )Nr1   c                   @   s   e Zd Zdd ZdS )z'_module_browser.<locals>.Nested_in_funcc                   S   s   d S r	   r   r   r   r   r   nested_in_class   s    z7_module_browser.<locals>.Nested_in_func.nested_in_classN)rH   rI   rJ   rd   r   r   r   r   Nested_in_func   s    re   c                  S   s   G dd d} d S )Nc                   @   s   e Zd ZdS )z;_module_browser.<locals>.closure.<locals>.Nested_in_closureN)rH   rI   rJ   r   r   r   r   Nested_in_closure   s    rf   r   )rf   r   r   r   closure   s   z _module_browser.<locals>.closureT)r%   )lenr[   argv__file__r   r$   )parentrK   re   rg   r   r   r   _module_browser   s   rl   __main__r1   )mainzidlelib.idle_test.test_browser   F)	verbosityexit)runr	   )r
   r8   r[   Zidlelib.configr   Zidlelibr   Zidlelib.treer   r   r   Zidlelib.utilr   Zidlelib.windowr   r7   r   r   r#   r$   rF   rQ   rl   rH   rh   ri   Zunittestrn   Zidlelib.idle_test.htestrr   r   r   r   r   <module>   s0    

 M4-