a
    Df                     @  s   d Z ddlmZ ddlmZmZmZmZ ddlZddl	m	Z	 ddl
mZ ddlmZmZ d	d
lmZ d	dlmZ erddlmZ G dd deZG dd deZG dd deeZdS )z@
Defines Player widgets which offer media-player like controls.
    )annotations)TYPE_CHECKINGClassVarMappingTypeN   )config)Player)indexOfisIn   )Widget)
SelectBase)Modelc                      s   e Zd ZU ejdddZejdddZejdg ddd	Zej	d
ddZ
ejdddZejddZejdd
ddZddiZded< eZded< d
Z fddZdd Zdd Zdd  Z  ZS )!
PlayerBaser   ze
        Current play direction of the Player (-1: playing in reverse,
        0: paused, 1: playing)defaultdoc  zh
        Interval between updates, in milliseconds. Default is 500, i.e.
        two updates per second.once)r   ZloopZreflectz0
        Policy used when player hits last frame)r   Zobjectsr   Tz:
        Whether the loop controls radio buttons are shownr   zD
        Number of frames to step forward and back by on each event.P   )r   i  z~
      Width of this component. If sizing_mode is set to stretch
      or scale mode this will merely be used as a suggestion.)r   Z
allow_Noner   nameN"ClassVar[Mapping[str, str | None]]_renamezClassVar[Type[Model]]_widget_typec                   s4   d|v rd| j v r|d |d< t jf i | d S Nvaluevalue_throttled)paramsuper__init__selfparams	__class__ a/nfs/NAS7/SABIOD/METHODE/ermites/ermites_venv/lib/python3.9/site-packages/panel/widgets/player.pyr    6   s    zPlayerBase.__init__c                 C  s
   d| _ d S )Nr   	directionr"   r&   r&   r'   play;   s    zPlayerBase.playc                 C  s
   d| _ d S )Nr   r(   r*   r&   r&   r'   pause>   s    zPlayerBase.pausec                 C  s
   d| _ d S )Nr(   r*   r&   r&   r'   reverseA   s    zPlayerBase.reverse)__name__
__module____qualname__r   Integerr)   intervalZObjectSelectorZloop_policyBooleanZshow_loop_controlsstepheightwidthr   __annotations__	_BkPlayerr   Z_PlayerBase__abstractr    r+   r,   r.   __classcell__r&   r&   r$   r'   r      s    

r   c                      s~   e Zd ZU dZejdddZejdddZejdddZejddd	d
Z	dZ
ded<  fddZ fddZdddZ  ZS )r	   a  
    The `Player` provides controls to play and skip through a number of
    frames defined by explicit start and end values.  The speed at
    which the widget plays is defined by the `interval` (in milliseconds), but it is also
    possible to skip frames using the `step` parameter.

    Reference: https://panel.holoviz.org/reference/widgets/Player.html

    :Example:

    >>> Player(name='Player', start=0, end=100, value=32, loop_policy='loop')
    r   zLower bound on the slider valuer   
   zUpper bound on the slider valueCurrent player valueTz(
        Current throttled player value.)r   constantr   zClassVar[bool]_supports_embedc                   sv   d|v r<d|v sd|v r t dd|d< |dd |d< n$|dddkr`d|vr`|d |d< t jf i | d S )Nlengthstartendz8Supply either length or start and end to Player not bothr   r   r   )
ValueErrorpopgetr   r    r!   r$   r&   r'   r    _   s    zPlayer.__init__c                   s4   t jr(d|v r|d= d|v r(|d |d< t |S r   )r   Z	throttledr   _process_property_change)r"   msgr$   r&   r'   rE   i   s    zPlayer._process_property_changeN   c                 C  sB   |d u rt t| j| j| j}| | j|jd  d |dd ddfS )Nidr   c                 S  s   | j S )N)r   )xr&   r&   r'   <lambda>u       z)Player._get_embed_state.<locals>.<lambda>r   zcb_obj.value)listranger@   rA   r5   Z_modelsref)r"   rootvaluesZmax_optsr&   r&   r'   _get_embed_stateq   s
    
zPlayer._get_embed_state)NrG   )r/   r0   r1   __doc__r   r2   r@   rA   r   r   r>   r8   r    rE   rQ   r:   r&   r&   r$   r'   r	   F   s   

r	   c                      sv   e Zd ZU dZejdddZejddZejdddZ	d	d	d
Z
ded< d	d	dZded<  fddZdd Z  ZS )DiscretePlayera  
    The `DiscretePlayer` provides controls to iterate through a list of
    discrete options.  The speed at which the widget plays is defined
    by the `interval` (in milliseconds), but it is also possible to skip items using the
    `step` parameter.

    Reference: https://panel.holoviz.org/reference/widgets/DiscretePlayer.html

    :Example:

    >>> DiscretePlayer(
    ...     name='Discrete Player',
    ...     options=[2, 4, 8, 16, 32, 64, 128], value=32,
    ...     loop_policy='loop'
    ... )
    r   zInterval between updatesr   r<   )r   T)r=   r   N)r   optionsr   r   r   r   _source_transformsc                   s   | j }d|v r@d|d< t|d |d< |r@t| j|s@|d | _d|v rx|d }t||rjt|||d< n|rx|d | _d|v r|d= t |S )NrT   r   r@   r   rA   r   r   )rP   lenr   r   r
   r   _process_param_change)r"   rF   rP   r   r$   r&   r'   rX      s    


z$DiscretePlayer._process_param_changec                 C  s<   dD ]2}||v r| |}|t| jk r| j| ||< q|S )NrU   )rC   rW   rT   rP   )r"   rF   propr   r&   r&   r'   rE      s    
z'DiscretePlayer._process_property_change)r/   r0   r1   rR   r   r2   r3   	Parameterr   r   r   r8   rV   rX   rE   r:   r&   r&   r$   r'   rS   y   s   
rS   )rR   
__future__r   typingr   r   r   r   r   r   Zmodels.widgetsr	   r9   utilr
   r   baser   selectr   Zbokeh.modelr   r   rS   r&   r&   r&   r'   <module>   s   03