
    ը	f                     J    d Z ddlZddlmZmZ  G d dej
                        Zy)a@  
@package animation.anim

@brief Animation class controls frame order

Classes:
 - anim::Animation

(C) 2013 by the GRASS Development Team

This program is free software under the GNU General Public License
(>=v2). Read the file COPYING that comes with GRASS for details.

@author Anna Petrasova <kratochanna gmail.com>
    N   )Orientation
ReplayModec                       e Zd ZdZd Zd Zd Zd Zd Zd Z	 e
e	      Zd	 Zd
 Z e
ee      Zd Zd Z e
ee      Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zy)	Animationz@Animation class specifies which frame to show at which instance.c                     t         j                  j                  |        d| _        g | _        t
        j                  | _        t        j                  | _
        d | _        d | _        d | _        d| _        y )Nr   F)wx
EvtHandler__init__currentIndexframesr   FORWARDorientationr   ONESHOT
replayModecallbackUpdateFramecallbackEndAnimationcallbackOrientationChangedisActiveselfs    //usr/lib/grass83/gui/wxpython/animation/anim.pyr   zAnimation.__init__   s]    
t$&..$,,#' $(!*.'    c                     | j                   S )z)Returns if the animation is active or notr   r   s    r   IsActivezAnimation.IsActive'   s    }}r   c                     || _         y Nr   )r   actives     r   	SetActivezAnimation.SetActive+   s	    r   c                     || _         y)zGSets animation frames.

        :param frames: list of strings
        N)r   )r   r   s     r   	SetFrameszAnimation.SetFrames.   s    
 r   c                 n    t        | j                        dk  r| j                  d   S | j                  |   S )zReturns animation framer   r   lenr   r   indexs     r   GetFramezAnimation.GetFrame5   s0    t{{q ;;q>!{{5!!r   c                 ,    t        | j                        S )zGet frame count.r$   r   s    r   GetCountzAnimation.GetCount;   s    4;;r   )fgetc                     | j                   S )zReturns replay mode (loop)._replayModer   s    r   GetReplayModezAnimation.GetReplayModeA   s    r   c                     || _         y r   r-   r   modes     r   SetReplayModezAnimation.SetReplayModeE   s
    r   )fsetr+   c                     | j                   S r   _orientationr   s    r   GetOrientationzAnimation.GetOrientationJ   s       r   c                     || _         y r   r6   r1   s     r   SetOrientationzAnimation.SetOrientationM   s
     r   c                     || _         y)z/Sets function to be called when updating frame.N)r   r   callbacks     r   SetCallbackUpdateFramez Animation.SetCallbackUpdateFrameR   s
    #+ r   c                     || _         y)z/Sets function to be called when animation ends.N)r   r<   s     r   SetCallbackEndAnimationz!Animation.SetCallbackEndAnimationV   s
    $,!r   c                     || _         y)z4Sets function to be called when orientation changes.N)r   r<   s     r   SetCallbackOrientationChangedz'Animation.SetCallbackOrientationChangedZ   s
    *2'r   c                 &    | j                         sy y r   r   r   s    r   StartzAnimation.Start^       }} r   c                 &    | j                         sy y r   rD   )r   pauseds     r   PausezAnimation.Pauseb   rF   r   c                     | j                         sy d| _        | j                  | j                  | j                  | j                               y )Nr   )r   r   r   r(   r   s    r   StopzAnimation.Stopf   s;    }}!!$"3"3T]]4CTCT5UVr   c                    | j                         sy| j                  t        j                  k(  r| j	                          | j
                  t        j                  k(  r| j                  t        j                  k(  rd| _	        y| j                  t        j                  k(  rIt        j                  | _        | j                  dz
  | _	        | j                  t        j                         yy| j                  t        j                  k(  r| j                  dz
  | _	        y| j                  t        j                  k(  r<t        j                  | _        d| _	        | j                  t        j                         yy)z>Decides which action to do after animation end (stop, repeat).Nr      r   )r   r   r   r   rK   r   r   r   REPEATr   REVERSEBACKWARDcountr   r   s    r   _arrivedToEndzAnimation._arrivedToEndl   s   }}??j000IIK{222*"3"33$%!J$6$66#.#7#7 $(JJN!//0D0DE 7
 *"3"33$(JJN!J$6$66#.#6#6 $%!//0C0CD 7r   c                    | j                         sy| j                  | j                  | j                  | j                               | j                  t
        j                  k(  r@| xj                  dz  c_        | j                  | j                  k(  r| j                          yy| xj                  dz  c_        | j                  dk(  r| j                          yy)zUpdates frame.Nr   )	r   r   r   r(   r   r   r   rQ   rR   r   s    r   UpdatezAnimation.Update   s    }}  !2!2DMM$BSBS4TU{222"  DJJ.""$ / "  B&""$ 'r   c                     | j                         sy|| _        | j                  | j                  | j                  | j                               y)z;Let the animation know that frame was changed from outside.N)r   r   r   r(   r&   s     r   FrameChangedFromOutsidez!Animation.FrameChangedFromOutside   s;    }}!  !2!2DMM$BSBS4TUr   c                 @   | j                         sy | j                  t        j                  k(  r-| xj                  dz  c_        | j                  dk(  rd| _        y y | xj                  dz  c_        | j                  | j
                  k(  r| j
                  dz
  | _        y y Nr   rT   r   r   r   r   r   r   rQ   r   s    r   PreviousFrameIndexzAnimation.PreviousFrameIndex   s    }}{222"  B&$%! ' "  DJJ.$(JJN! /r   c                 @   | j                         sy | j                  t        j                  k(  rD| xj                  dz  c_        | j                  | j
                  k(  r| j
                  dz
  | _        y y | xj                  dz  c_        | j                  dk(  rd| _        y y rY   rZ   r   s    r   NextFrameIndexzAnimation.NextFrameIndex   s    }}{222"  DJJ.$(JJN! / "  B&$%! 'r   N)__name__
__module____qualname____doc__r   r   r    r"   r(   r*   propertyrQ   r/   r3   r   r8   r:   r   r>   r@   rB   rE   rI   rK   rR   rU   rW   r[   r]    r   r   r   r      s    J"  (#E   }=AJ!! ^DK,-3WE,%V
3
&r   r   )ra   r	   utilsr   r   r
   r   rc   r   r   <module>re      s$     
 *Y& Y&r   