
    e/                     p   d dl mZmZmZmZ ddlZddlZddlZddlZddl	Z	ddl
Z
d dlm Z  d dlmZ d dlmZ ddlmZ d	gZd
 Z G d dej$                        Z G d dej(                        Z G d dej,                        Z G d dej0                        Z G d d	ej4                        Z G d de      Zy)   )QT_LIBQtCoreQtGui	QtWidgets    N)Qt)CONFIG_OPTIONS)multiprocess   )GraphicsViewRemoteGraphicsViewc                  v    | D cg c])  }t        |t        j                        r|n
t        |      + c}S c c}w N)
isinstanceenumEnumint)argsxs     F/usr/lib/python3/dist-packages/pyqtgraph/widgets/RemoteGraphicsView.pyserialize_mouse_enumr      s0     @DD!Atyy)As1v5DDDs   .6c                   @     e Zd Zedd       Z fdZd Z fdZ xZS )
MouseEventc                    | j                         }t        |t              rt        j                  j                  |      }t        | d      r| j                         n| j                         }t        | d      r| j                         n| j                         }| j                         | j                         | j                         }}}|rt        ||||      \  }}}}||||||fS NpositionglobalPosition)typer   r   r   QEventTypehasattrr   localPosr   	screenPosbuttonbuttons	modifiersr   )obj	picklabletyplposgposbtnbtnsmodss           r   	get_statezMouseEvent.get_state   s    hhjc3
 --$$S)C!(j!9s||~s||~'.s4D'Es!!#3==?**,s}}4T#7S$#M CdDD$T4//    c                 <    t        |   | j                  |        y r   super__init__r/   selfrhs	__class__s     r   r4   zMouseEvent.__init__.       $..-.r0   c                 (    | j                  | d      S NT)r(   r/   r6   s    r   __getstate__zMouseEvent.__getstate__1       ~~dd~33r0   c                    |\  }}}}}}t         j                  j                  |      }t         j                  j	                  |      }t        |t        j                        st         j                  j                  |      }t        |t        j                        st         j                  j                  |      }t        | -  ||||||       y r   )r   r   r    r   MouseButtonr   r   r   MouseButtonsKeyboardModifiersr3   r4   )	r6   stater)   r*   r+   r,   r-   r.   r8   s	           r   __setstate__zMouseEvent.__setstate__4   s    +0(T4dDmm  %ii##C($		*99))$/D$		*99..t4DdD#tT:r0   F	__name__
__module____qualname__staticmethodr/   r4   r>   rE   __classcell__r8   s   @r   r   r      s)    0 0/4; ;r0   r   c                   @     e Zd Zedd       Z fdZd Z fdZ xZS )
WheelEventc                    t        | d      r| j                         n| j                         }t        | d      r| j                         n| j	                         }| j                         | j                         | j                         }}}| j                         | j                         | j                         }	}}|rt        |||      \  }}}||||||||	fS r   )r!   r   posFr   
globalPosF
pixelDelta
angleDeltar%   r&   phaseinvertedr   )
r'   r(   r*   r+   pixdelangdelr-   r.   rU   rV   s
             r   r/   zWheelEvent.get_state@   s     ")j!9s||~sxxz'.s4D'Es!!#3>>K["~~/1A3;;= #cllnXe 4T4 GD$T664uhFFr0   c                 b    t        | j                  |            }|d   |d<   t        |   |  y )Nr   r   )listr/   r3   r4   )r6   r7   itemsr8   s      r   r4   zWheelEvent.__init__N   s0    T^^C()8a% r0   c                 (    | j                  | d      S r;   r<   r=   s    r   r>   zWheelEvent.__getstate__S   r?   r0   c           
      j   |\  }}}}}}}}	t        |t        j                        st        j                  j                  |      }t        |t        j                        st        j                  j                  |      }t        j                  j                  |      }t        
| %  ||||||||	       y r   )
r   r   r   r   r   rB   rC   ScrollPhaser3   r4   )r6   rD   posr+   rW   rX   r-   r.   rU   rV   r8   s             r   rE   zWheelEvent.__setstate__V   s    AF>T664uh$		*99))$/D$		*99..t4D		%%e,dFFD$xPr0   rF   rG   rM   s   @r   rO   rO   ?   s-    G G!
4Q Qr0   rO   c                   >     e Zd Zed        Z fdZd Z fdZ xZS )
EnterEventc                    t        | d      r| j                         n| j                         }t        | d      r| j                         n| j	                         }t        | d      r| j                         n| j                         }|||fS )Nr   scenePositionr   )r!   r   r"   rc   	windowPosr   r#   )r'   r*   wposr+   s       r   r/   zEnterEvent.get_statea   sj    !(j!9s||~s||~&-c?&Cs  "'.s4D'Es!!#3==?T4r0   c                 <    t        |   | j                  |        y r   r2   r5   s     r   r4   zEnterEvent.__init__h   r9   r0   c                 $    | j                  |       S r   r<   r=   s    r   r>   zEnterEvent.__getstate__k   s    ~~d##r0   c                     t        |   |  y r   )r3   r4   )r6   rD   r8   s     r   rE   zEnterEvent.__setstate__n   s    % r0   rG   rM   s   @r   ra   ra   `   s)       /$! !r0   ra   c                   @     e Zd Zedd       Z fdZd Z fdZ xZS )
LeaveEventc                 F    | j                         }|rt        |      \  }|fS r   )r   r   )r'   r(   r)   s      r   r/   zLeaveEvent.get_states   s#    hhj',DCtr0   c                 <    t        |   | j                  |        y r   r2   r5   s     r   r4   zLeaveEvent.__init__z   r9   r0   c                 (    | j                  | d      S r;   r<   r=   s    r   r>   zLeaveEvent.__getstate__}   r?   r0   c                 j    |\  }t         j                  j                  |      }t        |   |       y r   )r   r   r    r3   r4   )r6   rD   r)   r8   s      r   rE   zLeaveEvent.__setstate__   s+    mm  %r0   rF   rG   rM   s   @r   rj   rj   r   s)     /4 r0   rj   c                        e Zd ZdZddZ fdZd Zd Zd Z fdZ	 fdZ
 fd	Z fd
Z fdZ fdZd Zd Z xZS )r   z
    Replacement for GraphicsView that does all scene management and rendering on a remote process,
    while displaying on the local widget.
    
    GraphicsItems must be created by proxy to the remote process.
    
    c           	         d| _         d| _        d| _        t        j                  j                  |        i }dD ]  }||v s|j                  |      ||<    t        j                  di || _	        | j                  j                  d      | _         | j                  j                  di t         | j                  j                  d      } |j                  |i || _        | j                  j!                  d       | j#                  t$        j&                  j(                  j*                         | j-                  t        j.                  j0                  j2                  t        j.                  j0                  j2                         | j5                  d       d| _        | j                  j9                         }t:        j<                  dk(  rd	 }nd}t?        |d
|      | _         | j                  jB                  jE                  t        jF                  | jH                               dD ]#  }	tK        | |	tM        | j                  |	             % y)z
        The keyword arguments 'useOpenGL' and 'backgound', if specified, are passed to the remote
        GraphicsView.__init__(). All other keyword arguments are passed to multiprocess.QtProcess.__init__().
        N)i  i  )	useOpenGL
background	pyqtgraphz$pyqtgraph.widgets.RemoteGraphicsViewT)deferGetattrwin32c                 P    t        j                  | |t         j                  z        S r   )osopenO_TEMPORARY)pathflagss     r   <lambda>z-RemoteGraphicsView.__init__.<locals>.<lambda>   s    ur~~7M)N r0   rb)opener)scenesetCentralItem )'_img_imgReq	_sizeHintr   QWidgetr4   popmp	QtProcess_proc_importpgsetConfigOptionsr	   Renderer_view_setProxyOptionssetFocusPolicyr   r   FocusPolicyStrongFocussetSizePolicyQSizePolicyPolicy	ExpandingsetMouseTrackingshmshmFileNamesysplatformrx   shmFilesceneRenderedconnectproxyremoteSceneChangedsetattrgetattr)
r6   parentr   kwds
remoteKwdskwd	rpgRemoter   r~   methods
             r   r4   zRemoteGraphicsView.__init__   s   
 	"""4( 
. 	0Cd{"&((3-
3	0 \\)D)
**$$[1   2>2JJ&&'MN	'Y''<<


###6FII11==>90077AA9CXCXC_C_CiCijd#jj,,.<<7"NFFKf=

  (($2I2I)JK 2 	?FD&'$**f"=>	?r0   c                 |    t         |   |      }| j                  j                  | j	                         d       |S Noff)	_callSync)r3   resizeEventr   resizesize)r6   evretr8   s      r   r   zRemoteGraphicsView.resizeEvent   s4    g!"%

$))+7
r0   c                 :    t        j                  | j                   S r   )r   QSizer   r=   s    r   sizeHintzRemoteGraphicsView.sizeHint   s    ||T^^,,r0   c                    |\  }}}| j                   | j                   j                  |k7  ri| j                   | j                   j                          t        j                  | j                  j                         |t        j                        | _         t        j                  | j                   ||t        j                  j                  j                        j                         | _        | j                          y )Naccess)r   r   closemmapr   filenoACCESS_READr   QImageFormatFormat_RGB32copyr   update)r6   datawhr   s        r   r   z%RemoteGraphicsView.remoteSceneChanged   s    
1d88txx}}4xx# yy!4!4!6TEUEUVDHLL1a1D1D1Q1QRWWY	r0   c                     | j                   y t        j                  |       }|j                  | j	                         | j                   | j                   j	                                |j                          y r   )r   r   QPainter	drawImagerectend)r6   r   ps      r   
paintEventzRemoteGraphicsView.paintEvent   sK    99NN4 	DIIKDIINN,<=	r0   c                     | j                   j                  t        |      d       |j                          t        |   |      S r   )r   mousePressEventr   acceptr3   r6   r   r8   s     r   r   z"RemoteGraphicsView.mousePressEvent   s7    

"":b>U"C
		w&r**r0   c                     | j                   j                  t        |      d       |j                          t        |   |      S r   )r   mouseReleaseEventr   r   r3   r   s     r   r   z$RemoteGraphicsView.mouseReleaseEvent   s7    

$$Z^u$E
		w(,,r0   c                     | j                   j                  t        |      d       |j                          t        |   |      S r   )r   mouseMoveEventr   r   r3   r   s     r   r   z!RemoteGraphicsView.mouseMoveEvent   s7    

!!*R.E!B
		w%b))r0   c                     | j                   j                  t        |      d       |j                          t        |   |      S r   )r   
wheelEventrO   r   r3   r   s     r   r   zRemoteGraphicsView.wheelEvent   s7    

jn>
		w!"%%r0   c                 n    | j                   j                  t        |      d       t        |   |      S r   )r   
enterEventra   r3   r   s     r   r   zRemoteGraphicsView.enterEvent   .    

jn>w!"%%r0   c                 n    | j                   j                  t        |      d       t        |   |      S r   )r   
leaveEventrj   r3   r   s     r   r   zRemoteGraphicsView.leaveEvent   r   r0   c                     | j                   S )zSReturn the remote process handle. (see multiprocess.remoteproxy.RemoteEventHandler))r   r=   s    r   remoteProcessz RemoteGraphicsView.remoteProcess   s    zzr0   c                     | j                   j                  j                          | j                  j	                          y)zPClose the remote process. After this call, the widget will no longer be updated.N)r   r   
disconnectr   r   r=   s    r   r   zRemoteGraphicsView.close   s(    

  ++-

r0   r   )rH   rI   rJ   __doc__r4   r   r   r   r   r   r   r   r   r   r   r   r   rL   rM   s   @r   r   r      sJ    *?X
-+
-
*
&
&&r0   c                   d     e Zd Z ej                  e      Zd Zd Zd Z	 fdZ
 fdZd Z xZS )r   c                    t        j                  d      | _        t        j                  }| j                  j                  d|z         | j                  j                          t        j                  | j                  j                         |t        j                        | _	        t        j                  | j                         t        j                  | g|i | | j                         j                   j#                  | j$                         d | _        t)        j*                         | _        | j,                  j.                  j#                  | j0                         | j,                  j3                  d       y )Npyqtgraph_shmem_)prefix    r      )tempfileNamedTemporaryFiler   r   PAGESIZEwriteflushr   ACCESS_WRITEr   atexitregisterr   r   r4   r   changedr   r   imgr   QTimerrenderTimertimeout
renderViewstart)r6   r   r   r   s       r   r4   zRenderer.__init__   s    22:LM}}7T>*99T\\002DARARS

#d2T2T2

$$T[[1!==?  ((9r"r0   c                 l    | j                   j                          | j                  j                          y r   )r   r   r   r=   s    r   r   zRenderer.close  s     r0   c                 .    | j                   j                  S r   )r   namer=   s    r   r   zRenderer.shmFileName  s    ||   r0   c                 .    d | _         t        | 	         S r   )r   r3   r   )r6   r8   s    r   r   zRenderer.update  s    w~r0   c                     | j                         }t        | 	  |       | j                  t	        j
                  ||             | j                          y r   )r   r3   r   r   r   QResizeEventr   )r6   r   oldSizer8   s      r   r   zRenderer.resize  s>    ))+t++D':;r0   c                 D   | j                   | j                         dk(  s| j                         dk(  ry | j                         }t	        | j                         |z        }t	        | j                         |z        }||z  dz  }|| j
                  j                         kD  r	 | j
                  j                  |       t!        j"                  d      r3t	        t$        j&                  j)                  | j
                              }n| j
                  }t+        j,                  |||t*        j,                  j.                  j0                        | _         | j                   j3                  |       | j                   j5                  d       t+        j6                  | j                         }| j9                  || j;                         | j=                                |j?                          | j@                  jC                  ||| j
                  j                         f       y y # t        $ ry | j
                  j                          | j                  j                         }t        j                  ||       t        j                  ||t        j                        | _        Y w xY w)Nr      r   PyQtl    )"r   widthheightdevicePixelRatioFr   r   r   r   SystemErrorr   r   r   rw   	ftruncater   r   r   
startswithr   sipvoidptrr   r   r   r   setDevicePixelRatiofillr   renderviewRectr   r   r   emit)r6   dpriwidthiheightr   fdimg_ptrr   s           r   r   zRenderer.renderView  s   88zz|q DKKMQ$6((*C+,F$++-#-.GG#a'Ddhhmmo%MHHOOD)   (bffnnTXX67 ((||GVWell>Q>Q>^>^_DHHH((-HHMM*%txx(AKK4==?DIIK8EEG##VWdhhmmo$FGI  # M HHNN$,,.BLLT*#yyT$:K:KLDHMs   #H A>JJ)rH   rI   rJ   r   Signalobjectr   r4   r   r   r   r   r   rL   rM   s   @r   r   r      s4     "FMM&)M# ! %Hr0   r   )r   r   r   r   r   r   r   r   rw   r   r    r	   r
   r   r   __all__r   QMouseEventr   QWheelEventrO   QEnterEventra   r   rj   r   r   r   r   r0   r   <module>r     s    1 1    	 
    ! &
 E;"" ;DQ"" QB!"" !$ (o** odKH| KHr0   