U
    l±ËhêE  ã                   @   s€   d dl Z d dl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 dd	lmZmZ G d
d„ deƒZdS )é    N)ÚUnionÚTupleÚOptionalÚAnyé   )Ú	CTkCanvas)ÚThemeManager)Ú
DrawEngine)ÚCTkBaseClass)ÚCTkFont)Úpop_from_dict_by_setÚcheck_kwargs_emptyc                       sH  e Zd ZdZdZddddddd	d
ddddhZ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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jdf eedf e
eeef  edœ‡ fdd„Zd\e
e dœdd„Zdd„ Zdd„ Z‡ fdd„Z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.d/„Zdad0d1„Zd2d3„ Zd4d5„ Z dbd6d7„Z!dcd8d9„Z"ddd:d;„Z#d<d=„ Z$d>d?„ Z%d@dA„ Z&dBdC„ Z'dDdE„ Z(dFdG„ Z)dHdI„ Z*dJdK„ Z+dLdM„ Z,dNdO„ Z-dPdQ„ Z.dRdS„ Z/dTdU„ Z0dVdW„ Z1dXdY„ Z2dZd[„ Z3‡  Z4S )eÚCTkEntryz”
    Entry with rounded corners, border, textvariable support, focus and placeholder.
    For detailed information check out the documentation.
    é   ZexportselectionZinsertborderwidthZinsertofftimeZinsertontimeZinsertwidthZjustifyZselectborderwidthÚshowZ	takefocusÚvalidateZvalidatecommandZxscrollcommandéŒ   é   NÚtransparent)ÚmasterÚwidthÚheightÚcorner_radiusÚborder_widthÚbg_colorÚfg_colorÚborder_colorÚ
text_colorÚplaceholder_text_colorÚtextvariableÚplaceholder_textÚfontÚstatec              
      s  t ƒ j||||d | jddd | jddd |d krFtjd d n| j|dd| _|	d krlt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| _i | _|| _|| _d| _|d kr.tƒ n|  |¡| _t| jtƒrV| j | j¡ | jd ks€| jdks€| j d| j¡| _t| d|  | j¡|  | j¡d| _ t!| j ƒ| _"t#j$f | ddd|  %| j¡| j| jdœt&|| j'ƒ—Ž| _(t)|dd |  *¡  |  +¡  |  ,¡  |  -¡  d S )N)r   r   r   r   r   r   )Zweightr   r   T)Ztransparencyr   r   r   r   r   FÚ Úwrite)r   Úhighlightthicknessr   r   )r   Zbdr   r%   r!   r"   r   )Zraise_error).ÚsuperÚ__init__Zgrid_rowconfigureZgrid_columnconfigurer   ÚthemeÚ_check_color_typeÚ	_fg_colorÚ_text_colorÚ_placeholder_text_colorÚ_border_colorÚ_corner_radiusÚ_border_widthÚ_is_focusedÚ_placeholder_textÚ_placeholder_text_activeÚ_pre_placeholder_argumentsÚ_textvariableÚ_stateZ_textvariable_callback_namer   Ú_check_font_typeÚ_fontÚ
isinstanceÚadd_size_configure_callbackÚ_update_fontZ	trace_addÚ_textvariable_callbackr   Ú_apply_widget_scalingÚ_current_widthÚ_current_heightÚ_canvasr	   Ú_draw_engineÚtkinterZEntryÚ_apply_font_scalingr   Ú_valid_tk_entry_attributesÚ_entryr   Ú_create_gridÚ_activate_placeholderÚ_create_bindingsÚ_draw)Úselfr   r   r   r   r   r   r   r   r   r   r   r    r!   r"   Úkwargs©Ú	__class__© úK/tmp/pip-unpacked-wheel-ckatmccg/customtkinter/windows/widgets/ctk_entry.pyr'      sT    &"""

ý
ú
ù	zCTkEntry.__init__©Úsequencec                 C   sD   |dks|dkr | j  d| j¡ |dks0|dkr@| j  d| j¡ dS )zS set necessary bindings for functionality of widget, will overwrite other bindings Nz	<FocusIn>z
<FocusOut>)rD   ÚbindÚ_entry_focus_inÚ_entry_focus_out)rI   rP   rM   rM   rN   rG   d   s    zCTkEntry._create_bindingsc                 C   s¦   | j jdddd | j| jkrl| jjdddt|  | j¡t|  | jd ¡ƒƒ|  | j	¡|  | j	d ¡fd n6| jjddd|  | j¡|  | j	¡|  | j	d ¡fd d S )Nr   Únswe©ÚcolumnÚrowÚstickyé   r   )rV   rW   rX   ZpadxZpady)
r?   Úgridr.   Ú_minimum_x_paddingrD   Úminr<   Úroundr>   r/   ©rI   rM   rM   rN   rE   k   s     þ
þzCTkEntry._create_gridc                 C   s   | j  ¡ dkr|  ¡  d S ©Nr#   )r4   ÚgetrF   )rI   Úvar_nameÚindexÚmoderM   rM   rN   r;   w   s    zCTkEntry._textvariable_callbackc                    s\   t ƒ j||Ž | jj|  | j¡d | jj|  | j¡|  | j	¡d |  
¡  | jdd d S )N©r!   ©r   r   T©Úno_color_updates)r&   Ú_set_scalingrD   Ú	configurerB   r7   r?   r<   Ú_desired_widthÚ_desired_heightrE   rH   )rI   ÚargsrJ   rK   rM   rN   rh   {   s
     zCTkEntry._set_scalingc                    s>   t ƒ  ||¡ | jj|  | j¡|  | j¡d | jdd d S )Nre   Trf   )r&   Ú_set_dimensionsr?   ri   r<   rj   rk   rH   )rI   r   r   rK   rM   rN   rm   ƒ   s
    
ÿzCTkEntry._set_dimensionsc                 C   s6   | j j|  | j¡d | j ¡  | jjdddd dS )zX pass font to tkinter widgets with applied font scaling and update grid with workaround rd   r   rT   rU   N)rD   ri   rB   r7   r?   Zgrid_forgetrZ   r^   rM   rM   rN   r:   Š   s    
zCTkEntry._update_fontc                    s(   t | jtƒr| j | j¡ tƒ  ¡  d S ©N)r8   r7   r   Úremove_size_configure_callbackr:   r&   Údestroyr^   rK   rM   rN   rp   “   s    zCTkEntry.destroyFc                    s¤  t ƒ  |¡ | j |  | j¡|  | j¡|  | j¡|  | j¡¡}|sL|dkr | j	j
|  | j¡d |  | j¡dkrÊ| j	jd|  | j¡|  | j¡d | jj
|  | j¡|  | j¡|  | j¡|  | j¡d nV| j	jd|  | j¡|  | j¡d | jj
|  | j¡|  | j¡|  | j¡|  | j¡d | j	jd|  | j¡|  | j¡d | jrv| jj|  | j¡|  | j¡|  | j¡d n*| jj|  | j¡|  | j¡|  | j¡d d S )	NF)Úbgr   Zinner_parts)ÚfillÚoutline)rq   ZdisabledbackgroundZreadonlybackgroundZhighlightcolorZborder_parts)ÚfgÚdisabledforegroundZinsertbackground)r&   rH   r@   Zdraw_rounded_rect_with_borderr<   r=   r>   r.   r/   r?   ri   Ú_apply_appearance_modeZ	_bg_colorr*   Z
itemconfigrD   r-   r2   Úconfigr,   r+   )rI   rg   Zrequires_recoloringrK   rM   rN   rH   ™   sP    


ý

þ


ý

þ


ý

þ

þ

þzCTkEntry._drawc                    s  d|kr$|  d¡| _| jj| jd d|krB|  |  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}d
|kr$|  d
¡| _| jr| j dtj¡ | j d| j¡ n|  ¡  d|krJ|  d¡| _| jj| jd d|kr¦t| jtƒrp| j | j¡ |  |  d¡¡| _t| jtƒrž| j | j¡ |  ¡  d|krÞ| jrÊ|  d¡| jd< n| jj|  d¡d | jjf t|| jƒŽ tƒ jf d|i|—Ž d S )Nr"   )r"   r   Tr   r   r   r   r   r    r   r   )r   r!   r   )r   Úrequire_redraw)Úpopr5   rD   ri   r)   r*   r+   r,   r-   r/   rE   r.   r1   r2   ÚdeleterA   ÚENDÚinsertrF   r4   r8   r7   r   ro   r:   r6   r9   r3   r   rC   r&   )rI   rx   rJ   rK   rM   rN   ri   Â   sZ    



zCTkEntry.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 || j
kr¢| j |¡S tƒ  |¡S d S )Nr   r   r   r   r   r   r   r    r!   r"   )r.   r/   r*   r-   r+   r,   r4   r1   r7   r5   rC   rD   Úcgetr&   )rI   r}   rK   rM   rN   r   ÿ   s.    
zCTkEntry.cgetTc                 C   s.   |dks|dkst dƒ‚| jj||dd dS )ú called on the tkinter.Entry ú+TzE'add' argument can only be '+' or True to preserve internal callbacks)ÚaddN)Ú
ValueErrorrD   rQ   )rI   rP   Úcommandr‚   rM   rM   rN   rQ     s    zCTkEntry.bindc                 C   s.   |dk	rt dƒ‚| j |d¡ | j|d dS )r€   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 notrO   )rƒ   rD   ÚunbindrG   )rI   rP   ZfuncidrM   rM   rN   r…   "  s    zCTkEntry.unbindc                 C   sŠ   | j  ¡ dkr†| jd k	r†| jd ks,| jdkr†d| _d| j  d¡i| _| j j|  | j	¡|  | j	¡dd | j  
dtj¡ | j  d| j¡ d S )Nr#   Tr   )rt   ru   r   r   )rD   r`   r1   r4   r2   r   r3   rw   rv   r,   rz   rA   r{   r|   r^   rM   rM   rN   rF   *  s    ,
þzCTkEntry._activate_placeholderc                 C   sn   | j rj| j d¡dkrjd| _ | jj|  | j¡|  | j¡d | j dtj¡ | j	 
¡ D ]\}}|| j|< qVd S )Nr"   ÚreadonlyF)rt   ru   r   )r2   rD   r   rw   rv   r+   rz   rA   r{   r3   Úitems)rI   ÚargumentÚvaluerM   rM   rN   Ú_deactivate_placeholder5  s    
ÿz CTkEntry._deactivate_placeholderc                 C   s   |   ¡  d| _d S )NF)rF   r0   ©rI   ÚeventrM   rM   rN   rS   ?  s    zCTkEntry._entry_focus_outc                 C   s   |   ¡  d| _d S )NT)rŠ   r0   r‹   rM   rM   rN   rR   C  s    zCTkEntry._entry_focus_inc                 C   s.   | j  ||¡ | js*| j  ¡ dkr*|  ¡  d S r_   )rD   rz   r0   r`   rF   )rI   Zfirst_indexÚ
last_indexrM   rM   rN   rz   G  s    zCTkEntry.deletec                 C   s   |   ¡  | j ||¡S rn   )rŠ   rD   r|   )rI   rb   ÚstringrM   rM   rN   r|   M  s    zCTkEntry.insertc                 C   s   | j r
dS | j ¡ S d S r_   )r2   rD   r`   r^   rM   rM   rN   r`   R  s    zCTkEntry.getc                 C   s   | j  ¡  d S rn   )rD   Úfocusr^   rM   rM   rN   r   X  s    zCTkEntry.focusc                 C   s   | j  ¡  d S rn   )rD   Ú	focus_setr^   rM   rM   rN   r   [  s    zCTkEntry.focus_setc                 C   s   | j  ¡  d S rn   )rD   Úfocus_forcer^   rM   rM   rN   r‘   ^  s    zCTkEntry.focus_forcec                 C   s   | j  |¡S rn   )rD   rb   ©rI   rb   rM   rM   rN   rb   a  s    zCTkEntry.indexc                 C   s   | j  |¡S rn   ©rD   Úicursorr’   rM   rM   rN   r”   d  s    zCTkEntry.icursorc                 C   s   | j  |¡S rn   )rD   Úselect_adjustr’   rM   rM   rN   r•   g  s    zCTkEntry.select_adjustc                 C   s   | j  |¡S rn   r“   r’   rM   rM   rN   Úselect_fromj  s    zCTkEntry.select_fromc                 C   s
   | j  ¡ S rn   )rD   Úselect_clearr^   rM   rM   rN   r—   m  s    zCTkEntry.select_clearc                 C   s
   | j  ¡ S rn   )rD   Úselect_presentr^   rM   rM   rN   r˜   p  s    zCTkEntry.select_presentc                 C   s   | j  ||¡S rn   )rD   Úselect_range)rI   Ústart_indexZ	end_indexrM   rM   rN   r™   s  s    zCTkEntry.select_rangec                 C   s   | j  |¡S rn   )rD   Ú	select_tor’   rM   rM   rN   r›   v  s    zCTkEntry.select_toc                 C   s   | j  |¡S rn   )rD   Úxviewr’   rM   rM   rN   rœ   y  s    zCTkEntry.xviewc                 C   s   | j  |¡S rn   )rD   Úxview_moveto)rI   ÚfrM   rM   rN   r   |  s    zCTkEntry.xview_movetoc                 C   s   | j  ||¡S rn   )rD   Úxview_scroll)rI   ÚnumberÚwhatrM   rM   rN   rŸ     s    zCTkEntry.xview_scroll)N)NN)F)F)NNT)NN)N)N)N)5Ú__name__Ú
__module__Ú__qualname__Ú__doc__r[   rC   rA   ÚNORMALr   Úintr   r   Ústrr   ÚVariableÚtupler   r'   rG   rE   r;   rh   rm   r:   rp   rH   ri   Úanyr   rQ   r…   rF   rŠ   rS   rR   rz   r|   r`   r   r   r‘   rb   r”   r•   r–   r—   r˜   r™   r›   rœ   r   rŸ   Ú__classcell__rM   rM   rK   rN   r      s–          þð
ðK	)=





r   )rA   Útypingr   r   r   r   Zcore_renderingr   r(   r   r	   Zcore_widget_classesr
   r!   r   Zutilityr   r   r   rM   rM   rM   rN   Ú<module>   s   