a  ze?@s.ddlZddlTddlmZmZddlmZddlmZdZ zej ej e e ZWneyle ZYn0ej ereZ nej e sede fe fdd Zdd d ZGd d d ZGdddZGdddeZGdddZddZedkr*ddlmZeddddddlmZeedS)N)*)Frame Scrollbar)idleConf) zoomheightZIconszcan't find icon directory (%r)c Cst}ddl}|tj||d}|g}d}}|D]}tjtj|d}t ||d} | | t || ddd} | j ||dt ||d} | j |d|d|d}|d kr@|d }d}q@||_ dS) Nrz*.gif)filemasterZraised)imagebdZrelief)rowcolumn)text )ZTkglobospathjoinescapesortsplitextbasename PhotoImageappendLabelgridimages) Zicondirrootrlistrr r rnamer labelr"@/opt/bitninja-python-dojo/embedded/lib/python3.9/idlelib/tree.py listicons%s&   r$cCsRtj|jdktj|jdki}||jr*dnd}|dur<|jn|}|t|ddS)NrZunitsbreak) Z EventTypeZ MouseWheelZdeltaZ ButtonPressnumtypewidgetyviewZSCROLL)eventr+Zuplinesr"r"r# wheel_event;s  r/c@seZdZddZddZddZd*dd Zd+d d Zd d ZddZ d,ddZ d-ddZ d.ddZ ddZ ddZddZddZddZd d!Zd/d"d#Zd0d$d%Zd1d&d'Zd2d(d)ZdS)3TreeNodecCs:||_||_||_d|_d|_g|_d|_|_i|_dS)N collapsedF) canvasparentitemstateselectedchildrenxy iconimages)selfr2r3r4r"r"r#__init__Vs zTreeNode.__init__cCs2|jddD]}|j||qd|_dSN)r7removedestroyr3)r;cr"r"r#r?`s  zTreeNode.destroycCsfz |j|WStyYn0tj|\}}|p6d}tjt||}t|j|d}||j|<|S)Nz.gif)rr) r:KeyErrorrrrrICONDIRrr2)r;r rextfullnamer r"r"r# geticonimagefs   zTreeNode.geticonimageNcCs:|jr dS|d|_|j|j||dS)NT)r6 deselectallr2deleteimage_iddrawicondrawtextr;r-r"r"r#selectrszTreeNode.selectcCs2|js dSd|_|j|j||dS)NF)r6r2rGrHrIrJrKr"r"r#deselect{s zTreeNode.deselectcCs|jr|jn|dSr=)r3rF deselecttreer;r"r"r#rFs zTreeNode.deselectallcCs&|jr||jD] }|qdSr=)r6rMr7rN)r;childr"r"r#rNs zTreeNode.deselecttreecCs*|jdkr|n||jdS)Nexpandedr()r5collapseexpandr4 OnDoubleClickrKr"r"r#flips    z TreeNode.flipcCs2|jsdS|jdkr.d|_||dS)NrQ)r4 _IsExpandabler5updateviewrKr"r"r#rSs   zTreeNode.expandcCs|jdkrd|_|dS)Nr1)r5rWrKr"r"r#rRs zTreeNode.collapsec Cs|jd}|jd}||}|jd}|j}|j|}||krV||krVdS|j|jd\}}} } ||kr||kr|||} n|} t| | } |j| dS)Nrr scrollregion)r9lastvisiblechildr2ZcanvasyZ winfo_heightZ_getintsfloatZ yview_moveto) r;topZbottomZheightZ visible_topZvisible_heightZvisible_bottomx0y0x1y1Zfractionr"r"r#rXs     z TreeNode.viewcCs&|jr|jdkr|jdS|SdS)NrQ)r7r5r[rOr"r"r#r[szTreeNode.lastvisiblechildcCs|jr|jnj|jd}d|jd<|j|jt|dd|jt\}}}}|jjdd||fd||jd<dS)NZcursorZwatchrr)rZ)r3rWr2rGZALLdrawbbox configure)r;Z oldcursorr^r_r`rar"r"r#rWs      zTreeNode.updatecCspd}|||_|_|||jdkr4||S|jsv|j}|sP|dS|D] }||j ||}|j |qT|d}||}d} |jD]}|} |j j |d|d||ddd| ||}|j r|jdkrd } |j} n d } |j} || } |j j|d| d| d } |j | d | |j | d ddq|j j |d|d|d| ddd} |j | |S)NrQrYr rcZgray50)fillZ minusnodeZplusnode)r <1> cSsdSr=r")r8r"r"r#zTreeNode.draw..r)r8r9rIrJr5r7r4 _GetSubList __class__r2rZ create_linerdrVrRrSrE create_imagetag_bindZ tag_lower)r;r8r9Zdysublistr4rPZcxcyZcylastZiconnamecallbackr idr"r"r#rdsF   "     z TreeNode.drawcCs~|jr |jp|jpd}n|jp,d}||}|jj|j|jd|d}||_ |j |d|j |j |d|j dS)NZ openfolderZfoldernw)anchorr rjrk) r6r4GetSelectedIconName GetIconNamerEr2rpr8r9rHrqrLrU)r;Z imagenamer rur"r"r#rIs  zTreeNode.drawiconc sjdd}jd}j}|rjj||d|d}j|djj|djj |\}}}}t |dd }j pd } z j Wnt yYn 0z jWn(t ytj| d d d d _Yn0t} jrjt| dnjt| djj||djd}jdjjdjjdfddjdfddjdfdd|_dS)Nrgr r%rv)rwrrjrkrz rr)rr ZpadxZpadyZhiliteZnormal)rwZwindow cs t|jSr=r/r2erOr"r#rlrmz#TreeNode.drawtext.. cs t|jSr=r|r}rOr"r#rl rm cs t|jSr=r|r}rOr"r#rl!rm)r8r9r4 GetLabelTextr2Z create_textrqrLrUremaxGetTextentryAttributeError edit_finishr!rrZ CurrentThemer6rfZ GetHighlightZ create_windowbindselect_or_editZtext_id) r;ZtextxZtextyZ labeltextrur^r_r`rarZthemer"rOr#rJsD        zTreeNode.drawtextcCs*|jr|jr||n ||dSr=)r6r4 IsEditableeditrLrKr"r"r#r$s zTreeNode.select_or_editcCsrt|jdddd|_|jd|jd|jdt|jjdd|j|jd|j |jd|j dS) Nrr )r highlightthicknesswidthrr')Zipadxzz) ZEntryr!rinsertZselection_rangeZENDpack focus_setrr edit_cancelrKr"r"r#r*s z TreeNode.editcCs|z|j}|`Wnty"YdS0|}||rR||jkrR|j||j}||jd<||j dS)Nr) rrgetr?r4rSetTextr!rJr2r)r;r-rrr"r"r#r3s    zTreeNode.edit_finishcCsBz|j}|`Wnty"YdS0|||jdSr=)rrr?rJr2r)r;r-rr"r"r#rBs zTreeNode.edit_cancel)N)N)N)N)N)N)N)N)N)__name__ __module__ __qualname__r<r?rErLrMrFrNrUrSrRrXr[rWrdrIrJrrrrr"r"r"r#r0Ts(      * %  r0c@speZdZddZddZddZdZdd Zd d Zd d Z ddZ ddZ ddZ ddZ ddZddZdS)TreeItemcCsdSr=r"rOr"r"r#r<VszTreeItem.__init__cCsdSr=r"rOr"r"r#rYszTreeItem.GetTextcCsdSr=r"rOr"r"r#r\szTreeItem.GetLabelTextNcCs|jdur||_|jSr=) expandable IsExpandablerOr"r"r#rVas  zTreeItem._IsExpandablecCsdS)Nr r"rOr"r"r#rgszTreeItem.IsExpandablecCs"|s gS|}|sd|_|S)Nr)r GetSubListr)r;rrr"r"r#rnks zTreeItem._GetSubListcCsdSr=r"rOr"r"r#rtszTreeItem.IsEditablecCsdSr=r")r;rr"r"r#rwszTreeItem.SetTextcCsdSr=r"rOr"r"r#ryzszTreeItem.GetIconNamecCsdSr=r"rOr"r"r#rx}szTreeItem.GetSelectedIconNamecCsdSr=r"rOr"r"r#rszTreeItem.GetSubListcCsdSr=r"rOr"r"r#rTszTreeItem.OnDoubleClick)rrrr<rrrrVrrnrrryrxrrTr"r"r"r#rMs  rc@sDeZdZddZddZddZddZd d Zd d Zd dZ dS) FileTreeItemcCs ||_dSr=)r)r;rr"r"r#r<szFileTreeItem.__init__cCstj|jp|jSr=rrrrOr"r"r#rszFileTreeItem.GetTextcCstj|jdkS)NrrOr"r"r#rszFileTreeItem.IsEditablecCsjtj|j}tj||}tj|tj|jkr:dSzt|j|||_WntydYn0dSr=)rrdirnamerrenameOSError)r;rnewpathr"r"r#rs  zFileTreeItem.SetTextcCs|s dSdS)NZpython)rrOr"r"r#ryszFileTreeItem.GetIconNamecCstj|jSr=)rrisdirrOr"r"r#rszFileTreeItem.IsExpandablecCshzt|j}Wnty&gYS0|jtjjdg}|D]"}ttj|j|}||q@|S)N)key) rlistdirrrrnormcaserrr)r;namesrrr r4r"r"r#rs   zFileTreeItem.GetSubListN) rrrr<rrrryrrr"r"r"r#rs rc@s<eZdZddZddZddZddZd d Zd d Zd S)ScrolledCanvascKsld|vrd|d<||_t||_|jjddd|jjdddt|jfi||_|jjddddt|jdd |_ |j jddd dt|jd d d |_ |j jdddd|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)NZyscrollincrementrYrr )ZweightZnsew)r r Zstickyvbar)r ZnsehbarZ horizontal)r ZorientZewsZyscrollcommandZcommandZxscrollcommandz z zz r{rrz )rrframeZ rowconfigureZcolumnconfigureZCanvasr2rrrrsetr,Zxviewrpage_up page_downunit_up unit_downr/ zoom_heightr)r;rZoptsr"r"r#r<s2 zScrolledCanvas.__init__cCs|jdddS)Nrbpager(r2Z yview_scrollrKr"r"r#rszScrolledCanvas.page_upcCs|jdddS)Nr rr(rrKr"r"r#rszScrolledCanvas.page_downcCs|jdddS)Nrbunitr(rrKr"r"r#rszScrolledCanvas.unit_upcCs|jdddS)Nr rr(rrKr"r"r#rszScrolledCanvas.unit_downcCst|jdS)Nr()rrrrKr"r"r#rs zScrolledCanvas.zoom_heightN) rrrr<rrrrrr"r"r"r#rs rcCst|}tt|ddd\}}|d|d|dft|dddd}|jjdd td t t }t |j d|}| dS) N+r z+%d+%d2Zwhiter)bgrZ takefocusZboth)rSriZside)ZToplevelmapintZgeometrysplitrrrZLEFTrrBr0r2rS)r3r]r8r9Zscr4Znoder"r"r# _tree_widgets r__main__)mainzidlelib.idle_test.test_treerF) verbosityexit)run)N)rtkinterZ tkinter.ttkrrZidlelib.configrZidlelibrrBrrr__file__Z_icondir NameErrorr RuntimeErrorr$r/r0rrrrrZunittestrZidlelib.idle_test.htestrr"r"r"r#s4        z<..