
    fb                         d dl Z d dlZd dlZd dlZd dlmZ  e        d dlmZ d dlm	Z	  ej                  d      Z G d de      Z G d d	e      Z G d
 de      Z G d de      Z G d de      Z G d de      Zy)    N)require_gi_versions)GLib)Fadezutils_timers.pyc                   J    e Zd ZdZdZdZdZd
dZddZd Z	d Z
d Zd Zd	 Zy)Timerz
    Simple wrapper around GLib's timer API
    Overload on_timer in derived classes.
    For one-shot timers return False there.
    Nc                 H    || _         || _        || j                  |       y y N)	_callback_callback_argsstartselfdelaycallbackcallback_argss       //usr/lib/python3/dist-packages/Onboard/Timer.py__init__zTimer.__init__,   s(    !+JJu     c                    |r|| _         || _        | j                          t        |      t        k(  r&t        j                  || j                        | _        yt	        |dz        }t        j                  || j                        | _        y)z
        Delay in seconds.
        Uses second granularity if delay is of type int.
        Uses medium resolution timer if delay is of type float.
        g     @@N)
r
   r   stoptypeintr   timeout_add_seconds	_cb_timer_timertimeout_add)r   r   r   r   mss        r   r   zTimer.start3   si     %DN"/D		;#225$..IDKUV^$B**2t~~>DKr   c                 f    | j                         r!| j                          | j                          yy)z-
        Run one last time and stop.
        N)
is_runningr   on_timerr   s    r   finishzTimer.finishE   s%     ??IIKMMO r   c                 r    | j                         r't        j                  | j                         d | _        y y r	   )r   r   source_remover   r!   s    r   r   z
Timer.stopM   s*    ??t{{+DK r   c                     | j                   d uS r	   )r   r!   s    r   r   zTimer.is_runningR   s    {{$&&r   c                 F    | j                         s| j                          yyNFT)r    r   r!   s    r   r   zTimer._cb_timerU   s    }}IIKr   c                 N    | j                   r | j                   | j                   S y)zJ
        Overload this.
        For one-shot timers return False.
        Tr
   r   r!   s    r   r    zTimer.on_timer[   s%    
 >>!4>>4#6#677r   )NNr	   )__name__
__module____qualname____doc__r   r
   r   r   r   r"   r   r   r   r     r   r   r   r   "   s;    
 FIN?$
'r   r   c                       e Zd Zd Zy)	TimerOncec                 N    | j                   r | j                   | j                   S y)z 
        Overload this.
        Fr)   r!   s    r   r    zTimerOnce.on_timerf   s%     >>!4>>4#6#677r   N)r*   r+   r,   r    r.   r   r   r0   r0   e   s    r   r0   c                   2    e Zd ZdZdZdZdZdZdZd	dZ	d Z
y)
ProgressiveDelayTimerz^
    Timer that increases the delay for each iteration
    until max_duration is reached.
    g       @g      @g      ?r   Nc                 t    t        j                          | _        || _        t        j                  | ||g|  y r	   )time_start_time_current_delayr   r   r   s       r   r   zProgressiveDelayTimer.start{   s-    99;#D%:M:r   c                 x   t         j                  |       syt        | j                  | j                  z  | j
                        | _        t        j                         | j                  z   | j                  | j                  z   k  r7t        j                  | | j                  | j                  g| j                    yyr'   )r   r    minr7   growth	max_delayr5   r6   max_durationr   r
   r   r!   s    r   r    zProgressiveDelayTimer.on_timer   s    ~~d# "$"5"5"C"&..299;,,,d///0KKd11>)-)<)<>r   r	   )r*   r+   r,   r-   r:   r<   r;   r6   r7   r   r    r.   r   r   r3   r3   o   s,     FLIKN;
r   r3   c                        e Zd ZdZdZd Zd Zy)DelayedLauncherzW
    Launches a process after a certain delay.
    Used for launching mousetweaks.
    Nc                 4    || _         | j                  |       y r	   )argsr   )r   r@   r   s      r   launch_delayedzDelayedLauncher.launch_delayed   s    	

5r   c           	      \   t         j                  dj                  dj                  | j                                     	 t        j                  | j                         y# t        $ rC}t         j                  t        ddj                  | j                        |             Y d }~yd }~ww xY w)Nzlaunching '{}' zFailed to execute '{}', {}F)
_loggerdebugformatjoinr@   
subprocessPopenOSErrorwarning_format)r   es     r   r    zDelayedLauncher.on_timer   s    &--chhtyy.ABC	5TYY'   	5OOG$@HHTYY/4 5 5	5s   A 	B+(9B&&B+)r*   r+   r,   r-   r@   rA   r    r.   r   r   r>   r>      s     Dr   r>   c                   @    e Zd ZdZdZdZdZdZdZ	 d	dZ	d Z
d Zd Zy)
	FadeTimerzD
    Sine-interpolated fade between two values, e.g. opacities.
    Nr   g?c                     || _         || _        t        j                         | _        || _        || _        || _        | j                  | j                         || _	        y)zh
        Start value fade.
        duration: fade time in seconds, 0 for immediate value change
        N)
valuestart_valuer5   r6   	_durationr
   r   r   	time_steptarget_value)r   rR   rU   durationr   r   s         r   fade_tozFadeTimer.fade_to   sO     !
&99;!!+

4>>"(r   c                 >    d| _         t        j                  | |       y )Nr   )	iterationr   r   )r   r   s     r   r   zFadeTimer.start   s    D% r   c                 <    d | _         t        j                  |        y r	   )rU   r   r   r!   s    r   r   zFadeTimer.stop   s     

4r   c                 *   t        j                  | j                  | j                  | j                  | j
                        \  | _        }| j                  r( | j                  | j                  |g| j                    | xj                  dz  c_	        | S )N   )
r   sin_fader6   rS   rR   rU   rQ   r
   r   rY   )r   dones     r   r    zFadeTimer.on_timer   st    ==)9)94>>)-)9)94;L;LN
D >>DNN4::tBd.A.AB!xr   r	   )r*   r+   r,   r-   rQ   rR   rU   rY   rT   rW   r   r   r    r.   r   r   rO   rO      s;     EKLII  )"!r   rO   c                   0    e Zd ZdZddZd Zd Zd Zd Zy)	CallOncez
    Call each <callback> during <delay> only once
    Useful to reduce a storm of config notifications
    to just a single (or a few) update(s) of onboards state.
    c                 <    i | _         d | _        || _        || _        y r	   )	callbackstimerr   delay_forever)r   r   rd   s      r   r   zCallOnce.__init__   s    

*r   c                     | j                   d uS r	   )rc   r!   s    r   r   zCallOnce.is_running   s    zz%%r   c                 P   || j                   vr|| j                   |<   n	 | j                  r2| j                  r&t        j                  | j                         d | _        | j                  s=| j                   r0t        j
                  | j                  | j                        | _        y y y r	   )rb   rd   rc   r   r$   r   r   cb_timerr   r   r@   s      r   enqueuezCallOnce.enqueue   sy    4>>)'+DNN8$ $**tzz*DJzzdnn))$**dmmDDJ -zr   c                     | j                   r&t        j                  | j                          d | _         | j                  j	                          y r	   )rc   r   r$   rb   clearr!   s    r   r   zCallOnce.stop   s2    ::tzz*DJr   c                     t        | j                  j                               D ]  \  }}	  ||   | j                          y#  t        j                          Y 7xY w)NF)listrb   items	traceback	print_excr   rh   s      r   rg   zCallOnce.cb_timer   sT    "4>>#7#7#9: 	&NHd&$	& 				&##%s   AAN)   F)	r*   r+   r,   r-   r   r   ri   r   rg   r.   r   r   r`   r`      s!    +&Er   r`   )r5   loggingro   rH   Onboard.Versionr   gi.repositoryr   Onboard.utilsr   	getLoggerrD   objectr   r0   r3   r>   rO   r`   r.   r   r   <module>rx      s   (     /    
'

-
.@F @F E Be *+ +\,v ,r   