;ijddlZddlmZddlmZddlmZddlmZdgZGddej Z dS) N) perf_counter) SignalBlock)QtCore)ThreadsafeTimer SignalProxycdeZdZdZejeZddddZdZ d Z d Z d Z d Z d ZdS)raPObject 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. 333333?rNT) threadSafectj|||_||_d|_|rt n tj}||_|jj |j d|_ ||_ |j |j|Q   JOO    J  Sd!233a7 8 8 8 8 8..C!) . q9dn0D#E"LMM JOO    J  SXtz!:!:T!ABBQF G G G G Gr"c|j|jrdS|jdc}|_|jt |_|j|dS)z,If there is a signal queued up, send it now.NFT)rrrr&rrremit)rrs r!rzSignalProxy.flushKs_ 9  0 5)Tdi )^^ T"""tr"cd|_ |j|jn#YnxYw |}||j|n#YnxYwd|_dS#d|_wxYw)NT)rr disconnectrrrrrs r!r1zSignalProxy.disconnectUs  K " "4#6 7 7 7 7  D 99;;D**4000  DDIIIDI    s%)-0A"!A2"A&$A22 A;c|j Jdtj||_|j|d|_dS)z-Connect the `SignalProxy` to an external slotNzSlot was already connected!F)rrrrrrr2s r! connectSlotzSignalProxy.connectSlotdsNy  "?   K%%  %%% r"c6t|j|jS)z\Return a SignalBlocker that temporarily blocks input signals to this proxy. )rrr)rs r!blockzSignalProxy.blockks4;(;<<rBs"""""",,,,,, /d=d=d=d=d=&.d=d=d=d=d=r"