
    G@d(                         d dl mZ d dlmZmZ d dlmZmZmZ d dl	m
Z
 d dlmZ d dlmZ d dlmZ  G d d	          Z G d
 d          Z G d dee
          ZdS )    )PYQT5)QtSlot)QAbstractItemViewQHeaderViewQTreeWidget)SpyderWidgetMixin)_)ima)get_item_user_textc                   "    e Zd ZdZdZdZdZdZdS )OneColumnTreeActionscollapse_all_actionexpand_all_actionrestore_actioncollapse_selection_actionexpand_selection_actionN)__name__
__module____qualname__CollapseAllActionExpandAllActionRestoreActionCollapseSelectionActionExpandSelectionAction     <lib/python3.11/site-packages/spyder/widgets/onecolumntree.pyr   r      s,        -)O$M95r   r   c                       e Zd ZdZdZdZdZdS ) OneColumnTreeContextMenuSectionsglobal_sectionrestore_sectionsection_sectionhistory_sectionN)r   r   r   GlobalRestoreSectionHistoryr   r   r   r    r       s"        FGGGGGr   r    c                       e Zd ZdZ fdZd Zd Zd Zd Zd Z	d Z
d	 Zd
 Z e            d             Zd Zd Z e            d             Zd Z e            d             Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z xZ S )OneColumnTreez3
    One-column tree widget with context menu.
    c                    t           r$t                                          ||           n+t          j        | |           t	          j        | |           d | _        |                     d           |                     d           d | _        d | _	        d | _
        d | _        |                                  |                                 | _        | j                            | j                   | j                            | j                   | j                            | j                   |                     d           |                     t0          j                   |                                                     dt8          j                   |                                                     d           |                                  d S )N)class_parentT   r   F)r   super__init__r   r	   _OneColumnTree__expanded_statesetItemsExpandablesetColumnCountr   r   r   r   setupsetup_common_actionscommon_actionsitemActivatedconnect	activateditemClickedclickeditemSelectionChangeditem_selection_changedsetMouseTrackingsetHorizontalScrollModer   ScrollPerPixelheadersetSectionResizeModer   ResizeToContentssetStretchLastSection)selfparent	__class__s     r   r/   zOneColumnTree.__init__'   s    	BGGV&9999 v...&t&AAAA $ 	%%%A $( )-&!%'+$

"7799 	""4>222  ...!))$*EFFF 	d### 	$$%6%EFFF**1k.JKKK++E222##%%%%%r   c                    |                      d          | _        |                     t          j        t          d          t          j        d          | j        d          | _	        |                     t          j
        t          d          t          j        d          | j        d          | _        |                     t          j        t          d          t          d	          t          j        d
          | j        d          | _        |                     t          j        t          d          t          j        d          | j        d          | _        |                     t          j        t          d          t          j        d          | j        d          | _        | j	        | j        fD ])}|                     || j        t.          j                   *|                     | j        | j        t.          j                   | j        | j        fD ])}|                     || j        t.          j                   *d S )Ncontext_menuzCollapse allcollapseF)texticon	triggeredregister_shortcutz
Expand allexpandr&   zRestore original tree layoutrestore)rJ   tiprK   rL   rM   zCollapse sectioncollapse_selectionzExpand sectionexpand_selection)section)create_menumenucreate_actionr   r   r
   r   rK   collapseAllr   r   	expandAllr   r   rO   r   r   rQ   r   r   rR   r   add_item_to_menur    r%   r&   r'   rD   items     r   r3   zOneColumnTree.setupM   sR   $$^44	#'#5#5 2>""*%%&# $6 $
 $
  "&!3!3 0<(##n# "4 "
 "
 #00 .9011)$$l# 1 
 
 *.);); 8%&&.//-# *< *
 *
& (,'9'9 6#$$,--+# (: (
 (
$ -t/EF 	 	D!!	8? "     	I4< 	 	
 	
 	

 313 	 	D!!	8@ "    	 	r   c                     d S Nr   rD   s    r   update_actionszOneColumnTree.update_actions       r   c                     t           )zDouble-click event)NotImplementedErrorrZ   s     r   r8   zOneColumnTree.activated   s    !!r   c                     d S r]   r   rZ   s     r   r:   zOneColumnTree.clicked   r`   r   c                 2    |                      |g           d S r]   )setHeaderLabels)rD   titles     r   	set_titlezOneColumnTree.set_title   s    eW%%%%%r   c                 6    | j         | j        | j        | j        gS )z!Setup context menu common actions)r   r   r   r   r^   s    r   r4   z"OneColumnTree.setup_common_actions   s$    ($*@.0LN 	Nr   c                     |                                  }|                     |          }|r|                    d           || j        z  }|S )zReturns a list of menu actionsN)selectedItemsget_actions_from_itemsappendr5   )rD   itemsactionss      r   get_menu_actionszOneColumnTree.get_menu_actions   sR    ""$$--e44 	!NN4   4&&r   c                     g S r]   r   )rD   rm   s     r   rk   z$OneColumnTree.get_actions_from_items   s	     	r   c                     |                                   |                                 D ]}|                     |           d S r]   )rW   get_top_level_items
expandItemrZ   s     r   rO   zOneColumnTree.restore   sN    ,,.. 	" 	"DOOD!!!!	" 	"r   c                     dS )zQTo be reimplemented in child class
        See example in project explorer widgetTr   rZ   s     r   is_item_expandablez OneColumnTree.is_item_expandable   s	     tr   c                     |                      |          rc|                     |           t          |                                          D ].}|                    |          }|                     |           -d S d S r]   )ru   rs   range
childCountchild_OneColumnTree__expand_itemrD   r[   indexry   s       r   __expand_itemzOneColumnTree.__expand_item   s    ""4(( 	*OOD!!!t0011 * *

5))""5))))		* 	** *r   c                     |                                  }|s|                                 }|D ]}|                     |           |r|                     |d                    d S d S Nr   )rj   rr   rz   scrollToItemrD   rm   r[   s      r   rR   zOneColumnTree.expand_selection   s    ""$$ 	/,,..E 	% 	%Dt$$$$ 	(eAh'''''	( 	(r   c                     |                      |           t          |                                          D ],}|                    |          }|                     |           -d S r]   )collapseItemrw   rx   ry   _OneColumnTree__collapse_itemr{   s       r   __collapse_itemzOneColumnTree.__collapse_item   si    $4??,,-- 	( 	(EJJu%%E  ''''	( 	(r   c                     |                                  }|s|                                 }|D ]}|                     |           |r|                     |d                    d S d S r   )rj   rr   r   r   r   s      r   rQ   z OneColumnTree.collapse_selection   s    ""$$ 	/,,..E 	' 	'D  &&&& 	(eAh'''''	( 	(r   c                     t          |                                           dk    }| j                            |           | j                            |           dS )zItem selection has changedr   N)lenrj   r   
setEnabledr   )rD   is_selections     r   r<   z$OneColumnTree.item_selection_changed   sT    4--//0014$//===&11,?????r   c                 ^      fdt                                                     D             S )zIterate over top level itemsc                 :    g | ]}                     |          S r   )topLevelItem).0_irD   s     r   
<listcomp>z5OneColumnTree.get_top_level_items.<locals>.<listcomp>   s'    PPP"!!"%%PPPr   )rw   topLevelItemCountr^   s   `r   rr   z!OneColumnTree.get_top_level_items   s1    PPPPd6L6L6N6N0O0OPPPPr   c                 ^    g fd|                                  D ]} |           S )z(Return items (excluding top level items)c                     t          |                                           D ]7}|                     |          }                    |            |           8d S r]   )rw   rx   ry   rl   )r[   r|   citemadd_to_itemlistitemlists      r   r   z0OneColumnTree.get_items.<locals>.add_to_itemlist   sd    t0011 ' '

5))&&&&&&&' 'r   )rr   )rD   tlitemr   r   s     @@r   	get_itemszOneColumnTree.get_items   s\    	' 	' 	' 	' 	' 	'
 ..00 	$ 	$FOF####r   c                     |                                                                  |                                                                 fS r]   )horizontalScrollBarvalueverticalScrollBarr^   s    r   get_scrollbar_positionz$OneColumnTree.get_scrollbar_position   sB    ((**0022&&((..002 	2r   c                     |\  }}|                                                      |           |                                                     |           d S r]   )r   setValuer   )rD   positionhorvers       r   set_scrollbar_positionz$OneColumnTree.set_scrollbar_position   sQ    S  ""++C000  ))#.....r   c                 8    |                                   | j        S r]   )save_expanded_stater0   r^   s    r   get_expanded_statez OneColumnTree.get_expanded_state   s      """$$r   c                 <    || _         |                                  d S r]   )r0   restore_expanded_state)rD   states     r   set_expanded_statez OneColumnTree.set_expanded_state   s"     %##%%%%%r   c                 v     i  _          fd fd                                 D ]} |           dS )zSave all items expanded statec                 x    t          |           }|                                 j        t          |          <   d S r]   )r   
isExpandedr0   hash)r[   	user_textrD   s     r   add_to_statez7OneColumnTree.save_expanded_state.<locals>.add_to_state  s3    *400I59__5F5FD!$y//222r   c                     |            t          |                                           D ]Z}|                     |          }t          |          }|                                j        t          |          <    |           [d S r]   )rw   rx   ry   r   r   r0   r   )r[   r|   r   r   r   browse_childrenrD   s       r   r   z:OneColumnTree.save_expanded_state.<locals>.browse_children  s    Lt0011 ' '

5)).u55	9>9I9I9K9K%d9oo6&&&&	' 'r   N)r0   rr   )rD   r   r   r   s   ` @@r   r   z!OneColumnTree.save_expanded_state   s     "	G 	G 	G 	G 	G	' 	' 	' 	' 	' 	' 	' ..00 	$ 	$FOF####	$ 	$r   c                 
   | j         dS |                                 |                                 z   D ]O}t          |          }| j                             t          |                    }||                    |           PdS )z Restore all items expanded stateN)r0   r   rr   r   getr   setExpanded)rD   r[   r   is_expandeds       r   r   z$OneColumnTree.restore_expanded_state  s     (FNN$$T%=%=%?%?? 	. 	.D*400I/33DOODDK&  ---		. 	.r   c                 &                                       t           fdt                                                     D             |          }t	          |          D ]\  }}                     ||                                             dS )z Sorting tree wrt top level itemsc                 :    g | ]}                     d           S )r   )takeTopLevelItem)r   r|   rD   s     r   r   z6OneColumnTree.sort_top_level_items.<locals>.<listcomp>  s=     F F F! --a00 F F Fr   )keyN)r   sortedrw   r   	enumerateinsertTopLevelItemr   )rD   r   rm   r|   r[   s   `    r   sort_top_level_itemsz"OneColumnTree.sort_top_level_items  s      """ F F F F%*4+A+A+C+C%D%DF F FKNP P P$U++ 	1 	1KE4##E40000##%%%%%r   c                 ^    | j                             |                                           dS )zOverride Qt methodN)rU   popup	globalPos)rD   events     r   contextMenuEventzOneColumnTree.contextMenuEvent$  s&    	))*****r   c                    |                      |                                          }|                                r|                     |          }|                                |                     |                                                                           z
  }|                                                                |k    r!|                     t          j                   dS |                     t          j	                   dS dS )zChange cursor shape.N)
indexAtposisValid
visualRectx	rootIndex	setCursorr   PointingHandCursorArrowCursor)rD   r   r|   vrectitem_identations        r   mouseMoveEventzOneColumnTree.mouseMoveEvent(  s    UYY[[))==?? 	/OOE**E#ggii$//$..:J:J*K*K*M*M*O*OOOyy{{}}00r455555 r~.....	/ 	/r   )!r   r   r   __doc__r/   r3   r_   r8   r:   rg   r4   ro   rk   r   rO   ru   rz   rR   r   rQ   r<   rr   r   r   r   r   r   r   r   r   r   r   __classcell__)rF   s   @r   r*   r*   "   s	        "& "& "& "& "&L: : :x  
" " "  & & &N N N
    
 
TVV" " V"
  
* * * 
TVV( ( V(( ( ( 
TVV( ( V(@ @ @Q Q Q
 
 
2 2 2/ / /
% % %& & &$ $ $ . . .& & &+ + +/ / / / / / /r   r*   N)qtpyr   qtpy.QtCorer   r   qtpy.QtWidgetsr   r   r   spyder.api.widgets.mixinsr	   spyder.config.baser
   spyder.utils.icon_managerr   spyder.utils.qthelpersr   r   r    r*   r   r   r   <module>r      s*                         F F F F F F F F F F 8 7 7 7 7 7             ) ) ) ) ) ) 5 5 5 5 5 56 6 6 6 6 6 6 6               Q/ Q/ Q/ Q/ Q/K!2 Q/ Q/ Q/ Q/ Q/r   