Fa: @sPddlZddlTddlmZddlmZdZy%ejjejj e eZ Wne k r{eZ YnXejj e re Zn%ejj esedefeddZGd d d ZGd d d ZGd ddeZGdddZddZedkrLddlmZeedS)N)*) ZoomHeight)idleConfZIconszcan't find icon directory (%r)c Cs5t}ddl}|jtjj|d}|jg}d}}x|D]}tjjtjj|d}td|d|} |j | t |d| ddd d } | j d |d |t |d |} | j d |dd ||d}|dkrT|d}d}qTW||_ dS)z'Utility to display the available icons.rNz*.giffilemasterimagebdZreliefZraisedrowcolumntext ) Tkglobospathjoinsortsplitextbasename PhotoImageappendLabelgridimages) Zicondirrootrlistrr r rnamerlabelr (/usr/lib/python3.5/idlelib/TreeWidget.py listicons#s&     "     r"c@seZdZddZddZddZddd Zdd d Zd d ZddZ dddZ dddZ dddZ ddZ ddZddZddZddZd d!Zdd"d#Zdd$d%Zdd&d'Zdd(d)ZdS)*TreeNodecCsS||_||_||_d|_d|_g|_d|_|_i|_dS)N collapsedF) canvasparentitemstateselectedchildrenxy iconimages)selfr%r&r'r r r!__init__<s      zTreeNode.__init__cCsEx5|jddD] }|jj||jqWd|_dS)N)r*removedestroyr&)r.cr r r!r1FszTreeNode.destroyc Csy|j|SWntk r#YnXtjj|\}}|pEd}tjjt||}td|jd|}||j|<|S)Nz.gifrr) r-KeyErrorrrrrICONDIRrr%)r.rrZextfullnamerr r r! geticonimageLs   zTreeNode.geticonimageNcCsK|jr dS|jd|_|jj|j|j|jdS)NT)r) deselectallr%deleteimage_iddrawicondrawtext)r.eventr r r!selectXs    zTreeNode.selectcCsA|js dSd|_|jj|j|j|jdS)NF)r)r%r8r9r:r;)r.r<r r r!deselectas    zTreeNode.deselectcCs'|jr|jjn |jdS)N)r&r7 deselecttree)r.r r r!r7is zTreeNode.deselectallcCs5|jr|jx|jD]}|jqWdS)N)r)r>r*r?)r.childr r r!r?os  zTreeNode.deselecttreecCs7|jdkr|jn |j|jjdS)Nexpandedbreak)r(collapseexpandr' OnDoubleClick)r.r<r r r!flipus    z TreeNode.flipcCsC|jjsdS|jdkr?d|_|j|jdS)NrA)r' _IsExpandabler(updateview)r.r<r r r!rD}s   zTreeNode.expandcCs&|jdkr"d|_|jdS)Nr$)r(rH)r.r<r r r!rCs zTreeNode.collapsec Cs|jd}|jjd}||}|jjd}|jj}|jj|}||kry||krydS|jj|jd\}}} } ||kr||kr|||} n|} t| | } |jj| dS)Nrr scrollregion)r,lastvisiblechildr%ZcanvasyZ winfo_heightZ_getintsfloatZ yview_moveto) r.topZbottomheightZ visible_topZvisible_heightZvisible_bottomx0y0x1y1Zfractionr r r!rIs  %z TreeNode.viewcCs1|jr)|jdkr)|jdjS|SdS)NrAr )r*r(rL)r.r r r!rLszTreeNode.lastvisiblechildcCs|jr|jjn|jd}d|jd<|jj|jjt|jdd|jjt\}}}}|jjddd||f||jdz cSsdS)Nr )r+r r r!szTreeNode.draw..r )r+r,r:r;r(r*r' _GetSubList __class__r%rZ create_linerVrGrCrDr6 create_imagetag_bindZ tag_lower)r.r+r,Zdysublistr'r@ZcxZcyZcylastZiconnamecallbackridr r r!rVsD      +  # ( z TreeNode.drawcCs|jr0|jjp*|jjp*d}n|jjpBd}|j|}|jj|j|jddd|}||_ |jj |d|j |jj |d|j dS)NZ openfolderZfolderanchornwrz<1>z ) r)r'GetSelectedIconName GetIconNamer6r%r_r+r,r9r`r=rF)r.Z imagenamerrcr r r!r:s  ' zTreeNode.drawiconc Cs|jdd}|jd}|jj}|r|jj||ddd|}|jj|d|j|jj|d|j|jj |\}}}}t |d d }|jj pd } y |j Wnt k rYn X|jy |jWn<t k r?t|jd| d d dddd|_YnXtj} |jrt|jjtj| dn|jjtj| d|jj||ddd|j}|jjd|j|jjd|j||_dS)NrYr rdrer z<1>z r z rrZpadxrZpadyZhiliteZnormalZwindow)r+r,r' GetLabelTextr%Z create_textr`r=rFrWmaxGetTextentryAttributeError edit_finishrrrZ CurrentThemer)rXZ GetHighlightZ create_windowbindselect_or_editZtext_id) r.ZtextxZtextyZ labeltextrcrPrQrRrSr Zthemer r r!r;s:       /  zTreeNode.drawtextcCs9|jr(|jjr(|j|n |j|dS)N)r)r' IsEditableeditr=)r.r<r r r!rqszTreeNode.select_or_editcCst|jdddddd|_|jjd|jd|jjdt|jjdd|jj|jjd |j |jjd |j dS) Nrrhighlightthicknessr widthr Zipadxzz) ZEntryrrminsertZselection_rangeZENDpack focus_setrpro edit_cancel)r.r<r r r!rs s$ z TreeNode.editc Csy|j}|`Wntk r+dSYnX|j}|j|rm||jjkrm|jj||jj}||jd<|j|j j dS)Nr ) rmrngetr1r'rlSetTextrr;r%ry)r.r<rmr r r r!ros        zTreeNode.edit_finishc CsQy|j}|`Wntk r+dSYnX|j|j|jjdS)N)rmrnr1r;r%ry)r.r<rmr r r!rz%s      zTreeNode.edit_cancel)__name__ __module__ __qualname__r/r1r6r=r>r7r?rFrDrCrIrLrHrVr:r;rqrsrorzr r r r!r#:s(         * " r#c@seZdZdZddZddZddZdZd d Zd d Z d dZ ddZ ddZ ddZ ddZddZddZdS)TreeItemzAbstract class representing tree items. Methods should typically be overridden, otherwise a default action is used. cCsdS)z)Constructor. Do whatever you need to do.Nr )r.r r r!r/9szTreeItem.__init__cCsdS)zReturn text string to display.Nr )r.r r r!rl<szTreeItem.GetTextcCsdS)z>Return label text string to display in front of text (if any).Nr )r.r r r!rj?szTreeItem.GetLabelTextNcCs%|jdkr|j|_|jS)z%Do not override! Called by TreeNode.N) expandable IsExpandable)r.r r r!rGDszTreeItem._IsExpandablecCsdS)z"Return whether there are subitems.r r )r.r r r!rJszTreeItem.IsExpandablecCs/|jsgS|j}|s+d|_|S)z%Do not override! Called by TreeNode.r)r GetSubListr)r.rar r r!r]Ns    zTreeItem._GetSubListcCsdS)z-Return whether the item's text may be edited.Nr )r.r r r!rrWszTreeItem.IsEditablecCsdS)z+Change the item's text (if it is editable).Nr )r.r r r r!r|ZszTreeItem.SetTextcCsdS)z-Return name of icon to be displayed normally.Nr )r.r r r!rg]szTreeItem.GetIconNamecCsdS)z2Return name of icon to be displayed when selected.Nr )r.r r r!rf`szTreeItem.GetSelectedIconNamecCsdS)z%Return list of items forming sublist.Nr )r.r r r!rcszTreeItem.GetSubListcCsdS)z%Called on a double-click on the item.Nr )r.r r r!rEfszTreeItem.OnDoubleClick)r}r~r__doc__r/rlrjrrGrr]rrr|rgrfrrEr r r r!r0s           rc@sjeZdZdZddZddZddZdd Zd d Zd d Z ddZ dS) FileTreeItemz4Example TreeItem subclass -- browse the file system.cCs ||_dS)N)r)r.rr r r!r/pszFileTreeItem.__init__cCstjj|jp|jS)N)rrr)r.r r r!rlsszFileTreeItem.GetTextcCstjj|jdkS)N)rrr)r.r r r!rrvszFileTreeItem.IsEditablec Cstjj|j}tjj||}tjj|tjj|jkrUdSy tj|j|||_Wntk rYnXdS)N)rrdirnamerrenameOSError)r.r newpathr r r!r|ys'  zFileTreeItem.SetTextcCs|jsdSdS)NZpython)r)r.r r r!rgs zFileTreeItem.GetIconNamecCstjj|jS)N)rrisdir)r.r r r!rszFileTreeItem.IsExpandablec Csytj|j}Wntk r.gSYnX|jdtjjg}x9|D]1}ttjj|j|}|j|qRW|S)Nkey) rlistdirrrrnormcaserrr)r.namesrarr'r r r!rs   zFileTreeItem.GetSubListN) r}r~rrr/rlrrr|rgrrr r r r!rls      rc@sXeZdZddZddZddZddZd d Zd d Zd S)ScrolledCanvascKsd|krd|d<||_t||_|jjddd|jjdddt|j||_|jjdddddd t|jd d |_ |j jdddddd t|jd d dd|_ |j jdddddd|j j |jd<|jj |j d<|j j |jd<|jj |j d<|jjd|j|jjd|j|jjd|j|jjd|j|jjd|j|jjdS)NZyscrollincrementrJrZweightr r r ZstickyZnsewrvbarZnsehbarZorientZ horizontalZewsZyscrollcommandZcommandZxscrollcommandz z zz z )rZFrameframeZ rowconfigureZcolumnconfigureZCanvasr%rZ ScrollbarrrsetZyviewZxviewrppage_up page_downunit_up unit_down zoom_heightry)r.rZoptsr r r!r/s,   zScrolledCanvas.__init__cCs|jjdddS)Nr pagerBrT)r% yview_scroll)r.r<r r r!rszScrolledCanvas.page_upcCs|jjdddS)Nr rrB)r%r)r.r<r r r!rszScrolledCanvas.page_downcCs|jjdddS)Nr unitrBrT)r%r)r.r<r r r!rszScrolledCanvas.unit_upcCs|jjdddS)Nr rrB)r%r)r.r<r r r!rszScrolledCanvas.unit_downcCstj|jdS)NrB)rrr)r.r<r r r!rszScrolledCanvas.zoom_heightN) r}r~rr/rrrrrr r r r!rs      rc Cst}|jdttttjd|j\}}}}|jd||dft|ddddd d }|j j d d d d dt t t j}t|jd|}|j|jdS)NzTest TreeWidgetz[x+]z+%d+%dZbgZwhitertrZ takefocusr rDr[ZbothZside)rtitlermapintresplitZgeometryrrrxZLEFTrrgetcwdr#r%rDZmainloop) r&rrurOr+r,Zscr'Znoder r r! _tree_widgets  3 r__main__)run)rZtkinterZidlelibrZidlelib.configHandlerrr4rrr__file__Z_icondir NameErrorr RuntimeErrorr"r#rrrrr}Zidlelib.idle_test.htestrr r r r!s*  %   <.*