U
    l±Ëh”W  ã                   @   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                       sj  e Zd ZdZdddddddddddddd ddejdddddf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
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	eg ef df e	ee
f e	ee
f e	ejdf 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?‡ fdd„	Zd@‡ fdd„	Ze
edœ‡ fdd„Zd d!„ ZdAd"d#„ZdBd$d%„Zd&d'„ ZdCd(d)„ZdDd*d+„Z dEd,d-„Z!e	ee
f d.œd/d0„Z"dFe
ee	e
ef d1œd2d3„Z#dGe
e
d4œd5d6„Z$d7d8„ Z%d9d:„ Z&d;d<„ Z'‡  Z(S )HÚCTkCheckBoxz
    Checkbox with rounded corners, border, variable support and hover effect.
    For detailed information check out the documentation.
    éd   é   NZtransparentTr   r   )ÚmasterÚwidthÚheightÚcheckbox_widthÚcheckbox_heightÚcorner_radiusÚborder_widthÚbg_colorÚfg_colorÚhover_colorÚborder_colorÚcheckmark_colorÚ
text_colorÚtext_color_disabledÚtextÚfontÚtextvariableÚstateÚhoverÚcommandÚonvalueÚoffvalueÚvariablec              
      s  t ƒ jf ||||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 krÆtjd d n|| _|d krâtjd d n|| _|| _d | _|d krtjd d	 n|  |¡| _|d kr0tjd d
 n|  |¡| _|d krLtƒ n|  |¡| _t| jtƒrt| j | j¡ || _|| _|| _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,j-| ddd| jt,j.|  /| j¡| jd| _| jj(dddd d| jd< | jd k	rò| jdkrò| j 0d| j1¡| _ | j 2¡ | jkrìdnd| _|  3¡  |  4¡  |  5¡  d S )N)r   r   r   r   r   r   r   r   r   r   r   r   r   Fr   )Úweightr   é   ©r'   Zminsizeé   )r   Zhighlightthicknessr   r   é   Únswe©ÚrowÚcolumnZ
columnspanÚstickyÚe)r.   r/   r0   )r   ZbdZpadxZpadyr   Zjustifyr   r    ÚwÚanchorÚ ÚwriteT)6ÚsuperÚ__init__Ú_checkbox_widthÚ_checkbox_heightr	   ÚthemeÚ_check_color_typeÚ	_fg_colorÚ_hover_colorÚ_border_colorÚ_checkmark_colorÚ_corner_radiusÚ_border_widthÚ_textÚ_text_labelÚ_text_colorÚ_text_color_disabledr   Ú_check_font_typeÚ_fontÚ
isinstanceÚadd_size_configure_callbackÚ_update_fontÚ_commandÚ_stateÚ_hoverÚ_check_stateÚ_onvalueÚ	_offvalueÚ	_variableÚ_variable_callback_blockedÚ_textvariableÚ_variable_callback_nameÚgrid_columnconfigureÚ_apply_widget_scalingZgrid_rowconfigurer   Ú_desired_widthÚ_desired_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&   Úkwargs©Ú	__class__© úN/tmp/pip-unpacked-wheel-ckatmccg/customtkinter/windows/widgets/ctk_checkbox.pyr7      sx    """"$$

ý

ý
ù
zCTkCheckBox.__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>)r[   ÚbindÚ	_on_enterrC   Ú	_on_leaveÚtoggle)rf   rm   rj   rj   rk   rc   ~   s    zCTkCheckBox._create_bindingsc                    s–   t ƒ j||Ž | jdd|  d¡d | jj|  | j¡d | j 	d¡ | j
j|  | j¡|  | j¡d | jj|  | j¡|  | j¡d | jdd	 d S )
Nr   r   r(   r)   ©r   Ú	checkmark©r   r   T)Úno_color_updates)r6   Ú_set_scalingrU   rV   rC   Ú	configurer_   rG   r[   ÚdeleterY   rW   rX   r8   r9   re   )rf   Úargsrg   rh   rj   rk   rv   Š   s    
ÿ
ÿzCTkCheckBox._set_scalingrt   c                    s2   t ƒ  ||¡ | jj|  | j¡|  | j¡d d S )Nrt   )r6   Ú_set_dimensionsrY   rw   rV   rW   rX   )rf   r   r   rh   rj   rk   rz   —   s    
ÿzCTkCheckBox._set_dimensionsc                 C   sB   | j dk	r>| 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 Nrr   r   r+   r,   r-   )rC   rw   r_   rG   rY   Zgrid_forgetrZ   ©rf   rj   rj   rk   rJ      s    

zCTkCheckBox._update_fontc                    sB   | j d k	r| j  d| j¡ t| jtƒr4| j | j¡ tƒ  	¡  d S )Nr5   )
rQ   Útrace_removerT   rH   rG   r   Úremove_size_configure_callbackrJ   r6   Údestroyr{   rh   rj   rk   r~   §   s
    
zCTkCheckBox.destroyFc                    sô  t ƒ  |¡ | j |  | j¡|  | j¡|  | j¡|  | j¡¡}| j	dkrv| j 
|  | j¡|  | j¡|  | jd ¡¡}nd}| j d¡ |dks˜|s˜|rð| jj|  | j¡d | jj|  | j¡d | j	dkrZ| jjd|  | j¡|  | j¡d | jjd|  | j¡|  | j¡d d	| j d¡kr@| jjd|  | j¡d
 n| jjd|  | j¡d
 nD| 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 )NTgÂõ(\â?Frs   )ÚbgÚinner_parts)ÚoutlineÚfillÚborder_partsZcreate_line)r‚   )Zfg)r6   re   r\   Zdraw_rounded_rect_with_borderrV   r8   r9   r@   rA   rN   Zdraw_checkmarkr[   rx   rY   rw   Ú_apply_appearance_modeÚ	_bg_colorÚ
itemconfigr<   Zgettagsr?   r>   rL   r]   ÚDISABLEDrC   rE   rD   )rf   ru   Zrequires_recoloring_1Zrequires_recoloring_2rh   rj   rk   re   °   sP    


ý

þ

þ

þ

þ

þzCTkCheckBox._drawc                    sà  d|kr|  d¡| _d}d|kr0|  d¡| _d}d|kr^|  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r,|  d¡| _|  ¡  d}d|krL|  |  d¡¡| _d}d|krl|  |  d¡¡| _d}d|krŒ|  |  d¡¡| _d}d|kr¬|  |  d¡¡| _d}d|krÌ|  |  d¡¡| _d}d|krì|  |  d¡¡| _d}d|kr|  d¡| _d|kr|  d¡| _d|kr>|  d¡| _| j	j| jd d|krÆ| jd k	rp| jdkrp| 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&   r4   r5   FÚrequire_redraw)&Úpopr@   rA   r8   r[   rw   rV   r9   rB   rC   rH   rG   r   r}   rJ   rF   rI   rL   rd   r;   r<   r=   r>   r?   rD   rE   rM   rK   rS   rQ   r|   rT   r`   ra   rb   rO   rN   r6   )rf   rˆ   rg   rh   rj   rk   rw   ß   s|    











zCTkCheckBox.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 |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 tƒ  |¡S d S )Nr   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r$   r%   r&   )r@   rA   r8   r9   r<   r=   r>   r?   rD   rE   rB   rG   rS   rL   rM   rO   rP   rQ   r6   Úcget)rf   rŠ   rh   rj   rk   rŒ   3  sJ    


zCTkCheckBox.cgetc                 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_enabledrL   r]   r‡   ÚsysÚplatformr[   rw   rC   Ú
startswithÚNORMALr{   rj   rj   rk   rd   ]  s&    





zCTkCheckBox._set_cursorc                 C   sŒ   | j dkrˆ| jtjkrˆ| jdkrf| jjd|  | j¡|  | j¡d | jjd|  | j¡|  | j¡d n"| jjd|  | j¡|  | j¡d d S ©NTr€   )r‚   r   rƒ   )	rM   rL   r]   r“   rN   r[   r†   r„   r=   ©rf   Úeventrj   rj   rk   ro   s  s    


þ

þ

þzCTkCheckBox._on_enterc                 C   s˜   | j dkrP| jjd|  | j¡|  | j¡d | jjd|  | j¡|  | j¡d nD| jjd|  | j¡|  | j¡d | jjd|  | j¡|  | j¡d d S r”   )rN   r[   r†   r„   r<   r…   r>   r•   rj   rj   rk   rp     s"    


þ

þ

þ

þzCTkCheckBox._on_leavec                 C   sD   | j s@| j ¡ | jkr$| jdd n| j ¡ | jkr@| jdd d S )NT)Úfrom_variable_callback)rR   rQ   rb   rO   ÚselectrP   Údeselect)rf   Úvar_nameÚindexÚmoderj   rj   rk   ra   ‘  s
    zCTkCheckBox._variable_callbackc                 C   s~   | j tjkrz| jdkr&d| _|  ¡  nd| _|  ¡  | jd k	rhd| _| j | jdkrZ| jn| j	¡ d| _| j
d k	rz|  
¡  d S ©NTF)rL   r]   r“   rN   re   rQ   rR   ÚsetrO   rP   rK   r•   rj   rj   rk   rq   ˜  s    



zCTkCheckBox.togglec                 C   s:   d| _ |  ¡  | jd k	r6|s6d| _| j | j¡ d| _d S r   )rN   re   rQ   rR   rž   rO   ©rf   r—   rj   rj   rk   r˜   ©  s    zCTkCheckBox.selectc                 C   s:   d| _ |  ¡  | jd k	r6|s6d| _| j | j¡ d| _d S )NFT)rN   re   rQ   rR   rž   rP   rŸ   rj   rj   rk   r™   ²  s    zCTkCheckBox.deselect)r‹   c                 C   s   | j dkr| jS | jS )NT)rN   rO   rP   r{   rj   rj   rk   rb   »  s    zCTkCheckBox.get)rm   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)Ú
ValueErrorr[   rn   rC   )rf   rm   r#   r    rj   rj   rk   rn   ¾  s    zCTkCheckBox.bind)rm   Ú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 notrl   )r¢   r[   ÚunbindrC   rc   )rf   rm   r£   rj   rj   rk   r¤   Å  s
    zCTkCheckBox.unbindc                 C   s
   | j  ¡ S ©N)rC   Úfocusr{   rj   rj   rk   r¦   Î  s    zCTkCheckBox.focusc                 C   s
   | j  ¡ S r¥   )rC   Ú	focus_setr{   rj   rj   rk   r§   Ñ  s    zCTkCheckBox.focus_setc                 C   s
   | j  ¡ S r¥   )rC   Úfocus_forcer{   rj   rj   rk   r¨   Ô  s    zCTkCheckBox.focus_force)N)NN)F)F)r   )r   )r   )F)F)NNT)NN))Ú__name__Ú
__module__Ú__qualname__Ú__doc__r]   r“   r   Úintr   r   Ústrr   Útupler   ÚVariableÚboolr   r7   rc   rv   rz   rJ   r~   re   rw   ÚanyrŒ   rd   ro   rp   ra   rq   r˜   r™   rb   rn   r¤   r¦   r§   r¨   Ú__classcell__rj   rj   rh   rk   r      sŠ   ç

çl
	/T*



	
		r   )r]   r   Útypingr   r   r   r   r   Zcore_renderingr   r:   r	   r
   Zcore_widget_classesr   r   r   r   rj   rj   rj   rk   Ú<module>   s   