U
    l±Ëhû_  ã                   @   s   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 dd	lmZ dd
lmZmZ G dd„ deƒZdS )é    N)ÚUnionÚTupleÚOptionalÚCallableÚAnyé   )Ú	CTkCanvas)ÚCTkScrollbar)ÚThemeManager)Ú
DrawEngine)ÚCTkBaseClass)ÚCTkFont)Úpop_from_dict_by_setÚcheck_kwargs_emptyc                       sV  e Zd 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hZd¢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
f  ee	e
ee
e
f f  ee	e
ee
e
f f  ee	eef  edœ‡ fdd„Zd£d d!„Zd¤ed"œ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/d0„	Ze
ed1œ‡ fd2d3„Zd¨e
ee	e
ef d4œd5d6„Zd©e
e
d7œd8d9„Zd:d;„ Zd<d=„ Zd>d?„ Zdªd@dA„Zd«dBdC„Z dDdE„ Z!dFdG„ Z"d¬dHdI„Z#dJdK„ Z$d­dLdM„Z%dNdO„ Z&dPdQ„ Z'dRdS„ Z(dTdU„ Z)dVdW„ Z*dXdY„ Z+dZd[„ Z,d\d]„ Z-d^d_„ Z.d®d`da„Z/dbdc„ Z0ddde„ Z1dfdg„ Z2dhdi„ Z3djdk„ Z4dldm„ Z5dndo„ Z6dpdq„ Z7drds„ Z8d¯dtdu„Z9d°dvdw„Z:dxdy„ Z;dzd{„ Z<d|d}„ Z=d±d~d„Z>d²d€d„Z?d³d‚dƒ„Z@d´d„d…„ZAdµd†d‡„ZBdˆd‰„ ZCd¶dŠd‹„ZDd·dŒd„ZEdŽd„ ZFdd‘„ ZGd’d“„ ZHd”d•„ ZId–d—„ ZJd˜d™„ ZKdšd›„ ZLdœd„ ZMdždŸ„ ZNd d¡„ ZO‡  ZPS )¸Ú
CTkTextboxa  
    Textbox with x and y scrollbars, rounded corners, and all text features of tkinter.Text widget.
    Scrollbars only appear when they are needed. Text is wrapped on line end by default,
    set wrap='none' to disable automatic line wrapping.
    For detailed information check out the documentation.

    Detailed methods and parameters of the underlaying tkinter.Text widget can be found here:
    https://anzeljg.github.io/rin2/book2/2405/docs/tkinter/text.html
    (most of them are implemented here too)
    éÈ   ZautoseparatorsÚcursorZexportselectionZinsertborderwidthZinsertofftimeZinsertontimeZinsertwidthZmaxundoÚpadxÚpadyZselectborderwidthZspacing1Zspacing2Zspacing3ÚstateÚtabsZ	takefocusZundoÚwrapÚxscrollcommandÚyscrollcommandNé   ÚtransparentT)ÚmasterÚwidthÚheightÚcorner_radiusÚborder_widthÚborder_spacingÚbg_colorÚfg_colorÚborder_colorÚ
text_colorÚscrollbar_button_colorÚscrollbar_button_hover_colorÚfontÚactivate_scrollbarsc                    s’  t ƒ j||||d |d kr*tjd d n| j|dd| _|	d krPtjd d n|  |	¡| _|
d krrt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ƒ n|  |¡| _t| jtƒr8| j | j¡ t| d|  | j¡|  | j¡d| _| jjdddddd | jj|  | j¡d t| jƒ| _tj| f|  | j¡dd|   | j¡dd|  | j¡dœt!|| j"ƒ—Ž| _#t$|dd || _%d| _&d| _'t(| ddd| j| j| j	d| j#j)d	| _*| j#j| j*j+d t(| ddd| j| j| j	d| j#j,d	| _-| j#j| j-j+d | j.dddd |  /d| j0d d¡ |  1¡  d S )N)r   r"   r   r   r   r#   T©Ztransparencyr$   r%   r&   r'   r   r    r   )r   Úhighlightthicknessr   r   é   Únsew©ÚrowÚcolumnÚrowspanÚ
columnspanÚsticky©ÚbgZflat)Úfgr   r   r(   r+   ZreliefÚinsertbackground)Zraise_erroré   Zvertical)r   r   r!   r#   Úbutton_colorÚbutton_hover_colorÚorientationÚcommand)r   Z
horizontal)r   r   r!   r#   r9   r:   r;   r<   )r   ©Úre_grid_textboxÚre_grid_x_scrollbarÚre_grid_y_scrollbaré2   )2ÚsuperÚ__init__r
   ÚthemeÚ_check_color_typeÚ	_fg_colorÚ_border_colorÚ_text_colorÚ_scrollbar_button_colorÚ_scrollbar_button_hover_colorÚ_corner_radiusÚ_border_widthÚ_border_spacingr   Ú_check_font_typeÚ_fontÚ
isinstanceÚadd_size_configure_callbackÚ_update_fontr   Ú_apply_widget_scalingÚ_desired_widthÚ_desired_heightÚ_canvasÚgridÚ	configureÚ_apply_appearance_modeÚ	_bg_colorr   Ú_draw_engineÚtkinterÚTextÚ_apply_font_scalingr   Ú_valid_tk_text_attributesÚ_textboxr   Ú_scrollbars_activatedÚ_hide_x_scrollbarÚ_hide_y_scrollbarr	   ÚyviewÚ_y_scrollbarÚsetÚxviewÚ_x_scrollbarÚ$_create_grid_for_text_and_scrollbarsÚafterÚ_check_if_scrollbars_neededÚ_draw)Úselfr   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   Úkwargs©Ú	__class__© úM/tmp/pip-unpacked-wheel-ckatmccg/customtkinter/windows/widgets/ctk_textbox.pyrC   "   sx    &""""

ý


ù
ø
ø	ø	zCTkTextbox.__init__Fc                 C   sv  | j ddd | j dd|  t| j| j| j ƒ¡d | jddd | jdd|  t| j| j| j ƒ¡d |rº| jjddddd|  t| j| j| j ƒ¡df|  t| j| j| j ƒ¡dfd |r| j	s| j
r| jjdddddd| j| j ft| j| j| j ƒdfd	 n
| j ¡  |rr| jsh| j
rh| jjddddd
d| j| j ft| j| j| j ƒdfd n
| j ¡  d S )Nr   r   )Úweight)rs   Zminsizer-   )r/   r0   r1   r2   r3   r   r   Zewnr   )r/   r0   r1   r2   r3   r   r   Znsw)Zgrid_rowconfigurerS   ÚmaxrK   rL   rM   Zgrid_columnconfigurer`   rW   rb   ra   rh   Úgrid_forgetrc   re   )rm   r>   r?   r@   rq   rq   rr   ri   }   s.    &&þþ
þz/CTkTextbox._create_grid_for_text_and_scrollbars©Úcontinue_loopc                    sø   ˆ j r´ˆ j ¡ dkr2ˆ j ¡ s2dˆ _ˆ jdd n*ˆ j ¡ dkr\ˆ j ¡ r\dˆ _ˆ jdd ˆ j ¡ dkrˆˆ j ¡ sˆdˆ _	ˆ jdd qÌˆ j ¡ dkrÌˆ j ¡ rÌdˆ _	ˆ jdd ndˆ _dˆ _ˆ jdd ˆ j 
¡ rô|dkrôˆ  ˆ j‡ fdd„¡ dS )	zf Method hides or places the scrollbars if they are needed on key release event of tkinter.text widget )g        g      ð?FT)r?   )r@   c                      s   ˆ j ddS )NTrv   )rk   rq   ©rm   rq   rr   Ú<lambda>±   ó    z8CTkTextbox._check_if_scrollbars_needed.<locals>.<lambda>N)ra   r`   rg   rh   Zwinfo_ismappedrb   ri   rd   re   rc   Úwinfo_existsrj   Ú_scrollbar_update_time)rm   Úeventrw   rq   rx   rr   rk   š   s$    z&CTkTextbox._check_if_scrollbars_neededc                    sd   t ƒ j||Ž | jj|  | j¡d | jj|  | j¡|  | j	¡d | j
dddd | jdd d S )N©r(   ©r   r   Tr=   )Úno_color_updates)rB   Ú_set_scalingr`   rX   r^   rO   rV   rS   rT   rU   ri   rl   )rm   Úargsrn   ro   rq   rr   r   ³   s    
ÿzCTkTextbox._set_scalingc                    s:   t ƒ  ||¡ | jj|  | j¡|  | j¡d |  ¡  d S )Nr   )rB   Ú_set_dimensionsrV   rX   rS   rT   rU   rl   )rm   r   r   ro   rq   rr   rƒ   ¼   s
    
ÿzCTkTextbox._set_dimensionsc                 C   s:   | j j|  | j¡d | j ¡  | jjdddddd dS )zX pass font to tkinter widgets with applied font scaling and update grid with workaround r~   r   r,   r-   r.   N)r`   rX   r^   rO   rV   ru   rW   rx   rq   rq   rr   rR   Ã   s    
zCTkTextbox._update_fontc                    s(   t | jtƒr| j | j¡ tƒ  ¡  d S ©N)rP   rO   r   Úremove_size_configure_callbackrR   rB   Údestroyrx   ro   rq   rr   r†   Ì   s    zCTkTextbox.destroyc                    s²  t ƒ  |¡ | j ¡ sd S | j |  | j¡|  | j¡|  | j	¡|  | j
¡¡}|dksZ|r–| jdkrâ| jjd|  | j¡|  | j¡d | jj|  | j¡|  | j¡|  | j¡d | jj| j| j| jd | jj| j| j| jd n|| jjd|  | j¡|  | j¡d | jj|  | j¡|  | j¡|  | j¡d | jj| j| j| jd | jj| j| j| jd | jjd|  | j¡|  | j¡d | jj|  | j¡d | j d¡ | j d¡ d S )	NFr   Zinner_parts)ÚfillÚoutline)r6   r5   r7   )r#   r9   r:   Zborder_partsr4   )rB   rl   rV   r{   r[   Zdraw_rounded_rect_with_borderrS   Z_current_widthZ_current_heightrK   rL   rF   Z
itemconfigrY   rZ   r`   rX   rH   rh   rI   rJ   re   rG   Ú	tag_lower)rm   r€   Zrequires_recoloringro   rq   rr   rl   Ò   sZ    



ý


þ

þÿÿ

þ

þÿÿ

þzCTkTextbox._drawc                    s  d|krR| j | d¡dd| _d}|  ¡ D ]&}t|tƒr*t|dƒr*|j| jd q*d|krp|   | d¡¡| _d}d|krŽ|   | d¡¡| _	d}d|krÈ|   | d¡¡| _
| jj| j
d	 | jj| j
d	 d
|kr|   | d
¡¡| _| jj| jd | jj| jd d|kr.| d¡| _| jdddd d}d|krX| d¡| _| jdddd d}d|kr‚| d¡| _| jdddd d}d|krÞt| jtƒr¨| j | j¡ |  | d¡¡| _t| jtƒrÖ| j | j¡ |  ¡  | jjf t|| jƒŽ tƒ jf d|i|—Ž d S )Nr#   Tr*   rF   )r"   r$   r%   r&   )r9   r'   )r:   r   r=   r    r!   r(   Úrequire_redraw)rE   ÚpoprF   Zwinfo_childrenrP   r   ÚhasattrrX   rG   rH   rI   rh   re   rJ   rK   ri   rL   rM   rO   r   r…   rR   rN   rQ   r`   r   r_   rB   )rm   rŠ   rn   Úchildro   rq   rr   rX   ý   sR    




zCTkTextbox.configure)Úattribute_nameÚreturnc                    sr   |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 tƒ  |¡S d S )Nr   r    r!   r#   r$   r%   r(   )	rK   rL   rM   rF   rG   rH   rO   rB   Úcget)rm   rŽ   ro   rq   rr   r   4  s    zCTkTextbox.cget)Úsequencer<   Ú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)r’   N)Ú
ValueErrorr`   Úbind)rm   r‘   r<   r’   rq   rq   rr   r•   I  s    zCTkTextbox.bind)r‘   Ú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)r”   r`   Úunbind)rm   r‘   r–   rq   rq   rr   r—   O  s    zCTkTextbox.unbindc                 C   s
   | j  ¡ S r„   )r`   Úfocusrx   rq   rq   rr   r˜   V  s    zCTkTextbox.focusc                 C   s
   | j  ¡ S r„   )r`   Ú	focus_setrx   rq   rq   rr   r™   Y  s    zCTkTextbox.focus_setc                 C   s
   | j  ¡ S r„   )r`   Úfocus_forcerx   rq   rq   rr   rš   \  s    zCTkTextbox.focus_forcec                 C   s   | j  |||¡S r„   )r`   Úinsert)rm   ÚindexÚtextÚtagsrq   rq   rr   r›   _  s    zCTkTextbox.insertc                 C   s   | j  ||¡S r„   )r`   Úget©rm   Úindex1Úindex2rq   rq   rr   rŸ   b  s    zCTkTextbox.getc                 C   s   | j  |¡S r„   )r`   Úbbox©rm   rœ   rq   rq   rr   r£   e  s    zCTkTextbox.bboxc                 C   s   | j  |||¡S r„   )r`   Úcompare)rm   rœ   Úopr¢   rq   rq   rr   r¥   h  s    zCTkTextbox.comparec                 C   s   | j  ||¡S r„   )r`   Údeleter    rq   rq   rr   r§   k  s    zCTkTextbox.deletec                 C   s   | j  |¡S r„   )r`   Ú	dlineinfor¤   rq   rq   rr   r¨   n  s    zCTkTextbox.dlineinfoc                 C   s   | j  |¡S r„   )r`   Úedit_modified)rm   Úargrq   rq   rr   r©   q  s    zCTkTextbox.edit_modifiedc                 C   s   |   ¡  | j ¡ S r„   )rk   r`   Ú	edit_redorx   rq   rq   rr   r«   t  s    zCTkTextbox.edit_redoc                 C   s
   | j  ¡ S r„   )r`   Ú
edit_resetrx   rq   rq   rr   r¬   x  s    zCTkTextbox.edit_resetc                 C   s
   | j  ¡ S r„   )r`   Úedit_separatorrx   rq   rq   rr   r­   {  s    zCTkTextbox.edit_separatorc                 C   s   |   ¡  | j ¡ S r„   )rk   r`   Ú	edit_undorx   rq   rq   rr   r®   ~  s    zCTkTextbox.edit_undoc                 K   s   t dƒ‚d S ©NzIembedding images is forbidden, because would be incompatible with scaling©ÚAttributeError©rm   rœ   rn   rq   rq   rr   Úimage_create‚  s    zCTkTextbox.image_createc                 C   s   t dƒ‚d S r¯   r°   ©rm   rœ   Úoptionrq   rq   rr   Ú
image_cget…  s    zCTkTextbox.image_cgetc                 C   s   t dƒ‚d S r¯   r°   r¤   rq   rq   rr   Úimage_configureˆ  s    zCTkTextbox.image_configurec                 C   s   t dƒ‚d S r¯   r°   rx   rq   rq   rr   Úimage_names‹  s    zCTkTextbox.image_namesc                 C   s   | j  |¡S r„   )r`   rœ   )rm   Úirq   rq   rr   rœ   Ž  s    zCTkTextbox.indexc                 C   s   | j  ||¡S r„   )r`   Úmark_gravity)rm   ÚmarkZgravityrq   rq   rr   rº   ‘  s    zCTkTextbox.mark_gravityc                 C   s
   | j  ¡ S r„   )r`   Ú
mark_namesrx   rq   rq   rr   r¼   ”  s    zCTkTextbox.mark_namesc                 C   s   | j  |¡S r„   )r`   Ú	mark_nextr¤   rq   rq   rr   r½   —  s    zCTkTextbox.mark_nextc                 C   s   | j  |¡S r„   )r`   Úmark_previousr¤   rq   rq   rr   r¾   š  s    zCTkTextbox.mark_previousc                 C   s   | j  ||¡S r„   )r`   Úmark_set)rm   r»   rœ   rq   rq   rr   r¿     s    zCTkTextbox.mark_setc                 C   s   | j  |¡S r„   )r`   Ú
mark_unset)rm   r»   rq   rq   rr   rÀ      s    zCTkTextbox.mark_unsetc                 C   s   | j  ||¡S r„   )r`   Úscan_dragto©rm   ÚxÚyrq   rq   rr   rÁ   £  s    zCTkTextbox.scan_dragtoc                 C   s   | j  ||¡S r„   )r`   Ú	scan_markrÂ   rq   rq   rr   rÅ   ¦  s    zCTkTextbox.scan_markc                 O   s   | j j||f|ž|ŽS r„   )r`   Úsearch)rm   Úpatternrœ   r‚   rn   rq   rq   rr   rÆ   ©  s    zCTkTextbox.searchc                 C   s   | j  |¡S r„   )r`   Úseer¤   rq   rq   rr   rÈ   ¬  s    zCTkTextbox.seec                 C   s   | j  |||¡S r„   )r`   Útag_add©rm   ÚtagNamer¡   r¢   rq   rq   rr   rÉ   ¯  s    zCTkTextbox.tag_addc                 C   s   | j  ||||¡S r„   )r`   Útag_bind)rm   rË   r‘   Úfuncr’   rq   rq   rr   rÌ   ²  s    zCTkTextbox.tag_bindc                 C   s   | j  ||¡S r„   )r`   Útag_cget)rm   rË   rµ   rq   rq   rr   rÎ   µ  s    zCTkTextbox.tag_cgetc                 K   s    d|krt dƒ‚| jj|f|ŽS )Nr(   zC'font' option forbidden, because would be incompatible with scaling)r±   r`   Ú
tag_config)rm   rË   rn   rq   rq   rr   rÏ   ¸  s    zCTkTextbox.tag_configc                 G   s   | j j|Ž S r„   )r`   Ú
tag_delete©rm   rË   rq   rq   rr   rÐ   ½  s    zCTkTextbox.tag_deletec                 C   s   | j  ||¡S r„   )r`   r‰   )rm   rË   Z	belowThisrq   rq   rr   r‰   À  s    zCTkTextbox.tag_lowerc                 C   s   | j  |¡S r„   )r`   Ú	tag_namesr¤   rq   rq   rr   rÒ   Ã  s    zCTkTextbox.tag_namesc                 C   s   | j  |||¡S r„   )r`   Útag_nextrangerÊ   rq   rq   rr   rÓ   Æ  s    zCTkTextbox.tag_nextrangec                 C   s   | j  |||¡S r„   )r`   Útag_prevrangerÊ   rq   rq   rr   rÔ   É  s    zCTkTextbox.tag_prevrangec                 C   s   | j  ||¡S r„   )r`   Ú	tag_raise)rm   rË   Z	aboveThisrq   rq   rr   rÕ   Ì  s    zCTkTextbox.tag_raisec                 C   s   | j  |¡S r„   )r`   Ú
tag_rangesrÑ   rq   rq   rr   rÖ   Ï  s    zCTkTextbox.tag_rangesc                 C   s   | j  |||¡S r„   )r`   Ú
tag_removerÊ   rq   rq   rr   r×   Ò  s    zCTkTextbox.tag_removec                 C   s   | j  |||¡S r„   )r`   Ú
tag_unbind)rm   rË   r‘   r–   rq   rq   rr   rØ   Õ  s    zCTkTextbox.tag_unbindc                 C   s   t dƒ‚d S ©NzMembedding widgets is forbidden, would probably cause all kinds of problems ;)r°   r´   rq   rq   rr   Úwindow_cgetØ  s    zCTkTextbox.window_cgetc                 C   s   t dƒ‚d S rÙ   r°   r´   rq   rq   rr   Úwindow_configureÛ  s    zCTkTextbox.window_configurec                 K   s   t dƒ‚d S rÙ   r°   r²   rq   rq   rr   Úwindow_createÞ  s    zCTkTextbox.window_createc                 C   s   t dƒ‚d S rÙ   r°   rx   rq   rq   rr   Úwindow_namesá  s    zCTkTextbox.window_namesc                 G   s   | j j|Ž S r„   )r`   rg   ©rm   r‚   rq   rq   rr   rg   ä  s    zCTkTextbox.xviewc                 C   s   | j  |¡S r„   )r`   Úxview_moveto©rm   Úfractionrq   rq   rr   rß   ç  s    zCTkTextbox.xview_movetoc                 C   s   | j  ||¡S r„   )r`   Úxview_scroll©rm   ÚnÚwhatrq   rq   rr   râ   ê  s    zCTkTextbox.xview_scrollc                 G   s   | j j|Ž S r„   )r`   rd   rÞ   rq   rq   rr   rd   í  s    zCTkTextbox.yviewc                 C   s   | j  |¡S r„   )r`   Úyview_movetorà   rq   rq   rr   ræ   ð  s    zCTkTextbox.yview_movetoc                 C   s   | j  ||¡S r„   )r`   Úyview_scrollrã   rq   rq   rr   rç   ó  s    zCTkTextbox.yview_scroll)r   r   NNr   r   NNNNNNT)FFF)NF)NN)F)F)NNT)NN)N)N)N)N)N)N)N)N)N)N)N)N)N)N)QÚ__name__Ú
__module__Ú__qualname__Ú__doc__r|   r_   ÚanyÚintr   r   Ústrr   Útupler   ÚboolrC   ri   rk   r   rƒ   rR   r†   rl   rX   r   r   r•   r—   r˜   r™   rš   r›   rŸ   r£   r¥   r§   r¨   r©   r«   r¬   r­   r®   r³   r¶   r·   r¸   rœ   rº   r¼   r½   r¾   r¿   rÀ   rÁ   rÅ   rÆ   rÈ   rÉ   rÌ   rÎ   rÏ   rÐ   r‰   rÒ   rÓ   rÔ   rÕ   rÖ   r×   rØ   rÚ   rÛ   rÜ   rÝ   rg   rß   râ   rd   ræ   rç   Ú__classcell__rq   rq   ro   rr   r      sä                 ü             ðð[
		+7













r   )r\   Útypingr   r   r   r   r   Zcore_renderingr   Zctk_scrollbarr	   rD   r
   r   Zcore_widget_classesr   r(   r   Zutilityr   r   r   rq   rq   rq   rr   Ú<module>   s   