o
    EXîhò?  ã                   @   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r–d 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"   ú6/opt/python-3.10.19/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+%dé2   é¯   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<..
û