
\[\:                 @   sV  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   n  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 rRd  d l m Z e e  n  d S)    N)*)
ZoomHeight)idleConfZIconszcan't find icon directory (%r)c          	   C   s8  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 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    (/usr/lib/python3.4/idlelib/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   Z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%   r8   r9   r:   r;   )r.   r<   r    r    r!   deselecta   s    		
zTreeNode.deselectc             C   s'   |  j  r |  j  j   n
 |  j   d  S)N)r&   r7   deselecttree)r.   r    r    r!   r7   i   s    	zTreeNode.deselectallc             C   s8   |  j  r |  j   n  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   sF   |  j  j   s d  S|  j d k rB d |  _ |  j   |  j   n  d  S)NrA   )r'   _IsExpandabler(   updateview)r.   r<   r    r    r!   rD   }   s    	
zTreeNode.expandc             C   s)   |  j  d k r% d |  _  |  j   n  d  S)Nr$   )r(   rH   )r.   r<   r    r    r!   rC      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!   rI      s    
%zTreeNode.viewc             C   s1   |  j  r) |  j d k r) |  j  d j   S|  Sd  S)NrA   r	   )r*   r(   rL   )r.   r    r    r!   rL      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   rK   r   )r&   rH   r%   r8   ZALLdrawbbox	configure)r.   Z	oldcursorrP   rQ   rR   rS   r    r    r!   rH      s    	zTreeNode.updatec             C   s  | | |  _  |  _ |  j   |  j   |  j d k r> | d S|  j s |  j j   } | sd | d Sx9 | D]. } |  j |  j	 |  |  } |  j j
 |  qk Wn  | d } | 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 q W|  j	 j | d | d | d | d d d } |  j	 j |  | S)NrA   rJ      r   	   rU   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_linerV   rG   rC   rD   r6   create_imagetag_bindZ	tag_lower)r.   r+   r,   sublistr'   r@   ZcxZcyZcylastZiconnamecallbackr   idr    r    r!   rV      sB    

	

+	##(	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GetIconNamer6   r%   r_   r+   r,   r9   r`   r=   rF   )r.   Z	imagenamer   rc   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	 } n  |  j j   p d
 }	 y |  j Wn t k
 r Yn X|  j   y |  j }
 Wn< t k
 rDt |  j d |	 d d d d d d |  _ Yn Xt j d d d  } |  j r|  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)NrY   r	   rd   re   r   z<1>z
<Double-1>   r   z	<no text>r   r   Zpadxr   ZpadymainZThemer   ZhiliteZnormalZwindow)r+   r,   r'   GetLabelTextr%   Zcreate_textr`   r=   rF   rW   maxGetTextentryAttributeErroredit_finishr   r   r   Z	GetOptionr)   rX   ZGetHighlightZcreate_windowbindselect_or_editZtext_id)r.   ZtextxZtextyZ	labeltextrc   rP   rQ   rR   rS   r   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!   rq     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   rm   insertZselection_rangeZENDpack	focus_setrp   ro   edit_cancel)r.   r<   r    r    r!   rs     s    $zTreeNode.editc             C   s   y |  j  } |  `  Wn t k
 r+ d  SYn X| j   } | j   | rp | |  j j   k rp |  j j |  n  |  j j   } | |  j d <|  j   |  j	 j
   d  S)Nr   )rm   rn   getr1   r'   rl   SetTextr   r;   r%   ry   )r.   r<   rm   r   r    r    r!   ro     s    	
	

zTreeNode.edit_finishc             C   sQ   y |  j  } |  `  Wn t k
 r+ d  SYn X| j   |  j   |  j j   d  S)N)rm   rn   r1   r;   r%   ry   )r.   r<   rm   r    r    r!   rz   $  s    	
	

zTreeNode.edit_cancel)__name__
__module____qualname__r/   r1   r6   r=   r>   r7   r?   rF   rD   rC   rI   rL   rH   rV   r:   r;   rq   rs   ro   rz   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/   8  s    zTreeItem.__init__c             C   s   d S)zReturn text string to display.Nr    )r.   r    r    r!   rl   ;  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!   rj   >  s    zTreeItem.GetLabelTextNc             C   s(   |  j  d k r! |  j   |  _  n  |  j  S)z%Do not override!  Called by TreeNode.N)
expandableIsExpandable)r.   r    r    r!   rG   C  s    zTreeItem._IsExpandablec             C   s   d S)z"Return whether there are subitems.r	   r    )r.   r    r    r!   r   I  s    zTreeItem.IsExpandablec             C   s2   |  j    s g  S|  j   } | s. d |  _ n  | S)z%Do not override!  Called by TreeNode.r   )r   
GetSubListr   )r.   ra   r    r    r!   r]   M  s    zTreeItem._GetSubListc             C   s   d S)z-Return whether the item's text may be edited.Nr    )r.   r    r    r!   rr   V  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|   Y  s    zTreeItem.SetTextc             C   s   d S)z-Return name of icon to be displayed normally.Nr    )r.   r    r    r!   rg   \  s    zTreeItem.GetIconNamec             C   s   d S)z2Return name of icon to be displayed when selected.Nr    )r.   r    r    r!   rf   _  s    zTreeItem.GetSelectedIconNamec             C   s   d S)z%Return list of items forming sublist.Nr    )r.   r    r    r!   r   b  s    zTreeItem.GetSubListc             C   s   d S)z%Called on a double-click on the item.Nr    )r.   r    r    r!   rE   e  s    zTreeItem.OnDoubleClick)r}   r~   r   __doc__r/   rl   rj   r   rG   r   r]   rr   r|   rg   rf   r   rE   r    r    r    r!   r   /  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/   o  s    zFileTreeItem.__init__c             C   s   t  j j |  j  p |  j S)N)r   r   r   )r.   r    r    r!   rl   r  s    zFileTreeItem.GetTextc             C   s   t  j j |  j  d k S)N )r   r   r   )r.   r    r    r!   rr   u  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|   x  s    'zFileTreeItem.SetTextc             C   s   |  j    s d Sd  S)NZpython)r   )r.   r    r    r!   rg     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.   namesra   r   r'   r    r    r!   r     s    	zFileTreeItem.GetSubListN)r}   r~   r   r   r/   rl   rr   r|   rg   r   r   r    r    r    r!   r   k  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 <n  | |  _  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yscrollincrementrJ   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xviewrp   page_up	page_downunit_up	unit_downzoom_heightry   )r.   r   Zoptsr    r    r!   r/     s,    	zScrolledCanvas.__init__c             C   s   |  j  j d d  d S)Nr	   pagerB   rT   )r%   yview_scroll)r.   r<   r    r    r!   r     s    zScrolledCanvas.page_upc             C   s   |  j  j d d  d S)Nr	   r   rB   )r%   r   )r.   r<   r    r    r!   r     s    zScrolledCanvas.page_downc             C   s   |  j  j d d  d S)Nr	   unitrB   rT   )r%   r   )r.   r<   r    r    r!   r     s    zScrolledCanvas.unit_upc             C   s   |  j  j d d  d S)Nr	   r   rB   )r%   r   )r.   r<   r    r    r!   r     s    zScrolledCanvas.unit_downc             C   s   t  j |  j  d S)NrB   )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   ZbgZwhitert   r   Z	takefocusr	   rD   r[   ZbothZside)r   titler   mapintresplitZgeometryr   r   rx   ZLEFTr   r   getcwdr#   r%   rD   Zmainloop)	r&   r   ru   rO   r+   r,   Zscr'   Znoder    r    r!   _tree_widget  s    	3
r   __main__)run)r   Z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*   
%	<.*