a 9êdgò?ã@s.ddlZddlTddlmZmZddlmZddlmZdZ zej   ej   e ¡e ¡ZWneyle ZYn0ej  e¡r€eZ nej  e ¡sšede fƒ‚e fdd „Zdd d „ZGd d „d ƒZGdd„dƒZGdd„deƒZGdd„dƒZdd„Zedkr*ddlmZeddddddlmZeeƒdS)éN)Ú*)ÚFrameÚ Scrollbar)ÚidleConf)Ú zoomheightZIconszcan't find icon directory (%r)c CsÖtƒ}ddl}| tj | |¡d¡¡}| ¡g}d}}|D]Š}tj tj |¡¡d}t ||d} |  | ¡t || ddd} | j ||dt ||d} | j |d|d|d}|d kr@|d }d}q@||_ dS) Nrz*.gif)ÚfileÚmasteréZraised)ÚimageÚbdZrelief)ÚrowÚcolumn)Útexté é)ZTkÚglobÚosÚpathÚjoinÚescapeÚsortÚsplitextÚbasenameÚ PhotoImageÚappendÚLabelÚgridÚimages) ZicondirÚrootrÚlistrr r rÚnamer Úlabel©r"ú(/usr/local/lib/python3.9/idlelib/tree.pyÚ listicons%s&   r$cCsRtj|jdktj|jdki}||jr*dnd}|dur<|jn|}| t|d¡dS)NrééûÿÿÿéZunitsÚbreak) Z EventTypeZ MouseWheelZdeltaZ ButtonPressÚnumÚtypeÚwidgetÚyviewZSCROLL)Úeventr+ZupÚlinesr"r"r#Ú wheel_event;s  ÿr/c@s¾eZdZdd„Zdd„Zdd„Zd*dd „Zd+d d „Zd d „Zdd„Z d,dd„Z d-dd„Z d.dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zd d!„Zd/d"d#„Zd0d$d%„Zd1d&d'„Zd2d(d)„ZdS)3ÚTreeNodecCs:||_||_||_d|_d|_g|_d|_|_i|_dS)NÚ collapsedF) ÚcanvasÚparentÚitemÚstateÚselectedÚchildrenÚxÚyÚ iconimages)Úselfr2r3r4r"r"r#Ú__init__Vs zTreeNode.__init__cCs2|jdd…D]}|j |¡| ¡qd|_dS©N)r7ÚremoveÚdestroyr3)r;Úcr"r"r#r?`s  zTreeNode.destroycCsfz |j|WStyYn0tj |¡\}}|p6d}tj t||¡}t|j|d}||j|<|S)Nz.gif)rr) r:ÚKeyErrorrrrrÚICONDIRrr2)r;r rÚextÚfullnamer r"r"r#Ú geticonimagefs   zTreeNode.geticonimageNcCs:|jr dS| ¡d|_|j |j¡| ¡| ¡dS)NT)r6Ú deselectallr2ÚdeleteÚimage_idÚdrawiconÚdrawtext©r;r-r"r"r#ÚselectrszTreeNode.selectcCs2|js dSd|_|j |j¡| ¡| ¡dS)NF)r6r2rGrHrIrJrKr"r"r#Údeselect{s zTreeNode.deselectcCs|jr|j ¡n| ¡dSr=)r3rFÚ deselecttree©r;r"r"r#rFƒs zTreeNode.deselectallcCs&|jr| ¡|jD] }| ¡qdSr=)r6rMr7rN)r;Úchildr"r"r#rN‰s zTreeNode.deselecttreecCs*|jdkr| ¡n| ¡|j ¡dS)NÚexpandedr()r5ÚcollapseÚexpandr4Ú OnDoubleClickrKr"r"r#Úflips    z TreeNode.flipcCs2|j ¡sdS|jdkr.d|_| ¡| ¡dS)NrQ)r4Ú _IsExpandabler5ÚupdateÚviewrKr"r"r#rS—s   zTreeNode.expandcCs|jdkrd|_| ¡dS)Nr1)r5rWrKr"r"r#rRŸs zTreeNode.collapsec Cs®|jd}| ¡jd}||}|j d¡}|j ¡}|j |¡}||krV||krVdS|j |jd¡\}}} } ||krŽ||krŽ|||} n|} t| ƒ| } |j | ¡dS)NrérÚ scrollregion)r9Úlastvisiblechildr2ZcanvasyZ winfo_heightZ_getintsÚfloatZ yview_moveto) r;ÚtopZbottomZheightZ visible_topZvisible_heightZvisible_bottomÚx0Úy0Úx1Úy1Zfractionr"r"r#rX¤s     z TreeNode.viewcCs&|jr|jdkr|jd ¡S|SdS)NrQéÿÿÿÿ)r7r5r[rOr"r"r#r[µszTreeNode.lastvisiblechildcCs€|jr|j ¡nj|jd}d|jd<|j ¡|j t¡| dd¡|j t¡\}}}}|jjdd||fd||jd<dS)NZcursorZwatchérr)rZ)r3rWr2rGZALLÚdrawÚbboxÚ configure)r;Z oldcursorr^r_r`rar"r"r#rW»s      zTreeNode.updatecCspd}|||_|_| ¡| ¡|jdkr4||S|jsv|j ¡}|sP|dS|D] }| |j ||¡}|j  |¡qT|d}||}d} |jD]¨}|} |j j |d|d||ddd|  ||¡}|j  ¡r|jdkræd } |j} n d } |j} | | ¡} |j j|d| d| d } |j  | d | ¡|j  | d dd„¡q|j j |d|d|d| ddd} |j  | ¡|S)NérQrYré rcZgray50)ÚfillZ minusnodeZplusnode)r ú<1>ú cSsdSr=r")r8r"r"r#ÚëózTreeNode.draw..r)r8r9rIrJr5r7r4Ú _GetSubListÚ __class__r2rZ create_linerdrVrRrSrEÚ create_imageÚtag_bindZ tag_lower)r;r8r9ZdyÚsublistr4rPZcxÚcyZcylastZiconnameÚcallbackr Úidr"r"r#rdÈsF   "    þ z TreeNode.drawcCs~|jr |j ¡p|j ¡pd}n|j ¡p,d}| |¡}|jj|j|jd|d}||_ |j  |d|j ¡|j  |d|j ¡dS)NZ openfolderZfolderÚnw)Úanchorr rjrk) r6r4ÚGetSelectedIconNameÚ GetIconNamerEr2rpr8r9rHrqrLrU)r;Z imagenamer rur"r"r#rIòs ÿþ zTreeNode.drawiconc s¤ˆjdd}ˆjd}ˆj ¡}|r€ˆjj||d|d}ˆj |dˆj¡ˆj |dˆj¡ˆj  |¡\}}}}t |dƒd }ˆj  ¡pŒd } z ˆj Wnt yªYn 0ˆ ¡z ˆjWn(t yætˆj| d d d d ˆ_Yn0t ¡} ˆjrˆj t | d¡¡nˆj t | d¡¡ˆjj||dˆjd}ˆj dˆj¡ˆj dˆj¡ˆj d‡fdd„¡ˆj d‡fdd„¡ˆj d‡fdd„¡|ˆ_dS)Nrgr r%rv)rwrrjrkéÈrz rr)rr ZpadxZpadyZhiliteZnormal)rwZwindowú cs t|ˆjƒSr=©r/r2©ÚerOr"r#rlrmz#TreeNode.drawtext..ú cs t|ˆjƒSr=r|r}rOr"r#rl rmú cs t|ˆjƒSr=r|r}rOr"r#rl!rm)r8r9r4Ú GetLabelTextr2Z create_textrqrLrUreÚmaxÚGetTextÚentryÚAttributeErrorÚ edit_finishr!rrZ CurrentThemer6rfZ GetHighlightZ create_windowÚbindÚselect_or_editZtext_id) r;ZtextxZtextyZ labeltextrur^r_r`rarZthemer"rOr#rJÿsD   ÿ     ÿzTreeNode.drawtextcCs*|jr|j ¡r| |¡n | |¡dSr=)r6r4Ú IsEditableÚeditrLrKr"r"r#rˆ$s zTreeNode.select_or_editcCsrt|jdddd|_|j d|jd¡|j dt¡|jjdd|j ¡|j d|j ¡|j d|j ¡dS) Nrr )r ÚhighlightthicknessÚwidthrr')Zipadxzz) ZEntryr!r„ÚinsertZselection_rangeZENDÚpackÚ focus_setr‡r†Ú edit_cancelrKr"r"r#rŠ*s z TreeNode.editcCs|z|j}|`Wnty"YdS0| ¡}| ¡|rR||j ¡krR|j |¡|j ¡}||jd<| ¡|j   ¡dS)Nr) r„r…Úgetr?r4rƒÚSetTextr!rJr2r)r;r-r„rr"r"r#r†3s    zTreeNode.edit_finishcCsBz|j}|`Wnty"YdS0| ¡| ¡|j ¡dSr=)r„r…r?rJr2r)r;r-r„r"r"r#rBs zTreeNode.edit_cancel)N)N)N)N)N)N)N)N)N)Ú__name__Ú __module__Ú __qualname__r<r?rErLrMrFrNrUrSrRrXr[rWrdrIrJrˆrŠr†rr"r"r"r#r0Ts(      * %  r0c@speZdZdd„Zdd„Zdd„ZdZdd „Zd d „Zd d „Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„ZdS)ÚTreeItemcCsdSr=r"rOr"r"r#r<VszTreeItem.__init__cCsdSr=r"rOr"r"r#rƒYszTreeItem.GetTextcCsdSr=r"rOr"r"r#r\szTreeItem.GetLabelTextNcCs|jdur| ¡|_|jSr=)Ú expandableÚ IsExpandablerOr"r"r#rVas  zTreeItem._IsExpandablecCsdS)Nr r"rOr"r"r#r˜gszTreeItem.IsExpandablecCs"| ¡s gS| ¡}|sd|_|S)Nr)r˜Ú GetSubListr—)r;rrr"r"r#rnks zTreeItem._GetSubListcCsdSr=r"rOr"r"r#r‰tszTreeItem.IsEditablecCsdSr=r")r;rr"r"r#r’wszTreeItem.SetTextcCsdSr=r"rOr"r"r#ryzszTreeItem.GetIconNamecCsdSr=r"rOr"r"r#rx}szTreeItem.GetSelectedIconNamecCsdSr=r"rOr"r"r#r™€szTreeItem.GetSubListcCsdSr=r"rOr"r"r#rTƒszTreeItem.OnDoubleClick)r“r”r•r<rƒrr—rVr˜rnr‰r’ryrxr™rTr"r"r"r#r–Ms  r–c@sDeZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dS)Ú FileTreeItemcCs ||_dSr=)r)r;rr"r"r#r<szFileTreeItem.__init__cCstj |j¡p|jSr=©rrrrOr"r"r#rƒszFileTreeItem.GetTextcCstj |j¡dkS)NÚr›rOr"r"r#r‰“szFileTreeItem.IsEditablecCsjtj |j¡}tj ||¡}tj |¡tj |j¡kr:dSzt |j|¡||_WntydYn0dSr=)rrÚdirnamerÚrenameÚOSError)r;rÚnewpathr"r"r#r’–s  zFileTreeItem.SetTextcCs| ¡s dSdS)NZpython)r˜rOr"r"r#ry¡szFileTreeItem.GetIconNamecCstj |j¡Sr=)rrÚisdirrOr"r"r#r˜¥szFileTreeItem.IsExpandablecCshzt |j¡}Wnty&gYS0|jtjjdg}|D]"}ttj |j|¡ƒ}| |¡q@|S)N)Úkey) rÚlistdirrrŸrÚnormcaseršrr)r;Únamesrrr r4r"r"r#r™¨s   zFileTreeItem.GetSubListN) r“r”r•r<rƒr‰r’ryr˜r™r"r"r"r#rš‰s ršc@s<eZdZdd„Zdd„Zdd„Zdd„Zd 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<|j d|j¡|j d|j¡|j d|j¡|j d|j¡|j dt¡|j dt¡|j dt¡|j d|j¡|j ¡dS)NZyscrollincrementrYrr )ZweightZnsew)r r ZstickyÚvbar)r ZnseÚhbarZ horizontal)r ZorientZewsZyscrollcommandZcommandZxscrollcommandz z zz r{rr€z )rrÚframeZ rowconfigureZcolumnconfigureZCanvasr2rrr§r¨Úsetr,Zxviewr‡Úpage_upÚ page_downÚunit_upÚ unit_downr/Ú zoom_heightr)r;rZoptsr"r"r#r<¹s2 zScrolledCanvas.__init__cCs|j dd¡dS)NrbÚpager(©r2Z yview_scrollrKr"r"r#r«ÔszScrolledCanvas.page_upcCs|j dd¡dS)Nr r°r(r±rKr"r"r#r¬×szScrolledCanvas.page_downcCs|j dd¡dS)NrbÚunitr(r±rKr"r"r#r­ÚszScrolledCanvas.unit_upcCs|j dd¡dS)Nr r²r(r±rKr"r"r#r®ÝszScrolledCanvas.unit_downcCst |j¡dS)Nr()rr¯rrKr"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| ¡ d¡dd…ƒ\}}| d|d|df¡t|dddd}|jjdd td t t ƒ}t |j d|ƒ}|  ¡dS) Nú+r z+%d+%dé2é¯Zwhiter)Úbgr‹Z takefocusZboth)rSriZside)ZToplevelÚmapÚintZgeometryÚsplitr¦r©rŽZLEFTršrBr0r2rS)r3r]r8r9Zscr4Znoder"r"r#Ú _tree_widgetås rºÚ__main__)Úmainzidlelib.idle_test.test_treerF)Ú verbosityÚexit)Úrun)N)rÚtkinterZ tkinter.ttkrrZidlelib.configrZidlelibrrBrrrÚ__file__Z_icondirÚ NameErrorr¡Ú RuntimeErrorr$r/r0r–ršr¦rºr“Zunittestr¼Zidlelib.idle_test.htestr¿r"r"r"r#Ús4        z<..