
    e                     l    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 G d dej                        Z
y)	    N)perf_counter   )SignalBlock)QtCore)ThreadsafeTimerSignalProxyc                   f    e Zd ZdZ ej
                  e      ZddddZd Z	d Z
d Zd	 Zd
 Zd Zy)r   aP  Object which collects rapid-fire signals and condenses them
    into a single signal or a rate-limited stream of signals.
    Used, for example, to prevent a SpinBox from generating multiple
    signals when the mouse wheel is rolled over it.

    Emits sigDelayed after input signals have stopped for a certain period of
    time.
    NT)
threadSafec                   t         j                  j                  |        || _        || _        d| _        |rt        nt         j                  } |       | _        | j                  j                  j                  | j                         d| _        || _        | j                  j                  | j                         |=d| _        | j                   j                  |       t#        j$                  |      | _        yd| _        d| _        y)a  Initialization arguments:
        signal - a bound Signal or pyqtSignal instance
        delay - Time (in seconds) to wait for signals to stop before emitting (default 0.3s)
        slot - Optional function to connect sigDelayed to.
        rateLimit - (signals/sec) if greater than 0, this allows signals to stream out at a
                    steady rate while they are being received.
        threadSafe - Specify if thread-safety is required. For backwards compatibility, it
                     defaults to True.
        NFT)r   QObject__init__delay	rateLimitargsr   QTimertimertimeoutconnectflushlastFlushTimesignalsignalReceivedblockSignal
sigDelayedweakrefrefslot)selfr   r   r   r   r
   Timers          7/usr/lib/python3/dist-packages/pyqtgraph/SignalProxy.pyr   zSignalProxy.__init__   s     	%
"	#-6==W


""4::.!D//0$DOO##D)D)DI#DDI    c                     || _         y )N)r   )r   r   s     r    setDelayzSignalProxy.setDelay4   s	    
r!   c                     | j                   ry|| _        | j                  dk(  rO| j                  j	                          | j                  j                  t        | j                  dz        dz          yt               }| j                  d}n+| j                  }t        d|d| j                  z  z   |z
        }| j                  j	                          | j                  j                  t        t        || j                        dz        dz          y)zTReceived signal. Cancel previous timer and store args to be
        forwarded later.Nr   i  r   g      ?)r   r   r   r   stopstartintr   r   r   maxmin)r   r   nowleakTime	lastFlushs        r    r   zSignalProxy.signalReceived7   s     	>>QJJOOJJSd!23a78.C!!) ..	q9dnn0D#E"LMJJOOJJSXtzz!:T!ABQFGr!   c                     | j                   | j                  ry| j                   dc}| _         | j                  j                          t	               | _        | j                  j                  |       y)z,If there is a signal queued up, send it now.NFT)r   r   r   r%   r   r   r   emit)r   r   s     r    r   zSignalProxy.flushK   sU    99 0 0))Tdi

)^T"r!   c                     d| _         	 | j                  j                  | j                         	 | j	                         }|| j
                  j                  |       d | _        y #  Y :xY w#  Y xY w# d | _        w xY w)NT)r   r   
disconnectr   r   r   r   r   s     r    r0   zSignalProxy.disconnectU   ss    	KK""4#6#67	99;D**40 DI	
	DIs"   %A$ -A+ $A(+A/-A2 2	A;c                     | j                   J d       t        j                  |      | _         | j                  j	                  |       d| _        y)z-Connect the `SignalProxy` to an external slotNzSlot was already connected!F)r   r   r   r   r   r   r1   s     r    connectSlotzSignalProxy.connectSlotd   sB    yy ?"?? KK%	% r!   c                 B    t        | j                  | j                        S )z\Return a SignalBlocker that temporarily blocks input signals to
        this proxy.
        )r   r   r   )r   s    r    blockzSignalProxy.blockk   s     4;;(;(;<<r!   )g333333?r   N)__name__
__module____qualname____doc__r   Signalobjectr   r   r#   r   r   r0   r3   r5    r!   r    r   r      sE     v&JPT :H(!=r!   )r   timer   	functionsr   Qtr   r   __all__r   r   r<   r!   r    <module>rA      s-      "  ,/d=&.. d=r!   