U
    l±Ëh|[  ã                   @   s|   d dl Z d dlZd dlmZmZmZmZ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 G d	d
„ d
eƒZdS )é    N)ÚUnionÚTupleÚCallableÚOptionalÚAnyé   )Ú	CTkCanvas)ÚThemeManager)Ú
DrawEngine)ÚCTkBaseClass)ÚCTkFontc                       s~  e Zd ZdZdddddddddddddddd dddd	dd
dejfeee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
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	e
ee
e
f f  ee	e
ee
e
f f  e
ee	eef  e	ejdf e	ee
f e	ee
f e	ejdf ee	eef e
dœ‡ fdd„Zd?ee
 dœdd„Z‡ fdd„Zd@eedœ‡ fdd„Zdd„ Z‡ fdd„Zdd„ ZdA‡ fdd„	ZdB‡ fdd „	Ze
ed!œ‡ fd"d#„ZdCd$d%„ZdDd&d'„ZdEd(d)„Ze	ee
f d*œd+d,„ZdFd-d.„Z dGd/d0„Z!d1d2„ Z"dHe
ee	e
ef d3œd4d5„Z#dIe
e
d6œd7d8„Z$d9d:„ Z%d;d<„ Z&d=d>„ Z'‡  Z(S )JÚ	CTkSwitchzŠ
    Switch with rounded corners, border, label, command, variable support.
    For detailed information check out the documentation.
    éd   é   é$   é   NÚtransparentr   r   T)ÚmasterÚwidthÚheightÚswitch_widthÚswitch_heightÚcorner_radiusÚborder_widthÚbutton_lengthÚbg_colorÚfg_colorÚborder_colorÚprogress_colorÚbutton_colorÚbutton_hover_colorÚ
text_colorÚtext_color_disabledÚtextÚfontÚtextvariableÚonvalueÚoffvalueÚvariableÚhoverÚcommandÚstatec              
      sF  t ƒ jf ||	||dœ|—Ž || _|| _| j|dd| _|
d krNtjd d n|  |
¡| _|d krptjd d n| j|dd| _	|d kr–tjd d n|  |¡| _
|d kr¸tjd d n|  |¡| _|d krÚtjd d	 n|  |¡| _|d krütjd d
 n|  |¡| _|| _d | _|d kr$tƒ n|  |¡| _t| jtƒrL| j | j¡ |d krdtjd d n|| _|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¡d | j$ddd | j&ddd t'| d|  %| j(¡|  %| j)¡d| _*| j*j+ddddd t'| d|  %| j¡|  %| j¡d| _,| j,j+dddd t-| j,ƒ| _.t/j0| ddd| jt/j1|  2| j¡| j#d| _| jj+dddd d| jd< | j d k	r*| j dkr*| j  3d| j4¡| _"| j  5¡ | jkr$dnd| _|  6¡  |  7¡  |  8¡  d S )N)r   r   r   r   T©Ztransparencyr   r   r   r   r    r!   r"   r   r   r   Fr   )Úweightr   é   ©r-   Zminsizeé   )r   Zhighlightthicknessr   r   é   Únswe©ÚrowÚcolumnZ
columnspanÚstickyÚ )r4   r5   r6   )r   ZbdZpadxZpadyr#   Zjustifyr$   r%   ÚwÚanchorÚwrite)9ÚsuperÚ__init__Ú_switch_widthÚ_switch_heightÚ_check_color_typeÚ_border_colorr	   ÚthemeÚ	_fg_colorÚ_progress_colorÚ_button_colorÚ_button_hover_colorÚ_text_colorÚ_text_color_disabledÚ_textÚ_text_labelr   Ú_check_font_typeÚ_fontÚ
isinstanceÚadd_size_configure_callbackÚ_update_fontÚ_corner_radiusÚ_border_widthÚ_button_lengthÚ_hover_stateÚ_check_stateÚ_hoverÚ_stateÚ_onvalueÚ	_offvalueÚ_commandÚ	_variableÚ_variable_callback_blockedÚ_variable_callback_nameÚ_textvariableÚgrid_columnconfigureÚ_apply_widget_scalingZgrid_rowconfigurer   Z_current_widthZ_current_heightÚ
_bg_canvasÚgridÚ_canvasr
   Ú_draw_engineÚtkinterZLabelÚLEFTÚ_apply_font_scalingÚ	trace_addÚ_variable_callbackÚgetÚ_create_bindingsÚ_set_cursorÚ_draw)Úselfr   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   Úkwargs©Ú	__class__© úL/tmp/pip-unpacked-wheel-ckatmccg/customtkinter/windows/widgets/ctk_switch.pyr<      s~    "&""""

ý

ý
ù
zCTkSwitch.__init__©Úsequencec                 C   s”   |dks|dkr0| j  d| j¡ | j d| j¡ |dks@|dkr`| j  d| j¡ | j d| j¡ |dksp|dkr| j  d| j¡ | j d| j¡ dS )zS set necessary bindings for functionality of widget, will overwrite other bindings Nz<Enter>z<Leave>z
<Button-1>)ra   ÚbindÚ	_on_enterrI   Ú	_on_leaveÚtoggle)rl   rs   rp   rp   rq   ri      s    zCTkSwitch._create_bindingsc                    sŠ   t ƒ j||Ž | jdd|  d¡d | jj|  | j¡d | jj|  | j	¡|  | j
¡d | jj|  | j¡|  | j¡d | jdd d S )	Nr   r   r.   r/   ©r$   ©r   r   T©Úno_color_updates)r;   Ú_set_scalingr]   r^   rI   Ú	configurere   rK   r_   Ú_desired_widthÚ_desired_heightra   r=   r>   rk   )rl   Úargsrm   rn   rp   rq   r|      s    
ÿ
ÿzCTkSwitch._set_scalingry   c                    s2   t ƒ  ||¡ | jj|  | j¡|  | j¡d d S )Nry   )r;   Ú_set_dimensionsr_   r}   r^   r~   r   )rl   r   r   rn   rp   rq   r   ™   s    
ÿzCTkSwitch._set_dimensionsc                 C   s8   | j j|  | j¡d | j ¡  | jjddddd dS )zX pass font to tkinter widgets with applied font scaling and update grid with workaround rx   r   r1   r2   r3   N)rI   r}   re   rK   r_   Zgrid_forgetr`   ©rl   rp   rp   rq   rN   Ÿ   s    
zCTkSwitch._update_fontc                    sB   | j d k	r| j  d| j¡ t| jtƒr4| j | j¡ tƒ  	¡  d S )Nr:   )
rY   Útrace_remover[   rL   rK   r   Úremove_size_configure_callbackrN   r;   Údestroyr‚   rn   rp   rq   r…   ¨   s
    
zCTkSwitch.destroyc                 C   sì   | j rè| jtjkrxtjdkrD| jjdd | jd k	rv| jjdd qètj 	d¡rè| jjdd | jd k	rè| jjdd np| jtj
krètjdkr¶| jjdd | jd k	rè| jjdd n2tj 	d¡rè| jjdd | jd k	rè| jjdd d S )NÚdarwinZarrow)ÚcursorÚwinZpointinghandZhand2)Z_cursor_manipulation_enabledrU   rc   ÚDISABLEDÚsysÚplatformra   r}   rI   Ú
startswithÚNORMALr‚   rp   rp   rq   rj   ²   s&    





zCTkSwitch._set_cursorFc              
      s$  t ƒ  |¡ | jdkrb| j |  | j¡|  | j¡|  | j¡|  | j	¡|  | j
¡|  | j¡dd¡}nJ| j |  | j¡|  | j¡|  | j¡|  | j	¡|  | j
¡|  | j¡dd¡}|dksº|r | jj|  | j¡d | jj|  | j¡d | jdkr| jjd|  | j¡|  | j¡d	 n"| jjd|  | j¡|  | j¡d	 | jjd
|  | j¡|  | j¡d	 | jdkrŠ| jjd|  | j¡|  | j¡d	 n"| jjd|  | j¡|  | j¡d	 | jjd|  | j¡|  | j¡d	 | jtjkrô| jj|  | j¡d n| jj|  | j¡d | jj|  | j¡d d S )NTr   r8   r   F)Úbgr   Zborder_parts©ÚfillÚoutlineZinner_partsZprogress_partsÚslider_parts)Zfg)r;   rk   rS   rb   Z*draw_rounded_slider_with_border_and_buttonr^   r=   r>   rO   rP   rQ   r_   r}   Ú_apply_appearance_modeZ	_bg_colorra   r@   Ú
itemconfigrB   rC   rD   rU   rc   r‰   rI   rG   rF   )rl   r{   Zrequires_recoloringrn   rp   rq   rk   È   sj    





 ú




 ú

þ

þ

þ

þ

þ

þzCTkSwitch._drawc                    s   d|kr|  d¡| _d}d|kr0|  d¡| _d}d|krH|  d¡| _d}d|krv|  d¡| _| jj|  | j¡d d}d|kr¤|  d¡| _| jj|  | j¡d d}d	|krÈ|  d	¡| _	| j
j| j	d
 d|kr"t| jtƒrì| j | j¡ |  |  d¡¡| _t| jtƒr| j | j¡ |  ¡  d|krD|  d¡| _|  ¡  d}d|krd|  |  d¡¡| _d}d|krˆ| j|  d¡dd| _d}d|kr¬| j|  d¡dd| _d}d|krÌ|  |  d¡¡| _d}d|krì|  |  d¡¡| _d}d|kr|  |  d¡¡| _d}d|kr,|  |  d¡¡| _d}d|krB|  d¡| _d|krX|  d¡| _d|kr~|  d¡| _| j
j| jd d|kr| jd k	r°| jdkr°| j  d| j!¡ |  d¡| _| jd k	r| jdkr| j "d| j#¡| _!| j $¡ | j%krüdnd| _&d}t'ƒ jf d|i|—Ž d S )Nr   Tr   r   r   )r   r   )r   r#   )r#   r$   r+   r   r   r,   r   r   r    r!   r"   r)   r*   r%   )r%   r(   r7   r:   FÚrequire_redraw)(ÚpoprO   rP   rQ   r=   ra   r}   r^   r>   rH   rI   rL   rK   r   r„   rN   rJ   rM   rU   rj   r?   rB   r@   rC   rD   rE   rF   rG   rT   rX   r\   rY   rƒ   r[   rf   rg   rh   rV   rS   r;   )rl   r•   rm   rn   rp   rq   r}     sˆ    












zCTkSwitch.configure)Úattribute_nameÚreturnc                    sB  |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 |dkrš| j
S |dkr¨| jS |dkr¶| jS |dkrÄ| jS |dkrÒ| jS |dk râ| jS |dk rò| jS |dkr| jS |dkr| jS |dkr"| jS |dkr2| jS tƒ  |¡S d S )Nr   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   )rO   rP   rQ   r=   r>   rB   r@   rC   rD   rE   rF   rG   rH   rK   r\   rV   rW   rY   rT   rX   rU   r;   Úcget)rl   r—   rn   rp   rq   r™   ]  sV    





zCTkSwitch.cgetc                 C   sz   | j tjk	rv| jdkrd| _nd| _| jdd | jd k	rdd| _| j | jdkrV| jn| j	¡ d| _| j
d k	rv|  
¡  d S )NTFrz   )rU   rc   r‰   rS   rk   rY   rZ   ÚsetrV   rW   rX   ©rl   Úeventrp   rp   rq   rw   Ž  s    


zCTkSwitch.togglec                 C   sN   | j tjk	s|rJd| _| jdd | jd k	rJ|sJd| _| j | j¡ d| _d S )NTrz   F)	rU   rc   r‰   rS   rk   rY   rZ   rš   rV   ©rl   Úfrom_variable_callbackrp   rp   rq   ÚselectŸ  s    zCTkSwitch.selectc                 C   sN   | j tjk	s|rJd| _| jdd | jd k	rJ|sJd| _| j | j¡ d| _d S )NFTrz   )	rU   rc   r‰   rS   rk   rY   rZ   rš   rW   r   rp   rp   rq   Údeselectª  s    zCTkSwitch.deselect)r˜   c                 C   s   | j dkr| jS | jS )NT)rS   rV   rW   r‚   rp   rp   rq   rh   µ  s    zCTkSwitch.getc                 C   s@   | j dkr<| jdkr<d| _| jjd|  | j¡|  | j¡d d S )NTÚnormalr’   r   )rT   rU   rR   ra   r”   r“   rE   r›   rp   rp   rq   ru   ¸  s    

þzCTkSwitch._on_enterc                 C   s,   d| _ | jjd|  | j¡|  | j¡d d S )NFr’   r   )rR   ra   r”   r“   rD   r›   rp   rp   rq   rv   ¿  s
    

þzCTkSwitch._on_leavec                 C   sD   | j s@| j ¡ | jkr$| jdd n| j ¡ | jkr@| jdd d S )NT)rž   )rZ   rY   rh   rV   rŸ   rW   r    )rl   Úvar_nameÚindexÚmoderp   rp   rq   rg   Å  s
    zCTkSwitch._variable_callback)rs   r*   Úaddc                 C   s@   |dks|dkst dƒ‚| jj||d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)r¥   N)Ú
ValueErrorra   rt   rI   )rl   rs   r*   r¥   rp   rp   rq   rt   Ì  s    zCTkSwitch.bind)rs   Úfuncidc                 C   s<   |dk	rt dƒ‚| j |d¡ | j |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 notrr   )r§   ra   ÚunbindrI   ri   )rl   rs   r¨   rp   rp   rq   r©   Ó  s
    zCTkSwitch.unbindc                 C   s
   | j  ¡ S ©N)rI   Úfocusr‚   rp   rp   rq   r«   Ü  s    zCTkSwitch.focusc                 C   s
   | j  ¡ S rª   )rI   Ú	focus_setr‚   rp   rp   rq   r¬   ß  s    zCTkSwitch.focus_setc                 C   s
   | j  ¡ S rª   )rI   Úfocus_forcer‚   rp   rp   rq   r­   â  s    zCTkSwitch.focus_force)N)NN)F)F)N)F)F)r   )r   )NNT)NN))Ú__name__Ú
__module__Ú__qualname__Ú__doc__rc   r   r   Úintr   r   Ústrr   Útupler   ÚVariableÚboolr   r<   ri   r|   r   rN   r…   rj   rk   r}   Úanyr™   rw   rŸ   r    rh   ru   rv   rg   rt   r©   r«   r¬   r­   Ú__classcell__rp   rp   rn   rq   r      s’   å


åo	
9\1




	r   )rc   rŠ   Útypingr   r   r   r   r   Zcore_renderingr   rA   r	   r
   Zcore_widget_classesr   r$   r   r   rp   rp   rp   rq   Ú<module>   s   