B
    pฎ['*  ใ               @   s  d Z ddlmZmZ ddlmZ ddl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mZmZmZmZmZmZ d
ZdZdd Zdd ZG dd deee
ZG dd deZeeG dd deZeeG dd deZ eG dd dee
Z!eeG dd deZ"eG dd dee
Z#eeG dd deZ$G d d! d!eZ%eG d"d# d#eZ&G d$d% d%e%Z'eG d&d' d'e'Z(d(S ))z8Int class.

Represents an unbounded int using a widget.
้   )ฺDescriptionWidgetฺDescriptionStyle)ฺValueWidget)ฺregisterฺwidget_serialization)ฺ
CoreWidget้    )ฺInstance)ฺColorฺInstanceDictฺNumberFormat)ฺUnicodeฺCIntฺBoolฺCaselessStrEnumฺTupleฺ
TraitErrorฺdefaultฺvalidatez=
Parameters
----------
value: integer
    The initial value.
zะ
Parameters
----------
value: integer
    The initial value.
min: integer
    The lower limit for the value.
max: integer
    The upper limit for the value.
step: integer
    The step between allowed values.
c                s   d fdd	}t |_| _ S )z)Add int docstring template to class init.Nc                s&   |d k	r||d< t  | jf | d S )Nฺvalue)ฺsuperฺ__init__)ฺselfr   ฺkwargs)ฺclsฉ ๚<lib/python3.7/site-packages/ipywidgets/widgets/widget_int.pyr   )   s    z_int_doc.<locals>.__init__)N)ฺ
_int_doc_tฺ__doc__r   )r   r   r   )r   r   ฺ_int_doc'   s    r   c                s   d fdd	}t |_| _ S )z1Add bounded int docstring template to class init.Nc                sV   |d k	r||d< |d k	r ||d< |d k	r0||d< |d k	r@||d< t  | jf | d S )Nr   ฺminฺmaxฺstep)r   r   )r   r   r    r!   r"   r   )r   r   r   r   4   s    z"_bounded_int_doc.<locals>.__init__)NNNN)ฺ_bounded_int_doc_tr   r   )r   r   r   )r   r   ฺ_bounded_int_doc2   s    r$   c                   s6   e Zd ZdZedddjddZd
 fdd		Z  ZS )ฺ_Intz1Base class for widgets that represent an integer.r   z	Int value)ฺhelpT)ฺsyncNc                s&   |d k	r||d< t t| jf | d S )Nr   )r   r%   r   )r   r   r   )ฺ	__class__r   r   r   H   s    z_Int.__init__)N)	ฺ__name__ฺ
__module__ฺ__qualname__r   r   ฺtagr   r   ฺ__classcell__r   r   )r(   r   r%   D   s   r%   c                   sz   e Zd ZdZedddjddZedddjddZd fd
d	Ze	ddd Z
e	ddd Ze	ddd Z  ZS )ฺ_BoundedIntzSBase class for widgets that represent an integer bounded from above and below.
    ้d   z	Max value)r&   T)r'   r   z	Min valueNc                sV   |d k	r||d< |d k	r ||d< |d k	r0||d< |d k	r@||d< t t| jf | d S )Nr   r    r!   r"   )r   r.   r   )r   r   r    r!   r"   r   )r(   r   r   r   T   s    z_BoundedInt.__init__r   c             C   s4   |d }| j |ks| j|k r0t t|| j | j}|S )zCap and floor valuer   )r    r!   )r   ฺproposalr   r   r   r   ฺ_validate_value_   s    z_BoundedInt._validate_valuer    c             C   s.   |d }|| j krtd|| jkr*|| _|S )zEnforce min <= value <= maxr   zsetting min > max)r!   r   r   )r   r0   r    r   r   r   ฺ_validate_ming   s    

z_BoundedInt._validate_minr!   c             C   s.   |d }|| j k rtd|| jk r*|| _|S )zEnforce min <= value <= maxr   zsetting max < min)r    r   r   )r   r0   r!   r   r   r   ฺ_validate_maxq   s    

z_BoundedInt._validate_max)NNNN)r)   r*   r+   r   r   r,   r!   r    r   r   r1   r2   r3   r-   r   r   )r(   r   r.   N   s   
r.   c               @   sl   e Zd ZdZedjddZedjddZedddjddZ	edd	djddZ
ed
ddjddZdS )ฺIntTextz*Textbox widget that represents an integer.ฺIntTextViewT)r'   ZIntTextModelFzEnable or disable user changes)r&   zlUpdate the value as the user types. If False, update on submission, e.g., pressing Enter or navigating away.r   z#Minimum step to increment the valueN)r)   r*   r+   r   r   r,   ฺ
_view_nameฺ_model_namer   ฺdisabledฺcontinuous_updater   r"   r   r   r   r   r4   {   s   r4   c               @   sl   e Zd ZdZedjddZedjddZedddjddZ	edd	djddZ
ed
ddjddZdS )ฺBoundedIntTextzLTextbox widget that represents an integer bounded from above and below.
    r5   T)r'   ZBoundedIntTextModelFzEnable or disable user changes)r&   zlUpdate the value as the user types. If False, update on submission, e.g., pressing Enter or navigating away.r   z#Minimum step to increment the valueN)r)   r*   r+   r   r   r,   r6   r7   r   r8   r9   r   r"   r   r   r   r   r:      s   r:   c               @   s6   e Zd ZdZedjddZeddddjddZdS )ฺSliderStylezButton style widget.ZSliderStyleModelT)r'   NzColor of the slider handle.)ฺ
allow_noner&   )	r)   r*   r+   r   r   r,   r7   r
   Zhandle_colorr   r   r   r   r;      s   r;   c               @   sฦ   e Zd ZdZedjddZedjddZedddjddZ	e
d	d
gd	ddjddZedddjddZedddjddZedddjddZedddjddZeejf ddieZdS )ฺ	IntSliderzKSlider widget that represents an integer bounded from above and below.
    ZIntSliderViewT)r'   ZIntSliderModelr   z#Minimum step to increment the value)r&   ฺ
horizontalฺverticalzVertical or horizontal.)ฺvaluesฺdefault_valuer&   z3Display the current value of the slider next to it.ฺdzFormat for the readoutzAUpdate the value of the widget as the user is holding the slider.FzEnable or disable user changesr'   N)r)   r*   r+   r   r   r,   r6   r7   r   r"   r   ฺorientationr   ฺreadoutr   ฺreadout_formatr9   r8   r   r;   r   ฺstyler   r   r   r   r=      s   r=   c               @   s6   e Zd ZdZedjddZeddddjddZdS )ฺProgressStylezButton style widget.ZProgressStyleModelT)r'   NzColor of the progress bar.)r<   r&   )	r)   r*   r+   r   r   r,   r7   r
   Z	bar_colorr   r   r   r   rG   ฌ   s   rG   c               @   s   e Zd ZdZedjddZedjddZeddgddd	jddZ	ed
ddddgddd	jddZ
eejf ddieZdS )ฺIntProgresszJProgress bar that represents an integer bounded from above and below.
    ZProgressViewT)r'   ZIntProgressModelr>   r?   zVertical or horizontal.)r@   rA   r&   ZsuccessฺinfoZwarningZdangerฺ z-Use a predefined styling for the progess bar.r'   N)r)   r*   r+   r   r   r,   r6   r7   r   rC   Z	bar_styler   rG   r   rF   r   r   r   r   rH   ณ   s   rH   c               @   sl   e Zd Zee e dddjddZedd Zej	dd Zed	d
 Z
e
j	dd
 Z
eddd ZdS )ฺ	_IntRange)r   r   zTuple of (lower, upper) bounds)rA   r&   T)r'   c             C   s
   | j d S )Nr   )r   )r   r   r   r   ฺlowerศ   s    z_IntRange.lowerc             C   s   || j d f| _ d S )Nr   )r   )r   rL   r   r   r   rL   ฬ   s    c             C   s
   | j d S )Nr   )r   )r   r   r   r   ฺupperะ   s    z_IntRange.upperc             C   s   | j d |f| _ d S )Nr   )r   )r   rM   r   r   r   rM   ิ   s    r   c             C   s$   |d \}}||k rt d||fS )Nr   zsetting lower > upper)r   )r   r0   rL   rM   r   r   r   r1   ุ   s    z_IntRange._validate_valueN)r)   r*   r+   r   r   r,   r   ฺpropertyrL   ฺsetterrM   r   r1   r   r   r   r   rK   ฤ   s   rK   c               @   sค   e Zd ZdZedddjddZedddjddZed	d
djddZ	e
djddZe
djddZeddjddZeddjddZedddjddZdS )ฺPlayzSPlay/repeat buttons to step through values automatically, and optionally loop.
    r/   z'The maximum value for the play control.)r&   T)r'   r   zIncrement stepFzEnable or disable user changesZPlayViewZ	PlayModelz)Whether the control is currently playing.z4Whether the control will repeat in a continous loop.z,Show the repeat toggle button in the widget.N)r)   r*   r+   r   r   r,   Zintervalr"   r   r8   r   r6   r7   Z_playingฺ_repeatZshow_repeatr   r   r   r   rP   ฿   s   rP   c                   sj   e Zd ZedddjddZedddjddZ fdd	Zed
ddd Z	ed fddZ
  ZS )ฺ_BoundedIntRanger/   z	Max value)r&   T)r'   r   z	Min valuec                s`   |  ddก|  ddก }}|  dd กsJd| d|  d| d|  f|d< tt| j|| d S )Nr    r   r!   r/   r   g      ่?g      ะ?)ฺgetr   rR   r   )r   ฺargsr   r    r!   )r(   r   r   r   ๒   s
    z_BoundedIntRange.__init__r    r!   c             C   sค   |d }|d }|j dkr,|| jkr,td|j dkrH|| jk rHtd|j dkrtt|| jd t|| jd f| _|j dkr t|| jd t|| jd f| _|S )	Nฺtraitr   r    zsetting min > maxr!   zsetting max < minr   r   )ฺnamer!   r   r    r   )r   r0   rU   ฺnewr   r   r   ฺ_validate_bounds๙   s    
"
"z!_BoundedIntRange._validate_boundsr   c                sP   t t|  |ก\}}t|| jt|| j }}t|| jt|| j }}||fS )N)r   rR   r1   r    r!   )r   r0   rL   rM   )r(   r   r   r1     s    z _BoundedIntRange._validate_value)r)   r*   r+   r   r,   r!   r    r   r   rX   r1   r-   r   r   )r(   r   rR   ๎   s
   rR   c               @   sส   e Zd ZdZedjddZedjddZedddjddZ	e
d	d
gd	ddjddZedddjddZedddjddZedddjddZeeddjf ddieZedddjddZdS )ฺIntRangeSlidera5  Slider/trackbar that represents a pair of ints bounded by minimum and maximum value.

    Parameters
    ----------
    value : int tuple
        The pair (`lower`, `upper`) of integers
    min : int
        The lowest allowed value for `lower`
    max : int
        The highest allowed value for `upper`
    ZIntRangeSliderViewT)r'   ZIntRangeSliderModelr   z$Minimum step that the value can take)r&   r>   r?   zVertical or horizontal.)r@   rA   r&   z3Display the current value of the slider next to it.rB   zFormat for the readoutzAUpdate the value of the widget as the user is sliding the slider.zSlider style customizations.r'   FzEnable or disable user changesN)r)   r*   r+   r   r   r,   r6   r7   r   r"   r   rC   r   rD   r   rE   r9   r   r;   r   rF   r8   r   r   r   r   rY     s   rY   N))r   Zwidget_descriptionr   r   Zvaluewidgetr   Zwidgetr   r   Zwidget_corer   Z	traitletsr	   Ztrait_typesr
   r   r   r   r   r   r   r   r   r   r   r   r#   r   r$   r%   r.   r4   r:   r;   r=   rG   rH   rK   rP   rR   rY   r   r   r   r   ฺ<module>   sF   (	
-
	





!