\d?.ddlZddlTddlmZmZddlmZddlmZdZ ej ej e e Zn #e$re ZYnwxYwej ereZ n)ej e sede de fd Zdd ZGd d ZGd dZGddeZGddZdZedkr'ddlmZedddddlmZeedSdS)N)*)Frame Scrollbar)idleConf) zoomheightIconszcan't find icon directory ()ct}ddl}|tj||d}|g}dx}}|D]}tjtj|d}t||} | | t|| dd} | ||t|| } | |dz||dz}|d kr|d z}d}||_ dS) z'Utility to display the available icons.rNz*.gif)filemasterraised)imagebdrelief)rowcolumn)text )Tkglobospathjoinescapesortsplitextbasename PhotoImageappendLabelgridimages) icondirrootrlistr$rrr namerlabels ..\python\lib\idlelib\tree.py listiconsr+%s> 44DKKK 99RW\\$++g"6"6@@ A ADIIKKK FC&  w 0 0 6 677:T222 ed%Ah??? s6 ***d&&& s1uV ,,,! R<<a%CFDKKKctj|jdktj|jdki}||jrdnd}||jn|}|t|ddS)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. rNunitsbreak) EventType MouseWheeldelta ButtonPressnumtypewidgetyviewSCROLL)eventr9upliness r* wheel_eventr?;se"   a  a 1BUZ. 'BBaE#^U\\F LL((( 7r,ceZdZdZdZdZddZddZdZdZ dd Z dd Z dd Z d Z d ZdZdZdZdZddZddZddZddZdS)TreeNodec||_||_||_d|_d|_g|_dx|_|_i|_dS)N collapsedF) canvasparentitemstateselectedchildrenxy iconimages)selfrDrErFs r*__init__zTreeNode.__init__VsE       r,c|jddD]0}|j||1d|_dSN)rIremovedestroyrE)rMcs r*rRzTreeNode.destroy`sLqqq!  A M  # # # IIKKKK r,c |j|S#t$rYnwxYwtj|\}}|pd}tjt ||z}t|j|}||j|<|S)Nz.gif)r r ) rLKeyErrorrrrrICONDIRr rD)rMr(r extfullnamers r* geticonimagezTreeNode.geticonimagefs ?4( (    D G$$T** cmV7<<44$+H=== % s  Nc|jrdS|d|_|j|j||dS)NT)rH deselectallrDdeleteimage_iddrawicondrawtextrMr<s r*selectzTreeNode.selectrs` =  F   4=)))  r,c|jsdSd|_|j|j||dS)NF)rHrDr\r]r^r_r`s r*deselectzTreeNode.deselect{sN}  F  4=)))  r,cr|jr|jdS|dSrP)rEr[ deselecttreerMs r*r[zTreeNode.deselectalls> ; K # # % % % % %        r,cx|jr||jD]}|dSrP)rHrcrIre)rMchilds r*rezTreeNode.deselecttreesI =  MMOOO] ! !E     ! !r,c|jdkr|n||jdS)Nexpandedr2)rGcollapseexpandrF OnDoubleClickr`s r*flipz TreeNode.flipsD : # # MMOOOO KKMMM !!!wr,c|jsdS|jdkr1d|_||dSdS)Nrj)rF _IsExpandablerGupdateviewr`s r*rlzTreeNode.expandsWy&&((  F : # ##DJ KKMMM IIKKKKK $ #r,cV|jdkrd|_|dSdS)NrC)rGrqr`s r*rkzTreeNode.collapses/ : $ $$DJ KKMMMMM % $r,c|jdz }|jdz}||z }|jd}|j}|j|}||kr||krdS|j|jd\}}} } ||kr||kr ||z|z } n|} t | | z } |j| dS)Nrr scrollregion)rKlastvisiblechildrDcanvasy winfo_height_getintsfloat yview_moveto) rMtopbottomheight visible_topvisible_heightvisible_bottomx0y0x1y1fractions r*rrz TreeNode.viewsfqj&&((*R/#k))!,, 1133,,^<< #  &N":": F--dk..IJJBB +  &N":":V|n4HHH??R'   *****r,ch|jr*|jdkr|jdS|S)Nrj)rIrGrwrfs r*rwzTreeNode.lastvisiblechilds6 = TZ:55=$5577 7Kr,c|jr|jdS|jd}d|jd<|j|jt|dd|jt\}}}}|jdd||f||jd<dS)Ncursorwatchrr)rv)rErqrDr\ALLdrawbbox configure)rM oldcursorrrrrs r*rqzTreeNode.updates ; . K    H-I$+DK ! K   K  s # # # IIaOOO![--c22NBB K ! !1b"~ ! > > >$-DK ! ! !r,cd}||c|_|_|||jdkr||zS|js[|j}|s|dzS|D]8}||j ||}|j |9|dz}||z}d} |jD]}|} |j |dz|dz||dzd| ||}|j r|jdkr d } |j} n d } |j} || } |j |dz| dz| } |j | d | |j | d d|j |dz|dz|dz| dzd} |j | |S)Nrjrur rgray50)fill minusnodeplusnode)r<1> cdSrP)rJs r*zTreeNode.draw..sr,r)rJrKr^r_rGrIrF _GetSubList __class__rDr! create_linerrprkrlrY create_imagetag_bind tag_lower)rMrJrKdysublistrFrhcxcycylasticonnamecallbackrids r*rz TreeNode.draws" A   : # #r6M} ,i++--G t  , ,t{D$?? $$U++++ rT V] G GEF K # #AaCAr2a4h # G G GB##Bz'')) G;*,,*H$~HH)H$|H))(33[--ac6!85-II $$R999 $$R~~FFF [ $ $QqS!B$!VAX% b!!! r,c|jr5|jp|jpd}n|jpd}||}|j|j|jd|}||_ |j |d|j |j |d|j dS)N openfolderfoldernw)anchorrrr) rHrFGetSelectedIconName GetIconNamerYrDrrJrKr]rrarn)rM imagenamerrs r*r^zTreeNode.drawicons = <6688&..00&% I --//;8I!!),, [ % %dfdfT % O O  R 444 Rty99999r,cjdzdz }jdz }j}|rj||d|}j|djj|djj |\}}}}t|dd z}j pd } j  n#t$rYnwxYw jn.#t$r!t!j| d d d _YnwxYwt#j} jr.jt#j| dn-jt#j| dj||dj}jdjjdjjdfdjdfdjdfd|_dS)Nrr r.r)rrrrrz rr)rrpadxpadyhilitenormal)rwindow c.t|jSrPr?rDerMs r*rz#TreeNode.drawtext..s+a2M2Mr, c.t|jSrPrrs r*rz#TreeNode.drawtext..  At{0K0Kr, c.t|jSrPrrs r*rz#TreeNode.drawtext..!rr,)rJrKrF GetLabelTextrD create_textrrarnrmaxGetTextentry edit_finishAttributeErrorr)r"r CurrentThemerHr GetHighlight create_windowbindselect_or_edittext_id) rMtextxtexty labeltextrrrrrrthemes ` r*r_zTreeNode.drawtextsr ! qI**,,  &((d.7)99B K UDK 8 8 8 K \49 = = =![--b11NBBCLL2%Ey  ""1k  JJ           D  M JJJ M M Mt{!!!LLLDJJJ M%'' = I J !6uh!G!G H H H H J !6uh!G!G H H H [ & &ue.24:'GG t2333  di000 (M(M(M(MNNN  &K&K&K&KLLL  &K&K&K&KLLL s$"C>> D  D D(EEc|jr0|jr||dS||dSrP)rHrF IsEditableeditrar`s r*rzTreeNode.select_or_edit$sQ = TY1133  IIe      KK     r,ct|jddd|_|jd|jd|jdt |jd|j|jd|j |jd|j dS) Nrr )rhighlightthicknesswidthrr0)ipadxzz) Entryr)rinsertselection_rangeENDpack focus_setrr edit_cancelr`s r*rz TreeNode.edit*s4:!KKK  !TZ/000 ""1c*** a      D$4555  D$455555r,c |j}|`n#t$rYdSwxYw|}||r7||jkr|j||j}||jd<||j dS)Nr) rrgetrRrFrSetTextr)r_rDr)rMr<rrs r*rzTreeNode.edit_finish3s JE     FF yy{{   $DDI--//// I  d # # #y  ""! 6   c |j}|`n#t$rYdSwxYw|||jdSrP)rrrRr_rDr)rMr<rs r*rzTreeNode.edit_cancelBsk JE     FF    rrP)__name__ __module__ __qualname__rNrRrYrarcr[rernrlrkrrrwrqrr^r_rrrrrr,r*rArATso      !!!  +++" . . .(((T : : :###J 6666           r,rAc^eZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z d Zd ZdZdS)TreeItemzAbstract class representing tree items. Methods should typically be overridden, otherwise a default action is used. cdS)z)Constructor. Do whatever you need to do.Nrrfs r*rNzTreeItem.__init__Vr,cdS)zReturn text string to display.Nrrfs r*rzTreeItem.GetTextYrr,cdS)z>Return label text string to display in front of text (if any).Nrrfs r*rzTreeItem.GetLabelText\rr,NcP|j||_|jS)%Do not override! Called by TreeNode.) expandable IsExpandablerfs r*rpzTreeItem._IsExpandableas% ? ""//11DOr,cdS)z"Return whether there are subitems.r rrfs r*rzTreeItem.IsExpandablegsqr,cl|sgS|}|sd|_|S)rr)r GetSubListr)rMrs r*rzTreeItem._GetSubListks>  "" I//## DOr,cdS)z-Return whether the item's text may be edited.Nrrfs r*rzTreeItem.IsEditabletrr,cdS)z+Change the item's text (if it is editable).Nr)rMrs r*rzTreeItem.SetTextwrr,cdS)z-Return name of icon to be displayed normally.Nrrfs r*rzTreeItem.GetIconNamezrr,cdS)z2Return name of icon to be displayed when selected.Nrrfs r*rzTreeItem.GetSelectedIconName}rr,cdS)z%Return list of items forming sublist.Nrrfs r*rzTreeItem.GetSubListrr,cdS)z%Called on a double-click on the item.Nrrfs r*rmzTreeItem.OnDoubleClickrr,)rrr__doc__rNrrrrprrrrrrrrmrr,r*rrMs888---MMMJ <<<:::<<<AAA44444444r,rc<eZdZdZdZdZdZdZdZdZ dZ d S) FileTreeItemz4Example TreeItem subclass -- browse the file system.c||_dSrP)r)rMrs r*rNzFileTreeItem.__init__s  r,cXtj|jp|jSrPrrrrfs r*rzFileTreeItem.GetTexts!w **7di7r,cRtj|jdkS)Nrrfs r*rzFileTreeItem.IsEditablesw **b00r,ctj|j}tj||}tj|tj|jkrdS tj|j|||_dS#t $rYdSwxYwrP)rrdirnamerrenameOSError)rMrnewpaths r*rzFileTreeItem.SetTexts'//$),,',,w-- 7??7 # #rwty'A'A A A F  Idi ) ) )DIII    DD s !B00 B>=B>c2|sdSdS)Npython)rrfs r*rzFileTreeItem.GetIconNames%  "" 8  r,cJtj|jSrP)rrisdirrfs r*rzFileTreeItem.IsExpandablesw}}TY'''r,cF tj|j}n#t$rgcYSwxYw|tjjg}|D]I}t tj|j|}||J|S)N)key) rlistdirrr rnormcaserrr!)rMnamesrr(rFs r*rzFileTreeItem.GetSubLists Jty))EE   III  ) *** ! !D TY = =>>D NN4 s  ++N) rrrrrNrrrrrrrr,r*rrs>>888111   (((     r,rc2eZdZdZdZdZdZdZdZdS)ScrolledCanvasc d|vrd|d<||_t||_|jdd|jddt |jfi||_|jdddt|jd |_ |j ddd t|jd d |_ |j ddd|j j |jd<|jj |j d<|j j |jd<|jj |j d<|jd|j|jd|j|jd|j|jd|j|jdt&|jdt&|jdt&|jd|j|jdS)Nyscrollincrementrurr )weightnsew)rrstickyvbar)r(nsehbar horizontal)r(orientewsyscrollcommandcommandxscrollcommandz z zz rrrz )r rframe rowconfigurecolumnconfigureCanvasrDr#rrrsetr:xviewrpage_up page_downunit_up unit_downr? zoom_heightr)rMr optss r*rNzScrolledCanvas.__init__s# T ) )')D# $ 6]]  !,,, ""1Q"///TZ00400  Qq888djv666  1Qu555djvlKKK  1Qu555(,  $%#{0 )(,  $%#{0 )  555 t~666 T\222 t~666 555 {333 {333 (8999 r,c<|jdddS)Nrpager2rD yview_scrollr`s r*r,zScrolledCanvas.page_up   V,,,wr,c<|jdddS)Nr r3r2r4r`s r*r-zScrolledCanvas.page_down   F+++wr,c<|jdddS)Nrunitr2r4r`s r*r.zScrolledCanvas.unit_upr6r,c<|jdddS)Nr r:r2r4r`s r*r/zScrolledCanvas.unit_downr8r,c8tj|jdS)Nr2)rr0r r`s r*r0zScrolledCanvas.zoom_heightst{+++wr,N) rrrrNr,r-r.r/r0rr,r*rrsn   6r,rct|}tt|ddd\}}|d|dz|dzfzt |ddd}|jdd t tt}t|j d|}| dS) N+r z+%d+%d2whiter)bgr takefocusboth)rlrside)Toplevelmapintgeometrysplitrr&rLEFTrrVrArDrl)rEr}rJrKscrFnodes r* _tree_widgetrNs 6  C sFOO%%++C004 5 5DAqLLQrT1S5M)*** A K K KBHMMdM333  D BItT * *DKKMMMMMr,__main__)mainzidlelib.idle_test.test_treerF) verbosityexit)runrP)rtkinter tkinter.ttkrridlelib.configridlelibrrVrrr __file___icondir NameErrorr RuntimeErrorr+r?rArrrrNrunittestrPidlelib.idle_test.htestrSrr,r*r^sK" ((((((((###### w||BGOOH55w??HHHHH7==CGG w  C ,AWAAA B BB,2v v v v v v v v r7474747474747474x)))))8)))\++++++++\ zD &!%@@@@++++++C  s3AAA