
    d?                     .   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		 e j
                            e j
                            e          e	          Zn# e$ r e	ZY nw xY we j
                            e          reZ	n)e j
                            e	          s ede	d          e	fd	Zdd
Z G d d          Z G d d          Z G d de          Z G d d          Zd Zedk    r'd dlmZ  eddd           d dlmZ  ee           dS dS )    N)*)Frame	Scrollbar)idleConf)
zoomheightIconszcan't find icon directory ()c                    t                      }ddl}|                    t          j                            |                    |           d                    }|                                 g }dx}}|D ]}t          j                            t          j                            |                    d         }t          ||          }	|
                    |	           t          ||	dd          }
|
                    ||           t          ||	          }
|
                    |dz   |           |dz   }|d
k    r|dz   }d}||_        dS )z'Utility to display the available icons.r   Nz*.gif)filemaster   raised)imagebdrelief)rowcolumn)text
      )Tkglobospathjoinescapesortsplitextbasename
PhotoImageappendLabelgridimages)icondirrootr   listr$   r   r   r   namer   labels              lib/python3.11/idlelib/tree.py	listiconsr+   %   s>   44DKKK99RW\\$++g"6"6@@AADIIKKKFC&  w 0 0 6 677:T222ed%Ah???

s6
***d&&&

s1uV
,,,!R<<a%CFDKKK    c                     t           j        | j        dk    t           j        | j        dk    i}|| j                 rdnd}|| j        n|}|                    t          |d           dS )a6  Handle scrollwheel event.

    For wheel up, event.delta = 120*n on Windows, -1*n on darwin,
    where n can be > 1 if one scrolls fast.  Flicking the wheel
    generates up to maybe 20 events with n up to 10 or more 1.
    Macs use wheel down (delta = 1*n) to scroll up, so positive
    delta means to scroll up on both systems.

    X-11 sends Control-Button-4,5 events instead.

    The widget parameter is needed so browser label bindings can pass
    the underlying canvas.

    This function depends on widget.yview to not be overridden by
    a subclass.
    r         Nunitsbreak)		EventType
MouseWheeldeltaButtonPressnumtypewidgetyviewSCROLL)eventr9   upliness       r*   wheel_eventr?   ;   se    " 
a

a
1BUZ.'BBaE#^U\\F
LL(((7r,   c                       e Zd Zd Zd Zd ZddZddZd Zd Z	dd	Z
dd
ZddZd Zd Zd Zd Zd Zd ZddZddZddZddZdS )TreeNodec                     || _         || _        || _        d| _        d| _        g | _        d x| _        | _        i | _        d S )N	collapsedF)	canvasparentitemstateselectedchildrenxy
iconimages)selfrD   rE   rF   s       r*   __init__zTreeNode.__init__V   sE    	 
r,   c                     | j         d d          D ]0}| j                             |           |                                 1d | _        d S N)rI   removedestroyrE   )rM   cs     r*   rR   zTreeNode.destroy`   sL    qqq! 	 	AM  ###IIKKKKr,   c                    	 | j         |         S # t          $ r Y nw xY wt          j                            |          \  }}|pd}t          j                            t          ||z             }t          | j        |          }|| j         |<   |S )Nz.gif)r   r   )	rL   KeyErrorr   r   r   r   ICONDIRr    rD   )rM   r(   r   extfullnamer   s         r*   geticonimagezTreeNode.geticonimagef   s    	?4(( 	 	 	D	G$$T**	cmV7<<44$+H=== %s    
Nc                     | j         rd S |                                  d| _         | j                            | j                   |                                  |                                  d S )NT)rH   deselectallrD   deleteimage_iddrawicondrawtextrM   r<   s     r*   selectzTreeNode.selectr   s`    = 	F4=)))r,   c                     | j         sd S d| _         | j                            | j                   |                                  |                                  d S )NF)rH   rD   r\   r]   r^   r_   r`   s     r*   deselectzTreeNode.deselect{   sN    } 	F4=)))r,   c                 r    | j         r| j                                          d S |                                  d S rP   )rE   r[   deselecttreerM   s    r*   r[   zTreeNode.deselectall   s>    ; 	 K##%%%%%r,   c                 x    | j         r|                                  | j        D ]}|                                 d S rP   )rH   rc   rI   re   )rM   childs     r*   re   zTreeNode.deselecttree   sI    = 	MMOOO] 	! 	!E    	! 	!r,   c                     | j         dk    r|                                  n|                                  | j                                         dS )Nexpandedr2   )rG   collapseexpandrF   OnDoubleClickr`   s     r*   flipzTreeNode.flip   sD    :##MMOOOOKKMMM	!!!wr,   c                     | j                                         sd S | j        dk    r1d| _        |                                  |                                  d S d S )Nrj   )rF   _IsExpandablerG   updateviewr`   s     r*   rl   zTreeNode.expand   sW    y&&(( 	F:###DJKKMMMIIKKKKK $#r,   c                 V    | j         dk    rd| _         |                                  d S d S )NrC   )rG   rq   r`   s     r*   rk   zTreeNode.collapse   s/    :$$$DJKKMMMMM %$r,   c                    | j         dz
  }|                                 j         dz   }||z
  }| j                            d          }| j                                        }| j                            |          }||k    r||k    rd S | j                            | j        d                   \  }}}	}
||k    r||k    r	||z   |z
  }n|}t          |          |
z  }| j                            |           d S )Nr      r   scrollregion)rK   lastvisiblechildrD   canvasywinfo_height_getintsfloatyview_moveto)rM   topbottomheightvisible_topvisible_heightvisible_bottomx0y0x1y1fractions               r*   rr   zTreeNode.view   s    fqj&&((*R/#k))!,,1133,,^<<#&N":":F--dk..IJJBB+&N":":V|n4HHH??R'  *****r,   c                 h    | j         r*| j        dk    r| j         d                                         S | S )Nrj   )rI   rG   rw   rf   s    r*   rw   zTreeNode.lastvisiblechild   s6    = 	TZ:55=$55777Kr,   c                    | j         r| j                                          d S | j        d         }d| j        d<   | j                                         | j                            t                     |                     dd           | j                            t                    \  }}}}| j                            dd||f           || j        d<   d S )Ncursorwatch   r   r   )rv   )rE   rq   rD   r\   ALLdrawbbox	configure)rM   	oldcursorr   r   r   r   s         r*   rq   zTreeNode.update   s    ; 
	.K     H-I$+DK!K   Ks###IIaOOO![--c22NBBK!!1b"~!>>>$-DK!!!r,   c                    d}||c| _         | _        |                                  |                                  | j        dk    r||z   S | j        s[| j                                        }|s|dz   S |D ]8}|                     | j	        | |          }| j        
                    |           9|dz   }||z   }d}	| j        D ]}|}	| j	                            |dz   |dz   ||dz   d           |                    ||          }|j                                        r|j        dk    r
d	}
|j        }n	d
}
|j        }|                     |
          }| j	                            |dz   |	dz   |          }| j	                            |d|           | j	                            |dd            | j	                            |dz   |dz   |dz   |	dz   d          }| j	                            |           |S )N   rj   ru   r   	   r   gray50)fill	minusnodeplusnode)r   <1>
<Double-1>c                     d S rP    )rJ   s    r*   <lambda>zTreeNode.draw.<locals>.<lambda>   s     r,   r   )rJ   rK   r^   r_   rG   rI   rF   _GetSubList	__class__rD   r!   create_liner   rp   rk   rl   rY   create_imagetag_bind	tag_lower)rM   rJ   rK   dysublistrF   rh   cxcycylasticonnamecallbackr   ids                 r*   r   zTreeNode.draw   s"   A:##r6M} 	,i++--G t , ,t{D$??$$U++++rTV] 	G 	GEFK##AaCAr2a4h#GGGB##Bz'')) G;*,,*H$~HH)H$|H))(33[--ac6!85-II$$R999$$R~~FFF[$$QqS!B$!VAX %   	b!!!	r,   c                    | j         r5| j                                        p| j                                        pd}n| j                                        pd}|                     |          }| j                            | j        | j        d|          }|| _	        | j        
                    |d| j                   | j        
                    |d| j                   d S )N
openfolderfoldernw)anchorr   r   r   )rH   rF   GetSelectedIconNameGetIconNamerY   rD   r   rJ   rK   r]   r   ra   rn   )rM   	imagenamer   r   s       r*   r^   zTreeNode.drawicon   s    = 	<6688 &..00&% I 	--//;8I!!),,[%%dfdfT%OOR444Rty99999r,   c                       j         dz   dz
  } j        dz
  } j                                        }|r j                            ||d|          } j                            |d j                    j                            |d j                    j        	                    |          \  }}}}t          |d          d	z   } j                                        pd
}		  j                                           n# t          $ r Y nw xY w	  j         n.# t          $ r! t!           j        |	ddd           _        Y nw xY wt#          j                    }
 j        r. j                            t#          j        |
d                     n- j                            t#          j        |
d                      j                            ||d j                  } j                            d j                    j                            d j                    j                            d fd            j                            d fd            j                            d fd           | _        d S )Nr   r   r.   r   )r   r   r   r      r   z	<no text>r   r   )r   r   padxpadyhilitenormal)r   window<MouseWheel>c                 .    t          | j                  S rP   r?   rD   erM   s    r*   r   z#TreeNode.drawtext.<locals>.<lambda>  s    +a2M2M r,   
<Button-4>c                 .    t          | j                  S rP   r   r   s    r*   r   z#TreeNode.drawtext.<locals>.<lambda>       At{0K0K r,   
<Button-5>c                 .    t          | j                  S rP   r   r   s    r*   r   z#TreeNode.drawtext.<locals>.<lambda>!  r   r,   )rJ   rK   rF   GetLabelTextrD   create_textr   ra   rn   r   maxGetTextentryedit_finishAttributeErrorr)   r"   r   CurrentThemerH   r   GetHighlightcreate_windowbindselect_or_edittext_id)rM   textxtexty	labeltextr   r   r   r   r   r   themes   `          r*   r_   zTreeNode.drawtext   s   r	!qI**,,	 	&((d.7 ) 9 9BK  UDK888K  \49===![--b11NBBCLL2%Ey  ""1k	JJ   	 	 	D		MJJJ 	M 	M 	Mt{!!!LLLDJJJ	M %''= 	IJ  !6uh!G!GHHHHJ  !6uh!G!GHHH[&&ue.24: ' G G
t2333
di000
(M(M(M(MNNN
&K&K&K&KLLL
&K&K&K&KLLLs$   "C> >
D
DD (EEc                     | j         r0| j                                        r|                     |           d S |                     |           d S rP   )rH   rF   
IsEditableeditra   r`   s     r*   r   zTreeNode.select_or_edit$  sQ    = 	TY1133 	IIeKKr,   c                    t          | j        ddd          | _        | j                            d| j        d                    | j                            dt
                     | j                            d           | j                                         | j                            d| j	                   | j                            d| j
                   d S )	Nr   r   )r   highlightthicknesswidthr   r0   )ipadxz<Return>z<Escape>)Entryr)   r   insertselection_rangeENDpack	focus_setr   r   edit_cancelr`   s     r*   r   zTreeNode.edit*  s    4:!KKK

!TZ/000
""1c***
a   


D$4555

D$455555r,   c                    	 | j         }| ` n# t          $ r Y d S w xY w|                                }|                                 |r7|| j                                        k    r| j                            |           | j                                        }|| j        d<   |                                  | j	        
                                 d S )Nr   )r   r   getrR   rF   r   SetTextr)   r_   rD   r   )rM   r<   r   r   s       r*   r   zTreeNode.edit_finish3  s    	JE

 	 	 	FF	yy{{ 	$DDI--////Id###y  ""!
6   	 
c                     	 | j         }| ` n# t          $ r Y d S w xY w|                                 |                                  | j                                         d S rP   )r   r   rR   r_   rD   r   )rM   r<   r   s      r*   r   zTreeNode.edit_cancelB  sk    	JE

 	 	 	FF	r   rP   )__name__
__module____qualname__rN   rR   rY   ra   rc   r[   re   rn   rl   rk   rr   rw   rq   r   r^   r_   r   r   r   r   r   r,   r*   rA   rA   T   so           
 
 
           ! ! !         
+ + +"  . . .( ( (T: : :# # #J   6 6 6 6                  r,   rA   c                   ^    e Zd ZdZd Zd Zd ZdZd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd ZdS )TreeItemzAbstract class representing tree items.

    Methods should typically be overridden, otherwise a default action
    is used.

    c                     dS )z)Constructor.  Do whatever you need to do.Nr   rf   s    r*   rN   zTreeItem.__init__V        r,   c                     dS )zReturn text string to display.Nr   rf   s    r*   r   zTreeItem.GetTextY  r   r,   c                     dS )z>Return label text string to display in front of text (if any).Nr   rf   s    r*   r   zTreeItem.GetLabelText\  r   r,   Nc                 P    | j         |                                 | _         | j         S )%Do not override!  Called by TreeNode.)
expandableIsExpandablerf   s    r*   rp   zTreeItem._IsExpandablea  s%    ?""//11DOr,   c                     dS )z"Return whether there are subitems.r   r   rf   s    r*   r   zTreeItem.IsExpandableg  s    qr,   c                 l    |                                  sg S |                                 }|sd| _        |S )r   r   )r   
GetSubListr   )rM   r   s     r*   r   zTreeItem._GetSubListk  s>      "" 	I//## 	 DOr,   c                     dS )z-Return whether the item's text may be edited.Nr   rf   s    r*   r   zTreeItem.IsEditablet  r   r,   c                     dS )z+Change the item's text (if it is editable).Nr   )rM   r   s     r*   r   zTreeItem.SetTextw  r   r,   c                     dS )z-Return name of icon to be displayed normally.Nr   rf   s    r*   r   zTreeItem.GetIconNamez  r   r,   c                     dS )z2Return name of icon to be displayed when selected.Nr   rf   s    r*   r   zTreeItem.GetSelectedIconName}  r   r,   c                     dS )z%Return list of items forming sublist.Nr   rf   s    r*   r   zTreeItem.GetSubList  r   r,   c                     dS )z%Called on a double-click on the item.Nr   rf   s    r*   rm   zTreeItem.OnDoubleClick  r   r,   )r   r   r   __doc__rN   r   r   r   rp   r   r   r   r   r   r   r   rm   r   r,   r*   r   r   M  s         8 8 8- - -M M M J      < < <: : :< < <A A A4 4 44 4 4 4 4r,   r   c                   <    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	S )
FileTreeItemz4Example TreeItem subclass -- browse the file system.c                     || _         d S rP   )r   )rM   r   s     r*   rN   zFileTreeItem.__init__  s    			r,   c                 X    t           j                            | j                  p| j        S rP   r   r   r   rf   s    r*   r   zFileTreeItem.GetText  s!    w	**7di7r,   c                 R    t           j                            | j                  dk    S )N r  rf   s    r*   r   zFileTreeItem.IsEditable  s    w	**b00r,   c                    t           j                            | j                  }t           j                            ||          }t           j                            |          t           j                            | j                  k    rd S 	 t          j        | j        |           || _        d S # t
          $ r Y d S w xY wrP   )r   r   dirnamer   renameOSError)rM   r   newpaths      r*   r   zFileTreeItem.SetText  s    '//$),,',,w--7??7##rwty'A'AAAF	Idi)))DIII 	 	 	DD	s   !B0 0
B>=B>c                 2    |                                  sdS d S )Npython)r   rf   s    r*   r   zFileTreeItem.GetIconName  s%      "" 	8	 	r,   c                 J    t           j                            | j                  S rP   )r   r   isdirrf   s    r*   r   zFileTreeItem.IsExpandable  s    w}}TY'''r,   c                 F   	 t          j        | j                  }n# t          $ r g cY S w xY w|                    t           j        j                   g }|D ]I}t          t           j                            | j        |                    }|                    |           J|S )N)key)	r   listdirr   r  r   normcaser  r   r!   )rM   namesr   r(   rF   s        r*   r   zFileTreeItem.GetSubList  s    	Jty))EE 	 	 	III	

)
*** 	! 	!DTY = =>>DNN4    s    ++N)r   r   r   r   rN   r   r   r   r   r   r   r   r,   r*   r  r    s        >>  8 8 81 1 1	 	 	  ( ( (
 
 
 
 
r,   r  c                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )ScrolledCanvasc                    d|vrd|d<   || _         t          |          | _        | j                            dd           | j                            dd           t          | j        fi || _        | j                            ddd           t          | j        d	          | _	        | j	                            ddd
           t          | j        dd          | _
        | j
                            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 )Nyscrollincrementru   r   r   )weightnsew)r   r   stickyvbar)r(   nsehbar
horizontal)r(   orientewsyscrollcommandcommandxscrollcommandz<Key-Prior>z
<Key-Next>z<Key-Up>z
<Key-Down>r   r   r   z<Alt-Key-2>)r   r   framerowconfigurecolumnconfigureCanvasrD   r#   r   r  r  setr:   xviewr   page_up	page_downunit_up	unit_downr?   zoom_heightr   )rM   r   optss      r*   rN   zScrolledCanvas.__init__  s#   T))')D#$6]]

!,,,
""1Q"///TZ00400Qq888djv666		1Qu555djvlKKK		1Qu555(,	$%#{0	)(,	$%#{0	)555t~666T\222t~666555{333{333(8999r,   c                 <    | j                             dd           dS )Nr   pager2   rD   yview_scrollr`   s     r*   r,  zScrolledCanvas.page_up        V,,,wr,   c                 <    | j                             dd           dS )Nr   r3  r2   r4  r`   s     r*   r-  zScrolledCanvas.page_down        F+++wr,   c                 <    | j                             dd           dS )Nr   unitr2   r4  r`   s     r*   r.  zScrolledCanvas.unit_up  r6  r,   c                 <    | j                             dd           dS )Nr   r:  r2   r4  r`   s     r*   r/  zScrolledCanvas.unit_down  r8  r,   c                 8    t          j        | j                   dS )Nr2   )r   r0  r   r`   s     r*   r0  zScrolledCanvas.zoom_height  s    t{+++wr,   N)	r   r   r   rN   r,  r-  r.  r/  r0  r   r,   r*   r  r    sn             6            r,   r  c                    t          |           }t          t          |                                                     d          dd                    \  }}|                    d|dz   |dz   fz             t          |ddd          }|j                            dd	t          
           t          t                    }t          |j        d |          }|                                 d S )N+r   z+%d+%d2      whiter   )bgr   	takefocusboth)rl   r   side)Toplevelmapintgeometrysplitr  r&  r   LEFTr  rV   rA   rD   rl   )rE   r}   rJ   rK   scrF   nodes          r*   _tree_widgetrN    s    
6

CsFOO%%++C00455DAqLLQrT1S5M)***	A	K	K	KBHMMdM333  DBItT**DKKMMMMMr,   __main__)mainzidlelib.idle_test.test_treer   F)	verbosityexit)runrP   )r   tkintertkinter.ttkr   r   idlelib.configr   idlelibr   rV   r   r   r	  __file___icondir	NameErrorr  RuntimeErrorr+   r?   rA   r   r  r  rN  r   unittestrP  idlelib.idle_test.htestrS  r   r,   r*   <module>r^     sK  " 
			     ( ( ( ( ( ( ( ( # # # # # #      
w||BGOOH55w??HH   HHH7== CGG	w		 C
,AWAAA
B
BB    ,   2v  v  v  v  v  v  v  v r74 74 74 74 74 74 74 74x) ) ) ) )8 ) ) )\+ + + + + + + +\   zD	&!%@@@@++++++C s   3A AA