U
    l±Ëhž9  ã                   @   s–   d dl Z d dlm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mZ G d	d
„ d
e jeeƒZdS )é    N)Úversion)ÚUnionÚTupleÚOptionalé   )Ú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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< ddœe
eeeeef f  dœ‡ fdd„Zdd„ Zdd„ ZdJdd„Z‡ fd d!„Zd"d#„ Zd$d%„ Z‡ fd&d'„ZdKed(œ‡ fd)d*„Z‡ fd+d,„Z‡ fd-d.„ZdLeed/œ‡ fd0d1„ZdM‡ fd2d3„	ZdN‡ fd4d5„	Z‡ fd6d7„Zeed8œ‡ fd9d:„ZdO‡ fd;d<„	Zd=d>„ Z e!d?d@„ ƒZ"e!dAdB„ ƒZ#edCœ‡ fdDdE„Z$‡ fdFdG„Z%‡ fdHdI„Z&‡  Z'S )PÚCTkToplevelz|
    Toplevel window with dark titlebar on Windows and macOS.
    For detailed information check out the documentation.
    ZmasterZbdZborderwidthÚclassÚ	containerÚcursorÚheightZhighlightbackgroundZhighlightthicknessÚmenuZreliefZscreenZ	takefocusZuseÚvisualÚwidthÚ_valid_tk_toplevel_argumentsFÚ,_deactivate_macos_window_header_manipulationÚ._deactivate_windows_window_header_manipulationN)Úfg_colorc                   sŠ  ˆ  ¡  tƒ j|t|ˆjƒŽ t ˆ¡ tjˆdd t|dd zBtj	 
d¡r‚tj tj tj t¡¡¡‰ ˆ d‡ ‡fdd„¡ W n tk
r˜   Y nX dˆ_dˆ_d	ˆ_d	ˆ_d
ˆ_d
ˆ_d ˆ_|d krÚtjd d nˆ |¡ˆ_tƒ jˆ ˆj¡d tƒ  d¡ dˆ_ d ˆ_!dˆ_"dˆ_#dˆ_$dˆ_%d ˆ_&tj	 
d¡rNˆ dˆj'¡ tj	 
d¡rjˆ (ˆ )¡ ¡ ˆ *dˆj+¡ ˆ *dˆj,¡ d S )NZwindow)Zscaling_typeT)Zraise_errorÚwinéÈ   c                      s   ˆ  tj ˆ ddd¡¡S ©NZassetsZiconszCustomTkinter_icon_Windows.ico)Ú
iconbitmapÚosÚpathÚjoin© ©Úcustomtkinter_directoryÚselfr   úF/tmp/pip-unpacked-wheel-ckatmccg/customtkinter/windows/ctk_toplevel.pyÚ<lambda>-   ó    z&CTkToplevel.__init__.<locals>.<lambda>r   i@B r   r   ©ÚbgFz<Configure>z	<FocusIn>)-Ú_enable_macos_dark_title_barÚsuperÚ__init__r
   r   r	   r   r   ÚsysÚplatformÚ
startswithr   r   ÚdirnameÚabspathÚ__file__ÚafterÚ	ExceptionÚ_current_widthÚ_current_heightÚ
_min_widthÚ_min_heightÚ
_max_widthÚ_max_heightÚ_last_resizable_argsr   ZthemeÚ_check_color_typeÚ	_fg_colorÚ	configureÚ_apply_appearance_modeÚtitleÚ_iconbitmap_method_calledÚ(_state_before_windows_set_titlebar_colorÚ"_windows_set_titlebar_color_calledÚ1_withdraw_called_after_windows_set_titlebar_colorÚ0_iconify_called_after_windows_set_titlebar_colorÚ_block_update_dimensions_eventÚfocused_widget_before_widthdrawÚ_windows_set_titlebar_iconÚ_windows_set_titlebar_colorÚ_get_appearance_modeÚbindÚ_update_dimensions_eventÚ_focus_in_event)r"   r   ÚargsÚkwargs©Ú	__class__r    r#   r*      sD    
"zCTkToplevel.__init__c                 C   s,   |   ¡  tj | ¡ t | ¡ t | ¡ d S ©N)Ú_disable_macos_dark_title_barÚtkinterÚToplevelÚdestroyr	   r   ©r"   r   r   r#   rT   W   s    
zCTkToplevel.destroyc                 C   s   t jdkr|  ¡  d S )NÚdarwin)r+   r,   Zlift)r"   Úeventr   r   r#   rK   _   s    
zCTkToplevel._focus_in_eventc                 C   sR   | j sN|  ¡ }|  ¡ }| j|  |¡ks6| j|  |¡krN|  |¡| _|  |¡| _d S rP   )rD   Zwinfo_widthZwinfo_heightr3   Z_reverse_window_scalingr4   )r"   rW   Zdetected_widthZdetected_heightr   r   r#   rJ   d   s     z$CTkToplevel._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_scalingr3   r4   ÚmaxsizeÚgeometryr1   Ú_set_scaled_min_max)r"   Znew_widget_scalingZnew_window_scalingrN   r   r#   rY   m   s
    &zCTkToplevel._set_scalingc                 C   s
   d| _ d S ©NF©rD   rU   r   r   r#   Úblock_update_dimensions_eventy   s    z)CTkToplevel.block_update_dimensions_eventc                 C   s
   d| _ d S r_   r`   rU   r   r   r#   Úunblock_update_dimensions_event|   s    z+CTkToplevel.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 rP   )r5   r6   r)   rZ   r[   r7   r8   r\   rU   rN   r   r#   r^      s    zCTkToplevel._set_scaled_min_max)Úgeometry_stringc                    s~   |d k	rjt ƒ  |  |¡¡ |  |¡\}}}}|d k	rz|d k	rzt| jt|| jƒƒ| _t| j	t|| j
ƒƒ| _n|  t ƒ  ¡ ¡S d S rP   )r)   r]   Z_apply_geometry_scalingZ_parse_geometry_stringÚmaxr5   Úminr7   r3   r6   r8   r4   Z_reverse_geometry_scaling)r"   rc   r   r   rX   ÚyrN   r   r#   r]   …   s    zCTkToplevel.geometryc                    s   | j rd| _tƒ  ¡  d S ©NT)rA   rB   r)   ÚwithdrawrU   rN   r   r#   rh   ‘   s    zCTkToplevel.withdrawc                    s   | j rd| _tƒ  ¡  d S rg   )rA   rC   r)   ÚiconifyrU   rN   r   r#   ri   –   s    zCTkToplevel.iconify©r   r   c                    sB   t ƒ  ||¡}g ||dœfˆ _tj d¡r>ˆ  d‡ fdd„¡ |S )Nrj   r   é
   c                      s   ˆ   ˆ  ¡ ¡S rP   )rG   rH   r   rU   r   r#   r$       r%   z'CTkToplevel.resizable.<locals>.<lambda>)r)   Ú	resizabler9   r+   r,   r-   r1   )r"   r   r   Zcurrent_resizable_valuesrN   rU   r#   rl   ›   s
    zCTkToplevel.resizablec                    sN   || _ || _| j|k r|| _| j|k r,|| _tƒ  |  | j ¡|  | j¡¡ d S rP   )r5   r6   r3   r4   r)   rZ   r[   ©r"   r   r   rN   r   r#   rZ   ¤   s    

zCTkToplevel.minsizec                    sN   || _ || _| j|kr|| _| j|kr,|| _tƒ  |  | j ¡|  | j¡¡ d S rP   )r7   r8   r3   r4   r)   r\   r[   rm   rN   r   r#   r\   ­   s    

zCTkToplevel.maxsizec              	      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_childrenr2   r
   r   r   )r"   rM   ÚchildrN   r   r#   r<   ¶   s    zCTkToplevel.configure)Úattribute_nameÚreturnc                    s   |dkr| j S tƒ  |¡S d S )Nr   )r;   r)   Úcget)r"   rp   rN   r   r#   rr   Ä   s    zCTkToplevel.cgetc                    s   d| _ tƒ  ||¡ d S rg   )r?   r)   Úwm_iconbitmap)r"   ZbitmapÚdefaultrN   r   r#   rs   Ê   s    zCTkToplevel.wm_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 r   )	r?   r   r   r.   r/   r0   r   r   r2   )r"   r!   r   r   r#   rF   Î   s    z&CTkToplevel._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 )NrV   ú3.10ÚinfoÚ
patchlevelú8.6.9z9defaults write -g NSRequiresAquaSystemAppearance -bool No©r+   r,   r   r   ÚparseÚpython_versionrR   ZTclÚcallr   Úsystem©Úclsr   r   r#   r(   ×   s     z(CTkToplevel._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 )NrV   ru   rv   rw   rx   z1defaults delete -g NSRequiresAquaSystemAppearancery   r~   r   r   r#   rQ   Þ   s     z)CTkToplevel._disable_macos_dark_title_bar)Ú
color_modec              
      sH  t j d¡rD| jsD|  ¡ | _|  ¡ | _tƒ  	¡  tƒ  
¡  | ¡ dkrPd}n| ¡ dkrbd}ndS zzt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 d	| _|  d
| j¡ | jdk	rD|  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darkr   Úlightr   Né   é   Té   rk   )r+   r,   r-   r   Ústater@   Z	focus_getrE   r)   rh   ÚupdateÚlowerÚctypesÚwindllZuser32Z	GetParentZwinfo_idZdwmapiZDwmSetWindowAttributeÚbyrefÚc_intÚsizeofr2   ÚprintrA   r1   Ú1_revert_withdraw_after_windows_set_titlebar_colorZfocus)r"   r€   ÚvalueZhwndZDWMWA_USE_IMMERSIVE_DARK_MODEZ)DWMWA_USE_IMMERSIVE_DARK_MODE_BEFORE_20H1ÚerrrN   r   r#   rG   æ   s>    



þþþz'CTkToplevel._windows_set_titlebar_colorc                    s€   | j r|| jrn\| jr tƒ  ¡  nJ| jdkr4|  ¡  n6| jdkrH|  ¡  n"| jdkr^|  d¡ n|  | j¡ d| _ d| _d| _dS )z  if in a short time (5ms) after ÚnormalZiconicZzoomedFN)rA   rB   rC   r)   ri   r@   Z	deiconifyr…   rU   rN   r   r#   rŽ     s    




z=CTkToplevel._revert_withdraw_after_windows_set_titlebar_colorc                    s<   t ƒ  |¡ tj d¡r"|  |¡ t ƒ j|  | j¡d d S )Nr   r&   )	r)   Ú_set_appearance_moder+   r,   r-   rG   r<   r=   r;   )r"   Zmode_stringrN   r   r#   r’   -  s    
z CTkToplevel._set_appearance_mode)N)N)NN)NN)NN)NN)(Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚsetÚ__annotations__r   Úboolr   r   r   Ústrr   r*   rT   rK   rJ   rY   ra   rb   r^   r]   rh   ri   rl   rZ   r\   r<   Úanyrr   rs   rF   Úclassmethodr(   rQ   rG   rŽ   r’   Ú__classcell__r   r   rN   r#   r      sT   
       þÿÿ:
					

1r   )rR   Ú	packagingr   r+   r   r,   rˆ   Útypingr   r   r   Zwidgets.themer   Zwidgets.scalingr   Zwidgets.appearance_moder	   Z7customtkinter.windows.widgets.utility.utility_functionsr
   r   rS   r   r   r   r   r#   Ú<module>   s   