3 § fñ:ã @s"ddlZddlTddlmZddlmZddlmZdZyej j ej j e ƒeƒZ Wnek rjeZ YnXej je ƒr~e Znej jeƒs˜edefƒ‚efdd „ZGd d „d ƒZGd d „d ƒZGdd„deƒZGdd„dƒZdd„Zedk�rddlmZedddd�ddlmZeeƒdS)éN)Ú*)Ú Scrollbar)ÚidleConf)Ú zoomheightZIconszcan't find icon directory (%r)c CsÔtƒ}ddl}|jtjj|dƒƒ}|jƒg}d}}x’|D]Š}tjjtjj|ƒƒd}t||d�} |j | ƒt || ddd�} | j ||d�t ||d �} | j |d|d�|d}|d kr<|d }d}qs zTreeNode.__init__cCs6x*|jdd…D]}|jj|ƒ|jƒqWd|_dS)N)r*ÚremoveÚdestroyr&)r.Úcr r r!r1Hs  zTreeNode.destroyc Csfy |j|Stk rYnXtjj|ƒ\}}|p6d}tjjt||ƒ}t|j|d�}||j|<|S)Nz.gif)rr) r-ÚKeyErrorrrrrÚICONDIRrr%)r.rrZextÚfullnamer r r r!Ú geticonimageNs  zTreeNode.geticonimageNcCs:|jr dS|jƒd|_|jj|jƒ|jƒ|jƒdS)NT)r)Ú deselectallr%ÚdeleteÚimage_idÚdrawiconÚdrawtext)r.Úeventr r r!ÚselectZszTreeNode.selectcCs2|js dSd|_|jj|jƒ|jƒ|jƒdS)NF)r)r%r8r9r:r;)r.r<r r r!Údeselectcs zTreeNode.deselectcCs|jr|jjƒn|jƒdS)N)r&r7Ú deselecttree)r.r r r!r7ks zTreeNode.deselectallcCs*|jr|jƒx|jD] }|jƒqWdS)N)r)r>r*r?)r.Úchildr r r!r?qs zTreeNode.deselecttreecCs*|jdkr|jƒn|jƒ|jjƒdS)NÚexpandedÚbreak)r(ÚcollapseÚexpandr'Ú OnDoubleClick)r.r<r r r!Úflipws    z TreeNode.flipcCs2|jjƒsdS|jdkr.d|_|jƒ|jƒdS)NrA)r'Ú _IsExpandabler(ÚupdateÚview)r.r<r r r!rDs   zTreeNode.expandcCs|jdkrd|_|jƒdS)Nr$)r(rH)r.r<r r r!rC‡s zTreeNode.collapsec Cs®|jd}|jƒjd}||}|jjdƒ}|jjƒ}|jj|ƒ}||krV||krVdS|jj|jdƒ\}}} } ||krŽ||krŽ|||} n|} t| ƒ| } |jj| ƒdS)NrérÚ scrollregion)r,Úlastvisiblechildr%ZcanvasyZ winfo_heightZ_getintsÚfloatZ yview_moveto) r.ÚtopZbottomZheightZ visible_topZvisible_heightZvisible_bottomÚx0Úy0Úx1Úy1Zfractionr r r!rIŒs     z TreeNode.viewcCs&|jr|jdkr|jdjƒS|SdS)NrAréÿÿÿÿ)r*r(rL)r.r r r!rL�szTreeNode.lastvisiblechildcCs€|jr|jjƒnj|jd}d|jd<|jjƒ|jjtƒ|jddƒ|jjtƒ\}}}}|jjdd||fd�||jd<dS)NZcursorZwatchérr)rK)r&rHr%r8ZALLÚdrawÚbboxÚ configure)r.Z oldcursorrOrPrQrRr r r!rH£s      zTreeNode.updatecCsxd}|||_|_|jƒ|jƒ|jdkr4||S|jsz|jjƒ}|sP|dSx(|D] }|j|j ||ƒ}|jj |ƒqVW|d}||}d} x²|jD]¨}|} |j j |d|d||ddd�|j ||ƒ}|jj ƒr–|jdkrìd } |j} n d } |j} |j| ƒ} |j j|d| d| d �} |j j| d | ƒ|j j| d dd„ƒq–W|j j |d|d|d| ddd�} |j j| ƒ|S)NérArJré rTZgray50)ÚfillZ minusnodeZplusnode)r z<1>z cSsdS)Nr )r+r r r!ÚÓszTreeNode.draw..r)r+r,r:r;r(r*r'Ú _GetSubListÚ __class__r%rZ create_linerUrGrCrDr6Ú create_imageÚtag_bindZ tag_lower)r.r+r,ZdyÚsublistr'r@ZcxZcyZcylastZiconnameÚcallbackr Úidr r r!rU°sD    "     z TreeNode.drawcCs~|jr |jjƒp|jjƒpd}n|jjƒp,d}|j|ƒ}|jj|j|jd|d�}||_ |jj |d|j ƒ|jj |d|j ƒdS)NZ openfolderZfolderÚnw)Úanchorr z<1>z ) r)r'ÚGetSelectedIconNameÚ GetIconNamer6r%r^r+r,r9r_r=rF)r.Z imagenamer rbr r r!r:Ús   zTreeNode.drawiconc Csf|jdd}|jd}|jjƒ}|r€|jj||d|d�}|jj|d|jƒ|jj|d|jƒ|jj |ƒ\}}}}t |dƒd }|jj ƒpŒd } y |j Wnt k r¬Yn X|jƒy |jWn*t k rêt|j| d d d d �|_YnXtjƒ} |j�r|jjtj| dƒƒn|jjtj| dƒƒ|jj||d|jd�}|jjd|jƒ|jjd|jƒ||_dS)NrXrérc)rdr z<1>z éÈrz rr)r r ZpadxZpadyZhiliteZnormal)rdZwindow)r+r,r'Ú GetLabelTextr%Z create_textr_r=rFrVÚmaxÚGetTextÚentryÚAttributeErrorÚ edit_finishrrrZ CurrentThemer)rWZ GetHighlightZ create_windowÚbindÚselect_or_editZtext_id) r.ZtextxZtextyZ labeltextrbrOrPrQrRr Zthemer r r!r;çs:       zTreeNode.drawtextcCs*|jr|jjƒr|j|ƒn |j|ƒdS)N)r)r'Ú IsEditableÚeditr=)r.r<r r r!rp s zTreeNode.select_or_editcCsrt|jdddd�|_|jjd|jdƒ|jjdtƒ|jjdd�|jjƒ|jjd|j ƒ|jjd|j ƒdS) Nrr)r ÚhighlightthicknessÚwidthr é)Zipadxzz) ZEntryrrlÚinsertZselection_rangeZENDÚpackÚ focus_setrornÚ edit_cancel)r.r<r r r!rrs z TreeNode.editc Cs|y|j}|`Wntk r"dSX|jƒ}|jƒ|rR||jjƒkrR|jj|ƒ|jjƒ}||jd<|jƒ|j j ƒdS)Nr ) rlrmÚgetr1r'rkÚSetTextrr;r%rx)r.r<rlr r r r!rns   zTreeNode.edit_finishc CsBy|j}|`Wntk r"dSX|jƒ|jƒ|jjƒdS)N)rlrmr1r;r%rx)r.r<rlr r r!ry'szTreeNode.edit_cancel)N)N)N)N)N)N)N)N)N)Ú__name__Ú __module__Ú __qualname__r/r1r6r=r>r7r?rFrDrCrIrLrHrUr:r;rprrrnryr r r r!r#<s(      * "  r#c@steZdZdZdd„Zdd„Zdd„ZdZd d „Zd d „Z d d„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„ZdS)ÚTreeItemz‚Abstract 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/;szTreeItem.__init__cCsdS)zReturn text string to display.Nr )r.r r r!rk>szTreeItem.GetTextcCsdS)z>Return label text string to display in front of text (if any).Nr )r.r r r!riAszTreeItem.GetLabelTextNcCs|jdkr|jƒ|_|jS)z%Do not override! Called by TreeNode.N)Ú expandableÚ IsExpandable)r.r r r!rGFs  zTreeItem._IsExpandablecCsdS)z"Return whether there are subitems.rr )r.r r r!r�LszTreeItem.IsExpandablecCs"|jƒs gS|jƒ}|sd|_|S)z%Do not override! Called by TreeNode.r)r�Ú GetSubListr€)r.r`r r r!r\Ps zTreeItem._GetSubListcCsdS)z-Return whether the item's text may be edited.Nr )r.r r r!rqYszTreeItem.IsEditablecCsdS)z+Change the item's text (if it is editable).Nr )r.r r r r!r{\szTreeItem.SetTextcCsdS)z-Return name of icon to be displayed normally.Nr )r.r r r!rf_szTreeItem.GetIconNamecCsdS)z2Return name of icon to be displayed when selected.Nr )r.r r r!rebszTreeItem.GetSelectedIconNamecCsdS)z%Return list of items forming sublist.Nr )r.r r r!r‚eszTreeItem.GetSubListcCsdS)z%Called on a double-click on the item.Nr )r.r r r!rEhszTreeItem.OnDoubleClick)r|r}r~Ú__doc__r/rkrir€rGr�r\rqr{rfrer‚rEr r r r!r2s rc@sHeZdZdZdd„Zdd„Zdd„Zdd „Zd d „Zd d „Z dd„Z dS)Ú FileTreeItemz4Example TreeItem subclass -- browse the file system.cCs ||_dS)N)r)r.rr r r!r/rszFileTreeItem.__init__cCstjj|jƒp|jS)N)rrr)r.r r r!rkuszFileTreeItem.GetTextcCstjj|jƒdkS)NÚ)rrr)r.r r r!rqxszFileTreeItem.IsEditablec Csltjj|jƒ}tjj||ƒ}tjj|ƒtjj|jƒkr:dSytj|j|ƒ||_Wntk rfYnXdS)N)rrÚdirnamerÚrenameÚOSError)r.r Únewpathr r r!r{{s zFileTreeItem.SetTextcCs|jƒs dSdS)NÚpython)r�)r.r r r!rf†szFileTreeItem.GetIconNamecCstjj|jƒS)N)rrÚisdir)r.r r r!r�ŠszFileTreeItem.IsExpandablec Csjytj|jƒ}Wntk r$gSX|jtjjd�g}x*|D]"}ttjj|j|ƒƒ}|j|ƒq@W|S)N)Úkey) rÚlistdirrrˆrÚnormcaser„rr)r.Únamesr`rr'r r r!r‚�s zFileTreeItem.GetSubListN) r|r}r~rƒr/rkrqr{rfr�r‚r r r r!r„ns r„c@s<eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd S)ÚScrolledCanvascKs>d|krd|d<||_t|ƒ|_|jjddd�|jjddd�t|jf|Ž|_|jjdddd�t|jdd �|_ |j jddd d�t|jd d d �|_ |j jdddd�|j j |jd<|jj |j d<|j j |jd<|jj |j d<|jjd|jƒ|jjd|jƒ|jjd|jƒ|jjd|jƒ|jjd|jƒ|jjƒdS)NZyscrollincrementrJrr)ZweightZnsew)r r ZstickyÚvbar)rZnseÚhbarZ horizontal)rZorientZewsZyscrollcommandZcommandZxscrollcommandz z zz z )rZFrameÚframeZ rowconfigureZcolumnconfigureZCanvasr%rrr‘r’ÚsetZyviewZxviewroÚpage_upÚ page_downÚunit_upÚ unit_downÚ zoom_heightrx)r.rZoptsr r r!r/�s, zScrolledCanvas.__init__cCs|jjddƒdS)NrÚpagerBrS)r%Ú yview_scroll)r.r<r r r!r•µszScrolledCanvas.page_upcCs|jjddƒdS)NrršrB)r%r›)r.r<r r r!r–¸szScrolledCanvas.page_downcCs|jjddƒdS)NrÚunitrBrS)r%r›)r.r<r r r!r—»szScrolledCanvas.unit_upcCs|jjddƒdS)NrrœrB)r%r›)r.r<r r r!r˜¾szScrolledCanvas.unit_downcCstj|jƒdS)NrB)rr™r)r.r<r r r!r™Ás zScrolledCanvas.zoom_heightN) r|r}r~r/r•r–r—r˜r™r r r r!r�œs r�cCs†t|ƒ}tt|jƒjdƒdd…ƒ\}}|jd|d|dfƒt|dddd�}|jjdd td �t t ƒ}t |j d|ƒ}|j ƒdS) Nú+rz+%d+%dé2é¯Zwhiter)ZbgrsZ takefocusZboth)rDrZZside)ZToplevelÚmapÚintZgeometryÚsplitr�r“rwZLEFTr„r4r#r%rD)r&rNr+r,Zscr'Znoder r r!Ú _tree_widgetÆs r£Ú__main__)Úmainzidlelib.idle_test.test_treerF)Ú verbosityÚexit)Úrun)rZtkinterZ tkinter.ttkrZidlelib.configrZidlelibrr4rrr†Ú__file__Z_icondirÚ NameErrorr‹Ú RuntimeErrorr"r#rr„r�r£r|Zunittestr¥Zidlelib.idle_test.htestr¨r r r r!Ús2       w<.*