
    ը	fPT                        d 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dlmZ ddlmZmZmZ ddlmZmZ ddlmZ dd	lmZmZmZmZ dd
lm Z  ddl!m"Z" ddl#m$Z$m%Z%m&Z& ddl'm(Z(m)Z) ddl*m+Z+m,Z,m-Z- dZ.da/ ej`                  d        G d dejb                        Z2 G d dejf                        Z4 G d dejf                        Z5 G d de5      Z6 G d de5      Z7y)a  
@package animation.frame

@brief Animation frame and different types of sliders

Classes:
 - frame::AnimationFrame
 - frame::AnimationsPanel
 - frame::AnimationSliderBase
 - frame::SimpleAnimationSlider
 - frame::TimeAnimationSlider

(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)
FatalError)	globalvar)IntegerValidator)
StaticTextTextCtrlSlider)
RunCommandGWarning)AnimationWindow)BitmapProvider
BitmapPoolMapFilesPoolCleanUp)AnimationController)	Animation)MainToolbarAnimationToolbarMiscToolbar)SpeedDialogPreferencesDialog)Orientation
ReplayModeTemporalType   Tc                       e Zd Z ed      ddfdZd Zd Zd Zd Zd Z	d	 Z
d
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z y) AnimationFramezAnimation ToolNc           	          t         j                  j                   ||t         j                  d       | _         j                   j                                d _         j                  t        j                  t        j                  j                  t        j                  d      t         j                               	 t!        j"                          t+        j,                         at1        t2              D cg c]  }t5                c} _        g  _        t;          j8                  t2               _        t?               }tA               }	d  _!        d  _"        tG        ||	t.               _$        i  _%        tM                jJ                  d<   tO                jJ                  d	<   tQ          jJ                   j6                   j8                   jH                  ||	
       _)         j8                  D ]o  }
|
jU                  t         jV                   jX                          jH                  jZ                  j]                   fd        jH                  j^                  j]                   j`                          jH                  jb                  j]                   jd                          jH                  jf                  j]                   jh                          jH                  jj                  j]                   j`                          jH                  jl                  j]                   jd                          jH                  jn                  j]                   jh                         r  jq                          t         jr                  ju                          _;        i  _<         j{                           j}                           jv                  j                          t                _A        d  j                  d<   d  j                  d<    jU                  t         j                   j                         y # t$        $ r!}t'         t)        |             Y d }~d }~ww xY wc c}w )N)i   iX  )titlestylesize)   r!   zgrass_map.ico)parentmessage)initialCount)
bitmapPoolmapFilesPooltempDirnontemporaltemporal)framesliders
animations
mapwindowsproviderr%   r&   c                  &     j                  d      S )N )SetStatusTextselfs   0/usr/lib/grass83/gui/wxpython/animation/frame.py<lambda>z)AnimationFrame.__init__.<locals>.<lambda>h   s    T5G5G5K     speedpreferences)DwxFrame__init__DEFAULT_FRAME_STYLE_gifaceSetClientSizeGetSizeiconsizeSetIconIconospathjoinr   ICONDIRBITMAP_TYPE_ICOtgisinitr   r
   strgcoretempdirTMP_DIRrange	MAX_COUNTr   r,   windowsAnimationsPanelanimationPanelr   r   _progressDlg_progressDlgMaxr   r.   animationSlidersSimpleAnimationSliderTimeAnimationSliderr   
controllerBindEVT_SIZEFrameSizeChanged
mapsLoadedconnectrenderingStarted_showRenderingProgressrenderingContinues_updateProgressrenderingFinished_closeProgresscompositionStartedcompositionContinuescompositionFinishedInitStatusbaraui
AuiManager_mgrtoolbars_addToolbars	_addPanesUpdatedictdialogs	EVT_CLOSEOnCloseWindow)r3   r"   gifacer   rasters
timeserieseir%   r&   wins   `          r4   r;   zAnimationFrame.__init__1   s+    	&R-C-C* 	 	
 4<<>* GGY..@"BTBT	
	2IIK --/05i0@A19;A-$,,Y
  \
#~ #&!g
 !#/DT/Jm,,?,Ej)-))||]]!%
 << 	KCHHR[[$"7"78MM$$,,-KLMM**2243N3NOMM,,44T5I5IJMM++33D4G4GHMM,,44T5P5PQMM..66t7K7KLMM--55d6I6IJ	K 	FF%%d+	 		v $W&*]#		",, 2 23s  	2D#a&11	2 Bs   P6 :Q#6	Q ?QQ c                 *    | j                  dd       y)zInit statusbar.   r   )numberr   N)CreateStatusBarr2   s    r4   rg   zAnimationFrame.InitStatusbar   s    AQ/r6   c                    | j                   j                  | j                  t        j                  j                         j                         j                  d      j                         j                  d      j                  d      j                  d      j                  d      j                  d      j                  d      j                  d             t        j                   | j"                        D ]  \  }}| j                   j                  |t        j                  j                         j                  d      j                  d|z         j                  d      j                  d      j                  |j%                               j                  d      j                  d      j'                                | j                   j)                  d|z         j+                           y )N	animPanelF)r   Tr   slider_rz   )rj   AddPanerR   r9   rh   AuiPaneInfo
CentrePaneNameCaptionVisible
PaneBorder	FloatableBestSizeCloseButtonDestroyOnCloseLayersix	iteritemsrU   GetBestSizeBottomGetPaneHide)r3   namesliders      r4   rm   zAnimationFrame._addPanes   sO   		FF Z\T+Z\^E"ZYuXh[^D!U1X	
  MM$*?*?@ 	7LD&II""$E"i$&'q&&,,./%U# IIi$./446	7r6   c                    t        |       | j                  d<   | j                  j                  | j                  d   t        j
                  j                         j                  d      j                  t        d            j                         j                         j                  d      j                  d      j                  d      j                  d      j!                  d      j#                  d      j%                  d      j'                  d      j)                  | j                  d   j+                                      t-        |       | j                  d<   | j                  j                  | j                  d   t        j
                  j                         j                  d      j                  t        d	            j                         j                         j                  d      j                  d      j                  d      j                  d      j!                  d      j#                  d      j%                  d      j'                  d      j)                  | j                  d   j+                                      | j.                  j1                  | j                  d          t3        |       | j                  d
<   | j                  j                  | j                  d
   t        j
                  j                         j                  d
      j                  t        d            j                         j                         j                  d      j                  d      j                  d      j                  d      j!                  d      j#                  d      j%                  d      j'                  d      j)                  | j                  d
   j+                                      y)zAdd toolbars to the window

        Currently known toolbars are:
         - 'mainToolbar'          - data management
         - 'animationToolbar'     - animation controls
         - 'miscToolbar'          - help, close
        mainToolbarzMain ToolbarFT   rz   r   animationToolbarzAnimation ToolbarmiscToolbarzMisc ToolbarN)r   rk   rj   r   r9   rh   r   r   Caption_ToolbarPaneTopLeftDockableRightDockableBottomDockableTopDockabler   r   RowPositionr   r   r   rX   SetAnimationToolbarr   r2   s    r4   rl   zAnimationFrame._addToolbars   s    (34'8m$		MM-(FF T- WQ~&'[]SU\% ]5!^D![[U1XSVXa[Xt}}]3??AC	
$ -=T,B()		MM,-FF T$%WQ*+,[]SU\% ]5!^D![[U1XSVXa[Xt}}%78DDFH	
" 	++DMM:L,MN'24'8m$		MM-(FF T- WQ~&'[]SU\% ]5!^D![[U1XSVXa[Xt}}]3??AC	
r6   c                 :    | j                   j                  |       y)zJSet animation data

        :param layerLists: list of layerLists
        N)rX   SetAnimations)r3   
layerListss     r4   r   zAnimationFrame.SetAnimations   s    
 	%%j1r6   c                 8    | j                   j                          y N)rX   AddAnimationr3   events     r4   OnAddAnimationzAnimationFrame.OnAddAnimation       $$&r6   c                 :    | j                   j                  |       y r   )rR   	AddWindowr3   indexs     r4   r   zAnimationFrame.AddWindow   s    %%e,r6   c                 :    | j                   j                  |       y r   )rR   RemoveWindowr   s     r4   r   zAnimationFrame.RemoveWindow   s    ((/r6   c                 8    | j                   j                  |      S r   )rR   IsWindowShownr   s     r4   r   zAnimationFrame.IsWindowShown   s    ""0077r6   c                 8    | j                   j                          y r   )rX   EditAnimationsr   s     r4   OnEditAnimationzAnimationFrame.OnEditAnimation   s    &&(r6   c                 <   |dk(  rS| j                   j                  d      j                          | j                   j                  d      j                          n|dk(  rS| j                   j                  d      j                          | j                   j                  d      j                          nR| j                   j                  d      j                          | j                   j                  d      j                          | j                   j	                          y )Nr(   slider_nontemporalslider_temporalr)   )rj   r   Showr   rn   )r3   r   s     r4   	SetSliderzAnimationFrame.SetSlider   s    = II2388:II/0557ZII/0557II2388:II/0557II2388:		r6   c                     | j                   j                  t        j                         | j                   j	                          y r   )rX   SetOrientationr   FORWARDStartAnimationr   s     r4   OnPlayForwardzAnimationFrame.OnPlayForward  s*    &&{':':;&&(r6   c                     | j                   j                  t        j                         | j                   j	                          y r   )rX   r   r   BACKWARDr   r   s     r4   
OnPlayBackzAnimationFrame.OnPlayBack
  s*    &&{';';<&&(r6   c                 X    | j                   j                  |j                                y )N)paused)rX   PauseAnimation	IsCheckedr   s     r4   OnPausezAnimationFrame.OnPause  s    &&eoo.?&@r6   c                 8    | j                   j                          y r   )rX   EndAnimationr   s     r4   OnStopzAnimationFrame.OnStop  r   r6   c                     |j                         rt        j                  }nt        j                  }| j                  j                  |       y r   )r   r   REPEATONESHOTrX   SetReplayModer3   r   modes      r4   OnOneDirectionReplayz#AnimationFrame.OnOneDirectionReplay  s4    ??$$D%%D%%d+r6   c                     |j                         rt        j                  }nt        j                  }| j                  j                  |       y r   )r   r   REVERSEr   rX   r   r   s      r4   OnBothDirectionReplayz$AnimationFrame.OnBothDirectionReplay  s4    ??%%D%%D%%d+r6   c                    | j                   d   }|r|j                  | j                  j                                |j	                  | j                  j                                |j                  | j                  j                                |j                         r|j                          y |j                          y t        | | j                  j                         | j                  j                         | j                  j                        }|j                          || j                   d<   |j                  j                  | j                          |j                          y )Nr7   )temporalModetimeGranularityinitialSpeed)rp   SetTemporalModerX   GetTemporalModeSetTimeGranularityGetTimeGranularityInitTimeSpinGetTimeTickIsShownSetFocusr   r   timeTickCenterOnParentspeedChangedr]   ChangeSpeed)r3   r   rx   s      r4   OnAdjustSpeedzAnimationFrame.OnAdjustSpeed"  s    ll7# ? ? AB""4??#E#E#GHT__88:;{{}
!__<<> $ B B D!__55	C  $'DLL!$$T%5%56HHJr6   c                 &    || j                   _        y r   )rX   r   )r3   mss     r4   r   zAnimationFrame.ChangeSpeed8  s    #% r6   c                 8    | j                   j                          y r   )rX   Reloadr   s     r4   r   zAnimationFrame.Reload;       r6   c                     t        j                  t        d      d|| t         j                  t         j                  z  t         j
                  z  t         j                  z        | _        || _        y )NzLoading dataz(Loading data started, please be patient.)r   r#   maximumr"   r   )	r9   ProgressDialogr   PD_CAN_ABORTPD_APP_MODALPD_AUTO_HIDE	PD_SMOOTHrS   rT   r3   counts     r4   r_   z%AnimationFrame._showRenderingProgress>  sT     --N#>//BOO3booET
  %r6   c                     |t        d      j                  || j                        z  }| j                  j	                  ||      \  }}|s| j
                  j                          y y )Nz ({c} out of {p}))cp)r   formatrT   rS   rn   r.   RequestStopRendering)r3   currenttext	keepGoingskips        r4   ra   zAnimationFrame._updateProgressJ  s\    %&--4;O;O-PP++227DA	4MM..0 r6   c                 F    | j                   j                          d | _         y r   )rS   Destroyr2   s    r4   rc   zAnimationFrame._closeProgressP  s    !!# r6   c                 8    | j                   j                          y r   )rX   Exportr   s     r4   OnExportAnimationz AnimationFrame.OnExportAnimationT  r   r6   c                     dx}}| j                   D ]%  }|j                         \  }}||k\  s||k\  s"||}}' | j                  j                  ||       |j	                          y Nr   )rP   GetClientSizer.   WindowSizeChangedSkip)r3   r   maxWidth	maxHeightrx   whs          r4   r[   zAnimationFrame.FrameSizeChangedW  sf      9<< 	+C$$&DAqH}i&')	+ 	'')<

r6   c                      j                   d   sTt          j                        }| j                   d<   |j                  j	                   fd       |j                           j                   d   j                          y )Nr8   )r"   rs   c                  8     j                   j                         S r   )rX   UpdateAnimationsr2   s   r4   r5   z.AnimationFrame.OnPreferences.<locals>.<lambda>d  s    doo.N.N.P r6   )rp   r   r=   formatChangedr]   r   r   )r3   r   dlgs   `  r4   OnPreferenceszAnimationFrame.OnPreferences`  sc    ||M*#4EC*-DLL'%%&PQ ]#((*r6   c                      t        ddd       y )Nzg.manualTzwxGUI.animation)quietentry)r	   r   s     r4   OnHelpzAnimationFrame.OnHelpi  s    :T1BCr6   c                    | j                   j                  j                         r$| j                   j                  j                           t	        t
                      | j                  j                          | j                          y r   )	rX   timer	IsRunningStopr   rM   rj   UnInitr  r   s     r4   rr   zAnimationFrame.OnCloseWindowl  sT    ??  **,OO!!&&(		r6   c                     t        | d      r^t        | j                  d      rH| j                  j                  j                         r$| j                  j                  j	                           t        t                      y)zJIt might not be called, therefore we try to clean it all in OnCloseWindow.rX   r  N)hasattrrX   r  r  r  r   rM   r2   s    r4   __del__zAnimationFrame.__del__s  sR    4&74??G+L$$..0%%**,r6   )!__name__
__module____qualname__r   r;   rg   rm   rl   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r_   ra   rc   r  r[   r  r  rr   r   r6   r4   r   r   0   s    $%&6$7RVL4\07<@
D2'-08)))A',,,&!
%1!!+Dr6   r   c                   &    e Zd ZddZd Zd Zd Zy)rQ   c                     t         j                  j                  | |t         j                  t         j                         g | _        || _        t        j                  ddd      | _        t        |      D ]J  }t        |       }|j                  |       | j                  j                  |dt         j                         L | j                  j                  d       | j                  j                  d       | j                  j                  d       | j                  j                  d       || _        | j#                  | j                         t        |      D ]   }| j                  j%                  ||          " | j'                          y )Nidr   r   r   )colshgapvgaprz   )
proportionflag)r9   Panelr;   ID_ANY	NO_BORDERshownr   FlexGridSizer	mainSizerrN   r   appendAddEXPANDAddGrowableColAddGrowableRowrP   SetSizerAndFitr   Layout)r3   r"   rP   r$   rw   r  s         r4   r;   zAnimationsPanel.__init__|  s(   
$299BLLI
!
))qqqA|$ 	@A%ANN1NNqQRYY?	@
 	%%a(%%a(%%a(%%a(DNN+|$ 	,ANN
+	,r6   c                     t        | j                        | j                  k(  ry | j                  j	                  | j
                  |          | j                  j                  |       | j                          y r   )lenr0  r   r2  r   rP   r3  r9  r   s     r4   r   zAnimationsPanel.AddWindow  sO    tzz?djj(DLL/0

% r6   c                     t        | j                        dk(  ry | j                  j                  | j                  |          | j                  j                  |       | j                          y r  )r;  r0  r2  r   rP   remover9  r   s     r4   r   zAnimationsPanel.RemoveWindow  sK    tzz?aDLL/0

% r6   c                 R    | j                   j                  | j                  |         S r   )r2  r   rP   r   s     r4   r   zAnimationsPanel.IsWindowShown  s     ~~%%dll5&9::r6   N)r   )r   r!  r"  r;   r   r   r   r#  r6   r4   rQ   rQ   {  s    *;r6   rQ   c                   b    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zdd
Zd Zd Zd Zd Zy)AnimationSliderBasec                    t         j                  j                  | |t         j                         t	        | t         j                        | _        t        | t         j                  t         j                        | _        t        | t         j                  dt         j                  t         j                  z  t                     | _        d | _        d | _        d | _        d| _        d| _        | j                  j'                  t         j(                  | j*                         | j                  j'                  t         j,                  | j.                         | j                  j'                  t         j0                  | j2                         y )N)r"   r'  r'  r&  )(   r   )r'  r    r   	validatorr   T)r9   r-  r;   r.  r   label1r   SL_HORIZONTALr   r   TE_PROCESS_ENTERTE_RIGHTr   
indexFieldcallbackSliderChangingcallbackSliderChangedcallbackFrameIndexChangedframesCountenablerY   EVT_SPINOnSliderChangingEVT_SCROLL_THUMBRELEASEOnSliderChangedEVT_TEXT_ENTEROnFrameIndexChangedr3   r"   s     r4   r;   zAnimationSliderBase.__init__  s   
$v"))< "))4Tbiir7G7GH"yy%%3&(
 '+#%)")-&d&;&;<33T5I5IJR..0H0HIr6   c                 v    | j                  |       | j                  sy | j                  j                  |       y r   )_updateFrameIndexrN  r   SetValuer   s     r4   UpdateFramezAnimationSliderBase.UpdateFrame  s,    u%{{U#r6   c                     t         r   NotImplementedErrorr   s     r4   rW  z%AnimationSliderBase._updateFrameIndex      !!r6   c                 &    | j                  |       y r   )_onFrameIndexChangedr   s     r4   rT  z'AnimationSliderBase.OnFrameIndexChanged  s    !!%(r6   c                 &    | j                  |       y r   )
_setFramesr3   framess     r4   	SetFrameszAnimationSliderBase.SetFrames  s    r6   c                     t         r   r[  rb  s     r4   ra  zAnimationSliderBase._setFrames  r]  r6   c                     || _         y r   )rJ  r3   callbacks     r4   SetCallbackSliderChangingz-AnimationSliderBase.SetCallbackSliderChanging  s
    &.#r6   c                     || _         y r   rK  rg  s     r4   SetCallbackSliderChangedz,AnimationSliderBase.SetCallbackSliderChanged  s
    %-"r6   c                     || _         y r   )rL  rg  s     r4   SetCallbackFrameIndexChangedz0AnimationSliderBase.SetCallbackFrameIndexChanged  s
    )1&r6   c                     |r| j                   dk  rd}|| _        | j                  j                  |       | j                  j                  |       y )Nrz   F)rM  rN  r   EnablerI  )r3   rN  s     r4   EnableSliderz AnimationSliderBase.EnableSlider  sB    d&&!+F6"v&r6   c                 B    | j                  |j                                y r   )rJ  GetIntr   s     r4   rP  z$AnimationSliderBase.OnSliderChanging  s    ##ELLN3r6   c                 $    | j                          y r   rk  r   s     r4   rR  z#AnimationSliderBase.OnSliderChanged  s    ""$r6   c                     | j                   j                         }| j                  |      }|-| j                  j	                  |       | j                  |       y y r   )rI  GetValue	_validater   rX  rL  )r3   r   r   s      r4   r_  z(AnimationSliderBase._onFrameIndexChanged  sM    ((*u%KK  '**51 r6   c                    	 t        |      }| j                  j                         \  }}|dz  }||kD  r+|}| j                  j                  t        |dz                |S ||k  r)|}| j                  j                  t        |dz                |S # t        $ rD | j                  j                         }| j                  j                  t        |dz                Y y w xY wNrz   )int
ValueErrorr   rv  rI  rX  rJ   GetRange)r3   r   startends       r4   rw  zAnimationSliderBase._validate  s    	JE
 [[))+
s
3;EOO$$Sq\2
 	 U]EOO$$S^4  	KK((*EOO$$S^4	s   B A
CCN)T)r   r!  r"  r;   rY  rW  rT  rd  ra  ri  rl  rn  rq  rP  rR  r_  rw  r#  r6   r4   r@  r@    sI    J0$") "/.2'4%2r6   r@  c                   *    e Zd Zd Zd Zd Zd Zd Zy)rV   c                 p    t         j                  | |       | j                          | j                          y r   )r@  r;   	_setLabel	_doLayoutrU  s     r4   r;   zSimpleAnimationSlider.__init__   s&    $$T62r6   c                    t        j                  t         j                        }|j                  | j                  dt         j
                  t         j                  z  d       |j                  | j                  dt         j
                  t         j                  z  t         j                  z  d       |j                  | j                  dt         j                  d       | j                  |       y )Nr      r+  r,  borderrz   )r9   BoxSizer
HORIZONTALr4  rI  ALIGN_CENTERLEFTrE  RIGHTr   r5  r8  )r3   hboxs     r4   r  zSimpleAnimationSlider._doLayout  s    {{2==)OO"''0IRS 	 	
 	KK277*RXX5	 	 	
 	1ED!r6   c                     || _         | j                   dkD  r;| j                  j                  d| j                   dz
         | j                  d       n| j                  d       | j	                          y Nrz   r   TF)rM  r   SetRangerq  r  r   s     r4   ra  z SimpleAnimationSlider._setFrames  s]     aKK  D$4$4q$89d#e$r6   c                 |    dd| j                   iz  }| j                  j                  |       | j                          y )Nz/ %(framesCount)srM  )rM  rE  SetLabelr9  )r3   labels     r4   r  zSimpleAnimationSlider._setLabel  s2    #}d6F6F&GGU#r6   c                 R    | j                   j                  t        |dz                y ry  )rI  rX  rJ   r   s     r4   rW  z'SimpleAnimationSlider._updateFrameIndex"  s      UQY0r6   N)r   r!  r"  r;   r  ra  r  rW  r#  r6   r4   rV   rV     s    "
1r6   rV   c                   6    e Zd Zd Zd Zd Zd Zd Zd Zd Z	y)	rW   c                 6   t         j                  | |       g | _        t        | t        j
                        | _        t        | t        j
                        | _        d| _        t        j                  | _        | j                          | j                          y )NrB  r   )r@  r;   
timeLabelsr   r9   r.  label2label3label2Lengthr   RELATIVEtemporalTyper  r  rU  s     r4   r;   zTimeAnimationSlider.__init__'  sg    $$T62 "))4 "))4(11r6   c                    t        j                  t         j                        }t        j                  t         j                        }|j	                  | j
                  dt         j                  d       |j                          |j	                  | j                  dt         j                  d       |j	                  | j                  dt         j                  t         j                  z  d       |j                          |j	                  | j                  dt         j                  d       |j	                  |dt         j                  d       t        j                  t         j                        }|j	                  | j                  dt         j                  d       |j	                  |dt         j                  d       | j                          | j                  |       y )Nr   r     rz   )r9   r  VERTICALr  r4  rE  ALIGN_CENTER_VERTICALAddStretchSpacerrI  r  r  r  r5  r   _setTemporalTyper8  )r3   vboxr  s      r4   r  zTimeAnimationSlider._doLayout2  sC   {{2;;'{{2==)1I1IRSTQR5M5MVWXKKAB,D,Drww,NWX 	 	
 	1I1IRST!"))A>{{2==)1E!"))A>D!r6   c                     | j                   j                         }|j                  | j                   | j                  t        j
                  k(         | j                          y r   )rI  GetContainingSizerr   r  r   r  r9  )r3   sizers     r4   r  z$TimeAnimationSlider._setTemporalTypeF  s@    224

4??D$5$59N9N$NOr6   c                 2    || _         | j                          y r   )r  r  )r3   r   s     r4   SetTemporalTypez#TimeAnimationSlider.SetTemporalTypeL  s     r6   c                 <   || _         t        |      | _        | j                  dkD  r;| j                  j	                  d| j                  dz
         | j                  d       n| j                  d       | j                          | j                  j                          y r  )	r  r;  rM  r   r  rq  r  rI  Disable)r3   r  s     r4   ra  zTimeAnimationSlider._setFramesP  sx    $z?aKK  D$4$4q$89d#e$!r6   c                    | j                   rX| j                  t        j                  k(  r| j                   d   d   }| j                  j                  |       | j                   d   d   r| j                   d   d   }n| j                   d   d   }| j                  j                  |       n| j                   d   d   }| j                   d   d   }| j                  j                  |       | j                   d   d   r| j                   d   d   }n| j                   d   d   }d||dz  }| j                  j                  |       t        |      | _        | j                  d       nQ| j                  j                  d       | j                  j                  d       | j                  j                  d       | j                          y )Nr   r   rz   r   z%(end)s %(unit)s)r~  unitr0   )r  r  r   ABSOLUTErE  r  r  r;  r  rW  r  r9  )r3   r}  r~  r  s       r4   r  zTimeAnimationSlider._setLabel\  sv   ??  L$9$99*1-$$U+??2&q)//"-a0C//"-a0C$$S)q)!,*1-$$U+??2&q)//"-a0C//"-a0C(3+EE$$S) #E
D""1% KK  $KK  $KK  $r6   c                 j   | j                   |   d   }| j                   |   d   ra| j                  t        j                  k(  r#t	        d      |d| j                   |   d   dz  }nCt	        d      d| j                   |   d   iz  }n"| j                  t        j                  k(  r|}nd}| j
                  j                  |       | j                  t        j                  k(  r| j                  j                  |       t        |      | j                  k7  r!t        |      | _        | j                          y y )	Nr   rz   z%(from)s %(dash)s %(to)su   –)fromdashtoz	to %(to)sr  r0   )r  r  r   r  r   r  r  r  rI  rX  r;  r  r9  )r3   r   r}  r  s       r4   rW  z%TimeAnimationSlider._updateFrameIndexz  s   &q)??5!!$  L$9$9945!$//%039  +$0Fq0I)JJ  L$9$99U# 5 55OO$$U+u:*** #E
DKKM +r6   N)
r   r!  r"  r;   r  r  r  ra  r  rW  r#  r6   r4   rW   rW   &  s%    	"( 
"<r6   rW   )8__doc__rC   r9   wx.auir   grass.scriptscriptrK   grass.temporalr)   rH   grass.exceptionsr   corer   gui_core.widgetsr   gui_core.wrapr   r   r   	core.gcmdr	   r
   animation.mapwindowr   animation.providerr   r   r   r   animation.controllerr   animation.animr   animation.toolbarsr   r   r   animation.dialogsr   r   animation.utilsr   r   r   rO   rM   set_raise_on_errorr:   r   r-  rQ   r@  rV   rW   r#  r6   r4   <module>r     s   & 
 	  
   '  - 6 6 * / P P 4 $ I I < A A 	
    HRXX HV
%;bhh %;PY"(( Yx$1/ $1Ni- ir6   