
    e                      n    d dl mZmZmZ ej                  j
                  Z G d dej                        Zy)   )QtCoreQtGui	QtWidgetsc                       e Zd ZdZddZd Zd Zd Zd Zd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d Zd Zd Zd Zd Zd Zy)ParameterItema  
    Abstract ParameterTree item. 
    Used to represent the state of a Parameter from within a ParameterTree.
    
      - Sets first column of item to name
      - generates context menu if item is renamable or removable
      - handles child added / removed events
      - provides virtual functions for handling changes from parameter
    
    For more ParameterItem types, see ParameterTree.parameterTypes module.
    c                 4   t         j                  j                  | |j                         dg       || _        | j                  j                  |        || _        |j                  j                  | j                         |j                  j                  | j                         |j                  j                  | j                         |j                  j                  | j                         |j                   j                  | j"                         |j$                  j                  | j&                         |j(                  j                  | j*                         |j,                  j                  | j.                         | j1                          d| _        y )N F)r   QTreeWidgetItem__init__titleparamregisterItemdepthsigValueChangedconnectvalueChangedsigChildAdded
childAddedsigChildRemovedchildRemovedsigNameChangednameChangedsigLimitsChangedlimitsChangedsigDefaultChangeddefaultChangedsigOptionsChangedoptsChangedsigParentChangedparentChangedupdateFlagsignoreNameColumnChange)selfr   r   s      G/usr/lib/python3/dist-packages/pyqtgraph/parametertree/ParameterItem.pyr   zParameterItem.__init__   s'   !!**4%++-1DE


%
%%d&7&78##DOO4%%d&7&78$$T%5%56&&t'9'9:''(;(;<''(8(89&&t'9'9: ',#    c                 t   | j                   j                  }t        j                  j                  j
                  t        j                  j                  j                  z  }|j                  dd      rD|j                  dd       t        d      |t        j                  j                  j                  z  }|j                  dd      r'|t        j                  j                  j                  z  }|j                  dd      r'|t        j                  j                  j                  z  }| j                  |       y )N	renamableFr   zDCannot make parameter with both title != None and renamable == True.movabledropEnabled)r   optsr   QtItemFlagItemIsSelectableItemIsEnabledget	ExceptionItemIsEditableItemIsDragEnabledItemIsDropEnabledsetFlags)r#   r*   flagss      r$   r!   zParameterItem.updateFlags'   s    zz		""33fii6H6H6V6VV88K'xx&2 fggVYY''666E 88Iu%VYY''999E88M5)VYY''999Eer%   c                      y N )r#   r   vals      r$   r   zParameterItem.valueChanged9       r%   c                      y)zBReturn True if this item should be included in the tab-focus orderFr8   r#   s    r$   isFocusablezParameterItem.isFocusable=   s    r%   c                      y)zdGive input focus to this item.
        Can be reimplemented to display editor widgets, etc.
        Nr8   r<   s    r$   setFocuszParameterItem.setFocusA   s     	r%   c                 F    | j                         j                  | |       y)zIGive focus to the next (or previous) focusable item in the parameter tree)forwardN)
treeWidget	focusNext)r#   rA   s     r$   rC   zParameterItem.focusNextG   s    ##D'#:r%   c                     | j                  | j                  j                  j                  dd              | j	                  | j                  j                  j                  dd             y)zCalled when this item is added or removed from a tree.
        Expansion, visibility, and column widgets must all be configured AFTER 
        the item is added to a tree, not during __init__.
        visibleTexpandedN)	setHiddenr   r*   r/   setExpandedr<   s    r$   treeWidgetChangedzParameterItem.treeWidgetChangedL   sK    
 	4::??..y$??@,,Z>?r%   c                     |j                  | j                  dz         }| j                  ||       |j                          t	        |      D ]  \  }}|j                  |||        y )N   )r   )makeTreeItemr   insertChildrI   	enumerater   )r#   r   childpositemichs          r$   r   zParameterItem.childAddedT   sa    !!

1!5d# u% 	*EArOOE2q)	*r%   c                     t        | j                               D ]4  }| j                  |      }|j                  |u s#| j	                  |        y  y r7   )range
childCountrO   r   	takeChild)r#   r   rO   rR   rQ   s        r$   r   zParameterItem.childRemoved\   sE    t() 	A::a=DzzU"q!		r%   c                      y r7   r8   )r#   r   parents      r$   r    zParameterItem.parentChangedc   r:   r%   c                 R   | j                   j                  }|j                  dd      s|j                  dd      sd|vry t        j                         | _        | j
                  j                          |j                  dd      rH| j
                  j                  t        dd            j                  j                  | j                         |j                  dd      rH| j
                  j                  t        dd            j                  j                  | j                         |j                  dd       }t        |t              rK|D ]E  }| j
                  j                  |      j                  j                  | j                  |             G nkt        |t               r[|j#                         D ]H  \  }}| j
                  j                  |      j                  j                  | j                  |             J | j
                  j%                  |j'                                y )N	removableFr'   contextr   RenameRemove)r   r*   r/   r   QMenucontextMenuaddSeparator	addAction	translate	triggeredr   editNamerequestRemove
isinstancelistcontextMenuTriggereddictitemspopup	globalPos)r#   evr*   r\   namer   s         r$   contextMenuEventzParameterItem.contextMenuEventg   s   zzxxU+DHH[%4PT) %??,%%'88K'&&y('KLVV^^_c_l_lm88K'&&y('KLVV^^_c_q_qr ((9d+gt$ 5  **40::BB--d355 &&}} 5e  **51;;CC--d355 	r||~.r%   c                    |dk(  r| j                   j                  j                  dd      Z| j                  ry	 | j                   j	                  | j                  |            }	 d| _        | j                  | |       d| _        yyy# t        $ r, | j                  d| j                   j                                 w xY w# d| _        w xY w)zCalled when the text in a column has been edited (or otherwise changed).
        By default, we only use changes to column 0 to rename the parameter.
            r   NTF)
r   r*   r/   r"   setNametextr0   setTextro   r   )r#   colnewNames      r$   columnChangedEventz ParameterItem.columnChangedEvent   s     !8$**//--gt<D****,,TYYs^<
4.2+  w/.3+ E8
  Q

 12 /4+s   *B %C  5B= 	C	c                 p    | j                   j                  d   r| j                   j                  |       y y )NsyncExpanded)rF   )r   r*   setOpts)r#   rF   s     r$   expandedChangedEventz"ParameterItem.expandedChangedEvent   s,    ::??>*JJ1 +r%   c                 r    | j                   j                  j                  dd       | j                          y y )Nr   )r   r*   r/   titleChanged)r#   r   ro   s      r$   r   zParameterItem.nameChanged   s.    ::??w-5 6r%   c                    | j                   j                         }|r|dk(  ry | j                  d|       t        j                  | j                  d            }t        j                  j                  j                  }|j                  || j                  d            }|j                  t        |j                         dz               |j                  t        |j!                         dz               | j#                  d|       y )Nparamsrr   g?gffffff?)r   r   ru   r   QFontMetricsfontr   r+   TextFlagTextSingleLinesizert   	setHeightintheightsetWidthwidthsetSizeHint)r#   r   fm	textFlagsr   s        r$   r~   zParameterItem.titleChanged   s     

  ")Q		!-II&&55	wwy$))A,/s4;;=4/01c$**,-./D!r%   c                      y)z/Called when the parameter's limits have changedNr8   )r#   r   limitss      r$   r   zParameterItem.limitsChanged   r:   r%   c                      y)z5Called when the parameter's default value has changedNr8   )r#   r   defaults      r$   r   zParameterItem.defaultChanged   r:   r%   c                     d|v r| j                  |d           d|v r*| j                         |d   k7  r| j                  |d          d|v r| j                          | j	                          y)zXCalled when any options are changed that are not
        name, value, default, or limitsrE   rF   r   N)rG   
isExpandedrH   r~   r!   )r#   r   r*   s      r$   r   zParameterItem.optsChanged   sm     NNtI./ D$44  j!12d?r%   c                       fd}|S )Nc                  <    j                   j                          y r7   )r   r`   )ro   r#   s   r$   triggerz3ParameterItem.contextMenuTriggered.<locals>.trigger   s    JJ""4(r%   r8   )r#   ro   r   s   `` r$   ri   z"ParameterItem.contextMenuTriggered   s    	)r%   c                 D    | j                         j                  | d       y Nrr   )rB   editItemr<   s    r$   re   zParameterItem.editName   s    ""4+r%   c                      y)zLCalled when this item has been selected (sel=True) OR deselected (sel=False)Nr8   )r#   sels     r$   selectedzParameterItem.selected   r:   r%   c                 l    t         j                  j                  d| j                  j                         y r   )r   QTimer
singleShotr   remover<   s    r$   rf   zParameterItem.requestRemove   s"     	  DJJ$5$56r%   c                     t        |       S r7   )idr<   s    r$   __hash__zParameterItem.__hash__   s    $xr%   c                 
    || u S r7   r8   )r#   xs     r$   __eq__zParameterItem.__eq__   s    Dyr%   N)rr   )T)__name__
__module____qualname____doc__r   r!   r   r=   r?   rC   rI   r   r   r    rp   rx   r|   r   r~   r   r   r   ri   re   r   rf   r   r   r8   r%   r$   r   r      s    
,*$;
@*/84&2 
"
,7r%   r   N)r+   r   r   r   QCoreApplicationrc   r
   r   r8   r%   r$   <module>r      s0    ) )##--	WI-- Wr%   