
   "Xl                      S SK r S SK7  S SKJrJr  S SKJr  S SKJr  Sr	 \ R                  R                  \ R                  R                  \5      \	5      r\ R                  R!                  \5      (       a  \r	O-\ R                  R!                  \	5      (       d  \" S\	< S35      e\	4S	 jrSS
 jr " S S5      r " S S5      r " S S\5      r " S S5      rS r\S:X  a  S SKJr  \" SSSS9  S SKJr  \" \5        gg! \ a    \	r Nf = f)    N)*)Frame	Scrollbar)idleConf)
zoomheightIconszcan't find icon directory ()c                 *   [        5       nSSKnUR                  [        R                  R	                  UR                  U 5      S5      5      nUR                  5         / nS=pVU H  n[        R                  R                  [        R                  R                  U5      5      S   n[        XqS9n	UR                  U	5        [        XSSS9n
U
R                  XVS9  [        XS	9n
U
R                  US-   US9  US-   nUS
:  d  M  US-   nSnM     XAl        g)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              #/usr/lib/python3.13/idlelib/tree.py	listiconsr+   %   s    4D99RWW\\$++g"6@ADIIKFCww 0 0 67:2edAh?

s
*d&

s1uV
,!R<a%CF  K    c                     [         R                  U R                  S:  [         R                  U R                  S:H  0nX R
                     (       a  SOSnUc  U R                  OUnUR                  [        US5        g)a
  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         unitsbreak)		EventType
MouseWheeldeltaButtonPressnumtypewidgetyviewSCROLL)eventr9   upliness       r*   wheel_eventr?   ;   sb    " 

a


a
1BZZ.BaE#^U\\F
LL(r,   c                       \ rS rSrSrS rS rS rSS jrSS jr	S	 r
S
 rSS jrSS jrSS jrS rS rS rS rS rS rSS jrSS jrSS jrSS jrSrg)TreeNodeT   r   c                 |    Xl         X l        X0l        SU l        SU l        / U l        S =U l        U l        0 U l        g )N	collapsedF)	canvasparentitemstateselectedchildrenxy
iconimages)selfrE   rF   rG   s       r*   __init__TreeNode.__init__X   s;    	 
r,   c                     U R                   S S   H.  nU R                   R                  U5        UR                  5         M0     S U l        g N)rJ   removedestroyrF   )rN   cs     r*   rT   TreeNode.destroyb   s9    q!AMM  #IIK " r,   c                 .    U R                   U   $ ! [         a     Of = f[        R                  R	                  U5      u  p#U=(       d    Sn[        R                  R                  [        X#-   5      n[        U R                  US9nXPR                   U'   U$ )Nz.gif)r   r   )	rM   KeyErrorr   r   r   r   ICONDIRr    rE   )rN   r(   r   extfullnamer   s         r*   geticonimageTreeNode.geticonimageh   s~    	??4(( 		GG$$T*	mV77<<4$++H= %s    
Nc                     U R                   (       a  g U R                  5         SU l         U R                  R                  U R                  5        U R                  5         U R                  5         g )NT)rI   deselectallrE   deleteimage_iddrawicondrawtextrN   r<   s     r*   selectTreeNode.selectt   sG    ==4==)r,   c                     U R                   (       d  g SU l         U R                  R                  U R                  5        U R	                  5         U R                  5         g )NF)rI   rE   r`   ra   rb   rc   rd   s     r*   deselectTreeNode.deselect}   s;    }}4==)r,   c                 |    U R                   (       a  U R                   R                  5         g U R                  5         g rR   )rF   r_   deselecttreerN   s    r*   r_   TreeNode.deselectall   s%    ;;KK##%r,   c                     U R                   (       a  U R                  5         U R                   H  nUR                  5         M     g rR   )rI   rh   rJ   rk   )rN   childs     r*   rk   TreeNode.deselecttree   s,    ==MMO]]E  #r,   c                     U R                   S:X  a  U R                  5         OU R                  5         U R                  R	                  5         g)Nexpandedr2   )rH   collapseexpandrG   OnDoubleClickrd   s     r*   flipTreeNode.flip   s3    ::#MMOKKM		!r,   c                     U R                   R                  5       (       d  g U R                  S:w  a(  SU l        U R                  5         U R	                  5         g g )Nrr   )rG   _IsExpandablerH   updateviewrd   s     r*   rt   TreeNode.expand   sB    yy&&((::##DJKKMIIK $r,   c                 T    U R                   S:w  a  SU l         U R                  5         g g )NrD   )rH   rz   rd   s     r*   rs   TreeNode.collapse   s#    ::$$DJKKM %r,   c                    U R                   S-
  nU R                  5       R                   S-   nX!-
  nU R                  R                  S5      nU R                  R	                  5       nU R                  R                  U5      nXA::  a  X&::  a  g U R                  R                  U R                  S   5      u  pxpX:  a  X5::  a  X-   U-
  nOUn[        U5      U
-  nU R                  R                  U5        g )Nr      r   scrollregion)rL   lastvisiblechildrE   canvasywinfo_height_getintsfloatyview_moveto)rN   topbottomheightvisible_topvisible_heightvisible_bottomx0y0x1y1fractions               r*   r{   TreeNode.view   s    ffqj&&(**R/kk))!,113,,^<&":--dkk..IJ&":|n4HH?R'  *r,   c                     U R                   (       a-  U R                  S:X  a  U R                   S   R                  5       $ U $ )Nrr   )rJ   rH   r   rl   s    r*   r   TreeNode.lastvisiblechild   s1    ==TZZ:5==$5577Kr,   c                    U R                   (       a  U R                   R                  5         g U R                  S   nSU R                  S'   U R                  R                  5         U R                  R                  [        5        U R                  SS5        U R                  R                  [        5      u  p#pEU R                  R                  SSXE4S9  XR                  S'   g )Ncursorwatch   r   r   )r   )rF   rz   rE   r`   ALLdrawbbox	configure)rN   	oldcursorr   r   r   r   s         r*   rz   TreeNode.update   s    ;;KK H-I$+DKK!KK KKs#IIaO![[--c2NBBKK!!1b~!>$-KK!r,   c           	      z   XsU l         U l        U R                  5         U R                  5         U R                  S:w  a  U[
        R                  -   $ U R                  (       dt  U R                  R                  5       nU(       d  U[
        R                  -   $ U H:  nU R                  U R                  X5      nU R                  R                  U5        M<     US-   nU[
        R                  -   nSnU R                   H  nUnU R                  R                  US-   US-   XgS-   SS9  UR                  Xg5      nUR                  R                  5       (       d  M\  UR                  S:X  a  Sn	UR                   n
OS	n	UR"                  n
U R%                  U	5      nU R                  R'                  US-   US-   US
9nU R                  R)                  USU
5        U R                  R)                  USS 5        M     U R                  R                  US-   US-   US-   US-   SS9nU R                  R+                  U5        U$ )Nrr      r   	   r   gray50)fill	minusnodeplusnode)r   <1>
<Double-1>c                     g rR    )rK   s    r*   <lambda>TreeNode.draw.<locals>.<lambda>   s    r,   r   )rK   rL   rb   rc   rH   rA   dyrJ   rG   _GetSubList	__class__rE   r!   create_liner   ry   rs   rt   r\   create_imagetag_bind	tag_lower)rN   rK   rL   sublistrG   ro   cxcycylasticonnamecallbackr   ids                r*   r   TreeNode.draw   s   ::#x{{?"}}ii++-G8;;&t{{D?$$U+   rT_]]EFKK##AaCAra4h#GB#Bzz''));;*,*H$~~H)H$||H))(3[[--ac6!85-I$$R9$$R~F #  [[$$QqS!B$!VAX %  	b!	r,   c                     U R                   (       aE  U R                  R                  5       =(       d#    U R                  R                  5       =(       d    SnO#U R                  R                  5       =(       d    SnU R	                  U5      nU R
                  R                  U R                  U R                  SUS9nX0l	        U R
                  R                  USU R                  5        U R
                  R                  USU R                  5        g )N
openfolderfoldernw)anchorr   r   r   )rI   rG   GetSelectedIconNameGetIconNamer\   rE   r   rK   rL   ra   r   re   rv   )rN   	imagenamer   r   s       r*   rb   TreeNode.drawicon   s    ==668 &..0&%  		--/;8I!!),[[%%dffdffT%OR4Rtyy9r,   c           	      `  ^  T R                   S-   S-
  nT R                  S-
  nT R                  R                  5       nU(       a  T R                  R                  XSUS9nT R                  R                  UST R                  5        T R                  R                  UST R                  5        T R                  R                  U5      u  pVpx[        US5      S	-   nT R                  R                  5       =(       d    S
n	 T R                    T R                  5          T R                    ["        R$                  " 5       n
T R&                  (       a1  T R                  R)                  ["        R*                  " U
S5      5        O0T R                  R)                  ["        R*                  " U
S5      5        T R                  R-                  XST R                  S9nT R                  R/                  ST R0                  5        T R                  R/                  ST R                  5        T R                  R/                  SU 4S j5        T R                  R2                  S:X  a@  T R                  R/                  SU 4S j5        T R                  R/                  SU 4S j5        UT l        [6        R8                  S:X  a=  T R                  R                  U5      n[        SUS   US   -
  S-
  5      [6        l        g g ! [         a     GNf = f! [         a     [!        T R                  U	SSSS9T l         GNf = f)Nr   r   r.   r   )r   r   r   r      r   z	<no text>r   r   )r   r   padxpadyhilitenormal)r   window<MouseWheel>c                 0   > [        U TR                  5      $ rR   r?   rE   erN   s    r*   r   #TreeNode.drawtext.<locals>.<lambda>   s    +a2Mr,   x11
<Button-4>c                 0   > [        U TR                  5      $ rR   r   r   s    r*   r   r   "      K4;;4Or,   
<Button-5>c                 0   > [        U TR                  5      $ rR   r   r   s    r*   r   r   #  r   r,      )rK   rL   rG   GetLabelTextrE   create_textr   re   rv   r   maxGetTextentryedit_finishAttributeErrorr)   r"   r   CurrentThemerI   r   GetHighlightcreate_windowbindselect_or_edit_windowingsystemtext_idrA   r   )rN   textxtexty	labeltextr   r   r   r   r   r   themecoordss   `           r*   rc   TreeNode.drawtext   so   r	!qII**,	((d.7 ) 9BKK  UDKK8KK  \499=![[--b1NBBCL2%Eyy  "1k	JJ 	MJJ %%'==JJ  !6!6uh!GHJJ  !6!6uh!GH[[&&u.24:: ' G

t223

dii0

(MN::&&%/JJOOL*OPJJOOL*OP;;! [[%%b)Fb&)fQi"7!";<HK	 /  		  	Mt{{!!!LDJ	Ms$   >K2 L 2
L ?L &L-,L-c                     U R                   (       a1  U R                  R                  5       (       a  U R                  U5        g U R	                  U5        g rR   )rI   rG   
IsEditableeditre   rd   s     r*   r   TreeNode.select_or_edit+  s3    ==TYY1133IIeKKr,   c                    [        U R                  SSSS9U l        U R                  R                  SU R                  S   5        U R                  R	                  S[
        5        U R                  R                  SS9  U R                  R                  5         U R                  R                  SU R                  5        U R                  R                  SU R                  5        g )	Nr   r   )r   highlightthicknesswidthr   r0   )ipadxz<Return>z<Escape>)Entryr)   r   insertselection_rangeENDpack	focus_setr   r   edit_cancelrd   s     r*   r   TreeNode.edit1  s    4::!K


!TZZ/0

""1c*

a 




D$4$45


D$4$45r,   c                     U R                   nU ? UR                  5       nUR                  5         U(       a8  X0R                  R                  5       :w  a  U R                  R                  U5        U R                  R                  5       nX0R                  S'   U R                  5         U R                  R                  5         g ! [         a     g f = f)Nr   )r   r   getrT   rG   r   SetTextr)   rc   rE   r   )rN   r<   r   r   s       r*   r   TreeNode.edit_finish:  s    	JJE
 yy{DII--//IId#yy  "!

6  		s   C 
CCc                      U R                   nU ? UR                  5         U R                  5         U R                  R                  5         g ! [         a     g f = frR   )r   r   rT   rc   rE   r   )rN   r<   r   s      r*   r   TreeNode.edit_cancelI  sM    	JJE
 		  		s   A 
AA)rE   rJ   r   rM   ra   rG   r)   rF   rI   rH   r   rK   rL   rR   )__name__
__module____qualname____firstlineno__r   rO   rT   r\   re   rh   r_   rk   rv   rt   rs   r{   r   rz   r   rb   rc   r   r   r   r   __static_attributes__r   r,   r*   rA   rA   T   sm    	
B
 !
+".'R:)=V6  r,   rA   c                   d    \ rS rSrSrS rS rS rSrS r	S r
S	 rS
 rS rS rS rS rS rSrg)TreeItemiT  zvAbstract class representing tree items.

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

c                     g)z)Constructor.  Do whatever you need to do.Nr   rl   s    r*   rO   TreeItem.__init__]      r,   c                     g)zReturn text string to display.Nr   rl   s    r*   r   TreeItem.GetText`  r  r,   c                     g)z>Return label text string to display in front of text (if any).Nr   rl   s    r*   r   TreeItem.GetLabelTextc  r  r,   Nc                 ^    U R                   c  U R                  5       U l         U R                   $ )%Do not override!  Called by TreeNode.)
expandableIsExpandablerl   s    r*   ry   TreeItem._IsExpandableh  s&    ??""//1DOr,   c                     g)z"Return whether there are subitems.r   r   rl   s    r*   r  TreeItem.IsExpandablen  s    r,   c                 p    U R                  5       (       d  / $ U R                  5       nU(       d  SU l        U$ )r  r   )r  
GetSubListr  )rN   r   s     r*   r   TreeItem._GetSubListr  s1      ""I//#DOr,   c                     g)z-Return whether the item's text may be edited.Nr   rl   s    r*   r   TreeItem.IsEditable{  r  r,   c                     g)z+Change the item's text (if it is editable).Nr   )rN   r   s     r*   r   TreeItem.SetText~  r  r,   c                     g)z-Return name of icon to be displayed normally.Nr   rl   s    r*   r   TreeItem.GetIconName  r  r,   c                     g)z2Return name of icon to be displayed when selected.Nr   rl   s    r*   r   TreeItem.GetSelectedIconName  r  r,   c                     g)z%Return list of items forming sublist.Nr   rl   s    r*   r  TreeItem.GetSubList  r  r,   c                     g)z%Called on a double-click on the item.Nr   rl   s    r*   ru   TreeItem.OnDoubleClick  r  r,   )r  )r  r  r  r  __doc__rO   r   r   r  ry   r  r   r   r   r   r   r  ru   r  r   r,   r*   r
  r
  T  sL    8-M J<:<A44r,   r
  c                   B    \ rS rSrSrS rS rS rS rS r	S r
S	 rS
rg)FileTreeItemi  z4Example TreeItem subclass -- browse the file system.c                     Xl         g rR   r   )rN   r   s     r*   rO   FileTreeItem.__init__  s    	r,   c                 z    [         R                  R                  U R                  5      =(       d    U R                  $ rR   r   r   r   rl   s    r*   r   FileTreeItem.GetText  s$    ww		*7dii7r,   c                 Z    [         R                  R                  U R                  5      S:g  $ )N r/  rl   s    r*   r   FileTreeItem.IsEditable  s     ww		*b00r,   c                    [         R                  R                  U R                  5      n[         R                  R                  X!5      n[         R                  R                  U5      [         R                  R                  U R                  5      :w  a  g  [         R                  " U R                  U5        X l        g ! [
         a     g f = frR   )r   r   dirnamer   renameOSError)rN   r   newpaths      r*   r   FileTreeItem.SetText  s    ''//$)),'',,w-77??7#rwwtyy'AA	IIdii)I 		s   'B= =
C
	C
c                 0    U R                  5       (       d  gg )Npython)r  rl   s    r*   r   FileTreeItem.GetIconName  s      "" #r,   c                 T    [         R                  R                  U R                  5      $ rR   )r   r   isdirrl   s    r*   r  FileTreeItem.IsExpandable  s    ww}}TYY''r,   c                 X    [         R                  " U R                  5      nUR	                  [         R                  R
                  S9  / nU HG  n[        [         R                  R                  U R                  U5      5      nUR                  U5        MI     U$ ! [         a    / s $ f = f)N)key)	r   listdirr   r7  r   normcaser*  r   r!   )rN   namesr   r(   rG   s        r*   r  FileTreeItem.GetSubList  s    	JJtyy)E 	

))
*DTYY =>DNN4     	I	s    B B)(B)r,  N)r  r  r  r  r(  rO   r   r   r   r   r  r  r  r   r,   r*   r*  r*    s(    >81	(
r,   r*  c                   8    \ rS rSrS rS rS rS rS rS r	Sr
g	)
ScrolledCanvasi  c                    SU;  a  SUS'   Xl         [        U5      U l        U R                  R                  SSS9  U R                  R	                  SSS9  [        U R                  40 UD6U l        U R                  R                  SSSS9  [        U R                  SS	9U l	        U R                  R                  SSS
S9  [        U R                  SSS9U l
        U R                  R                  SSSS9  U R                  R                  U R                  S'   U R                  R                  U R                  S'   U R                  R                  U R                  S'   U R                  R                  U R                  S'   U R                  R                  SU R                  5        U R                  R                  SU R                   5        U R                  R                  SU R"                  5        U R                  R                  SU R$                  5        U R                  R                  S[&        5        U R                  R(                  S:X  a@  U R                  R                  S[&        5        U R                  R                  S[&        5        U R                  R                  SU R*                  5        U R                  R-                  5         g )Nyscrollincrementr   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   r   z<Alt-Key-2>)r   r   framerowconfigurecolumnconfigureCanvasrE   r#   r   rM  rO  setr:   xviewr   page_up	page_downunit_up	unit_downr?   r   zoom_heightr   )rN   r   optss      r*   rO   ScrolledCanvas.__init__  s	   T)')D#$6]


!,

""1Q"/TZZ040Qq8djjv6			1Qu5djjvlK			1Qu5(,		$%#{{00		)(,		$%#{{00		)5t~~6T\\2t~~65;;''50KK\;7KK\;7(8(89r,   c                 <    U R                   R                  SS5        g)Nr   pager2   rE   yview_scrollrd   s     r*   r\  ScrolledCanvas.page_up        V,r,   c                 <    U R                   R                  SS5        g)Nr   rd  r2   re  rd   s     r*   r]  ScrolledCanvas.page_down        F+r,   c                 <    U R                   R                  SS5        g)Nr   unitr2   re  rd   s     r*   r^  ScrolledCanvas.unit_up  rh  r,   c                 <    U R                   R                  SS5        g)Nr   rm  r2   re  rd   s     r*   r_  ScrolledCanvas.unit_down  rk  r,   c                 D    [         R                  " U R                  5        g)Nr2   )r   r`  r   rd   s     r*   r`  ScrolledCanvas.zoom_height  s    t{{+r,   )rE   rV  rO  r   rM  N)r  r  r  r  rO   r\  r]  r^  r_  r`  r  r   r,   r*   rG  rG    s      8r,   rG  c                 x   [        U 5      n[        [        U R                  5       R	                  S5      SS  5      u  p#UR                  SUS-   US-   4-  5        [        USSSS9nUR                  R                  SS	[        S
9  [        [        5      n[        UR                  S U5      nUR                  5         g )N+r   z+%d+%d2      whiter   )bgr   	takefocusboth)rt   r   side)ToplevelmapintgeometrysplitrG  rV  r   LEFTr*  rY   rA   rE   rt   )rF   r   rK   rL   scrG   nodes          r*   _tree_widgetr    s    
6
CsFOO%++C045DALLQrT1S5M)*	A	KBHHMMdM3 DBIItT*DKKMr,   __main__)mainzidlelib.idle_test.test_treer   F)	verbosityexit)runrR   )r   tkintertkinter.ttkr   r   idlelib.configr   idlelibr   rY   r   r   r5  __file___icondir	NameErrorr>  RuntimeErrorr+   r?   rA   r
  r*  rG  r  r  unittestr  idlelib.idle_test.htestr  r   r,   r*   <module>r     s  " 
  ( # 
ww||BGGOOH5w?H 77==G	w		
4WKqA
BB ,2}  } @74 74x)8 )\, ,^ z	&!%@+ u  Hs   5D DD