
    	e                        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rddlmZ  G d de          Z G d de          Z G 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                  X    e Zd ZU  ej        dd          Z ej        dd          Z ej        dg dd	          Z ej	        d
d          Z
 ej        dd          Z ej        d          Z ej        dd
d          ZddiZded<   eZded<   d
Z fdZd Zd Zd Z x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   loopreflectz0
        Policy used when player hits last frame)r   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   
allow_Noner   nameN"ClassVar[Mapping[str, str | None]]_renamezClassVar[Type[Model]]_widget_typec                j    d|v rd| j         v r|d         |d<    t                      j        di | d S )Nvaluevalue_throttled )paramsuper__init__selfparams	__class__s     4lib/python3.11/site-packages/panel/widgets/player.pyr'   zPlayerBase.__init__6   sM    f!2dj!@!@(.wF$%""6"""""    c                    d| _         d S )Nr   	directionr)   s    r,   playzPlayerBase.play;       r-   c                    d| _         d S )Nr   r/   r1   s    r,   pausezPlayerBase.pause>   r3   r-   c                    d| _         d S )Nr/   r1   s    r,   reversezPlayerBase.reverseA   s    r-   )__name__
__module____qualname__r%   Integerr0   intervalObjectSelectorloop_policyBooleanshow_loop_controlsstepheightwidthr   __annotations__	_BkPlayerr    _PlayerBase__abstractr'   r2   r5   r8   __classcell__r+   s   @r,   r   r      s        a ." # # #I u}S /# $ $ $H '%& ; ; ; B34 4 4K 't := > > > 5= )G H H HD U]2&&&FEM#$ =A B B BE 4:4.G@@@@*3L3333J# # # # #
          r-   r   c                       e Zd ZU dZ ej        dd          Z ej        dd          Z ej        dd          Z ej        ddd	
          Z	dZ
ded<    fdZ fdZddZ x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                   d|v r8d|v sd|v rt          d          d|d<   |                    d          dz
  |d<   n)|                    dd          dk    rd|vr|d         |d<    t                      j        di | d S )	Nlengthstartendz8Supply either length or start and end to Player not bothr   r   r"   r$   )
ValueErrorpopgetr&   r'   r(   s     r,   r'   zPlayer.__init___   s    v&  EVOO ![\\\F7O"JJx002F5MMZZ##a''G6,A,A$WoF7O""6"""""r-   c                    t           j        rd|v r|d= d|v r|d         |d<   t                                          |          S )Nr"   r#   )r	   	throttledr&   _process_property_change)r)   msgr+   s     r,   rX   zPlayer._process_property_changei   sP     	6#~~L C''"#45Gww//444r-   N   c                    |-t          t          | j        | j        | j                            }| | j        |j        d                  d         |d ddfS )Nidr   c                    | j         S )N)r"   )xs    r,   <lambda>z)Player._get_embed_state.<locals>.<lambda>u   s    !' r-   r"   zcb_obj.value)listrangerQ   rR   rB   _modelsref)r)   rootvaluesmax_optss       r,   _get_embed_statezPlayer._get_embed_stateq   sS    >%
DHdi@@AAFdl48D>215v!!7N< 	<r-   )NrZ   )r9   r:   r;   __doc__r%   r<   rQ   rR   r"   r#   rN   rE   r'   rX   rg   rH   rI   s   @r,   r
   r
   F   s           EM!)JKKKE
%-(I
J
J
JCEM!)?@@@E#emA C+ , , ,O '+O****# # # # #5 5 5 5 5< < < < < < < <r-   r
   c                       e Zd ZU dZ ej        dd          Z ej        d          Z ej        dd          Z	d	d	d
Z
ded<   d	d	dZded<    fdZd Z x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   rL   )r   T)rM   r   N)r   optionsr   r   r"   r#   _source_transformsc                d   | j         }d|v r>d|d<   t          |          dz
  |d<   |r"t          | j        |          s|d         | _        d|v r;|d         }t          ||          rt	          ||          |d<   n|r|d         | _        d|v r|d= t                                          |          S )Nrk   r   rQ   r   rR   r"   r#   )re   lenr   r"   r   r&   _process_param_change)r)   rY   re   r"   r+   s       r,   rp   z$DiscretePlayer._process_param_change   s    CLVqCJ 'd4:v66 '#AY
c>>LEE6"" '&uf55G '#AY
##%&ww,,S111r-   c                    dD ]C}||v r=|                     |          }|t          | j                  k     r| j        |         ||<   D|S )Nrl   )rT   ro   rk   re   )r)   rY   propr"   s       r,   rX   z'DiscretePlayer._process_property_change   sT    0 	3 	3Ds{{3t|,,,, $E 2CI
r-   )r9   r:   r;   rh   r%   r<   r=   	Parameterr"   r#   r   rE   rm   rp   rX   rH   rI   s   @r,   rj   rj   y   s          " u}S.HIIIHEO 6777E%eot9OPPPO;?D2Q2QGQQQQGK`d=e=eeeee2 2 2 2 2"      r-   rj   )rh   
__future__r   typingr   r   r   r   r%   r	   models.widgetsr
   rF   utilr   r   baser   selectr   bokeh.modelr   r   rj   r$   r-   r,   <module>r{      sp    # " " " " "                   0 0 0 0 0 0                             "!!!!!!, , , , , , , ,`/< /< /< /< /<Z /< /< /<f3 3 3 3 3Z 3 3 3 3 3r-   