B
    nôb\   ã               @   s\   d dl mZ d dlmZmZ d dlmZ d dlmZ	 d dl
mZmZmZ G dd„ deƒZdS )	é    )ÚSlot)ÚQTreeWidgetÚQMenu)Ú_)Úicon_manager)Úadd_actionsÚcreate_actionÚget_item_user_textc               @   sâ   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
eƒ dd„ ƒZdd„ Zdd„ Zeƒ dd„ ƒZdd„ Zeƒ 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,d-„ Zd.d/„ Zd0d1„ Zd2S )3ÚOneColumnTreez-One-column tree widget with context menu, ...c             C   sˆ   t  | |¡ |  d¡ |  d¡ | j | j¡ | j | j¡ t	| ƒ| _
d | _d | _d | _d | _|  ¡ | _d | _| j | j¡ |  ¡  d S )NTé   )r   Ú__init__ZsetItemsExpandableZsetColumnCountZitemActivatedZconnectÚ	activatedZitemClickedÚclickedr   ÚmenuÚcollapse_all_actionÚcollapse_selection_actionÚexpand_all_actionÚexpand_selection_actionÚsetup_common_actionsÚcommon_actionsÚ_OneColumnTree__expanded_stateZitemSelectionChangedÚitem_selection_changed)ÚselfÚparent© r   ú;lib/python3.7/site-packages/spyder/widgets/onecolumntree.pyr      s    



zOneColumnTree.__init__c             C   s   t ‚dS )zDouble-click eventN)ÚNotImplementedError)r   Úitemr   r   r   r   '   s    zOneColumnTree.activatedc             C   s   d S )Nr   )r   r   r   r   r   r   +   s    zOneColumnTree.clickedc             C   s   |   |g¡ d S )N)ZsetHeaderLabels)r   Útitler   r   r   Ú	set_title.   s    zOneColumnTree.set_titlec             C   s¶   t | tdƒt d¡| jd| _t | tdƒt d¡| jd| _t | tdƒtdƒt d¡| jd	| _	t | td
ƒt d¡| j
d| _t | tdƒt d¡| jd| _| j| j| j	d| j| jgS )z!Setup context menu common actionszCollapse allZcollapse)ÚtextÚiconÚ	triggeredz
Expand allÚexpandZRestorezRestore original tree layoutÚrestore)r    Ztipr!   r"   zCollapse selectionÚcollapse_selectionzExpand selectionÚexpand_selectionN)r   r   Úimar!   ÚcollapseAllr   Z	expandAllr   r$   Zrestore_actionr%   r   r&   r   )r   r   r   r   r   1   s0    z"OneColumnTree.setup_common_actionsc             C   sD   | j  ¡  |  ¡ }|  |¡}|r*| d ¡ || j7 }t| j |ƒ d S )N)r   ÚclearÚselectedItemsÚget_actions_from_itemsÚappendr   r   )r   ÚitemsZactionsr   r   r   Úupdate_menuL   s    



zOneColumnTree.update_menuc             C   s   g S )Nr   )r   r-   r   r   r   r+   U   s    z$OneColumnTree.get_actions_from_itemsc             C   s(   |   ¡  x|  ¡ D ]}|  |¡ qW d S )N)r(   Úget_top_level_itemsÚ
expandItem)r   r   r   r   r   r$   Z   s    zOneColumnTree.restorec             C   s   dS )zQTo be reimplemented in child class
        See example in project explorer widgetTr   )r   r   r   r   r   Úis_item_expandable`   s    z OneColumnTree.is_item_expandablec             C   sB   |   |¡r>|  |¡ x(t| ¡ ƒD ]}| |¡}|  |¡ q"W d S )N)r1   r0   ÚrangeÚ
childCountÚchildÚ_OneColumnTree__expand_item)r   r   Úindexr4   r   r   r   Z__expand_iteme   s
    


zOneColumnTree.__expand_itemc             C   sB   |   ¡ }|s|  ¡ }x|D ]}|  |¡ qW |r>|  |d ¡ d S )Nr   )r*   r/   r5   ÚscrollToItem)r   r-   r   r   r   r   r&   l   s    
zOneColumnTree.expand_selectionc             C   s8   |   |¡ x(t| ¡ ƒD ]}| |¡}|  |¡ qW d S )N)ZcollapseItemr2   r3   r4   Ú_OneColumnTree__collapse_item)r   r   r6   r4   r   r   r   Z__collapse_itemv   s    

zOneColumnTree.__collapse_itemc             C   sB   |   ¡ }|s|  ¡ }x|D ]}|  |¡ qW |r>|  |d ¡ d S )Nr   )r*   r/   r8   r7   )r   r-   r   r   r   r   r%   |   s    
z OneColumnTree.collapse_selectionc             C   s,   t |  ¡ ƒdk}| j |¡ | j |¡ dS )zItem selection has changedr   N)Úlenr*   r   Z
setEnabledr   )r   Zis_selectionr   r   r   r   †   s    z$OneColumnTree.item_selection_changedc                s   ‡ fdd„t ˆ  ¡ ƒD ƒS )zIterate over top level itemsc                s   g | ]}ˆ   |¡‘qS r   )ZtopLevelItem)Ú.0Z_i)r   r   r   ú
<listcomp>Ž   s    z5OneColumnTree.get_top_level_items.<locals>.<listcomp>)r2   ÚtopLevelItemCount)r   r   )r   r   r/   Œ   s    z!OneColumnTree.get_top_level_itemsc                s0   g ‰‡ ‡fdd„‰ x|   ¡ D ]}ˆ |ƒ qW ˆS )z(Return items (excluding top level items)c                s6   x0t |  ¡ ƒD ] }|  |¡}ˆ |¡ ˆ |ƒ qW d S )N)r2   r3   r4   r,   )r   r6   Úcitem)Úadd_to_itemlistÚitemlistr   r   r>   “   s    

z0OneColumnTree.get_items.<locals>.add_to_itemlist)r/   )r   Útlitemr   )r>   r?   r   Ú	get_items   s
    zOneColumnTree.get_itemsc             C   s   |   ¡  ¡ |  ¡  ¡ fS )N)ÚhorizontalScrollBarÚvalueÚverticalScrollBar)r   r   r   r   Úget_scrollbar_positionœ   s    
z$OneColumnTree.get_scrollbar_positionc             C   s(   |\}}|   ¡  |¡ |  ¡  |¡ d S )N)rB   ZsetValuerD   )r   ZpositionZhorZverr   r   r   Úset_scrollbar_position    s    z$OneColumnTree.set_scrollbar_positionc             C   s   |   ¡  | jS )N)Úsave_expanded_stater   )r   r   r   r   Úget_expanded_state¥   s    z OneColumnTree.get_expanded_statec             C   s   || _ |  ¡  d S )N)r   Úrestore_expanded_state)r   Ústater   r   r   Úset_expanded_state©   s    z OneColumnTree.set_expanded_statec                s@   i ˆ_ ‡fdd„‰ ‡ ‡‡fdd„‰xˆ ¡ D ]}ˆ|ƒ q,W dS )zSave all items expanded statec                s   t | ƒ}|  ¡ ˆ jt|ƒ< d S )N)r	   Ú
isExpandedr   Úhash)r   Ú	user_text)r   r   r   Úadd_to_state°   s    z7OneColumnTree.save_expanded_state.<locals>.add_to_statec                sN   ˆ | ƒ x@t |  ¡ ƒD ]0}|  |¡}t|ƒ}| ¡ ˆjt|ƒ< ˆ|ƒ qW d S )N)r2   r3   r4   r	   rL   r   rM   )r   r6   r=   rN   )rO   Úbrowse_childrenr   r   r   rP   ³   s    
z:OneColumnTree.save_expanded_state.<locals>.browse_childrenN)r   r/   )r   r@   r   )rO   rP   r   r   rG   ­   s
    z!OneColumnTree.save_expanded_statec             C   sV   | j dkrdS xB|  ¡ |  ¡  D ].}t|ƒ}| j  t|ƒ¡}|dk	r | |¡ q W dS )z Restore all items expanded stateN)r   rA   r/   r	   ÚgetrM   ZsetExpanded)r   r   rN   Zis_expandedr   r   r   rI   ½   s    
z$OneColumnTree.restore_expanded_statec                sX   ˆ   ¡  t‡ fdd„tˆ  ¡ ƒD ƒ|d}x t|ƒD ]\}}ˆ  ||¡ q4W ˆ  ¡  dS )z Sorting tree wrt top level itemsc                s   g | ]}ˆ   d ¡‘qS )r   )ZtakeTopLevelItem)r:   r6   )r   r   r   r;   Ê   s   z6OneColumnTree.sort_top_level_items.<locals>.<listcomp>)ÚkeyN)rG   Úsortedr2   r<   Ú	enumerateZinsertTopLevelItemrI   )r   rR   r-   r6   r   r   )r   r   Úsort_top_level_itemsÇ   s    z"OneColumnTree.sort_top_level_itemsc             C   s   |   ¡  | j | ¡ ¡ dS )zOverride Qt methodN)r.   r   ZpopupZ	globalPos)r   Zeventr   r   r   ÚcontextMenuEventÐ   s    zOneColumnTree.contextMenuEventN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r.   r+   r   r$   r1   r5   r&   r8   r%   r   r/   rA   rE   rF   rH   rK   rG   rI   rU   rV   r   r   r   r   r
      s2   	


	r
   N)Zqtpy.QtCorer   Zqtpy.QtWidgetsr   r   Zspyder.config.baser   Zspyder.utilsr   r'   Zspyder.utils.qthelpersr   r   r	   r
   r   r   r   r   Ú<module>   s
   