
    Je(                         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y)    )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y)OneColumnTreeActionscollapse_all_actionexpand_all_actionrestore_actioncollapse_selection_actionexpand_selection_actionN)__name__
__module____qualname__CollapseAllActionExpandAllActionRestoreActionCollapseSelectionActionExpandSelectionAction     >/usr/lib/python3/dist-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y) OneColumnTreeContextMenuSectionsglobal_sectionrestore_sectionsection_sectionhistory_sectionN)r   r   r   GlobalRestoreSectionHistoryr   r   r   r    r       s    FGGGr   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 | _        | j                  d       | j                  d       d | _        d | _	        d | _
        d | _        | j                          | j                         | _        | j                  j!                  | j"                         | j$                  j!                  | j&                         | j(                  j!                  | j*                         | j-                  d       | j/                  t0        j2                         | j5                         j7                  dt8        j:                         | j5                         j=                  d       | j+                          y )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__'   sI   GV&9  v.&&t&A $ 	%A $( )-&!%'+$

"779 	""4>>2  .!!))$*E*EF 	d# 	$$%6%E%EF**1k.J.JK++E2##%r   c                    | j                  d      | _        | j                  t        j                  t        d      t        j                  d      | j                  d      | _	        | j                  t        j                  t        d      t        j                  d      | j                  d      | _        | j                  t        j                  t        d      t        d	      t        j                  d
      | j                  d      | _        | j                  t        j                   t        d      t        j                  d      | j"                  d      | _        | j                  t        j&                  t        d      t        j                  d      | j(                  d      | _        | j                  | j                  fD ].  }| j-                  || j                  t.        j0                         0 | j-                  | j                  | j                  t.        j2                         | j$                  | j*                  fD ].  }| j-                  || j                  t.        j4                         0 y )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   s)   $$^4	#'#5#5 22>"*%&&# $6 $
  "&!3!3 00<(#nn# "4 "
 #00 ..901)$ll# 1 
 *.);); 88%&./--# *< *
& (,'9'9 66#$,-++# (: (
$ --t/E/EF 	D!!		8?? " 	 	II4<< 	 	

 33113 	D!!		8@@ " 	r   c                      y 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                      y r]   r   rZ   s     r   r:   zOneColumnTree.clicked   r`   r   c                 (    | j                  |g       y r]   )setHeaderLabels)rD   titles     r   	set_titlezOneColumnTree.set_title   s    eW%r   c                 ^    | 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   s0    (($*@*@..0L0LN 	Nr   c                     | j                         }| j                  |      }|r|j                  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   sD    ""$--e4NN4 4&&&r   c                     g S r]   r   )rD   rm   s     r   rk   z$OneColumnTree.get_actions_from_items   s	     	r   c                 p    | j                          | j                         D ]  }| j                  |        y r]   )rW   get_top_level_items
expandItemrZ   s     r   rO   zOneColumnTree.restore   s2    ,,. 	"DOOD!	"r   c                      y)zQTo be reimplemented in child class
        See example in project explorer widgetTr   rZ   s     r   is_item_expandablez OneColumnTree.is_item_expandable   s     r   c                     | j                  |      rR| j                  |       t        |j                               D ]$  }|j	                  |      }| j                  |       & y y r]   )ru   rs   range
childCountchild_OneColumnTree__expand_itemrD   r[   indexry   s       r   __expand_itemzOneColumnTree.__expand_item   sX    ""4(OOD!t01 *

5)""5)* )r   c                     | j                         }|s| j                         }|D ]  }| j                  |        |r| j                  |d          y y Nr   )rj   rr   rz   scrollToItemrD   rm   r[   s      r   rR   zOneColumnTree.expand_selection   sX    ""$,,.E 	%Dt$	%eAh' r   c                     | j                  |       t        |j                               D ]$  }|j                  |      }| j	                  |       & y r]   )collapseItemrw   rx   ry   _OneColumnTree__collapse_itemr{   s       r   __collapse_itemzOneColumnTree.__collapse_item   sG    $4??,- 	(EJJu%E  '	(r   c                     | j                         }|s| j                         }|D ]  }| j                  |        |r| j                  |d          y y r   )rj   rr   r   r   r   s      r   rQ   z OneColumnTree.collapse_selection   sX    ""$,,.E 	'D  &	'eAh' r   c                     t        | j                               dkD  }| j                  j                  |       | j                  j                  |       y)zItem selection has changedr   N)lenrj   r   
setEnabledr   )rD   is_selections     r   r<   z$OneColumnTree.item_selection_changed   sB    4--/014$$//=&&11,?r   c                 x    t        | j                               D cg c]  }| j                  |       c}S c c}w )zIterate over top level items)rw   topLevelItemCounttopLevelItem)rD   _is     r   rr   z!OneColumnTree.get_top_level_items   s/    05d6L6L6N0OP"!!"%PPPs   7c                 T    g fd| j                         D ]
  } |        S )z(Return items (excluding top level items)c                     t        | j                               D ],  }| j                  |      }j                  |        |       . y r]   )rw   rx   ry   rl   )r[   r|   citemadd_to_itemlistitemlists      r   r   z0OneColumnTree.get_items.<locals>.add_to_itemlist   s@    t01 '

5)&&'r   )rr   )rD   tlitemr   r   s     @@r   	get_itemszOneColumnTree.get_items   s4    	'
 ..0 	$FF#	$r   c                 z    | j                         j                         | j                         j                         fS r]   )horizontalScrollBarvalueverticalScrollBarr^   s    r   get_scrollbar_positionz$OneColumnTree.get_scrollbar_position   s6    ((*002&&(..02 	2r   c                     |\  }}| j                         j                  |       | j                         j                  |       y r]   )r   setValuer   )rD   positionhorvers       r   set_scrollbar_positionz$OneColumnTree.set_scrollbar_position   s9    S  "++C0 ))#.r   c                 :    | j                          | j                  S r]   )save_expanded_stater0   r^   s    r   get_expanded_statez OneColumnTree.get_expanded_state   s      "$$$r   c                 2    || _         | j                          y r]   )r0   restore_expanded_state)rD   states     r   set_expanded_statez OneColumnTree.set_expanded_state   s     %##%r   c                 j     i  _          fd fd j                         D ]
  } |        y)zSave all items expanded statec                 h    t        |       }| j                         j                  t        |      <   y r]   )r   
isExpandedr0   hash)r[   	user_textrD   s     r   add_to_statez7OneColumnTree.save_expanded_state.<locals>.add_to_state  s(    *40I59__5FD!!$y/2r   c                      |        t        | j                               D ]L  }| j                  |      }t        |      }|j	                         j
                  t        |      <    |       N y 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  sc    t01 '

5).u5	9>9I9I9K%%d9o6&	'r   N)r0   rr   )rD   r   r   r   s   ` @@r   r   z!OneColumnTree.save_expanded_state   s8     "	G	' ..0 	$FF#	$r   c                     | j                   y| j                         | j                         z   D ]E  }t        |      }| j                   j	                  t        |            }|5|j                  |       G y)z Restore all items expanded stateN)r0   r   rr   r   getr   setExpanded)rD   r[   r   is_expandeds       r   r   z$OneColumnTree.restore_expanded_state  sm      (NN$T%=%=%?? 	.D*40I//33DODK&  -		.r   c                    | j                          t        t        | j                               D cg c]  }| j	                  d       c}|      }t        |      D ]  \  }}| j                  ||        | j                          yc c}w )z Sorting tree wrt top level itemsr   )keyN)r   sortedrw   r   takeTopLevelItem	enumerateinsertTopLevelItemr   )rD   r   r|   rm   r[   s        r   sort_top_level_itemsz"OneColumnTree.sort_top_level_items  s      "%*4+A+A+C%DF! --a0 FKNP$U+ 	1KE4##E40	1##%	Fs   Bc                 V    | j                   j                  |j                                y)zOverride Qt methodN)rU   popup	globalPos)rD   events     r   contextMenuEventzOneColumnTree.contextMenuEvent$  s    		)*r   c                    | j                  |j                               }|j                         r| j                  |      }|j	                         | j                  | j                               j	                         z
  }|j                         j	                         |kD  r | j                  t        j                         y| j                  t        j                         yy)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#ggi$//$..:J*K*M*M*OOOyy{}}0r44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

 
V" "

* 
V( (( 
V( (@Q
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      sF       F F 8   ) 56 6   Q/K!2 Q/r   