
    e                     R    d dl mZ ddlmZmZmZ ddlmZ d dlmZ  G d de      Z	y)	   )GroupParameterItem   )QtCore	QtWidgetsmkQApp)
TreeWidget)ParameterItemc                   z     e Zd ZdZddZddZddZd ZddZd Z	ddZ
d	 Zd
 Zd Zd Zd Z fdZd Z xZS )ParameterTreezEWidget used to display or control data from a hierarchy of Parametersc                 p   t        j                  | |       | j                  | j                  j                         | j                  | j                  j                         | j                  d       | j                  d       | j                  ddg       | j                  d       d| _
        | j                         j                  t        j                  j                  j                          | j#                  |        | j$                  j'                  | j(                         | j*                  j'                  | j,                         | j.                  j'                  | j0                         d| _        | j5                  d       t7               }|j8                  j'                  | j:                         y)aJ  
        ============== ========================================================
        **Arguments:**
        parent         (QWidget) An optional parent widget
        showHeader     (bool) If True, then the QTreeView header is displayed.
        ============== ========================================================
        Fr   	ParameterValueTN)r   __init__setVerticalScrollMode
ScrollModeScrollPerPixelsetHorizontalScrollModesetAnimatedsetColumnCountsetHeaderLabelssetAlternatingRowColorsparamSetheadersetSectionResizeModer   QHeaderView
ResizeModeResizeToContentssetHeaderHiddenitemChangedconnectitemChangedEventitemExpandeditemExpandedEventitemCollapseditemCollapsedEventlastSelsetRootIsDecoratedr   paletteChangedupdatePalette)selfparent
showHeaderapps       G/usr/lib/python3/dist-packages/pyqtgraph/parametertree/ParameterTree.pyr   zParameterTree.__init__
   sB    	D&)""4??#A#AB$$T__%C%CDAk734$$T***9+@+@+K+K+\+\]^,  !6!67!!$"8"89""4#:#:;&h""4#5#56    c                 J    | j                          | j                  ||       y)a  
        Set the top-level :class:`Parameter <pyqtgraph.parametertree.Parameter>`
        to be displayed in this ParameterTree.

        If *showTop* is False, then the top-level parameter is hidden and only 
        its children will be visible. This is a convenience method equivalent 
        to::
        
            tree.clear()
            tree.addParameters(param, showTop)
        )showTopN)clearaddParameters)r*   paramr1   s      r.   setParameterszParameterTree.setParameters%   s      	

5'2r/   c                    |j                  |      }|u| j                         }|sc|j                  dd       |j                  dt	        j
                  dd             |j                  dt	        j
                  dd             |dz  }|j                  |       |j                          |D ]  }| j                  |||dz           y)a  
        Adds one top-level :class:`Parameter <pyqtgraph.parametertree.Parameter>`
        to the view. 
        
        ============== ==========================================================
        **Arguments:** 
        param          The :class:`Parameter <pyqtgraph.parametertree.Parameter>` 
                       to add.
        root           The item within the tree to which *param* should be added.
                       By default, *param* is added as a top-level item.
        showTop        If False, then *param* will be hidden, and only its 
                       children will be visible in the tree.
        ============== ==========================================================
        )depthN     r   )rootr7   )	makeTreeIteminvisibleRootItemsetTextsetSizeHintr   QSizeaddChildtreeWidgetChangedr3   )r*   r4   r:   r7   r1   itemchs          r.   r3   zParameterTree.addParameters4   s     !!!.<))+DQ#  FLL1$56  FLL1$56
d  	=BrE!G<	=r/   c                 @    | j                         j                          y)z>
        Remove all parameters from the tree.        
        N)r<   takeChildren)r*   s    r.   r2   zParameterTree.clearR   s     	 --/r/   c                     	 |j                         }|y| j                  |||      }|"|j                          | j                  |       y|}N)zEGive input focus to the next (or previous) item after *item*
        Nforward)r+   nextFocusableChildsetFocussetCurrentItem)r*   rB   rH   r+   nextItems        r.   	focusNextzParameterTree.focusNextX   s^     [[]F~..vtW.MH#!!###H-D r/   c                 *    | j                  |d       y )NFrG   )rM   r*   rB   s     r.   focusPreviouszParameterTree.focusPreviousf   s    tU+r/   c                    ||rd}n?|j                         dz
  }n+|r|j                  |      dz   }n|j                  |      dz
  }|r$t        t        ||j                                     }nt        t        |dd            }|D ]L  }|j	                  |      }t        |d      r|j                         r|c S | j                  ||      }|J|c S  y )Nr8   r   isFocusablerG   )
childCountindexOfChildlistrangechildhasattrrS   rI   )r*   r:   	startItemrH   indexindsirB   s           r.   rI   z ParameterTree.nextFocusableChildi   s    )!+)))4q8)))4q8eT__%678DeR,-D 	 A::a=Dt]+0@0@0B..tW.E#K	  r/   c                 `    | j                         }t        |d      r|j                  |       y y )NcontextMenuEvent)currentItemrY   r_   )r*   evrB   s      r.   r_   zParameterTree.contextMenuEvent   s.    !4+,!!"% -r/   c                     | j                         D ].  }t        |t              s|j                  |j                         0 y)z
        called when application palette changes
        This should ensure that the color theme of the OS is applied to the GroupParameterItems
        should the theme chang while the application is running.
        N)listAllItems
isinstancer   updateDepthr7   rO   s     r.   r)   zParameterTree.updatePalette   s9     %%' 	-D$ 23  ,	-r/   c                 @    t        |d      r|j                  |       y y )NcolumnChangedEvent)rY   rg   )r*   rB   cols      r.   r!   zParameterTree.itemChangedEvent   s     4-.##C( /r/   c                 @    t        |d      r|j                  d       y y )NexpandedChangedEventTrY   rj   rO   s     r.   r#   zParameterTree.itemExpandedEvent   s     4/0%%d+ 1r/   c                 @    t        |d      r|j                  d       y y )Nrj   Frk   rO   s     r.   r%   z ParameterTree.itemCollapsedEvent   s     4/0%%e, 1r/   c                 L   | j                         }t        |      dk7  rd }| j                  5t        | j                  t              r| j                  j                  d       |d | _        y |d   | _        t        |d   d      r|d   j                  d       t        |    | S )Nr   Fr8   selectedT)	selectedItemslenr&   rd   r	   rn   rY   superselectionChanged)r*   argssel	__class__s      r.   rr   zParameterTree.selectionChanged   s      "s8q=C<<#
4<<(OLL!!%(;DL1v3q6:&FOOD!w'..r/   c           
         d\  }}| j                         }| j                         D ]  }|j                         r	 |j                  }|j                  d      }|j                  d      }t        |||z  t        d|j                               z   t        d|j                               z         }|t        d|j                         |j                               z  } | j                         j                         s!|| j                         j                         z  }t        j                  ||      S # t        $ r d}Y w xY w)N)r8   r8   r8   r   )indentationrc   isHiddenr7   AttributeErrorsizeHintmaxwidthheightr   r   r?   )r*   whindxr7   s0s1s           r.   rz   zParameterTree.sizeHint   s   1 ""$ 	2Azz| ABABAus{SBHHJ%77#a:LLMAQ		RYY[11A	2* {{}%%'%%''A||Aq!!' " s   D11D?>D?)NT)T)Nr8   T)__name__
__module____qualname____doc__r   r5   r3   r2   rM   rP   rI   r_   r)   r!   r#   r%   rr   rz   __classcell__)ru   s   @r.   r   r      sL    O763=<0,6&
-),-/&"r/   r   N)
parameterTypesr   Qtr   r   r   widgets.TreeWidgetr   r	   r    r/   r.   <module>r      s"    . * * + (F"J F"r/   