
    "ec@                        d dl Z d dl d dlmZmZ d dlmZ d dlmZ dZ		 e j                  j                  e j                  j                  e      e	      Ze j                  j!                  e      reZ	n'e j                  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       yy# e$ r e	ZY w xY w)    N)*)Frame	Scrollbar)idleConf)
zoomheightIconszcan't find icon directory ()c                 L   t               }ddl}|j                  t        j                  j	                  |j                  |       d            }|j                          g }dx}}|D ]  }t        j                  j                  t        j                  j                  |            d   }t        ||      }	|j                  |	       t        ||	dd      }
|
j                  ||       t        ||	      }
|
j                  |dz   |       |dz   }|d
k\  s|dz   }d} ||_        y)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.12/idlelib/tree.py	listiconsr+   %   s    4D99RWW\\$++g"6@ADIIKFC& ww 0 0 67:T2ed%Ah?

s6
*d&

s1uV
,!R<a%CF DK    c                     t         j                  | j                  dkD  t         j                  | j                  dk(  i}|| j
                     rdnd}|| j                  n|}|j                  t        |d       y)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         unitsbreak)		EventType
MouseWheeldeltaButtonPressnumtypewidgetyviewSCROLL)eventr9   upliness       r*   wheel_eventr?   ;   sd    " 

a


a
1BUZZ.BaE#^U\\F
LL(r,   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y)TreeNodec                     || _         || _        || _        d| _        d| _        g | _        d x| _        | _        i | _        y )N	collapsedF)	canvasparentitemstateselectedchildrenxy
iconimages)selfrD   rE   rF   s       r*   __init__zTreeNode.__init__V   sA    	 
r,   c                     | j                   d d  D ]-  }| j                   j                  |       |j                          / d | _        y N)rI   removedestroyrE   )rM   cs     r*   rR   zTreeNode.destroy`   s>    q! 	AMM  #IIK	 r,   c                 .   	 | j                   |   S # t        $ r Y nw xY wt        j                  j	                  |      \  }}|xs d}t        j                  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(( 		GG$$T*	cmV77<<4$++H= %s    	Nc                     | j                   ry | j                          d| _         | j                  j                  | j                         | j                          | j                          y )NT)rH   deselectallrD   deleteimage_iddrawicondrawtextrM   r<   s     r*   selectzTreeNode.selectr   sG    ==4==)r,   c                     | j                   sy d| _         | j                  j                  | j                         | j	                          | j                          y )NF)rH   rD   r\   r]   r^   r_   r`   s     r*   deselectzTreeNode.deselect{   s;    }}4==)r,   c                 r    | j                   r| j                   j                          y | j                          y rP   )rE   r[   deselecttreerM   s    r*   r[   zTreeNode.deselectall   s%    ;;KK##%r,   c                 ~    | j                   r| j                          | j                  D ]  }|j                           y rP   )rH   rc   rI   re   )rM   childs     r*   re   zTreeNode.deselecttree   s1    ==MMO]] 	!E 	!r,   c                     | j                   dk(  r| j                          n| j                          | j                  j	                          y)Nexpandedr2   )rG   collapseexpandrF   OnDoubleClickr`   s     r*   flipzTreeNode.flip   s3    ::#MMOKKM		!r,   c                     | j                   j                         sy | j                  dk7  r(d| _        | j                          | j	                          y y )Nrj   )rF   _IsExpandablerG   updateviewr`   s     r*   rl   zTreeNode.expand   s?    yy&&(::##DJKKMIIK $r,   c                 R    | j                   dk7  rd| _         | j                          y y )NrC   )rG   rq   r`   s     r*   rk   zTreeNode.collapse   s#    ::$$DJKKM %r,   c                    | j                   dz
  }| j                         j                   dz   }||z
  }| j                  j                  d      }| j                  j	                         }| j                  j                  |      }||k  r||k  ry | j                  j                  | j                  d         \  }}}	}
||k\  r||k  r	||z   |z
  }n|}t        |      |
z  }| j                  j                  |       y )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    ffqj&&(**R/#kk))!,113,,^<#&N":--dkk..IJBB+&N":V|n4HH?R'  *r,   c                 v    | j                   r,| j                  dk(  r| j                   d   j                         S | S )Nrj   )rI   rG   rw   rf   s    r*   rw   zTreeNode.lastvisiblechild   s1    ==TZZ:5==$5577Kr,   c                    | j                   r| j                   j                          y | j                  d   }d| j                  d<   | j                  j                          | j                  j                  t               | j                  dd       | j                  j                  t              \  }}}}| j                  j                  dd||f       || j                  d<   y )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    ;;KK H-I$+DKK!KK KKs#IIaO![[--c2NBBKK!!1b"~!>$-DKK!r,   c                    d}||c| _         | _        | j                          | j                          | j                  dk7  r||z   S | j
                  s`| j                  j                         }|s|dz   S |D ]:  }| j                  | j                  | |      }| j
                  j                  |       < |dz   }||z   }d}	| j
                  D ]  }|}	| j                  j                  |dz   |dz   ||dz   d       |j                  ||      }|j                  j                         s[|j                  dk(  rd	}
|j                  }nd
}
|j                  }| j!                  |
      }| j                  j#                  |dz   |	dz   |      }| j                  j%                  |d|       | j                  j%                  |dd         | j                  j                  |dz   |dz   |dz   |	dz   d      }| j                  j'                  |       |S )N   rj   ru   r   	   r   gray50)fill	minusnodeplusnode)r   <1>
<Double-1>c                      y rP    )rJ   s    r*   <lambda>zTreeNode.draw.<locals>.<lambda>       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}}ii++-Gt ,t{{D$?$$U+, rTV]] 	GEFKK##AaCAr2a4h#GB#Bzz'');;*,*H$~~H)H$||H))(3[[--ac6!85-I$$R9$$R~F	G  [[$$QqS!B$!VAX %  	b!	r,   c                     | j                   r;| j                  j                         xs | j                  j                         xs d}n| j                  j                         xs d}| j	                  |      }| j
                  j                  | j                  | j                  d|      }|| _	        | j
                  j                  |d| j                         | j
                  j                  |d| j                         y )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 &..0&%  		--/;8I!!),[[%%dffdffT%OR4Rtyy9r,   c                      j                   dz   dz
  } j                  dz
  } j                  j                         }|r j                  j                  ||d|      } j                  j                  |d j                          j                  j                  |d j                          j                  j                  |      \  }}}}t        |d      d	z   } j                  j                         xs d
}		  j                    j                          	  j                   t#        j$                         }
 j&                  r0 j                  j)                  t#        j*                  |
d             n/ j                  j)                  t#        j*                  |
d              j                  j-                  ||d j                        } j                  j/                  d j0                          j                  j/                  d j                          j                  j/                  d fd        j                  j2                  dk(  r> j                  j/                  d fd        j                  j/                  d fd       | _        y # t        $ r Y w xY w# t        $ r# t!         j                  |	ddd       _        Y w xY w)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    t        | j                        S rP   r?   rD   erM   s    r*   r   z#TreeNode.drawtext.<locals>.<lambda>  s    +a2M r,   x11
<Button-4>c                 0    t        | j                        S rP   r   r   s    r*   r   z#TreeNode.drawtext.<locals>.<lambda>!      K4;;4O r,   
<Button-5>c                 0    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_windowingsystemtext_id)rM   textxtexty	labeltextr   r   r   r   r   r   themes   `          r*   r_   zTreeNode.drawtext   s0   r	!qII**,	((d.7 ) 9BKK  UDKK8KK  \499=![[--b1NBBCL2%Eyy  "1k	JJ 	MJJ %%'==JJ  !6!6uh!GHJJ  !6!6uh!GH[[&&ue.24:: ' G

t223

dii0

(MN::&&%/JJOOL*OPJJOOL*OP-  		  	Mt{{!!!LDJ	Ms$   :J J% 	J"!J"%(KKc                     | j                   r,| j                  j                         r| j                  |       y | j	                  |       y rP   )rH   rF   
IsEditableeditra   r`   s     r*   r   zTreeNode.select_or_edit%  s0    ==TYY113IIeKKr,   c                    t        | j                  ddd      | _        | j                  j                  d| j                  d          | j                  j	                  dt
               | j                  j                  d       | j                  j                          | j                  j                  d| j                         | j                  j                  d| j                         y )	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


!TZZ/0

""1c*

a 




D$4$45


D$4$45r,   c                    	 | j                   }| ` |j                         }|j                          |r8|| j                  j                         k7  r| j                  j                  |       | j                  j                         }|| j                  d<   | j                          | j                  j                          y # t        $ r Y y w xY w)Nr   )r   r   getrR   rF   r   SetTextr)   r_   rD   r   )rM   r<   r   r   s       r*   r   zTreeNode.edit_finish4  s    	JJE
 yy{DDII--//IId#yy  "!

6  		s   B> >	C
	C
c                     	 | j                   }| ` |j                          | j                          | j                  j                          y # t        $ r Y y w xY wrP   )r   r   rR   r_   rD   r   )rM   r<   r   s      r*   r   zTreeNode.edit_cancelC  sM    	JJE
 		  		s   A 	AA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   sh    
 !
+".(T:$L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y)TreeItemzAbstract class representing tree items.

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

    c                      y)z)Constructor.  Do whatever you need to do.Nr   rf   s    r*   rN   zTreeItem.__init__W  r   r,   c                      y)zReturn text string to display.Nr   rf   s    r*   r   zTreeItem.GetTextZ  r   r,   c                      y)z>Return label text string to display in front of text (if any).Nr   rf   s    r*   r   zTreeItem.GetLabelText]  r   r,   Nc                 \    | j                   | j                         | _         | j                   S )%Do not override!  Called by TreeNode.)
expandableIsExpandablerf   s    r*   rp   zTreeItem._IsExpandableb  s&    ??""//1DOr,   c                      y)z"Return whether there are subitems.r   r   rf   s    r*   r   zTreeItem.IsExpandableh  s    r,   c                 \    | j                         sg S | j                         }|sd| _        |S )r   r   )r   
GetSubListr   )rM   r   s     r*   r   zTreeItem._GetSubListl  s.      "I//#DOr,   c                      y)z-Return whether the item's text may be edited.Nr   rf   s    r*   r   zTreeItem.IsEditableu  r   r,   c                      y)z+Change the item's text (if it is editable).Nr   )rM   r   s     r*   r   zTreeItem.SetTextx  r   r,   c                      y)z-Return name of icon to be displayed normally.Nr   rf   s    r*   r   zTreeItem.GetIconName{  r   r,   c                      y)z2Return name of icon to be displayed when selected.Nr   rf   s    r*   r   zTreeItem.GetSelectedIconName~  r   r,   c                      y)z%Return list of items forming sublist.Nr   rf   s    r*   r   zTreeItem.GetSubList  r   r,   c                      y)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   N  sL    8-M J<:<A44r,   r   c                   :    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
y	)
FileTreeItemz4Example TreeItem subclass -- browse the file system.c                     || _         y rP   )r   )rM   r   s     r*   rN   zFileTreeItem.__init__  s	    	r,   c                 p    t         j                  j                  | j                        xs | j                  S rP   r   r   r   rf   s    r*   r   zFileTreeItem.GetText  s$    ww		*7dii7r,   c                 Z    t         j                  j                  | j                        dk7  S )N r  rf   s    r*   r   zFileTreeItem.IsEditable  s     ww		*b00r,   c                    t         j                  j                  | j                        }t         j                  j                  ||      }t         j                  j                  |      t         j                  j                  | j                        k7  ry 	 t        j                  | j                  |       || _        y # t
        $ r Y y w xY wrP   )r   r   dirnamer   renameOSError)rM   r   newpaths      r*   r   zFileTreeItem.SetText  s    ''//$)),'',,w-77??7#rwwtyy'AA	IIdii)DI 		s   'B= =	C	C	c                 &    | j                         syy )Npython)r   rf   s    r*   r   zFileTreeItem.GetIconName  s      " #r,   c                 T    t         j                  j                  | j                        S rP   )r   r   isdirrf   s    r*   r   zFileTreeItem.IsExpandable  s    ww}}TYY''r,   c                 V   	 t        j                  | j                        }|j	                  t         j                  j
                         g }|D ]F  }t        t         j                  j                  | j                  |            }|j                  |       H |S # t        $ r g cY S w xY w)N)key)	r   listdirr   r  r   normcaser  r   r!   )rM   namesr   r(   rF   s        r*   r   zFileTreeItem.GetSubList  s    	JJtyy)E 	

))
* 	!DTYY =>DNN4 	!   	I	s   B B('B(N)r   r   r   r  rN   r   r   r   r   r   r   r   r,   r*   r  r    s(    >81	(
r,   r  c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)ScrolledCanvasc                    d|vrd|d<   || _         t        |      | _        | j                  j                  dd       | j                  j	                  dd       t        | j                  fi || _        | j                  j                  ddd       t        | j                  d	      | _	        | j                  j                  ddd
       t        | j                  dd      | _
        | j                  j                  ddd       | j                  j                  | j                  d<   | j                  j                  | j                  d<   | j                  j                  | j                  d<   | j                  j                  | j                  d<   | j                  j                  d| j                         | j                  j                  d| j                          | j                  j                  d| j"                         | j                  j                  d| j$                         | j                  j                  dt&               | j                  j(                  dk(  r@| j                  j                  dt&               | j                  j                  dt&               | j                  j                  d| j*                         | j                  j-                          y )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   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?   r   zoom_heightr   )rM   r   optss      r*   rN   z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                 <    | j                   j                  dd       y)Nr   pager2   rD   yview_scrollr`   s     r*   r-  zScrolledCanvas.page_up        V,r,   c                 <    | j                   j                  dd       y)Nr   r4  r2   r5  r`   s     r*   r.  zScrolledCanvas.page_down        F+r,   c                 <    | j                   j                  dd       y)Nr   unitr2   r5  r`   s     r*   r/  zScrolledCanvas.unit_up  r7  r,   c                 <    | j                   j                  dd       y)Nr   r;  r2   r5  r`   s     r*   r0  zScrolledCanvas.unit_down  r9  r,   c                 B    t        j                  | j                         y)Nr2   )r   r1  r   r`   s     r*   r1  zScrolledCanvas.zoom_height  s    t{{+r,   N)	r   r   r   rN   r-  r.  r/  r0  r1  r   r,   r*   r  r    s      8r,   r  c                    t        |       }t        t        | j                         j	                  d      dd        \  }}|j                  d|dz   |dz   fz         t        |ddd      }|j                  j                  dd	t        
       t        t              }t        |j                  d |      }|j                          y )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_widgetrO    s    
6
CsFOO%++C045DAqLLQrT1S5M)*	A	KBHHMMdM3 DBIItT*DKKMr,   __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  rO  r   unittestrQ  idlelib.idle_test.htestrT  r   r,   r*   <module>r_     s   " 
  ( # 
ww||BGGOOH5w?H 77==G	w	
4WKqA
BB ,2w  w t74 74x)8 )\, ,^ z	&!%@+ i  Hs   5C6 6D ?D 