
W:                 @   sP  d  d l  Z  d  d l Td  d l m Z d  d l m Z d Z y% e  j j e  j j	 e
  e  Z Wn e k
 r{ e Z Yn Xe  j j e  r e Z n% e  j j e  s e d e f   e d d  Z Gd	 d
   d
  Z Gd d   d  Z Gd d   d e  Z Gd d   d  Z d d   Z e d k rLd  d l m Z e e  d S)    N)*)
ZoomHeight)idleConfZIconszcan't find icon directory (%r)c          	   C   s5  t    } d d l } | j t j j |  d   } | j   g  } d } } x | D] } t j j t j j |   d } t d | d |  }	 | j	 |	  t
 | d |	 d d d	 d
 }
 |
 j d | d |  t
 | d | }
 |
 j d | d d |  | d } | d k rT | d } d } qT W| | _ d S)z'Utility to display the available icons.r   Nz*.giffilemasterimagebd   ZreliefZraisedrowcolumntext
      )Tkglobospathjoinsortsplitextbasename
PhotoImageappendLabelgridimages)Zicondirrootr   listr   r
   r   r   namer   label r    ?/afs/.cs/s/python-3.5.2/amd64_ubu14/lib/python3.5/TreeWidget.py	listicons#   s&    	

"


r"   c               @   s  e  Z d  Z d d   Z d d   Z d d   Z d d d	  Z d d
 d  Z d d   Z d d   Z	 d d d  Z
 d d d  Z d d d  Z d d   Z d d   Z d d   Z d d   Z d d   Z d  d!   Z d d" d#  Z d d$ d%  Z d d& d'  Z d d( d)  Z d S)*TreeNodec             C   sS   | |  _  | |  _ | |  _ d |  _ d |  _ g  |  _ d  |  _ |  _ i  |  _ d  S)N	collapsedF)	canvasparentitemstateselectedchildrenxy
iconimages)selfr%   r&   r'   r    r    r!   __init__<   s    						zTreeNode.__init__c             C   sE   x5 |  j  d  d   D]  } |  j  j |  | j   q Wd  |  _ d  S)N)r*   removedestroyr&   )r.   cr    r    r!   r1   F   s    zTreeNode.destroyc             C   s   y |  j  | SWn t k
 r# Yn Xt j j |  \ } } | pE d } t j j t | |  } t d |  j d |  } | |  j  | <| S)Nz.gifr   r   )	r-   KeyErrorr   r   r   r   ICONDIRr   r%   )r.   r   r   extfullnamer   r    r    r!   geticonimageL   s    zTreeNode.geticonimageNc             C   sK   |  j  r d  S|  j   d |  _  |  j j |  j  |  j   |  j   d  S)NT)r)   deselectallr%   deleteimage_iddrawicondrawtext)r.   eventr    r    r!   selectX   s    	
	
zTreeNode.selectc             C   sA   |  j  s d  Sd |  _  |  j j |  j  |  j   |  j   d  S)NF)r)   r%   r9   r:   r;   r<   )r.   r=   r    r    r!   deselecta   s    		
zTreeNode.deselectc             C   s'   |  j  r |  j  j   n
 |  j   d  S)N)r&   r8   deselecttree)r.   r    r    r!   r8   i   s    	zTreeNode.deselectallc             C   s5   |  j  r |  j   x |  j D] } | j   q Wd  S)N)r)   r?   r*   r@   )r.   childr    r    r!   r@   o   s    	
zTreeNode.deselecttreec             C   s7   |  j  d k r |  j   n
 |  j   |  j j   d S)Nexpandedbreak)r(   collapseexpandr'   OnDoubleClick)r.   r=   r    r    r!   flipu   s
    
zTreeNode.flipc             C   sC   |  j  j   s d  S|  j d k r? d |  _ |  j   |  j   d  S)NrB   )r'   _IsExpandabler(   updateview)r.   r=   r    r    r!   rE   }   s    	
zTreeNode.expandc             C   s&   |  j  d k r" d |  _  |  j   d  S)Nr$   )r(   rI   )r.   r=   r    r    r!   rD      s    	zTreeNode.collapsec             C   s   |  j  d } |  j   j  d } | | } |  j j d  } |  j j   } |  j j |  } | | k ry | | k ry d  S|  j j |  j d  \ } } }	 }
 | | k r | | k r | | | } n | } t |  |
 } |  j j |  d  S)Nr      r   scrollregion)r,   lastvisiblechildr%   ZcanvasyZwinfo_heightZ_getintsfloatZyview_moveto)r.   topZbottomheightZvisible_topZvisible_heightZvisible_bottomx0y0x1y1Zfractionr    r    r!   rJ      s    
%zTreeNode.viewc             C   s1   |  j  r) |  j d k r) |  j  d j   S|  Sd  S)NrB   r	   )r*   r(   rM   )r.   r    r    r!   rM      s    zTreeNode.lastvisiblechildc             C   s   |  j  r |  j  j   n |  j d } d |  j d <|  j j   |  j j t  |  j d d  |  j j t  \ } } } } |  j j d d d | | f  | |  j d <d  S)NZcursorZwatch   r   rL   r   )r&   rI   r%   r9   ZALLdrawbbox	configure)r.   Z	oldcursorrQ   rR   rS   rT   r    r    r!   rI      s    	zTreeNode.updatec             C   s  d } | | |  _  |  _ |  j   |  j   |  j d k rD | | S|  j s |  j j   } | sj | d Sx6 | D]. } |  j |  j	 |  |  } |  j j
 |  qq W| d } | | } d }	 x |  j D] } | }	 |  j	 j | d | d | | d d d | j | |  } | j j   r | j d k r@d	 }
 | j } n d
 }
 | j } |  j |
  } |  j	 j | d |	 d d | } |  j	 j | d |  |  j	 j | d d d    q W|  j	 j | d | d | d |	 d d d } |  j	 j |  | S)N   rB   rK   r   	   rV   fillZgray50Z	minusnodeZplusnoder   z<1>z
<Double-1>c             S   s   d  S)Nr    )r+   r    r    r!   <lambda>   s    zTreeNode.draw.<locals>.<lambda>r   )r+   r,   r;   r<   r(   r*   r'   _GetSubList	__class__r%   r   Zcreate_linerW   rH   rD   rE   r7   create_imagetag_bindZ	tag_lower)r.   r+   r,   Zdysublistr'   rA   ZcxcyZcylastZiconnamecallbackr   idr    r    r!   rW      sD    

	

+	# (	zTreeNode.drawc             C   s   |  j  r0 |  j j   p* |  j j   p* d } n |  j j   pB d } |  j |  } |  j j |  j |  j d d d | } | |  _	 |  j j
 | d |  j  |  j j
 | d |  j  d  S)NZ
openfolderZfolderanchornwr   z<1>z
<Double-1>)r)   r'   GetSelectedIconNameGetIconNamer7   r%   r`   r+   r,   r:   ra   r>   rG   )r.   Z	imagenamer   re   r    r    r!   r;      s    		'	zTreeNode.drawiconc             C   s  |  j  d d } |  j d } |  j j   } | r |  j j | | d d d | } |  j j | d |  j  |  j j | d |  j  |  j j	 |  \ } } } } t
 | d	  d
 } |  j j   p d }	 y |  j Wn t k
 r Yn X|  j   y |  j Wn< t k
 r?t |  j d |	 d d d d d d |  _ Yn Xt j   }
 |  j rt|  j j t j |
 d   n |  j j t j |
 d   |  j j | | d d d |  j } |  j j d |  j  |  j j d |  j  | |  _ d  S)NrZ   r	      rf   rg   r   z<1>z
<Double-1>   r   z	<no text>r   r   Zpadxr   ZpadyZhiliteZnormalZwindow)r+   r,   r'   GetLabelTextr%   Zcreate_textra   r>   rG   rX   maxGetTextentryAttributeErroredit_finishr   r   r   ZCurrentThemer)   rY   ZGetHighlightZcreate_windowbindselect_or_editZtext_id)r.   ZtextxZtextyZ	labeltextre   rQ   rR   rS   rT   r   Zthemer    r    r!   r<      s:    	
/	zTreeNode.drawtextc             C   s9   |  j  r( |  j j   r( |  j |  n |  j |  d  S)N)r)   r'   
IsEditableeditr>   )r.   r=   r    r    r!   rs     s    zTreeNode.select_or_editc             C   s   t  |  j d d d d d d |  _ |  j j d |  j d  |  j j d t  |  j j d d  |  j j   |  j j d	 |  j	  |  j j d
 |  j
  d  S)Nr   r   highlightthicknessr	   widthr   Zipadx   z<Return>z<Escape>)ZEntryr   ro   insertZselection_rangeZENDpack	focus_setrr   rq   edit_cancel)r.   r=   r    r    r!   ru     s    $zTreeNode.editc             C   s   y |  j  } |  `  Wn t k
 r+ d  SYn X| j   } | j   | rm | |  j j   k rm |  j j |  |  j j   } | |  j d <|  j   |  j	 j
   d  S)Nr   )ro   rp   getr1   r'   rn   SetTextr   r<   r%   r{   )r.   r=   ro   r   r    r    r!   rq     s    	
	

zTreeNode.edit_finishc             C   sQ   y |  j  } |  `  Wn t k
 r+ d  SYn X| j   |  j   |  j j   d  S)N)ro   rp   r1   r<   r%   r{   )r.   r=   ro   r    r    r!   r|   %  s    	
	

zTreeNode.edit_cancel)__name__
__module____qualname__r/   r1   r7   r>   r?   r8   r@   rG   rE   rD   rJ   rM   rI   rW   r;   r<   rs   ru   rq   r|   r    r    r    r!   r#   :   s(   
	*"	r#   c               @   s   e  Z d  Z d Z d d   Z d d   Z d d   Z d Z d	 d
   Z d d   Z	 d d   Z
 d d   Z d d   Z d d   Z d d   Z d d   Z d d   Z d S)TreeItemzAbstract class representing tree items.

    Methods should typically be overridden, otherwise a default action
    is used.

    c             C   s   d S)z)Constructor.  Do whatever you need to do.Nr    )r.   r    r    r!   r/   9  s    zTreeItem.__init__c             C   s   d S)zReturn text string to display.Nr    )r.   r    r    r!   rn   <  s    zTreeItem.GetTextc             C   s   d S)z>Return label text string to display in front of text (if any).Nr    )r.   r    r    r!   rl   ?  s    zTreeItem.GetLabelTextNc             C   s%   |  j  d k r |  j   |  _  |  j  S)z%Do not override!  Called by TreeNode.N)
expandableIsExpandable)r.   r    r    r!   rH   D  s    zTreeItem._IsExpandablec             C   s   d S)z"Return whether there are subitems.r	   r    )r.   r    r    r!   r   J  s    zTreeItem.IsExpandablec             C   s/   |  j    s g  S|  j   } | s+ d |  _ | S)z%Do not override!  Called by TreeNode.r   )r   
GetSubListr   )r.   rb   r    r    r!   r^   N  s    	zTreeItem._GetSubListc             C   s   d S)z-Return whether the item's text may be edited.Nr    )r.   r    r    r!   rt   W  s    zTreeItem.IsEditablec             C   s   d S)z+Change the item's text (if it is editable).Nr    )r.   r   r    r    r!   r~   Z  s    zTreeItem.SetTextc             C   s   d S)z-Return name of icon to be displayed normally.Nr    )r.   r    r    r!   ri   ]  s    zTreeItem.GetIconNamec             C   s   d S)z2Return name of icon to be displayed when selected.Nr    )r.   r    r    r!   rh   `  s    zTreeItem.GetSelectedIconNamec             C   s   d S)z%Return list of items forming sublist.Nr    )r.   r    r    r!   r   c  s    zTreeItem.GetSubListc             C   s   d S)z%Called on a double-click on the item.Nr    )r.   r    r    r!   rF   f  s    zTreeItem.OnDoubleClick)r   r   r   __doc__r/   rn   rl   r   rH   r   r^   rt   r~   ri   rh   r   rF   r    r    r    r!   r   0  s   	r   c               @   sj   e  Z d  Z d Z d d   Z d d   Z d d   Z d d	   Z d
 d   Z d d   Z	 d d   Z
 d S)FileTreeItemz4Example TreeItem subclass -- browse the file system.c             C   s   | |  _  d  S)N)r   )r.   r   r    r    r!   r/   p  s    zFileTreeItem.__init__c             C   s   t  j j |  j  p |  j S)N)r   r   r   )r.   r    r    r!   rn   s  s    zFileTreeItem.GetTextc             C   s   t  j j |  j  d k S)N )r   r   r   )r.   r    r    r!   rt   v  s    zFileTreeItem.IsEditablec             C   s   t  j j |  j  } t  j j | |  } t  j j |  t  j j |  j  k rU d  Sy  t  j |  j |  | |  _ Wn t k
 r Yn Xd  S)N)r   r   dirnamer   renameOSError)r.   r   newpathr    r    r!   r~   y  s    'zFileTreeItem.SetTextc             C   s   |  j    s d Sd  S)Npython)r   )r.   r    r    r!   ri     s    zFileTreeItem.GetIconNamec             C   s   t  j j |  j  S)N)r   r   isdir)r.   r    r    r!   r     s    zFileTreeItem.IsExpandablec             C   s   y t  j |  j  } Wn t k
 r. g  SYn X| j d t  j j  g  } x9 | D]1 } t t  j j |  j |   } | j |  qR W| S)Nkey)	r   listdirr   r   r   normcaser   r   r   )r.   namesrb   r   r'   r    r    r!   r     s    	zFileTreeItem.GetSubListN)r   r   r   r   r/   rn   rt   r~   ri   r   r   r    r    r    r!   r   l  s   r   c               @   sX   e  Z d  Z d d   Z d d   Z d d   Z d d   Z d	 d
   Z d d   Z d S)ScrolledCanvasc             K   s  d | k r d | d <| |  _  t |  |  _ |  j j d d d |  j j d d d t |  j |  |  _ |  j j d d d d d d	  t |  j d
 d |  _	 |  j	 j d d d d d d  t |  j d
 d d d |  _
 |  j
 j d d d d d d  |  j	 j |  j d <|  j j |  j	 d <|  j
 j |  j d <|  j j |  j
 d <|  j j d |  j  |  j j d |  j  |  j j d |  j  |  j j d |  j  |  j j d |  j  |  j j   d  S)NZyscrollincrementrK   r   Zweightr	   r
   r   ZstickyZnsewr   vbarZnsehbarZorientZ
horizontalZewsZyscrollcommandZcommandZxscrollcommandz<Key-Prior>z
<Key-Next>z<Key-Up>z
<Key-Down>z<Alt-Key-2>)r   ZFrameframeZrowconfigureZcolumnconfigureZCanvasr%   r   Z	Scrollbarr   r   setZyviewZxviewrr   page_up	page_downunit_up	unit_downzoom_heightr{   )r.   r   Zoptsr    r    r!   r/     s,    
	zScrolledCanvas.__init__c             C   s   |  j  j d d  d S)Nr	   pagerC   rU   )r%   yview_scroll)r.   r=   r    r    r!   r     s    zScrolledCanvas.page_upc             C   s   |  j  j d d  d S)Nr	   r   rC   )r%   r   )r.   r=   r    r    r!   r     s    zScrolledCanvas.page_downc             C   s   |  j  j d d  d S)Nr	   unitrC   rU   )r%   r   )r.   r=   r    r    r!   r     s    zScrolledCanvas.unit_upc             C   s   |  j  j d d  d S)Nr	   r   rC   )r%   r   )r.   r=   r    r    r!   r     s    zScrolledCanvas.unit_downc             C   s   t  j |  j  d S)NrC   )r   r   r   )r.   r=   r    r    r!   r     s    zScrolledCanvas.zoom_heightN)	r   r   r   r/   r   r   r   r   r   r    r    r    r!   r     s   r   c       	      C   s   t    } | j d  t t t t j d |  j      \ } } } } | j d | | d f  t | d d d d d	 d
 } | j	 j
 d d
 d d d t  t t j    } t | j d  |  } | j   | j   d  S)NzTest TreeWidgetz[x+]z+%d+%d   bgZwhiterv   r   Z	takefocusr	   rE   r\   ZbothZside)r   titler   mapintresplitZgeometryr   r   rz   ZLEFTr   r   getcwdr#   r%   rE   Zmainloop)	r&   r   rw   rP   r+   r,   Zscr'   Znoder    r    r!   _tree_widget  s    	3
r   __main__)run)r   tkinterZidlelibr   Zidlelib.configHandlerr   r4   r   r   r   __file__Z_icondir	NameErrorr   RuntimeErrorr"   r#   r   r   r   r   r   Zidlelib.idle_test.htestr   r    r    r    r!   <module>   s*   
%	<.*