
    eF                         d dgZ ddl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mZmZ d	d
lmZ ej                   j"                  Z G d de	      Z G d d ej&                        Z G d de      Zy)
CanvasItemGroupCanvasItem    N   )	ItemGroupSRTTransformdebug)	functions)ROI)QT_LIBQtCore	QtWidgets   )TransformGuiTemplate_genericc                       e Zd ZddZy)	SelectBoxc                     t        j                  | ddgddgd       ddg}|r,| j                  ddg|d       | j                  ddg|d       |r)| j                  ddg|       | j                  ddg|       y y )Nr   r   T)
invertibleg      ?)
lockAspect)r
   __init__addScaleHandleaddRotateHandle)selfscalable	rotatablecenters       =/usr/lib/python3/dist-packages/pyqtgraph/canvas/CanvasItem.pyr   zSelectBox.__init__   s    TAa51Q%D9sA4@A4@  !Q0  !Q0     N)FT)__name__
__module____qualname__r    r   r   r   r      s    
1r   r   c                      e Zd Z ej                  e      Z ej                  e      Z ej                  e      Z	  ej                  e      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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.d& Z/d' Z0d( Z1d) Z2d* Z3d+ Z4d, Z5d- Z6d. Z7d/ Z8d0 Z9d1 Z:d2 Z;d3 Z<y)4r   Nc                    d d ddddd d}|j                  |       || _        d| _        t        j                  j                  |        d | _        || _        | j                  d   }|1| j                  j                  |j                                || _
        nd | _
        | j                  d   }||j                  |       t        j                         | _        t        j                         | _        | j                   j#                  d       | j                   j%                  dddd       | j                  j'                  | j                          t        j(                  t+        dd            | _        t        j.                         | _        | j0                  j3                  d	       | j0                  j5                  t        j6                  j8                  j:                         | j0                  j=                  d	       | j                   j?                  | j,                  dd       | j                   j?                  | j0                  dd
       t        j@                  d      | _!        t        j@                  d      | _"        t        j@                  d      | _#        t        j                         | _$        tK        jL                         | _'        | jN                  jQ                  | jH                         | j                   j?                  | jH                  ddd
d       | jN                  jR                  jT                  jW                  | jX                         | jN                  jZ                  jT                  jW                  | j\                         | j                   j?                  | jB                  d
dd
d       | j                   j?                  | jD                  ddd
d
       | j                   j?                  | jF                  dd
d
d
       | j0                  j^                  jW                  | j`                         | j0                  jb                  jW                  | jd                         | j0                  jf                  jW                  | jh                         | jB                  jT                  jW                  | jj                         | jD                  jT                  jW                  | jl                         | jF                  jT                  jW                  | jn                         | jq                  | j                  d          d| j                  v r| j                  d   | _9        ntu               | _9        d| j                  v r7| j                  d   (| jr                  j+                  | j                  d          d| j                  v r7| j                  d   (| jr                  jw                  | j                  d          d| j                  v r7| j                  d   (| jr                  jy                  | j                  d          | jr                  j{                         }d|vr|d   dk(  rd| j                  d<   t}        | j                  d   | j                  d         | _?        | j~                  j                          | j~                  j                  d       | j~                  j                  jW                  | j                         | j~                  j                  jW                  | j                         t        j                         | _F        t        j                         | _H        | j                  j                  | j                  | j                  g       tu               | _J        tu               | _K        | j                          y )NTF)namezmovabler   r   visibleparentr(   r%   r   r   Alpha  r   zReset TransformCopyPaste   r   r&   	transformposanglescaler   )r   r   r   )r   r   g    .A)MupdateoptsselectedAloner   QObjectr   canvas_graphicsItemsetParentItemgraphicsItem_parentItem	setZValuer   QWidgetctrlQGridLayoutlayout
setSpacingsetContentsMargins	setLayoutQLabel	translate
alphaLabelQSlideralphaSlider
setMaximumsetOrientationQtOrientation
HorizontalsetValue	addWidgetQPushButtonresetTransformBtncopyBtnpasteBtntransformWidgetui_templateUi_FormtransformGuisetupUimirrorImageBtnclickedconnectmirrorYreflectImageBtnmirrorXYvalueChangedalphaChangedsliderPressedalphaPressedsliderReleasedalphaReleasedresetTransformClickedcopyClickedpasteClicked
setMovablebaseTransformr   rotater1   	saveStater   	selectBoxhidesigRegionChangedselectBoxChangedsigRegionChangeFinishedselectBoxChangeFinishedQGraphicsRotationitemRotationQGraphicsScale	itemScalesetTransformationstempTransformuserTransformresetUserTransform)r   itemr3   defOptsr(   r%   trs          r   r   zCanvasItem.__init__&   s   dt]anr  ~B  Ct	"%!8$,,V-@-@-BC%D#DIIcN=NN1%%'	++-q!&&q1Q/		DKK(#**9\7+KL$,,.##D)''		(=(=(H(HI!!$'dooq!4d..15!*!6!67H!I ,,V4!--g6(002'//1!!$"6"67d22Aq!Q?((0088F))1199$--Hd44aAqAdllAq!Q7dmmQ1a8%%--d.?.?@&&..t/@/@A''//0B0BC&&..t/I/IJ$$T%5%56%%d&7&78		),-$))#!%;!7D!-D		!dii&6&B"",,TYYu-=>$))#		'(:(F""))$))G*<=$))#		'(:(F""((7);< ))+T!bkU&:$(DIIj! #DIIj,ATYYWbMcd  %''//0E0EF..66t7S7ST &779"113--t/@/@$...QR)^)^!r   c                 `   || j                   d<   |rO| j                  j                          | j                  j                          | j                  j                          y | j                  j                          | j                  j                          | j                  j                          y Nr&   )r3   rP   showrQ   rR   rl   )r   ms     r   rg   zCanvasItem.setMovable   sw     		)""'')LLMM ""'')LLMM r   c                 D   || j                   u ry |R| j                   j                  | j                         | j                   j                  | j                         || _         y |j	                  | j                         |j	                  | j                         || _         y N)r6   removeFromScener7   rk   
addToScene)r   r6   s     r   	setCanvaszCanvasItem.setCanvas   s~    
 T[[ >KK''(:(:;KK''7  d001dnn-r   c                     | j                   S )z,Return the graphicsItem for this canvasItem.)r7   r   s    r   r9   zCanvasItem.graphicsItem   s    !!!r   c                     | j                   S r   )r:   r   s    r   
parentItemzCanvasItem.parentItem   s    r   c                     || _         | t        |t              r|j                         }| j                         j	                  |       y r   )r:   
isinstancer   r9   r8   )r   r(   s     r   r8   zCanvasItem.setParentItem   s?    !&*-,,.))&1r   c                 6    | j                         t        _        y r   )saveTransformr   transformCopyBufferr   s    r   re   zCanvasItem.copyClicked   s    )-););)=
&r   c                 L    t         j                  }|y | j                  |       y r   )r   r   restoreTransform)r   ts     r   rf   zCanvasItem.pasteClicked   s#    **9!!!$r   c                     | j                         sy t               }|j                  dd       | j                  |z  | _        | j	                          | j                          | j                  j                  |        y )Nr   )	isMovabler   r1   rw   updateTransformselectBoxFromUsersigTransformChangeFinishedemit)r   invs     r   r[   zCanvasItem.mirrorY   se    ~~
 n		"a!//#5 '',,T2r   c                 H    | j                         sy | j                  d       y )Ng     f@)r   ri   r   s    r   r]   zCanvasItem.mirrorXY   s    ~~Dr   c                 8    | j                   j                          S r   )rw   
isIdentityr   s    r   hasUserTransformzCanvasItem.hasUserTransform   s    %%00222r   c                     | j                   S r   )r=   r   s    r   
ctrlWidgetzCanvasItem.ctrlWidget   s    yyr   c                 D    |dz  }| j                   j                  |       y Ng     @)r7   
setOpacity)r   valalphas      r   r_   zCanvasItem.alphaChanged   s    e%%e,r   c           	      |    | j                   j                  t        t        j                  |dz  dd                   y )Nr*   r   )rG   rM   intfnclip_scalar)r   r   s     r   setAlphazCanvasItem.setAlpha   s,    !!#bnnUT\1d&K"LMr   c                 <    | j                   j                         dz  S r   )rG   valuer   s    r   r   zCanvasItem.alpha   s    %%'%//r   c                      | j                   d   S r}   r3   r   s    r   r   zCanvasItem.isMovable       yy##r   c                 z    | j                   j                  | j                        | _        | j	                          y)z]The selection box has moved; get its transformation information and pass to the graphics item)
relativeToN)rk   getGlobalTransformselectBoxBaserw   r   r   s    r   selectBoxMovedzCanvasItem.selectBoxMoved   s.    !^^>>$J\J\>]r   c                 |    | j                   j                  ||       | j                          | j                          y r   )rw   r1   r   r   r   xys      r   r1   zCanvasItem.scale   s0      A& r   c                 z    | j                   j                  |       | j                          | j                          y r   )rw   ri   r   r   )r   angs     r   ri   zCanvasItem.rotate  s.    !!#& r   c                 |    | j                   j                  ||       | j                          | j                          y r   )rw   rD   r   r   r   s      r   rD   zCanvasItem.translate	  s0    $$Q* r   c                 |    | j                   j                  ||       | j                          | j                          y r   )rw   setTranslater   r   r   s      r   r   zCanvasItem.setTranslate  s0    ''1- r   c                 z    | j                   j                  |       | j                          | j                          y r   )rw   	setRotater   r   )r   r0   s     r   r   zCanvasItem.setRotate  s.    $$U+ r   c                 |    | j                   j                  ||       | j                          | j                          y r   )rw   setScaler   r   r   s      r   r   zCanvasItem.setScale  s0    ##Aq) r   c                 2    || _         | j                          y r   )rv   r   )r   r.   s     r   setTemporaryTransformz CanvasItem.setTemporaryTransform  s    &r   c                     | j                   | j                  z  | _         | j                          | j                          y)z@Collapses tempTransform into UserTransform, resets tempTransformN)rw   rv   resetTemporaryTransformr   r   s    r   applyTemporaryTransformz"CanvasItem.applyTemporaryTransform!  s3    !//$2D2DD$$& r   c                 B    t               | _        | j                          y r   )r   rv   r   r   s    r   r   z"CanvasItem.resetTemporaryTransform'  s    )^r   c                 6    | j                   j                         S r   )r7   r.   r   s    r   r.   zCanvasItem.transform+  s    !!++--r   c                    | j                   | j                  z  | j                  z  }|j                         } | j                  j
                  |d     | j                  j                  |d          | j                  j                  |d   d          | j                  j                  |d   d          | j                  |       |S )zERegenerate the item position from the base, user, and temp transformsr/   r0   r1   r   r   )rh   rw   rv   rj   r7   setPosrr   setAnglert   	setXScale	setYScaledisplayTransform)r   r.   ss      r   r   zCanvasItem.updateTransform.  s    &&););;d>P>PP	!!!!1U8,""1W:.  7A/  7A/i(	r   c                 R   |j                         }| j                  j                  j                  d|d   d   |d   d   fz         | j                  j                  j                  d|d   z         | j                  j
                  j                  d|d   d   |d   d   fz         y	)
z-Updates transform numbers in the ctrl widget.zTranslate: (%f, %f)r/   r   r   zRotate: %f degreesr0   zScale: (%f, %f)r1   N)rj   rV   translateLabelsetTextrotateLabel
scaleLabel)r   r.   r{   s      r   r   zCanvasItem.displayTransform;  s      "((001FESTWYZ_W`abWcHd1de%%--.BBwK.OP$$,,->GQQST[Q\]^Q_@`-`ar   c                 P   | j                   j                          | j                          | j                  j	                  d       | j                          | j                  j	                  d       | j                  j                  |        | j                  j                  |        y )NTF)	rw   resetr   rk   blockSignalsselectBoxToItemsigTransformChangedr   r   r   s    r   rx   zCanvasItem.resetUserTransformC  sx      "##D)##E*  %%d+'',,T2r   c                 Z    | j                          | j                  j                  |        y r   )rx   sigResetUserTransformr   r   s    r   rd   z CanvasItem.resetTransformClickedM  s"    !""''-r   c                 (   	 t        |      | _        | j                          | j                          | j                  j                  |        | j                  j                  |        y #  t               | _        t        j                  d       Y y xY w)NzFailed to load transform:)	r   rw   r   r   r   r   r   r   printExc)r   r{   s     r   r   zCanvasItem.restoreTransformQ  sr    		8!-b!1D  """$$$))$/++006	8!-DNN67s   A&A) )&Bc                 6    | j                   j                         S )z3Return a dict containing the current user transform)rw   rj   r   s    r   r   zCanvasItem.saveTransform]  s    !!++--r   c                    | j                   j                  d       | j                   j                  | j                         | j                   j	                  | j
                         | j                   j                  d       y)z9Move the selection box to match the current userTransformTFN)rk   r   setStater   applyGlobalTransformrw   r   s    r   r   zCanvasItem.selectBoxFromUsera  sZ     	##D) 2 23++D,>,>? 	##E*r   c                 L   | j                   j                         | _        | j                   j                  | j                        }| j                  j                  d       | j                  j                  |j                         |j                         g       | j                  j                  |j                                | j                  j                  d       | j                  j                         j                         | _        | j                  j                  d       y)z_Move/scale the selection box so it fits the item's bounding rect. (assumes item is not rotated)Tr   FN)r7   boundingRectitemRectmapRectToParentrk   r   r   r   r   setSizesizer   getStatecopyr   )r   rects     r   r   zCanvasItem.selectBoxToItemq  s    **779!!11$--@##D)tvvx23tyy{+"!^^446;;=##E*r   c                      | j                   d   S Nr%   r   r   s    r   zValuezCanvasItem.zValue|  s    yy~r   c                 ^    || j                   d<   || j                  j                  |       y y r   )r3   r7   r;   )r   r%   s     r   r;   zCanvasItem.setZValue  s-    		#=((+ r   c                     |xr | | _         | j                          | j                   r| j                         j                          y| j                         j	                          y)a  
        Inform the item that its selection state has changed. 
        ============== =========================================================
        **Arguments:**
        sel            (bool) whether the item is currently selected
        multi          (bool) whether there are multiple items currently 
                       selected
        ============== =========================================================
        N)r4   showSelectBoxr   r~   rl   )r   selmultis      r   selectionChangedzCanvasItem.selectionChanged  sN     !.YOO""$OO""$r   c                     | j                   r;| j                         r+| j                         r| j                  j	                          y| j                  j                          y)zHDisplay the selection box around this item if it is selected and movableN)r4   r   	isVisiblerk   r~   rl   r   s    r   r   zCanvasItem.showSelectBox  s=    $.."2t~~7GNN!NN!r   c                 8    | j                   j                          y r   )rk   rl   r   s    r   hideSelectBoxzCanvasItem.hideSelectBox  s    r   c                 Z    | j                          | j                  j                  |        y r   )r   r   r   r   s    r   rn   zCanvasItem.selectBoxChanged  s"      %%d+r   c                 :    | j                   j                  |        y r   )r   r   r   s    r   rp   z"CanvasItem.selectBoxChangeFinished  s    '',,T2r   c                 $    | j                          y)z)Hide selection box while slider is movingN)r   r   s    r   ra   zCanvasItem.alphaPressed  s    r   c                 $    | j                          y r   )r   r   s    r   rc   zCanvasItem.alphaReleased  s    r   c                     | j                   d   ry d| j                   d<   | j                  j                          | j                          | j                  j                  |        y )Nr'   T)r3   r7   r~   r   sigVisibilityChangedr   r   s    r   r~   zCanvasItem.show  sQ    99Y#		)!!!&&t,r   c                     | j                   d   sy d| j                   d<   | j                  j                          | j                          | j                  j                  |        y )Nr'   F)r3   r7   rl   r   r   r   r   s    r   rl   zCanvasItem.hide  sQ    yy#$		)!!!&&t,r   c                 J    |r| j                          y | j                          y r   )r~   rl   )r   viss     r   
setVisiblezCanvasItem.setVisible  s    IIKIIKr   c                      | j                   d   S )Nr'   r   r   s    r   r   zCanvasItem.isVisible  r   r   c           
         | j                   j                  | j                  | j                         | j	                         | j                         | j                         | j                  d   | j                  d   | j                  d   d	S )Nr   r   r&   )	typer$   r'   r   rw   r%   r   r   r&   )	__class__r   r$   r   r   r   r   r3   r   s    r   rj   zCanvasItem.saveState  sl    NN++II~~'ZZ\!//1		*-;/yy+

 
	
r   c                     | j                  |d          | j                  |d          | j                  |d          | j                  |d          y )Nr'   r   rw   r%   )r   r   r   r;   )r   states     r   restoreStatezCanvasItem.restoreState  sF    i()eGn%eO45uSz"r   )=r   r   r    r   Signalobjectr   r   r   r   r   r   rg   r   r9   r   r8   re   rf   r[   r]   r   r   r_   r   r   r   r   r1   ri   rD   r   r   r   r   r   r   r.   r   r   rx   rd   r   r   r   r   r   r;   r   r   r   rn   rp   ra   rc   r~   rl   r   r   rj   r  r!   r   r   r   r      sR   )FMM&1!.v!6'&--/! )6==0Y"x
! " 2>%3D3-N0$






!.b3.
8.+ 	+,
%"",3--$
#r   c                       e Zd ZdZd Zy)r   z.
    Canvas item used for grouping others
    c                 r    ddd}|j                  |       t               }t        j                  | |fi | y )NF)r&   r   )r2   r   r   r   )r   r3   rz   ry   s       r   r   zGroupCanvasItem.__init__  s4    #7t{D$2'2r   N)r   r   r    __doc__r   r!   r   r   r   r     s    3r   )__all__	importlib r   r   r   r	   r   graphicsItems.ROIr
   rJ   r   r   r   r   rT   QCoreApplicationrD   r   r5   r   r   r!   r   r   <module>r     sd   *
+  - -  # * * 9##--	1 1}# }#@	3j 	3r   