o
     JAf?                     @   s0  d dl Z d dlT d dlmZmZ d dlmZ d dlmZ dZ	ze j
e j
ee	ZW n ey6   e	ZY nw e j
er@eZ	ne j
e	sMede	f e	fdd	Zdd
dZG dd dZG dd dZG dd deZG dd dZdd Zedkrd dlmZ edddd d dlmZ ee dS dS )    N)*)Frame	Scrollbar)idleConf)
zoomheightZIconszcan't find icon directory (%r)c                 C   s   	 t  }dd l}|tj|| d}|  g }d }}|D ]E}tjtj|d }t	||d}	|
|	 t||	ddd}
|
j||d t||d}
|
j|d |d |d }|d	krf|d
 }d}q!||_d S )Nr   z*.gif)filemaster   Zraised)imagebdZrelief)rowcolumn)text
      )ZTkglobospathjoinescapesortsplitextbasename
PhotoImageappendLabelgridimages)Zicondirrootr   listr   r   r   r   namer
   label r"   #/usr/lib/python3.10/idlelib/tree.py	listicons%   s*   

r$   c                 C   sT   	 t j| jdkt j| jdki}|| j rdnd}|d u r| jn|}|t|d dS )Nr         Zunitsbreak)	Z	EventTypeZ
MouseWheelZdeltaZButtonPressnumtypewidgetyviewZSCROLL)eventr+   Zuplinesr"   r"   r#   wheel_event;   s   r/   c                   @   s   e Zd Zdd Zdd Zdd Zd*dd	Zd*d
dZdd Zdd Z	d*ddZ
d*ddZd*ddZdd Zdd Zdd Zdd Zdd Zd d! Zd*d"d#Zd*d$d%Zd*d&d'Zd*d(d)ZdS )+TreeNodec                 C   s:   || _ || _|| _d| _d| _g | _d  | _| _i | _d S )N	collapsedF)	canvasparentitemstateselectedchildrenxy
iconimages)selfr2   r3   r4   r"   r"   r#   __init__V   s   
zTreeNode.__init__c                 C   s2   | j d d  D ]}| j | |  qd | _d S N)r7   removedestroyr3   )r;   cr"   r"   r#   r?   `   s   

zTreeNode.destroyc                 C   sf   z| j | W S  ty   Y nw tj|\}}|pd}tjt|| }t| j|d}|| j |< |S )Nz.gif)r   r   )	r:   KeyErrorr   r   r   r   ICONDIRr   r2   )r;   r    r   extfullnamer
   r"   r"   r#   geticonimagef   s   
zTreeNode.geticonimageNc                 C   s:   | j rd S |   d| _ | j| j |   |   d S )NT)r6   deselectallr2   deleteimage_iddrawicondrawtextr;   r-   r"   r"   r#   selectr   s   zTreeNode.selectc                 C   s2   | j sd S d| _ | j| j |   |   d S )NF)r6   r2   rG   rH   rI   rJ   rK   r"   r"   r#   deselect{   s   zTreeNode.deselectc                 C   s    | j r
| j   d S |   d S r=   )r3   rF   deselecttreer;   r"   r"   r#   rF      s   zTreeNode.deselectallc                 C   s&   | j r|   | jD ]}|  q
d S r=   )r6   rM   r7   rN   )r;   childr"   r"   r#   rN      s
   

zTreeNode.deselecttreec                 C   s*   | j dkr
|   n|   | j  dS )Nexpandedr(   )r5   collapseexpandr4   OnDoubleClickrK   r"   r"   r#   flip   s
   


zTreeNode.flipc                 C   s6   | j  sd S | jdkrd| _|   |   d S d S )NrQ   )r4   _IsExpandabler5   updateviewrK   r"   r"   r#   rS      s   

zTreeNode.expandc                 C   s    | j dkrd| _ |   d S d S )Nr1   )r5   rW   rK   r"   r"   r#   rR      s   
zTreeNode.collapsec                 C   s   | j d }|  j d }|| }| jd}| j }| j|}||kr+||kr+d S | j| jd \}}}	}
||krG||krG|| | }n|}t||
 }| j| d S )Nr      r   scrollregion)r9   lastvisiblechildr2   ZcanvasyZwinfo_heightZ_getintsfloatZyview_moveto)r;   topZbottomZheightZvisible_topZvisible_heightZvisible_bottomx0y0x1y1Zfractionr"   r"   r#   rX      s   

zTreeNode.viewc                 C   s"   | j r| jdkr| j d  S | S )NrQ   )r7   r5   r[   rO   r"   r"   r#   r[      s   zTreeNode.lastvisiblechildc                 C   s   | j r
| j   d S | jd }d| jd< | j  | jt | dd | jt\}}}}| jjdd||fd || jd< d S )NZcursorZwatch   r   r   )rZ   )r3   rW   r2   rG   ZALLdrawbbox	configure)r;   Z	oldcursorr^   r_   r`   ra   r"   r"   r#   rW      s   


zTreeNode.updatec                 C   sp  d}||| _ | _|   |   | jdkr|| S | js;| j }|s(|d S |D ]}| | j	| |}| j
| q*|d }|| }d}	| jD ]T}|}	| j	j|d |d ||d dd |||}|j r|jdkrsd	}
|j}nd
}
|j}| |
}| j	j|d |	d |d}| j	|d| | j	|ddd  qH| j	j|d |d |d |	d dd}| j	| |S )N   rQ   rY   r   	   rc   Zgray50)fillZ	minusnodeZplusnode)r
   <1>
<Double-1>c                 S      d S r=   r"   )r8   r"   r"   r#   <lambda>   s    zTreeNode.draw.<locals>.<lambda>r   )r8   r9   rI   rJ   r5   r7   r4   _GetSubList	__class__r2   r   Zcreate_linerd   rV   rR   rS   rE   create_imagetag_bindZ	tag_lower)r;   r8   r9   Zdysublistr4   rP   ZcxcyZcylastZiconnamecallbackr
   idr"   r"   r#   rd      sH   


"


zTreeNode.drawc                 C   s~   | j r| j p| j pd}n| j pd}| |}| jj| j| jd|d}|| _	| j
|d| j | j
|d| j d S )NZ
openfolderZfoldernw)anchorr
   rj   rk   )r6   r4   GetSelectedIconNameGetIconNamerE   r2   rp   r8   r9   rH   rq   rL   rU   )r;   Z	imagenamer
   ru   r"   r"   r#   rI      s   

zTreeNode.drawiconc              
      s   j d d } jd } j }|r@ jj||d|d} j|d j  j|d j  j	|\}}}}t
|dd	 } j pFd
}	z j W n	 tyU   Y nw    z j W n tys   t j|	dddd _Y nw t }
 jr jt|
d n
 jt|
d  jj||d jd} jd j  jd j  jd fdd  jd fdd  jd fdd | _d S )Nrg   r	   r%   rv   )rw   r   rj   rk      r   z	<no text>r   r   )r   r   ZpadxZpadyZhiliteZnormal)rw   Zwindow<MouseWheel>c                       t |  jS r=   r/   r2   erO   r"   r#   rm         z#TreeNode.drawtext.<locals>.<lambda>
<Button-4>c                    r|   r=   r}   r~   rO   r"   r#   rm      r   
<Button-5>c                    r|   r=   r}   r~   rO   r"   r#   rm   !  r   )r8   r9   r4   GetLabelTextr2   Zcreate_textrq   rL   rU   re   maxGetTextentryAttributeErroredit_finishr!   r   r   ZCurrentThemer6   rf   ZGetHighlightZcreate_windowbindselect_or_editZtext_id)r;   ZtextxZtextyZ	labeltextru   r^   r_   r`   ra   r   Zthemer"   rO   r#   rJ      sH   





zTreeNode.drawtextc                 C   s,   | j r| j r| | d S | | d S r=   )r6   r4   
IsEditableeditrL   rK   r"   r"   r#   r   $  s   zTreeNode.select_or_editc                 C   sr   t | jdddd| _| jd| jd  | jdt | jjdd | j  | jd| j	 | jd| j
 d S )	Nr   r	   )r   highlightthicknesswidthr   r'   )Zipadxz<Return>z<Escape>)ZEntryr!   r   insertZselection_rangeZENDpack	focus_setr   r   edit_cancelrK   r"   r"   r#   r   *  s   
zTreeNode.editc                 C   s|   z| j }| ` W n
 ty   Y d S w | }|  |r)|| j kr)| j| | j }|| jd< |   | j	
  d S )Nr   )r   r   getr?   r4   r   SetTextr!   rJ   r2   r   )r;   r-   r   r   r"   r"   r#   r   3  s   

zTreeNode.edit_finishc                 C   sB   z| j }| ` W n
 ty   Y d S w |  |   | j  d S r=   )r   r   r?   rJ   r2   r   )r;   r-   r   r"   r"   r#   r   B  s   zTreeNode.edit_cancelr=   )__name__
__module____qualname__r<   r?   rE   rL   rM   rF   rN   rU   rS   rR   rX   r[   rW   rd   rI   rJ   r   r   r   r   r"   r"   r"   r#   r0   T   s*    


	


*
%

	r0   c                   @   sr   e Zd Z	 dd Zdd Zdd 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d Zdd ZdS )TreeItemc                 C   rl   r=   r"   rO   r"   r"   r#   r<   V     zTreeItem.__init__c                 C   rl   r=   r"   rO   r"   r"   r#   r   Y  r   zTreeItem.GetTextc                 C   rl   r=   r"   rO   r"   r"   r#   r   \  r   zTreeItem.GetLabelTextNc                 C   s   	 | j d u r|  | _ | j S r=   )
expandableIsExpandablerO   r"   r"   r#   rV   a  s   

zTreeItem._IsExpandablec                 C   s   	 dS )Nr	   r"   rO   r"   r"   r#   r   g  s   zTreeItem.IsExpandablec                 C   s$   	 |   sg S |  }|sd| _|S )Nr   )r   
GetSubListr   )r;   rr   r"   r"   r#   rn   k  s   zTreeItem._GetSubListc                 C   rl   r=   r"   rO   r"   r"   r#   r   t  r   zTreeItem.IsEditablec                 C   rl   r=   r"   )r;   r   r"   r"   r#   r   w  r   zTreeItem.SetTextc                 C   rl   r=   r"   rO   r"   r"   r#   ry   z  r   zTreeItem.GetIconNamec                 C   rl   r=   r"   rO   r"   r"   r#   rx   }  r   zTreeItem.GetSelectedIconNamec                 C   rl   r=   r"   rO   r"   r"   r#   r     r   zTreeItem.GetSubListc                 C   rl   r=   r"   rO   r"   r"   r#   rT     r   zTreeItem.OnDoubleClick)r   r   r   r<   r   r   r   rV   r   rn   r   r   ry   rx   r   rT   r"   r"   r"   r#   r   M  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 )FileTreeItemc                 C   s
   || _ d S r=   )r   )r;   r   r"   r"   r#   r<     s   
zFileTreeItem.__init__c                 C   s   t j| jp	| jS r=   r   r   r   rO   r"   r"   r#   r     s   zFileTreeItem.GetTextc                 C   s   t j| jdkS )N r   rO   r"   r"   r#   r     s   zFileTreeItem.IsEditablec                 C   sj   t j| j}t j||}t j|t j| jkrd S zt | j| || _W d S  ty4   Y d S w r=   )r   r   dirnamer   renameOSError)r;   r   newpathr"   r"   r#   r     s   zFileTreeItem.SetTextc                 C   s   |   sdS d S )NZpython)r   rO   r"   r"   r#   ry     s   zFileTreeItem.GetIconNamec                 C   s   t j| jS r=   )r   r   isdirrO   r"   r"   r#   r     s   zFileTreeItem.IsExpandablec                 C   sh   zt | j}W n ty   g  Y S w |jt jjd g }|D ]}tt j| j|}|| q |S )N)key)	r   listdirr   r   r   normcaser   r   r   )r;   namesrr   r    r4   r"   r"   r#   r     s   zFileTreeItem.GetSubListN)
r   r   r   r<   r   r   r   ry   r   r   r"   r"   r"   r#   r     s    r   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 )ScrolledCanvasc                 K   sl  d|vrd|d< || _ t|| _| jjddd | jjddd t| jfi || _| jjdddd t| jdd	| _	| j	jddd
d t| jddd| _
| j
jdddd | j	j| jd< | jj| j	d< | j
j| jd< | jj| j
d< | jd| j | jd| j | jd| j | jd| j | jdt | jdt | jdt | jd| j | j  d S )NZyscrollincrementrY   r   r	   )ZweightZnsew)r   r   Zstickyvbar)r    ZnsehbarZ
horizontal)r    ZorientZewsZyscrollcommandZcommandZxscrollcommandz<Key-Prior>z
<Key-Next>z<Key-Up>z
<Key-Down>r{   r   r   z<Alt-Key-2>)r   r   frameZrowconfigureZcolumnconfigureZCanvasr2   r   r   r   r   setr,   Zxviewr   page_up	page_downunit_up	unit_downr/   zoom_heightr   )r;   r   Zoptsr"   r"   r#   r<     s2   
zScrolledCanvas.__init__c                 C      | j dd dS )Nrb   pager(   r2   Zyview_scrollrK   r"   r"   r#   r        zScrolledCanvas.page_upc                 C   r   )Nr	   r   r(   r   rK   r"   r"   r#   r     r   zScrolledCanvas.page_downc                 C   r   )Nrb   unitr(   r   rK   r"   r"   r#   r     r   zScrolledCanvas.unit_upc                 C   r   )Nr	   r   r(   r   rK   r"   r"   r#   r     r   zScrolledCanvas.unit_downc                 C   s   t | j dS )Nr(   )r   r   r   rK   r"   r"   r#   r     s   zScrolledCanvas.zoom_heightN)	r   r   r   r<   r   r   r   r   r   r"   r"   r"   r#   r     s    r   c                 C   s   t | }tt|  ddd  \}}|d|d |d f  t|dddd}|jjdd	td
 t	t
}t|jd |}|  d S )N+r	   z+%d+%d2      Zwhiter   )bgr   Z	takefocusZboth)rS   ri   Zside)ZToplevelmapintZgeometrysplitr   r   r   ZLEFTr   rB   r0   r2   rS   )r3   r]   r8   r9   Zscr4   Znoder"   r"   r#   _tree_widget  s    r   __main__)mainzidlelib.idle_test.test_treer   F)	verbosityexit)runr=   )r   tkinterZtkinter.ttkr   r   Zidlelib.configr   Zidlelibr   rB   r   r   r   __file__Z_icondir	NameErrorr   RuntimeErrorr$   r/   r0   r   r   r   r   r   Zunittestr   Zidlelib.idle_test.htestr   r"   r"   r"   r#   <module>   s:   
 z<..
