U
    l±Ëh(7  ã                   @   s¢   d dl Z d dlZd dlmZmZmZmZmZ zd dlmZ W n  e	k
r\   d dl
mZ Y nX ddlmZ ddlmZ ddlmZ ddlmZ G d	d
„ d
eƒZdS )é    N)ÚUnionÚTupleÚOptionalÚCallableÚAny)ÚLiteralé   )Ú	CTkCanvas)ÚThemeManager)Ú
DrawEngine)ÚCTkBaseClassc                       sˆ  e Zd ZdZd5eee ee ee ee eee	eef f eeee	eef f  eeee	eef f  eeee	eef f  ee
jdf eed eedœ‡ fd	d
„Z‡ fdd„Zd6‡ fdd„	Z‡ fdd„Zd7‡ fdd„	Zd8‡ fdd„	Zeedœ‡ fdd„Zdd„ Zd9dd„Zedœdd„Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Zd:eeeeef d)œd*d+„Zd;eed,œd-d.„Z d/d0„ Z!d1d2„ Z"d3d4„ Z#‡  Z$S )<ÚCTkProgressBarz­
    Progressbar with rounded corners, border, variable support,
    indeterminate mode, vertical orientation.
    For detailed information check out the documentation.
    NÚtransparentÚ
horizontalÚdeterminater   )r   Zindeterminate)ÚmasterÚwidthÚheightÚcorner_radiusÚborder_widthÚbg_colorÚfg_colorÚborder_colorÚprogress_colorÚvariableÚorientationÚmodeÚdeterminate_speedÚindeterminate_speedc                    sê  |d kr|  ¡ dkrd}nd}|d kr<|  ¡ dkr8d}nd}tƒ jf ||||dœ|—Ž |d krntjd d n|  |¡| _|d krtjd d n|  |¡| _|	d kr²tjd d n|  |	¡| _|
| _	d	| _
d | _d | _|d krìtjd d
 n|| _|d kr
tjd d n|| _d| _|| _d| _d| _|| _d	| _|| _|| _| jddd | jddd t| d|  | j¡|  | j¡d| _| jjdddddd t| jƒ| _ |  !¡  | j	d k	ræ| j	 "d| j#¡| _d| _
| j$| j	 %¡ dd d	| _
d S )NÚverticalé   éÈ   )r   r   r   r   r   r   r   r   Fr   r   g      à?r   gš™™™™™Ù?r   )Zweight)r   Zhighlightthicknessr   r   Znswe)ÚrowÚcolumnZrowspanZ
columnspanZstickyÚwriteT©Úfrom_variable_callback)&ÚlowerÚsuperÚ__init__r
   ÚthemeÚ_check_color_typeÚ_border_colorÚ	_fg_colorÚ_progress_colorÚ	_variableÚ_variable_callback_blockedÚ_variable_callback_nameÚ_loop_after_idÚ_corner_radiusÚ_border_widthÚ_determinate_valueÚ_determinate_speedÚ_indeterminate_valueÚ_indeterminate_widthÚ_indeterminate_speedÚ_loop_runningÚ_orientationÚ_modeZgrid_rowconfigureZgrid_columnconfigurer	   Ú_apply_widget_scalingÚ_desired_widthÚ_desired_heightÚ_canvasZgridr   Ú_draw_engineÚ_drawÚ	trace_addÚ_variable_callbackÚsetÚget)Úselfr   r   r   r   r   r   r   r   r   r   r   r   r   r   Úkwargs©Ú	__class__© úQ/tmp/pip-unpacked-wheel-ckatmccg/customtkinter/windows/widgets/ctk_progressbar.pyr)      sR    """

ýzCTkProgressBar.__init__c                    s>   t ƒ j||Ž | jj|  | j¡|  | j¡d | jdd d S )N©r   r   T©Úno_color_updates)r(   Ú_set_scalingr@   Ú	configurer=   r>   r?   rB   )rG   ÚargsrH   rI   rK   rL   rP   a   s
    
ÿzCTkProgressBar._set_scalingc                    s:   t ƒ  ||¡ | jj|  | j¡|  | j¡d |  ¡  d S )NrM   )r(   Ú_set_dimensionsr@   rQ   r=   r>   r?   rB   )rG   r   r   rI   rK   rL   rS   h   s
    
ÿzCTkProgressBar._set_dimensionsc                    s(   | j d k	r| j  d| j¡ tƒ  ¡  d S )Nr$   )r/   Útrace_remover1   r(   Údestroy©rG   rI   rK   rL   rU   o   s    
zCTkProgressBar.destroyFc              	      sŒ  t ƒ  |¡ | j ¡ dkr d}n| j ¡ dkr4d}nd}| jdkr~| j |  | j¡|  | j	¡|  | j
¡|  | j¡d| j|¡}n~t | jtj d ¡d d	 }td
|| jd	  ƒ}td|| jd	  ƒ}| j |  | j¡|  | j	¡|  | j
¡|  | j¡|||¡}|dks|rˆ| jj|  | j¡d | jjd|  | j¡|  | j¡d | jjd|  | j¡|  | j¡d | jjd|  | j¡|  | j¡d d S )Nr   Úwr   Úsr   r   é(   r   é   g      ð?g        F)ÚbgZborder_parts)ÚfillÚoutlineZinner_partsZprogress_parts)r(   rB   r;   r'   r<   rA   Z%draw_rounded_progress_bar_with_borderr=   Z_current_widthZ_current_heightr3   r4   r5   ÚmathÚsinr7   ÚpiÚminr8   Úmaxr@   rQ   Z_apply_appearance_modeZ	_bg_colorZ
itemconfigr,   r-   r.   )rG   rO   r   Zrequires_recoloringZprogress_valueZprogress_value_1Zprogress_value_2rI   rK   rL   rB   u   sP    



ú


ú

þ

þ

þzCTkProgressBar._drawc                    sZ  d|kr|  d¡| _d}d|kr0|  d¡| _d}d|krN|  |  d¡¡| _d}d|krl|  |  d¡¡| _d}d|krŠ|  |  d¡¡| _d}d|krú| jd k	r¬| j d| j	¡ |  d¡| _| jd k	rô| jd	krô| j 
d| j¡| _	| j| j ¡ dd
 nd | _d|kr|  d¡| _d}d|kr*|  d¡| _d|kr@|  d¡| _tƒ jf d|i|—Ž d S )Nr   Tr   r   r   r   r   r$   Ú r%   r   r   r   Úrequire_redraw)Úpopr3   r4   r+   r-   r,   r.   r/   rT   r1   rC   rD   rE   rF   r<   r6   r9   r(   rQ   )rG   rd   rH   rI   rK   rL   rQ       s>    



zCTkProgressBar.configure)Úattribute_nameÚreturnc                    sœ   |dkr| j S |dkr| jS |dkr*| jS |dkr8| jS |dkrF| jS |dkrT| jS |dkrb| jS |dkrp| jS |d	kr~| jS |d
krŒ| j	S t
ƒ  |¡S d S )Nr   r   r   r   r   r   r   r   r   r   )r3   r4   r-   r,   r.   r/   r;   r<   r6   r9   r(   Úcget)rG   rf   rI   rK   rL   rh   Í   s*    zCTkProgressBar.cgetc                 C   s   | j s| j| j ¡ dd d S )NTr%   )r0   rE   r/   rF   )rG   Úvar_nameÚindexr   rK   rK   rL   rD   è   s    z!CTkProgressBar._variable_callbackc                 C   sx   || _ | j dkrd| _ n| j dk r(d| _ | jdd | jdk	rt|std| _| j t| jtjƒrft| j ƒn| j ¡ d| _dS )z set determinate value r   r   TrN   NF)	r5   rB   r/   r0   rE   Ú
isinstanceÚtkinterZIntVarÚround)rG   Úvaluer&   rK   rK   rL   rE   ì   s    

&zCTkProgressBar.set)rg   c                 C   s   | j S )z get determinate value )r5   rV   rK   rK   rL   rF   ü   s    zCTkProgressBar.getc                 C   s   | j sd| _ |  ¡  dS )z start automatic mode TN)r:   Ú_internal_looprV   rK   rK   rL   Ústart   s    zCTkProgressBar.startc                 C   s    | j dk	r|  | j ¡ d| _dS )z stop automatic mode NF)r2   Zafter_cancelr:   rV   rK   rK   rL   Ústop  s    
zCTkProgressBar.stopc                 C   s‚   | j r~| jdkrV|  j| jd 7  _| jdkr<|  jd8  _|  ¡  |  d| j¡| _n(|  j| j	7  _|  ¡  |  d| j¡| _d S )Nr   é2   r   é   )
r:   r<   r5   r6   rB   Úafterro   r2   r7   r9   rV   rK   rK   rL   ro     s    

zCTkProgressBar._internal_loopc                 C   s\   | j dkr@|  j| jd 7  _| jdkr6|  jd8  _|  ¡  n|  j| j7  _|  ¡  dS )z increase progress r   rr   r   N)r<   r5   r6   rB   r7   r9   rV   rK   rK   rL   Ústep  s    


zCTkProgressBar.stepT)ÚsequenceÚcommandÚaddc                 C   s.   |dks|dkst dƒ‚| jj||dd dS )z called on the tkinter.Canvas ú+TzE'add' argument can only be '+' or True to preserve internal callbacks)rx   N)Ú
ValueErrorr@   Úbind)rG   rv   rw   rx   rK   rK   rL   r{   $  s    zCTkProgressBar.bind)rv   Úfuncidc                 C   s"   |dk	rt dƒ‚| j |d¡ dS )z0 called on the tkinter.Label and tkinter.Canvas NzŽ'funcid' argument can only be None, because there is a bug in tkinter and its not clear whether the internal callbacks will be unbinded or not)rz   r@   Úunbind)rG   rv   r|   rK   rK   rL   r}   *  s    zCTkProgressBar.unbindc                 C   s
   | j  ¡ S ©N)r@   ÚfocusrV   rK   rK   rL   r   1  s    zCTkProgressBar.focusc                 C   s
   | j  ¡ S r~   )r@   Ú	focus_setrV   rK   rK   rL   r€   4  s    zCTkProgressBar.focus_setc                 C   s
   | j  ¡ S r~   )r@   Úfocus_forcerV   rK   rK   rL   r   7  s    zCTkProgressBar.focus_force)NNNNr   NNNNr   r   r   r   )NN)F)F)F)NNT)NN)%Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   Úintr   Ústrr   rl   ÚVariabler   Úfloatr)   rP   rS   rU   rB   rQ   Úanyrh   rD   rE   rF   rp   rq   ro   ru   r   Úboolr{   r}   r   r€   r   Ú__classcell__rK   rK   rI   rL   r      s`                ððK+-
r   )rl   r^   Útypingr   r   r   r   r   r   ÚImportErrorZtyping_extensionsZcore_renderingr	   r*   r
   r   Zcore_widget_classesr   r   rK   rK   rK   rL   Ú<module>   s   