U
    l±ËhzP  ã                   @   s”   d dl Z d dlZd dlZd dlmZ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 G d
d„ deƒZdS )é    N)ÚUnionÚTupleÚCallableÚListÚOptionalÚAnyé   )ÚDropdownMenu)Ú	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ejdddd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	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f  ee	eef  eee
  e
ee	ejdf e	ee
gef df e
dœ‡ fd	d
„Zd<ee
 dœdd„Z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d„ Zd?‡ fdd„	Ze
ed œ‡ fd!d"„Zd@d$d%„ZdAd&d'„Ze
d(œd)d*„Z e
d(œd+d,„Z!e
d-œd.d/„Z"dBd0d1„Z#dCd2d3„Z$dDd4d5„Z%d6d7„ Z&d8d9„ Z'd:d;„ Z(‡  Z)S )EÚCTkComboBoxz‹
    Combobox with dropdown menu, rounded corners, border, variable support.
    For detailed information check out the documentation.
    éŒ   é   NZtransparentTÚleft)ÚmasterÚwidthÚheightÚcorner_radiusÚborder_widthÚbg_colorÚfg_colorÚborder_colorÚbutton_colorÚbutton_hover_colorÚdropdown_fg_colorÚdropdown_hover_colorÚdropdown_text_colorÚ
text_colorÚtext_color_disabledÚfontÚdropdown_fontÚvaluesÚstateÚhoverÚvariableÚcommandÚjustifyc              
      sŽ  t ƒ jf ||||dœ|—Ž |d kr2tjd d n|| _|d krNtjd d n|| _|d krjt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 kr2tƒ n|  |¡| _t| jtƒrZ| j | j¡ || _|| _|| _|| _|d kr†dg| _n|| _t| | j| j||||d| _| jddd | jddd t| d|  | j¡|  | j ¡d| _!t"| j!ƒ| _#t$j%| | jdd|d|  &| j¡d| _'|  (¡  |  )¡  |  *¡  | jd k	rJ| j'j+| jd | jd krŠt,| jƒdkr|| j' -d| jd ¡ n| j' -dd¡ d S )N)r   r   r   r   r   r   r   r   r   r   r   r    r!   )r   r$   r(   r   Úhover_colorr    r"   r   r   )Zweight)r   Úhighlightthicknessr   r   )r   r%   r   Zbdr)   r+   r"   ©Ztextvariable).ÚsuperÚ__init__r   ÚthemeÚ_corner_radiusÚ_border_widthÚ_check_color_typeÚ	_fg_colorÚ_border_colorÚ_button_colorÚ_button_hover_colorÚ_text_colorÚ_text_color_disabledr   Ú_check_font_typeÚ_fontÚ
isinstanceÚadd_size_configure_callbackÚ_update_fontÚ_commandÚ	_variableÚ_stateÚ_hoverÚ_valuesr	   Ú_dropdown_callbackÚ_dropdown_menuZgrid_rowconfigureZgrid_columnconfigurer
   Ú_apply_widget_scalingÚ_desired_widthÚ_desired_heightÚ_canvasr   Údraw_engineÚtkinterZEntryÚ_apply_font_scalingÚ_entryÚ_create_gridÚ_create_bindingsÚ_drawÚ	configureÚlenÚinsert)Ú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_combobox.pyr.      sh    """""$

ú	

ý
úzCTkComboBox.__init__©Úsequencec                 C   sx   |dkrt| j  dd| j¡ | j  dd| j¡ | j  dd| j¡ | j  dd| j¡ | j  dd| j¡ | j  dd| j¡ dS )zS set necessary bindings for functionality of widget, will overwrite other bindings NZright_partsz<Enter>Údropdown_arrowz<Leave>z
<Button-1>)rH   Ztag_bindÚ	_on_enterÚ	_on_leaveÚ_clicked)rS   rZ   rW   rW   rX   rN   w   s    zCTkComboBox._create_bindingsc                 C   s|   | j jdddddd | j| j }| jjdddddt|  | j¡|  d¡ƒt|  | j| d ¡|  d¡ƒf|  | j¡d d S )Nr   r   Únsew©ÚrowÚcolumnÚrowspanÚ
columnspanÚstickyÚewé   )ra   rb   rc   rd   re   ZpadxZpady)	rH   ÚgridÚ_current_widthÚ_current_heightrL   ÚmaxrE   r0   r1   )rS   Úleft_section_widthrW   rW   rX   rM      s    ÿ
ýzCTkComboBox._create_gridc                    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_scalingrL   rP   rK   r:   rM   rH   rE   rF   rG   rO   )rS   ÚargsrT   rU   rW   rX   rp   Š   s    
ÿzCTkComboBox._set_scalingrn   c                    s:   t ƒ  ||¡ | jj|  | j¡|  | j¡d |  ¡  d S )Nrn   )r-   Ú_set_dimensionsrH   rP   rE   rF   rG   rO   )rS   r   r   rU   rW   rX   rr   •   s
    
ÿzCTkComboBox._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 rm   r   r   r_   r`   N)rL   rP   rK   r:   rH   Zgrid_forgetrh   ©rS   rW   rW   rX   r=   œ   s    
zCTkComboBox._update_fontc                    s(   t | jtƒr| j | j¡ tƒ  ¡  d S ©N)r;   r:   r   Úremove_size_configure_callbackr=   r-   Údestroyrs   rU   rW   rX   rv   ¥   s    zCTkComboBox.destroyFc              
      sÒ  t ƒ  |¡ | j| j }| j |  | j¡|  | j¡|  | j¡|  | j¡|  |¡¡}| j 	|  | j| jd  ¡|  | jd ¡|  | jd ¡¡}|dksž|sž|rÎ| j
j|  | j¡d | j
jd|  | j¡|  | j¡d | j
jd|  | j¡|  | j¡d | j
jd|  | j¡|  | j¡d | j
jd	|  | j¡|  | j¡d | jj|  | j¡|  | j¡|  | j¡|  | j¡|  | j¡|  | j¡|  | j¡d
 | jtjkr¶| j
jd|  | j¡d n| j
jd|  | j¡d d S )Né   rg   F)ÚbgZinner_parts_left©ÚoutlineÚfillZborder_parts_leftÚinner_parts_rightÚborder_parts_right)rx   ZfgZreadonlybackgroundZdisabledbackgroundZdisabledforegroundZhighlightcolorZinsertbackgroundr[   )r{   )r-   rO   ri   rj   rI   Z,draw_rounded_rect_with_border_vertical_splitrE   r0   r1   Zdraw_dropdown_arrowrH   rP   Ú_apply_appearance_modeZ	_bg_colorÚ
itemconfigr3   r4   r5   rL   r7   r8   r@   rJ   ÚDISABLED)rS   ro   rl   Zrequires_recoloringZrequires_recoloring_2rU   rW   rX   rO   «   sZ    


üþ

þ

þ

þ

þ





ú
ÿ
ÿzCTkComboBox._drawc                 C   s*   | j  |  ¡ |  ¡ |  | jd ¡ ¡ d S ©Nr   )rD   ÚopenZwinfo_rootxZwinfo_rootyrE   rj   rs   rW   rW   rX   Ú_open_dropdown_menuÙ   s    ÿzCTkComboBox._open_dropdown_menuc                    sš  d|kr|  d¡| _d}d|kr8|  d¡| _|  ¡  d}d|krV|  |  d¡¡| _d}d|krt|  |  d¡¡| _d}d|kr’|  |  d¡¡| _d}d|kr°|  |  d¡¡| _d}d|krÌ| j	j
|  d¡d	 d
|krè| j	j
|  d
¡d d|kr| j	j
|  d¡d d|kr&|  |  d¡¡| _d}d|krF|  |  d¡¡| _d}d|kr¢t| jtƒrl| j | j¡ |  |  d¡¡| _t| jtƒrš| j | j¡ |  ¡  d|krÀ| j	j
|  d¡d d|kræ|  d¡| _| j	j
| jd d|kr|  d¡| _| jj
| jd d}d|kr&|  d¡| _d|krL|  d¡| _| jj
| jd d|krb|  d¡| _d|kr€| jj
|  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#   rm   r$   )r$   r%   ©r%   r&   r'   r,   r(   r)   )r)   Úrequire_redraw)Úpopr0   r1   rM   r2   r3   r4   r5   r6   rD   rP   r7   r8   r;   r:   r   ru   r=   r9   r<   rB   r@   rL   rA   r?   r>   r-   )rS   r…   rT   rU   rW   rX   rP   Ý   sr    










zCTkComboBox.configure)Úattribute_nameÚreturnc                    sJ  |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rh| j d¡S |dkr|| j d	¡S |d
kr| j d¡S |dkrž| jS |dkr¬| j	S |dkrº| j
S |dkrÎ| j d¡S |dk rät | 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 d¡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)   )r0   r1   r3   r4   r5   r6   rD   Úcgetr7   r8   r:   ÚcopyrB   r@   rA   r?   r>   rL   r-   )rS   r‡   rU   rW   rX   r‰   ,  sN    





zCTkComboBox.cgetr   c                 C   sÈ   | j dkrÄ| jtjkrÄt| jƒdkrÄtjdkrRt| jƒdkrR| jrR| j	j
dd n.tj d¡r€t| jƒdkr€| jr€| j	j
dd | j	jd|  | j¡|  | j¡d	 | j	jd
|  | j¡|  | j¡d	 d S )NTr   ÚdarwinZpointinghand©ÚcursorÚwinZhand2r|   ry   r}   )rA   r@   rJ   ÚNORMALrQ   rB   ÚsysÚplatformÚ_cursor_manipulation_enabledrH   rP   Ú
startswithr   r~   r6   ©rS   ÚeventrW   rW   rX   r\   X  s    $ 

þ

þzCTkComboBox._on_enterc                 C   s¤   t jdkr.t| jƒdkr.| jr.| jjdd n.t j d¡r\t| jƒdkr\| jr\| jjdd | jjd|  	| j
¡|  	| j
¡d | jjd|  	| j
¡|  	| j
¡d d S )	Nr‹   r   ZarrowrŒ   rŽ   r|   ry   r}   )r   r‘   rQ   rB   r’   rH   rP   r“   r   r~   r5   r”   rW   rW   rX   r]   g  s     

þ

þzCTkComboBox._on_leave)Úvaluec                 C   s|   | j dkrF| jjdd | j dtj¡ | j d|¡ | jjdd n| j dtj¡ | j d|¡ | jd k	rx|  |¡ d S ©NÚreadonlyÚnormalr„   r   )r@   rL   rP   ÚdeleterJ   ÚENDrR   r>   ©rS   r–   rW   rW   rX   rC   u  s    

zCTkComboBox._dropdown_callbackc                 C   sh   | j dkrF| jjdd | j dtj¡ | j d|¡ | jjdd n| j dtj¡ | j d|¡ d S r—   )r@   rL   rP   rš   rJ   r›   rR   rœ   rW   rW   rX   Úset‚  s    
zCTkComboBox.set)rˆ   c                 C   s
   | j  ¡ S rt   )rL   Úgetrs   rW   rW   rX   rž   Œ  s    zCTkComboBox.getc                 C   s&   | j tjk	r"t| jƒdkr"|  ¡  d S r   )r@   rJ   r€   rQ   rB   rƒ   r”   rW   rW   rX   r^     s    zCTkComboBox._clickedc                 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)Ú
ValueErrorrL   Úbind)rS   rZ   r(   r¡   rW   rW   rX   r£   “  s    zCTkComboBox.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 notrY   )r¢   rL   ÚunbindrN   )rS   rZ   ZfuncidrW   rW   rX   r¤   ™  s    zCTkComboBox.unbindc                 C   s
   | j  ¡ S rt   )rL   Úfocusrs   rW   rW   rX   r¥   ¡  s    zCTkComboBox.focusc                 C   s
   | j  ¡ S rt   )rL   Ú	focus_setrs   rW   rW   rX   r¦   ¤  s    zCTkComboBox.focus_setc                 C   s
   | j  ¡ S rt   )rL   Úfocus_forcers   rW   rW   rX   r§   §  s    zCTkComboBox.focus_force)N)NN)F)F)r   )r   )N)NNT)NN)*Ú__name__Ú
__module__Ú__qualname__Ú__doc__rJ   r   r   Úintr   r   Ústrr   Útupler   r   ÚboolÚVariabler   r.   rN   rM   rp   rr   r=   rv   rO   rƒ   rP   Úanyr‰   r\   r]   rC   r   rž   r^   r£   r¤   r¥   r¦   r§   Ú__classcell__rW   rW   rU   rX   r      sŠ   ç
çc
		.O,





r   )rJ   r   rŠ   Útypingr   r   r   r   r   r   Zcore_widget_classesr	   Zcore_renderingr
   r/   r   r   r   r"   r   r   rW   rW   rW   rX   Ú<module>   s    