o ­=?hò?ã@s0ddlZddlTddlmZmZddlmZddlmZdZ z ej   ej   e ¡e ¡ZWn ey6e ZYnwej  e¡r@eZ n ej  e ¡sMede fƒ‚e fdd „Zdd d „ZGd d „d ƒZGdd„dƒZGdd„deƒZGdd„dƒZdd„Zedkr–ddlmZeddddddlmZeeƒdSdS)éN)Ú*)ÚFrameÚ Scrollbar)ÚidleConf)Ú zoomheightZIconszcan't find icon directory (%r)c CsÖtƒ}ddl}| tj | |¡d¡¡}| ¡g}d}}|D]E}tj tj |¡¡d}t ||d} |  | ¡t || ddd} | j ||dt ||d } | j |d|d|d}|d kre|d }d}q ||_ dS) z'Utility to display the available icons.rNz*.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"ú3/opt/alt/python310/lib64/python3.10/idlelib/tree.pyÚ listicons%s(   € r$cCsRtj|jdktj|jdki}||jrdnd}|dur|jn|}| t|d¡dS)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. rééûÿÿÿéNZunitsÚbreak) Z EventTypeZ MouseWheelZdeltaZ ButtonPressZnumÚ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#„Zd*d$d%„Zd*d&d'„Zd*d(d)„ZdS)+ÚTreeNodecCs:||_||_||_d|_d|_g|_d|_|_i|_dS)NÚ collapsedF) ÚcanvasÚparentÚitemÚstateÚselectedÚchildrenÚxÚyÚ iconimages)Úselfr1r2r3r"r"r#Ú__init__Vs  zTreeNode.__init__cCs2|jdd…D] }|j |¡| ¡qd|_dS©N)r6ÚremoveÚdestroyr2)r:Úcr"r"r#r>`s   zTreeNode.destroycCsfz|j|WStyYnwtj |¡\}}|pd}tj t||¡}t|j|d}||j|<|S)Nz.gif)rr) r9ÚKeyErrorrrrrÚICONDIRrr1)r:r rZextÚfullnamer r"r"r#Ú geticonimagefs  ÿ zTreeNode.geticonimageNcCs:|jrdS| ¡d|_|j |j¡| ¡| ¡dS)NT)r5Ú deselectallr1ÚdeleteÚimage_idÚdrawiconÚdrawtext©r:r,r"r"r#Úselectrs zTreeNode.selectcCs2|jsdSd|_|j |j¡| ¡| ¡dS)NF)r5r1rErFrGrHrIr"r"r#Údeselect{s  zTreeNode.deselectcCs |jr |j ¡dS| ¡dSr<)r2rDÚ deselecttree©r:r"r"r#rDƒs zTreeNode.deselectallcCs&|jr| ¡|jD]}| ¡q dSr<)r5rKr6rL)r:Úchildr"r"r#rL‰s   ÿzTreeNode.deselecttreecCs*|jdkr | ¡n| ¡|j ¡dS)NÚexpandedr()r4ÚcollapseÚexpandr3Ú OnDoubleClickrIr"r"r#Úflips   z TreeNode.flipcCs6|j ¡sdS|jdkrd|_| ¡| ¡dSdS)NrO)r3Ú _IsExpandabler4ÚupdateÚviewrIr"r"r#rQ—s   ýzTreeNode.expandcCs |jdkrd|_| ¡dSdS)Nr0)r4rUrIr"r"r#rPŸs  þzTreeNode.collapsec Cs®|jd}| ¡jd}||}|j d¡}|j ¡}|j |¡}||kr+||kr+dS|j |jd¡\}}} } ||krG||krG|||} n|} t| ƒ| } |j | ¡dS)NrérÚ scrollregion)r8Úlastvisiblechildr1ZcanvasyZ winfo_heightZ_getintsÚfloatZ yview_moveto) r:ÚtopZbottomZheightZ visible_topZvisible_heightZvisible_bottomÚx0Úy0Úx1Úy1Zfractionr"r"r#rV¤s     z TreeNode.viewcCs"|jr|jdkr|jd ¡S|S)NrOéÿÿÿÿ)r6r4rYrMr"r"r#rYµszTreeNode.lastvisiblechildcCs‚|jr |j ¡dS|jd}d|jd<|j ¡|j t¡| dd¡|j t¡\}}}}|jjdd||fd||jd<dS)NZcursorZwatchérr)rX)r2rUr1rEZALLÚdrawÚbboxÚ configure)r:Z oldcursorr\r]r^r_r"r"r#rU»s     zTreeNode.updatecCspd}|||_|_| ¡| ¡|jdkr||S|js;|j ¡}|s(|dS|D]}| |j ||¡}|j  |¡q*|d}||}d} |jD]T}|} |j j |d|d||ddd|  ||¡}|j  ¡rœ|jdkrsd } |j} nd } |j} | | ¡} |j j|d| d| d } |j  | d | ¡|j  | d dd„¡qH|j j |d|d|d| ddd} |j  | ¡|S)NérOrWré raZgray50)ÚfillZ minusnodeZplusnode)r ú<1>ú cSsdSr<r")r7r"r"r#ÚëózTreeNode.draw..r)r7r8rGrHr4r6r3Ú _GetSubListÚ __class__r1rZ create_linerbrTrPrQrCÚ create_imageÚtag_bindZ tag_lower)r:r7r8ZdyÚsublistr3rNZcxZcyZcylastZiconnameÚcallbackr Úidr"r"r#rbÈsH   "    €þ z TreeNode.drawcCs~|jr|j ¡p|j ¡pd}n|j ¡pd}| |¡}|jj|j|jd|d}||_ |j  |d|j ¡|j  |d|j ¡dS)NZ openfolderZfolderÚnw)Úanchorr rhri) r5r3ÚGetSelectedIconNameÚ GetIconNamerCr1rnr7r8rFrorJrS)r:Z imagenamer rrr"r"r#rGòs ÿþ zTreeNode.drawiconc s¢ˆjdd}ˆjd}ˆj ¡}|r@ˆjj||d|d}ˆj |dˆj¡ˆj |dˆj¡ˆj  |¡\}}}}t |dƒd }ˆj  ¡pFd } zˆj Wn t yUYnwˆ ¡zˆjWnt ystˆj| d d d d ˆ_Ynwt ¡} ˆ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)Nrer r%rs)rtrrhriéÈrz rr)rr ZpadxZpadyZhiliteZnormal)rtZwindowú có t|ˆjƒSr<©r.r1©ÚerMr"r#rjó z#TreeNode.drawtext..ú cryr<rzr{rMr"r#rj r}ú cryr<rzr{rMr"r#rj!r})r7r8r3Ú GetLabelTextr1Z create_textrorJrSrcÚmaxÚGetTextÚentryÚAttributeErrorÚ edit_finishr!rrZ CurrentThemer5rdZ GetHighlightZ create_windowÚbindÚselect_or_editZtext_id) r:ZtextxZtextyZ labeltextrrr\r]r^r_rZthemer"rMr#rHÿsH   ÿ  ÿ  þ ÿ zTreeNode.drawtextcCs,|jr|j ¡r| |¡dS| |¡dSr<)r5r3Ú IsEditableÚeditrJrIr"r"r#r‡$szTreeNode.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_cancelrIr"r"r#r‰*s z TreeNode.editcCs|z|j}|`Wn tyYdSw| ¡}| ¡|r)||j ¡kr)|j |¡|j ¡}||jd<| ¡|j   ¡dS)Nr) rƒr„Úgetr>r3r‚ÚSetTextr!rHr1rŽ)r:r,rƒrr"r"r#r…3s ÿ   zTreeNode.edit_finishcCsBz|j}|`Wn tyYdSw| ¡| ¡|j ¡dSr<)rƒr„r>rHr1rŽ)r:r,rƒr"r"r#rBs ÿzTreeNode.edit_cancelr<)Ú__name__Ú __module__Ú __qualname__r;r>rCrJrKrDrLrSrQrPrVrYrUrbrGrHr‡r‰r…rr"r"r"r#r/Ts*      * %  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. cCódS)z)Constructor. Do whatever you need to do.Nr"rMr"r"r#r;VrkzTreeItem.__init__cCr–)zReturn text string to display.Nr"rMr"r"r#r‚YrkzTreeItem.GetTextcCr–)z>Return label text string to display in front of text (if any).Nr"rMr"r"r#r€\rkzTreeItem.GetLabelTextNcCs|jdur | ¡|_|jS)ú%Do not override! Called by TreeNode.N)Ú expandableÚ IsExpandablerMr"r"r#rTas  zTreeItem._IsExpandablecCr–)z"Return whether there are subitems.r r"rMr"r"r#r™gszTreeItem.IsExpandablecCs"| ¡sgS| ¡}|sd|_|S)r—r)r™Ú GetSubListr˜)r:rpr"r"r#rlks zTreeItem._GetSubListcCr–)z-Return whether the item's text may be edited.Nr"rMr"r"r#rˆtrkzTreeItem.IsEditablecCr–)z+Change the item's text (if it is editable).Nr")r:rr"r"r#r‘wrkzTreeItem.SetTextcCr–)z-Return name of icon to be displayed normally.Nr"rMr"r"r#rvzrkzTreeItem.GetIconNamecCr–)z2Return name of icon to be displayed when selected.Nr"rMr"r"r#ru}rkzTreeItem.GetSelectedIconNamecCr–)z%Return list of items forming sublist.Nr"rMr"r"r#rš€rkzTreeItem.GetSubListcCr–)z%Called on a double-click on the item.Nr"rMr"r"r#rRƒrkzTreeItem.OnDoubleClick)r’r“r”Ú__doc__r;r‚r€r˜rTr™rlrˆr‘rvruršrRr"r"r"r#r•Ms  r•c@sHeZdZdZdd„Zdd„Zdd„Zdd „Zd d „Zd d „Z dd„Z dS)Ú FileTreeItemz4Example TreeItem subclass -- browse the file system.cCs ||_dSr<)r)r:rr"r"r#r;s zFileTreeItem.__init__cCstj |j¡p |jSr<©rrrrMr"r"r#r‚szFileTreeItem.GetTextcCstj |j¡dkS)NÚrrMr"r"r#rˆ“szFileTreeItem.IsEditablecCsjtj |j¡}tj ||¡}tj |¡tj |j¡krdSz t |j|¡||_WdSty4YdSwr<)rrÚdirnamerÚrenameÚOSError)r:rÚnewpathr"r"r#r‘–s  ÿzFileTreeItem.SetTextcCs| ¡sdSdS)NZpython)r™rMr"r"r#rv¡sÿzFileTreeItem.GetIconNamecCstj |j¡Sr<)rrÚisdirrMr"r"r#r™¥szFileTreeItem.IsExpandablecCshzt |j¡}Wn tygYSw|jtjjdg}|D]}ttj |j|¡ƒ}| |¡q |S)N)Úkey) rÚlistdirrr¡rÚnormcaserœrr)r:Únamesrpr r3r"r"r#rš¨s ÿ zFileTreeItem.GetSubListN) r’r“r”r›r;r‚rˆr‘rvr™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)NZyscrollincrementrWrr )ZweightZnsew)r r ZstickyÚvbar)r ZnseÚhbarZ horizontal)r ZorientZewsZyscrollcommandZcommandZxscrollcommandz z zz rxr~rz )rrÚframeZ rowconfigureZcolumnconfigureZCanvasr1rrr©rªÚsetr+Zxviewr†Úpage_upÚ page_downÚunit_upÚ unit_downr.Ú zoom_heightrŽ)r:rZoptsr"r"r#r;¹s2 zScrolledCanvas.__init__cCó|j dd¡dS)Nr`Úpager(©r1Z yview_scrollrIr"r"r#r­ÔózScrolledCanvas.page_upcCr²)Nr r³r(r´rIr"r"r#r®×rµzScrolledCanvas.page_downcCr²)Nr`Úunitr(r´rIr"r"r#r¯ÚrµzScrolledCanvas.unit_upcCr²)Nr r¶r(r´rIr"r"r#r°ÝrµzScrolledCanvas.unit_downcCst |j¡dS)Nr()rr±rrIr"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)ZbgrŠZ takefocusZboth)rQrgZside)ZToplevelÚmapÚintZgeometryÚsplitr¨r«rZLEFTrœrAr/r1rQ)r2r[r7r8Zscr3Znoder"r"r#Ú _tree_widgetås  r½Ú__main__)Úmainzidlelib.idle_test.test_treerF)Ú verbosityÚexit)Úrunr<)rZtkinterZ tkinter.ttkrrZidlelib.configrZidlelibrrArrrŸÚ__file__Z_icondirÚ NameErrorr£Ú RuntimeErrorr$r.r/r•rœr¨r½r’Zunittestr¿Zidlelib.idle_test.htestrÂr"r"r"r#Ús:   ÿ    z<..   û