+F(ddlZddlddlmZmZddlmZddlmZdZ ejjejje e Zejj!ereZ n'ejj!e s ede de fd Zdd ZGd d ZGd dZGddeZGddZdZedk(r ddlmZedddddlmZeeyy#e$re ZYwxYw)N)*)Frame Scrollbar)idleConf) zoomheightIconszcan't find icon directory ()cLt}ddl}|jtjj |j |d}|j g}dx}}|D]}tjjtjj|d}t||} |j| t|| dd} | j||t|| } | j|dz||dz}|d k\s|d z}d}||_ y) z'Utility to display the available icons.rNz*.gif)filemasterraised)imagebdrelief)rowcolumn)text )Tkglobospathjoinescapesortsplitextbasename PhotoImageappendLabelgridimages) icondirrootrlistr$rrr namerlabels 3/opt/alt/python312/lib64/python3.12/idlelib/tree.py listiconsr+%s 4D 99RWW\\$++g"6@ ADIIK FC&ww 0 0 67:T2 ed%Ah? s6 *d& s1uV ,! R<a%CFDKctj|jdkDtj|jdk(i}||j rdnd}| |j n|}|jt|dy)a6Handle 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. runitsbreak) EventType MouseWheeldelta ButtonPressnumtypewidgetyviewSCROLL)eventr9upliness r* wheel_eventr?;sd"    a   a 1BUZZ.BaE#^U\\F LL( r,ceZdZdZdZdZdZddZddZdZ d Z dd Z dd Z dd Z d ZdZdZdZdZdZddZddZddZddZy)TreeNoderc||_||_||_d|_d|_g|_dx|_|_i|_y)N collapsedF) canvasparentitemstateselectedchildrenxy iconimages)selfrDrErFs r*__init__zTreeNode.__init__XsA       r,c|jddD]-}|jj||j/d|_yN)rIremovedestroyrE)rMcs r*rRzTreeNode.destroybs9q!A MM  # IIK" r,c. |j|S#t$rYnwxYwtjj |\}}|xsd}tjj t ||z}t|j|}||j|<|S)Nz.gif)r r ) rLKeyErrorrrrrICONDIRr rD)rMr(r extfullnamers r* geticonimagezTreeNode.geticonimagehs ??4( (   GG$$T* cmV77<<4$++H= % s  Nc|jry|jd|_|jj|j|j |j y)NT)rH deselectallrDdeleteimage_iddrawicondrawtextrMr<s r*selectzTreeNode.selecttsG ==    4==)  r,c|jsyd|_|jj|j|j |j y)NF)rHrDr\r]r^r_r`s r*deselectzTreeNode.deselect}s;}}   4==)  r,cr|jr|jjy|jyrP)rEr[ deselecttreerMs r*r[zTreeNode.deselectalls% ;; KK # # %    r,c~|jr|j|jD]}|jyrP)rHrcrIre)rMchilds r*rezTreeNode.deselecttrees, == MMO]]E    #r,c|jdk(r|jn|j|jj y)Nexpandedr2)rGcollapseexpandrF OnDoubleClickr`s r*flipz TreeNode.flips3 :: # MMO KKM !r,c|jjsy|jdk7r(d|_|j|j yy)Nrj)rF _IsExpandablerGupdateviewr`s r*rlzTreeNode.expands?yy&&(  :: ##DJ KKM IIK $r,cR|jdk7rd|_|jyy)NrC)rGrqr`s r*rkzTreeNode.collapses# :: $$DJ KKM %r,c|jdz }|jjdz}||z }|jjd}|jj }|jj|}||kr||kry|jj |jd\}}} } ||k\r||kr ||z|z } n|} t | | z } |jj| y)Nrr scrollregion)rKlastvisiblechildrDcanvasy winfo_height_getintsfloat yview_moveto) rMtopbottomheight visible_topvisible_heightvisible_bottomx0y0x1y1fractions r*rrz TreeNode.viewsffqj&&(**R/#kk))!, 113,,^< # &N": --dkk..IJBB + &N":V|n4HH?R'   *r,cv|jr,|jdk(r|jdjS|S)Nrj)rIrGrwrfs r*rwzTreeNode.lastvisiblechilds1 ==TZZ:5==$557 7Kr,c|jr|jjy|jd}d|jd<|jj|jjt|j dd|jj t\}}}}|jjdd||f||jd<y)Ncursorwatchrr)rv)rErqrDr\ALLdrawbbox configure)rM oldcursorrrrrs r*rqzTreeNode.updates ;; KK    H-I$+DKK ! KK   KK  s # IIaO![[--c2NBB KK ! !1b"~ ! >$-DKK !r,ch||c|_|_|j|j|jdk7r|t j zS|jsn|jj}|s|t j zS|D]:}|j|j||}|jj|<|dz}|t j z}d}|jD]}|}|jj|dz|dz||dzd|j||}|jjs[|jdk(rd} |j } nd } |j"} |j%| } |jj'|dz|dz| } |jj)| d | |jj)| d d |jj|dz|dz|dz|dzd} |jj+| |S)Nrjr rgray50)fill minusnodeplusnode)r<1> cyrP)rJs r*zTreeNode.draw..sr,r)rJrKr^r_rGrAdyrIrF _GetSubList __class__rDr! create_linerrprkrlrY create_imagetag_bind tag_lower) rMrJrKsublistrFrhcxcycylasticonnamecallbackrids r*rz TreeNode.drawsA   :: #x{{? "}}ii++-G8;;&t{{D$? $$U+ rT _]]EF KK # #AaCAr2a4h # GB#Bzz'');;*,*H$~~H)H$||H))(3[[--ac6!85-I $$R9 $$R~F# [[ $ $QqS!B$!VAX% b! r,c|jr;|jjxs|jjxsd}n|jjxsd}|j |}|j j |j|jd|}||_ |j j|d|j|j j|d|jy)N openfolderfoldernw)anchorrrr) rHrFGetSelectedIconName GetIconNamerYrDrrJrKr]rrarn)rM imagenamerrs r*r^zTreeNode.drawicons ==668&..0&%  --/;8I!!), [[ % %dffdffT % O  R 4 Rtyy9r,cHjdzdz }jdz }jj}|rjj ||d|}jj |djjj |djjj|\}}}}t|dd z}jjxsd } jj jt#j$} j&r0jj)t#j*| dn/jj)t#j*| djj-||dj}jj/dj0jj/djjj/dfdjj2dk(r>jj/dfdjj/dfd|_t6j8d k(r=jj|} td| d| dz dz t6_yy#t$rYwxYw#t$r#t!j| d d d _YwxYw)Nrr r.r)rrrrrz rr)rrpadxpadyhilitenormal)rwindow c0t|jSrPr?rDerMs r*rz#TreeNode.drawtext.. s+a2Mr,x11 c0t|jSrPrrs r*rz#TreeNode.drawtext.."K4;;4Or, c0t|jSrPrrs r*rz#TreeNode.drawtext..#rr,)rJrKrF GetLabelTextrD create_textrrarnrmaxGetTextentry edit_finishAttributeErrorr)r"r CurrentThemerHr GetHighlight create_windowbindselect_or_edit_windowingsystemtext_idrAr) rMtextxtexty labeltextrrrrrrthemecoordss ` r*r_zTreeNode.drawtextswr ! qII**, ((d.7)9B KK UDKK 8 KK \499 =![[--b1NBBCL2%Eyy  "1k  JJ     M JJ%%' == JJ !6!6uh!G H JJ !6!6uh!G H [[ & &ue.24::'G t223  dii0 (MN :: & &% / JJOOL*O P JJOOL*O P ;;! [[%%b)Fb&)fQi"7!";z) Entryr)rinsertselection_rangeENDpack focus_setrr edit_cancelr`s r*rz TreeNode.edit1s4::!K  !TZZ/0 ""1c* a    D$4$45  D$4$45r,c |j}|`|j}|j|r8||jj k7r|jj ||jj }||jd<|j|jjy#t$rYywxYw)Nr) rrgetrRrFrSetTextr)r_rDr)rMr<rrs r*rzTreeNode.edit_finish:s JJE yy{  DDII--// II  d #yy  "! 6     sB>> C  C c |j}|`|j|j|jj y#t$rYywxYwrP)rrrRr_rDr)rMr<rs r*rzTreeNode.edit_cancelIsM JJE         sA AArP)__name__ __module__ __qualname__rrNrRrYrarcr[rernrlrkrrrwrqrr^r_rrrrrr,r*rArATsm B  !  +" .'R :)=V 6   r,rAc\eZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z d Zd ZdZy)TreeItemzAbstract class representing tree items. Methods should typically be overridden, otherwise a default action is used. cy)z)Constructor. Do whatever you need to do.Nrrfs r*rNzTreeItem.__init__]r,cy)zReturn text string to display.Nrrfs r*rzTreeItem.GetText`rr,cy)z>Return label text string to display in front of text (if any).Nrrfs r*rzTreeItem.GetLabelTextcrr,Nc\|j|j|_|jS)%Do not override! Called by TreeNode.) expandable IsExpandablerfs r*rpzTreeItem._IsExpandablehs& ?? ""//1DOr,cy)z"Return whether there are subitems.r rrfs r*rzTreeItem.IsExpandablensr,c\|jsgS|j}|sd|_|S)rr)r GetSubListr)rMrs r*rzTreeItem._GetSubListrs.  "I//#DOr,cy)z-Return whether the item's text may be edited.Nrrfs r*rzTreeItem.IsEditable{rr,cy)z+Change the item's text (if it is editable).Nr)rMrs r*rzTreeItem.SetText~rr,cy)z-Return name of icon to be displayed normally.Nrrfs r*rzTreeItem.GetIconNamerr,cy)z2Return name of icon to be displayed when selected.Nrrfs r*rzTreeItem.GetSelectedIconNamerr,cy)z%Return list of items forming sublist.Nrrfs r*rzTreeItem.GetSubListrr,cy)z%Called on a double-click on the item.Nrrfs r*rmzTreeItem.OnDoubleClickrr,)rrr__doc__rNrrrrprrrrrrrrmrr,r*rrTsL8-MJ <:<A44r,rc:eZdZdZdZdZdZdZdZdZ dZ y ) FileTreeItemz4Example TreeItem subclass -- browse the file system.c||_yrP)r)rMrs r*rNzFileTreeItem.__init__s  r,cptjj|jxs |jSrPrrrrfs r*rzFileTreeItem.GetTexts$ww *7dii7r,cZtjj|jdk7S)Nrrfs r*rzFileTreeItem.IsEditables ww *b00r,ctjj|j}tjj||}tjj|tjj|jk7ry tj|j|||_y#t $rYywxYwrP)rrdirnamerrenameOSError)rMrnewpaths r*rzFileTreeItem.SetTexts''//$)),'',,w- 77??7 #rwwtyy'A A   IIdii )DI   s'B== C C c&|jsyy)Npython)rrfs r*rzFileTreeItem.GetIconNames  "#r,cTtjj|jSrP)rrisdirrfs r*rzFileTreeItem.IsExpandablesww}}TYY''r,cV tj|j}|j tjj g}|D]F}t tjj|j|}|j|H|S#t$rgcYSwxYw)N)key) rlistdirrrrnormcaserrr!)rMnamesrr(rFs r*rzFileTreeItem.GetSubLists JJtyy)E  )) *D TYY =>D NN4  I sB B('B(N) rrrrrNrrrrrrrr,r*rrs(>81 ( r,rc0eZdZdZdZdZdZdZdZy)ScrolledCanvasc d|vrd|d<||_t||_|jjdd|jj ddt |jfi||_|j jdddt|jd |_ |jjddd t|jd d |_ |jjddd|jj|j d<|j j|jd<|jj|j d<|j j|jd<|j jd|j|j jd|j |j jd|j"|j jd|j$|j jdt&|j j(dk(r@|j jdt&|j jdt&|j jd|j*|j j-y)Nyscrollincrementrurr )weightnsew)rrstickyvbar)r(nsehbar horizontal)r(orientewsyscrollcommandcommandxscrollcommandz z zz rrrrz )r rframe rowconfigurecolumnconfigureCanvasrDr#rr r"setr:xviewrpage_up page_downunit_up unit_downr?r zoom_heightr)rMr optss r*rNzScrolledCanvas.__init__s  T )')D# $ 6]  !, ""1Q"/TZZ040  Qq8djjv6  1Qu5djjvlK  1Qu5(,  $%#{{00 )(,  $%#{{00 )  5 t~~6 T\\2 t~~6 5 ;; ' '5 0 KK  \; 7 KK  \; 7 (8(89 r,c<|jjddy)Nrpager2rD yview_scrollr`s r*r/zScrolledCanvas.page_up   V,r,c<|jjddy)Nr r6r2r7r`s r*r0zScrolledCanvas.page_down   F+r,c<|jjddy)Nrunitr2r7r`s r*r1zScrolledCanvas.unit_upr9r,c<|jjddy)Nr r=r2r7r`s r*r2zScrolledCanvas.unit_downr;r,cBtj|jy)Nr2)rr3r r`s r*r3zScrolledCanvas.zoom_heightst{{+r,N) rrrrNr/r0r1r2r3rr,r*rrs  8r,rct|}tt|jj ddd\}}|jd|dz|dzfzt |ddd}|j jdd t tt}t|jd|}|jy) N+r z+%d+%d2whiter)bgr takefocusboth)rlrside)Toplevelmapintgeometrysplitrr)rLEFTrrVrArDrl)rEr}rJrKscrFnodes r* _tree_widgetrQs 6 C sFOO%++C04 5DAqLLQrT1S5M)* A KBHHMMdM3  D BIItT *DKKMr,__main__)mainzidlelib.idle_test.test_treerF) verbosityexit)runrP)rtkinter tkinter.ttkrridlelib.configridlelibrrVrrr __file___icondir NameErrorr RuntimeErrorr+r?rArrrrQrunittestrSidlelib.idle_test.htestrVrr,r*ras" (# ww||BGGOOH5w?H77==G w  4WKqA BB,2} } @7474x)8)\,,^ z &!%@+  uHs5C66D?D