U
    l±Ëh=  ã                   @   sš   d dl Z d dlZd dlZd dlZd dlZd dl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mZ e jZG d	d
„ d
eeeƒZdS )é    N)ÚUnionÚTupleÚOptional)Úversioné   )ÚThemeManager)ÚCTkScalingBaseClass)ÚCTkAppearanceModeBaseClass)Úpop_from_dict_by_setÚcheck_kwargs_emptyc                       sæ  e Zd ZU dZddddddhZeed< d	d
ddddddddddddddhZeed< dZe	ed< dZ
e	ed< dUeeeeeef f  dœ‡ fdd„Zd d!„ Zd"d#„ ZdV‡ fd$d%„	Z‡ fd&d'„Zd(d)„ Zd*d+„ Z‡ fd,d-„Z‡ fd.d/„Z‡ fd0d1„Z‡ fd2d3„Z‡ fd4d5„ZdWe	e	d6œ‡ fd7d8„ZdXeed6œ‡ fd9d:„ZdYeed6œ‡ fd;d<„ZdZed=œ‡ fd>d?„Z‡ fd@dA„Z ee!dBœ‡ fdCdD„Z"d[‡ fdEdF„	Z#d\‡ fdGdH„	Z$dIdJ„ Z%e&dKdL„ ƒZ'e&dMdN„ ƒZ(edOœ‡ fdPdQ„Z)edRœ‡ fdSdT„Z*‡  Z+S )]ÚCTkz|
    Main app window with dark titlebar on Windows and macOS.
    For detailed information check out the documentation.
    Z
screenNameÚbaseNameZ	classNameZuseTkÚsyncZuseÚ_valid_tk_constructor_argumentsZbdZborderwidthÚclassÚmenuZreliefZscreenÚ	containerÚcursorÚheightZhighlightthicknessZpadxZpadyZ	takefocusÚvisualÚwidthÚ_valid_tk_configure_argumentsFÚ,_deactivate_macos_window_header_manipulationÚ._deactivate_windows_window_header_manipulationN)Úfg_colorc                    s.  |   ¡  tj| ft|| jƒŽ t | ¡ tj| dd t|dd d| _d| _	d| _
d| _d| _d| _d | _|d kr‚tjd	 d
 n|  |¡| _tƒ j|  | j¡d |  d	¡ d| _d | _d| _d| _d| _d| _d | _tj  d¡rò|  !d| j"¡ tj  d¡r|  #|  $¡ ¡ |  %d| j&¡ |  %d| j'¡ d S )NZwindow)Zscaling_typeT)Zraise_erroriX  iô  r   i@B r   r   ©ÚbgFÚwinéÈ   z<Configure>z	<FocusIn>)(Ú_enable_macos_dark_title_barÚCTK_PARENT_CLASSÚ__init__r
   r   r	   r   r   Ú_current_widthÚ_current_heightÚ
_min_widthÚ_min_heightÚ
_max_widthÚ_max_heightÚ_last_resizable_argsr   ZthemeÚ_check_color_typeÚ	_fg_colorÚsuperÚ	configureÚ_apply_appearance_modeÚtitleÚ_iconbitmap_method_calledÚ(_state_before_windows_set_titlebar_colorÚ_window_existsÚ%_withdraw_called_before_window_existsÚ$_iconify_called_before_window_existsÚ_block_update_dimensions_eventÚfocused_widget_before_widthdrawÚsysÚplatformÚ
startswithÚafterÚ_windows_set_titlebar_iconÚ_windows_set_titlebar_colorÚ_get_appearance_modeÚbindÚ_update_dimensions_eventÚ_focus_in_event)Úselfr   Úkwargs©Ú	__class__© ú@/tmp/pip-unpacked-wheel-ckatmccg/customtkinter/windows/ctk_tk.pyr!   !   s8    
"
zCTk.__init__c                 C   s,   |   ¡  tj | ¡ t | ¡ t | ¡ d S ©N)Ú_disable_macos_dark_title_barÚtkinterÚTkÚdestroyr	   r   ©r@   rD   rD   rE   rJ   S   s    
zCTk.destroyc                 C   s   t jdkr|  ¡  d S )NÚdarwin)r6   r7   Zlift)r@   ÚeventrD   rD   rE   r?   [   s    
zCTk._focus_in_eventc                    sV   | j sRtƒ  ¡ }tƒ  ¡ }| j|  |¡ks:| j|  |¡krR|  |¡| _|  |¡| _d S rF   )r4   r+   Zwinfo_widthZwinfo_heightr"   Z_reverse_window_scalingr#   )r@   rM   Zdetected_widthZdetected_heightrB   rD   rE   r>   `   s    

 zCTk._update_dimensions_eventc                    s‚   t ƒ  ||¡ t ƒ  |  | j¡|  | j¡¡ t ƒ  |  | j¡|  | j¡¡ t ƒ  |  | j¡› d|  | j¡› ¡ |  d| j	¡ d S )NÚxiè  )
r+   Ú_set_scalingÚminsizeÚ_apply_window_scalingr"   r#   ÚmaxsizeÚgeometryr9   Ú_set_scaled_min_max)r@   Znew_widget_scalingZnew_window_scalingrB   rD   rE   rO   m   s
    &zCTk._set_scalingc                 C   s
   d| _ d S ©NF©r4   rK   rD   rD   rE   Úblock_update_dimensions_eventy   s    z!CTk.block_update_dimensions_eventc                 C   s
   d| _ d S rU   rV   rK   rD   rD   rE   Úunblock_update_dimensions_event|   s    z#CTk.unblock_update_dimensions_eventc                    sh   | j d k	s| jd k	r2tƒ  |  | j ¡|  | j¡¡ | jd k	sF| jd k	rdtƒ  |  | j¡|  | j¡¡ d S rF   )r$   r%   r+   rP   rQ   r&   r'   rR   rK   rB   rD   rE   rT      s    zCTk._set_scaled_min_maxc                    s   | j dkrd| _tƒ  ¡  d S ©NFT)r1   r2   r+   ÚwithdrawrK   rB   rD   rE   rZ   …   s    
zCTk.withdrawc                    s   | j dkrd| _tƒ  ¡  d S rY   )r1   r3   r+   ÚiconifyrK   rB   rD   rE   r[   Š   s    
zCTk.iconifyc                    s>   | j dkr0tj d¡r*| js*| js*|  ¡  d| _ tƒ  ¡  d S )NFr   T)	r1   r6   r7   r8   r2   r3   Ú	deiconifyr+   ÚupdaterK   rB   rD   rE   r]      s    
z
CTk.updatec                    sL   | j s:tj d¡r4|  |  ¡ ¡ | js4| js4|  ¡  d| _ t	ƒ j
||Ž d S )Nr   T)r1   r6   r7   r8   r;   r<   r2   r3   r\   r+   Úmainloop)r@   ÚargsrA   rB   rD   rE   r^   š   s    zCTk.mainloop©r   r   c                    s<   t ƒ  ||¡}g ||dœf| _tj d¡r8|  |  ¡ ¡ |S )Nr`   r   )r+   Ú	resizabler(   r6   r7   r8   r;   r<   )r@   r   r   Zcurrent_resizable_valuesrB   rD   rE   ra   §   s
    zCTk.resizablec                    sN   || _ || _| j|k r|| _| j|k r,|| _tƒ  |  | j ¡|  | j¡¡ d S rF   )r$   r%   r"   r#   r+   rP   rQ   ©r@   r   r   rB   rD   rE   rP   °   s    

zCTk.minsizec                    sN   || _ || _| j|kr|| _| j|kr,|| _tƒ  |  | j ¡|  | j¡¡ d S rF   )r&   r'   r"   r#   r+   rR   rQ   rb   rB   rD   rE   rR   ¹   s    

zCTk.maxsize)Úgeometry_stringc                    s~   |d k	rjt ƒ  |  |¡¡ |  |¡\}}}}|d k	rz|d k	rzt| jt|| jƒƒ| _t| j	t|| j
ƒƒ| _n|  t ƒ  ¡ ¡S d S rF   )r+   rS   Z_apply_geometry_scalingZ_parse_geometry_stringÚmaxr$   Úminr&   r"   r%   r'   r#   Z_reverse_geometry_scaling)r@   rc   r   r   rN   ÚyrB   rD   rE   rS   Â   s    zCTk.geometryc              	      sˆ   d|krf|   | d¡¡| _tƒ j|  | j¡d |  ¡ D ],}z|j| jd W q8 tk
rb   Y q8X q8tƒ jf t|| j	ƒŽ t
|ƒ d S )Nr   r   )Zbg_color)r)   Úpopr*   r+   r,   r-   Zwinfo_childrenÚ	Exceptionr
   r   r   )r@   rA   ÚchildrB   rD   rE   r,   Î   s    zCTk.configure)Úattribute_nameÚreturnc                    s   |dkr| j S tƒ  |¡S d S )Nr   )r*   r+   Úcget)r@   rj   rB   rD   rE   rl   Ü   s    zCTk.cgetc                    s   d| _ tƒ  ||¡ d S ©NT©r/   r+   Úwm_iconbitmap©r@   ZbitmapÚdefaultrB   rD   rE   ro   â   s    zCTk.wm_iconbitmapc                    s   d| _ tƒ  ||¡ d S rm   rn   rp   rB   rD   rE   Ú
iconbitmapæ   s    zCTk.iconbitmapc                 C   sX   z>| j s<tj tj tj t¡¡¡}|  tj |ddd¡¡ W n tk
rR   Y nX d S )NZassetsZiconszCustomTkinter_icon_Windows.ico)	r/   ÚosÚpathÚdirnameÚabspathÚ__file__rr   Újoinrh   )r@   Zcustomtkinter_directoryrD   rD   rE   r:   ê   s    zCTk._windows_set_titlebar_iconc                 C   sV   t jdkrR| jsRt t ¡ ¡t d¡k rRt t ¡  dd¡¡t d¡krRt	 
d¡ d S )NrL   ú3.10ÚinfoÚ
patchlevelú8.6.9z9defaults write -g NSRequiresAquaSystemAppearance -bool No©r6   r7   r   r   ÚparseÚpython_versionrH   ZTclÚcallrs   Úsystem©ÚclsrD   rD   rE   r   ó   s     z CTk._enable_macos_dark_title_barc                 C   sV   t jdkrR| jsRt t ¡ ¡t d¡k rRt t ¡  dd¡¡t d¡krRt	 
d¡ d S )NrL   ry   rz   r{   r|   z1defaults delete -g NSRequiresAquaSystemAppearancer}   r‚   rD   rD   rE   rG   û   s     z!CTk._disable_macos_dark_title_bar)Ú
color_modec              
      sÀ  t j d¡r¼| js¼| jrP|  ¡ | _| jdks:| jdkrn|  ¡ | _t	ƒ  
¡  n|  ¡ | _t	ƒ  
¡  t	ƒ  ¡  | ¡ dkr€d}n| ¡ dkr’d}ndS z|tjj |  ¡ ¡}d	}d
}tjj ||t t |¡¡t t |¡¡¡dkrtjj ||t t |¡¡t t |¡¡¡ W n, tk
r> } zt|ƒ W 5 d}~X Y nX | jsH| jdkr^|  ¡  n:| jdkrt|  ¡  n$| jdkrŒ|  d¡ n|  | j¡ n | jdk	r¼|  d| jj¡ d| _dS )ag  
        Set the titlebar color of the window to light or dark theme on Microsoft Windows.

        Credits for this function:
        https://stackoverflow.com/questions/23836000/can-i-change-the-title-bar-in-tkinter/70724666#70724666

        MORE INFO:
        https://docs.microsoft.com/en-us/windows/win32/api/dwmapi/ne-dwmapi-dwmwindowattribute
        r   ZiconicZ	withdrawnZdarkr   Úlightr   Né   é   TÚnormalZzoomed)r6   r7   r8   r   r1   Ústater0   Z	focus_getr5   r+   rZ   r]   ÚlowerÚctypesÚwindllZuser32Z	GetParentZwinfo_idZdwmapiZDwmSetWindowAttributeÚbyrefÚc_intÚsizeofrh   Úprintr\   r[   r9   Zfocus)r@   r„   ÚvalueZhwndZDWMWA_USE_IMMERSIVE_DARK_MODEZ)DWMWA_USE_IMMERSIVE_DARK_MODE_BEFORE_20H1ÚerrrB   rD   rE   r;     sR    




þþþ

zCTk._windows_set_titlebar_color)Úmode_stringc                    s<   t ƒ  |¡ tj d¡r"|  |¡ t ƒ j|  | j¡d d S )Nr   r   )	r+   Ú_set_appearance_moder6   r7   r8   r;   r,   r-   r*   )r@   r“   rB   rD   rE   r”   G  s    
zCTk._set_appearance_mode)N)N)NN)NN)NN)N)NN)NN),Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚsetÚ__annotations__r   r   Úboolr   r   r   Ústrr   r!   rJ   r?   r>   rO   rW   rX   rT   rZ   r[   r]   r^   ra   ÚintrP   rR   rS   r,   Úanyrl   ro   rr   r:   Úclassmethodr   rG   r;   r”   Ú__classcell__rD   rD   rB   rE   r      s\   
        þ ÿÿ2				

Dr   )rH   r6   rs   r7   r‹   Útypingr   r   r   Ú	packagingr   Zwidgets.themer   Zwidgets.scalingr   Zwidgets.appearance_moder	   Z7customtkinter.windows.widgets.utility.utility_functionsr
   r   rI   r    r   rD   rD   rD   rE   Ú<module>   s   