
    f9                         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
e j(                  ee      Zy)    N)version)UnionTupleOptional   )ThemeManager)CTkScalingBaseClass)CTkAppearanceModeBaseClass)pop_from_dict_by_setcheck_kwargs_emptyc                   t    e Zd ZU dZh dZeed<   dZeed<   dZ	eed<   ddd	e
eeeeef   f      f fd
Zd Zd Zd'dZ fdZd Zd Z fdZd'def fdZ fdZ fdZd(dedef fdZd( fd	Zd( fd	Z fdZdedef fdZd( fd	Zd  Z e!d!        Z"e!d"        Z#d#ef fd$Z$ fd%Z% fd&Z& xZ'S ))CTkToplevelz|
    Toplevel window with dark titlebar on Windows and macOS.
    For detailed information check out the documentation.
    >   bdusemenuclasswidthcursorheightmasterreliefscreenvisual	container	takefocusborderwidthhighlightthicknesshighlightbackground_valid_tk_toplevel_argumentsF,_deactivate_macos_window_header_manipulation._deactivate_windows_window_header_manipulationN)fg_colorr"   c                     j                          t           |i t        | j                         t        j                          t        j                   d       t        |d       	 t        j                  j                  d      rst        j                  j                  t        j                  j                  t        j                  j                  t                           j!                  d fd       d _        d _        d _        d _        d	 _        d	 _        d  _        |t2        j4                  d
   d   n j7                  |       _        t         u   j=                   j8                               t         }  d
       d _         d  _!        d _"        d _#        d _$        d _%        d  _&        t        j                  j                  d      r j!                  d jN                         t        j                  j                  d      r jQ                   jS                                 jU                  d jV                          jU                  d jX                         y # t"        $ r Y w xY w)Nwindow)scaling_typeT)raise_errorwin   c                  f    j                  t        j                  j                   ddd            S NassetsiconszCustomTkinter_icon_Windows.ico)
iconbitmapospathjoin)customtkinter_directoryselfs   z/var/dept/share/cheung/public_html/OutSchool/python/env/lib/python3.12/site-packages/customtkinter/windows/ctk_toplevel.py<lambda>z&CTkToplevel.__init__.<locals>.<lambda>-   s1    E\^fho  rR  9S  )T     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   theme_check_color_type	_fg_color	configure_apply_appearance_modetitle_iconbitmap_method_called(_state_before_windows_set_titlebar_color"_windows_set_titlebar_color_called1_withdraw_called_after_windows_set_titlebar_color0_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)r2   r"   argskwargsr1   	__class__s   `   @r3   r:   zCTkToplevel.__init__   s    	))+ 	$b"6vt?`?`"ab"++D1$$TA6t4	||&&u-*,''//"''//"''//ZbJc:d*e'

3  !T  U ""  !( )DH!JRJZ++M::F`d`v`vw  aA 	T88HI 	m$ *.&8<527/AF>@E=.3+ 04, <<""5)JJsD;;< <<""5),,T-F-F-HI		-!>!>?		+t334O  		s   1BI= =	J
	J
c                     | j                          t        j                  j                  |        t	        j                  |        t        j                  |        y N)_disable_macos_dark_title_bartkinterTopleveldestroyr
   r	   r2   s    r3   re   zCTkToplevel.destroyW   s@    **, 	  &"**40##D)r5   c                 L    t         j                  dk(  r| j                          y y )Ndarwin)r;   r<   lift)r2   events     r3   r\   zCTkToplevel._focus_in_event_   s    <<8#IIK $r5   c                 0   | j                   s| j                         }| j                         }| j                  | j	                  |      k7  s| j
                  | j	                  |      k7  r-| j	                  |      | _        | j	                  |      | _        y y y ra   )rU   winfo_widthwinfo_heightrC   _reverse_window_scalingrD   )r2   rj   detected_widthdetected_heights       r3   r[   z$CTkToplevel._update_dimensions_eventd   s    22!--/N"//1O""d&B&B>&RRVZVjVjnr  oK  oK  L[  o\  W\&*&B&B>&R#'+'C'CO'T$ W\	 3r5   c                    t         |   ||       t         | 	  | j                  | j                        | j                  | j
                               t         |   | j                  | j                        | j                  | j
                               t         |   | j                  | j                         d| j                  | j
                                | j                  d| j                         y )Nxi  )
r9   _set_scalingminsize_apply_window_scalingrC   rD   maxsizegeometryrA   _set_scaled_min_max)r2   new_widget_scalingnew_window_scalingr_   s      r3   rs   zCTkToplevel._set_scalingm   s    /1CD 	2243F3FGIcIcdhdxdxIyz2243F3FGIcIcdhdxdxIyzD66t7J7JKLAdNhNhimi}i}N~M  A  	B 	

4112r5   c                     d| _         y NFrU   rf   s    r3   block_update_dimensions_eventz)CTkToplevel.block_update_dimensions_eventy   
    .3+r5   c                     d| _         y r|   r}   rf   s    r3   unblock_update_dimensions_eventz+CTkToplevel.unblock_update_dimensions_event|   r   r5   c                 p   | j                   | j                  Bt        |   | j	                  | j                         | j	                  | j                               | j
                  | j                  Ct        |   | j	                  | j
                        | j	                  | j                               y y ra   )rE   rF   r9   rt   ru   rG   rH   rv   r2   r_   s    r3   rx   zCTkToplevel._set_scaled_min_max   s    ??&$*:*:*FGOD66tGIcIcdhdtdtIuv??&$*:*:*FGOD66tGIcIcdhdtdtIuv +Gr5   geometry_stringc                 t   |t         |   | j                  |             | j                  |      \  }}}}|b|_t	        | j
                  t        || j                              | _        t	        | j                  t        || j                              | _        y y y | j                  t         |                S ra   )r9   rw   _apply_geometry_scaling_parse_geometry_stringmaxrE   minrG   rC   rF   rH   rD   _reverse_geometry_scaling)r2   r   r   r   rr   yr_   s         r3   rw   zCTkToplevel.geometry   s    &GT99/JK #'"="=o"NE61a V%7&)$//3udoo;V&W#'*4+;+;SIYIY=Z'[$ &8  11%'2B2DEEr5   c                 H    | j                   rd| _        t        |           y NT)rR   rS   r9   withdrawr   s    r3   r   zCTkToplevel.withdraw   s    22EIDBr5   c                 H    | j                   rd| _        t        |           y r   )rR   rT   r9   iconifyr   s    r3   r   zCTkToplevel.iconify   s    22DHDAr5   r   r   c                      t            ||      }g ||df _        t        j                  j                  d      r j                  d fd       |S )N)r   r   r'   
   c                  B     j                   j                               S ra   )rX   rY   rf   s   r3   r4   z'CTkToplevel.resizable.<locals>.<lambda>   s    4#C#CDD]D]D_#` r5   )r9   	resizablerI   r;   r<   r=   rA   )r2   r   r   current_resizable_valuesr_   s   `   r3   r   zCTkToplevel.resizable   sN    #(7#4UF#C %'5F)K$L!<<""5)JJr`a''r5   c                     || _         || _        | j                  |k  r|| _        | j                  |k  r|| _        t        |   | j                  | j                         | j                  | j                               y ra   )rE   rF   rC   rD   r9   rt   ru   r2   r   r   r_   s      r3   rt   zCTkToplevel.minsize   m    !&"'D&(#)D 224??CTE_E_`d`p`pEqrr5   c                     || _         || _        | j                  |kD  r|| _        | j                  |kD  r|| _        t        |   | j                  | j                         | j                  | j                               y ra   )rG   rH   rC   rD   r9   rv   ru   r   s      r3   rv   zCTkToplevel.maxsize   r   r5   c                    d|v r| j                  |j                  d            | _        t        |   | j                  | j                               | j                         D ]  }	 |j	                  | j                         ! t        |   di t        || j                         t        |       y # t        $ r Y \w xY w)Nr"   r6   )bg_color )rK   poprL   r9   rM   rN   winfo_childrenrB   r   r   r   )r2   r^   childr_   s      r3   rM   zCTkToplevel.configure   s    !33FJJz4JKDNG!<!<T^^!LM,,. OOT^^O< 	\09Z9Z[\6"	 ! s   (B55	C Cattribute_namereturnc                 D    |dk(  r| j                   S t        | 	  |      S )Nr"   )rL   r9   cget)r2   r   r_   s     r3   r   zCTkToplevel.cget   s$    Z'>>!7<//r5   c                 4    d| _         t        | 	  ||       y r   )rP   r9   wm_iconbitmap)r2   bitmapdefaultr_   s      r3   r   zCTkToplevel.wm_iconbitmap   s    )-&fg.r5   c                 Z   	 | j                   st        j                  j                  t        j                  j                  t        j                  j	                  t
                          }| j                  t        j                  j                  |ddd             y y # t        $ r Y y w xY wr*   )	rP   r.   r/   r>   r?   r@   r-   r0   rB   )r2   r1   s     r3   rW   z&CTkToplevel._windows_set_titlebar_icon   sy    	11*,''//"''//"''//ZbJc:d*e'-DhPWYy z{ 2  		s   BB 	B*)B*c                    t         j                  dk(  r| j                  st        j                  t        j
                               t        j                  d      k  rdt        j                  t        j                         j                  dd            t        j                  d      k\  rt        j                  d       y y y y y )Nrh   3.10info
patchlevel8.6.9z9defaults write -g NSRequiresAquaSystemAppearance -bool Nor;   r<   r    r   parsepython_versionrc   Tclcallr.   systemclss    r3   r8   z(CTkToplevel._enable_macos_dark_title_bar   s    <<8#C,\,\}}X4467'--:OO==!3!3FL!IJgmm\cNddIIYZ e P -]#r5   c                    t         j                  dk(  r| j                  st        j                  t        j
                               t        j                  d      k  rdt        j                  t        j                         j                  dd            t        j                  d      k\  rt        j                  d       y y y y y )Nrh   r   r   r   r   z1defaults delete -g NSRequiresAquaSystemAppearancer   r   s    r3   rb   z)CTkToplevel._disable_macos_dark_title_bar   s    <<8#C,\,\}}X4467'--:OO==!3!3FL!IJgmm\cNddIIQR e P -]#r5   
color_modec           
         t         j                  j                  d      r| j                  s | j	                         | _        | j                         | _        t        | %          t        | )          |j                         dk(  rd}n|j                         dk(  rd}ny	 t        j                  j                  j                  | j!                               }d}d}t        j                  j"                  j%                  ||t        j&                  t        j(                  |            t        j*                  t        j(                  |                  dk7  rxt        j                  j"                  j%                  ||t        j&                  t        j(                  |            t        j*                  t        j(                  |                   d	| _        | j3                  d
| j4                         | j                  .| j3                  d| j                  j6                         d| _        yyyy# t,        $ r}t/        |       Y d}~yd}~ww xY w)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'   darkr   lightr   N      T   r   )r;   r<   r=   r!   staterQ   	focus_getrV   r9   r   updatelowerctypeswindlluser32	GetParentwinfo_iddwmapiDwmSetWindowAttributebyrefc_intsizeofrB   printrR   rA   1_revert_withdraw_after_windows_set_titlebar_colorfocus)r2   r   valuehwndDWMWA_USE_IMMERSIVE_DARK_MODE)DWMWA_USE_IMMERSIVE_DARK_MODE_BEFORE_20H1errr_   s          r3   rX   z'CTkToplevel._windows_set_titlebar_color   s    <<""5)$2e2e<@JJLD937>>3CD0GGN!V+!!#w.}}++55dmmoF02-<>9 ==''==dDa>Dll6<<X]K^>_>DmmFLLY^L_>`befg MM((>>tEn?E||FLLY^L_?`?E}}V\\Z_M`?ac 7;D3JJq$PPQ33?

2tCCIIJ7;4 @E 3f)8  c

s   #D.H1 1	I:I

Ic                    | j                   r| j                  rn| j                  rt        |           n|| j
                  dk(  r| j                          n\| j
                  dk(  r| j	                          n<| j
                  dk(  r| j                  d       n| j                  | j
                         d| _         d| _        d| _        yy)z  if in a short time (5ms) after normaliconiczoomedFN)rR   rS   rT   r9   r   rQ   	deiconifyr   r   s    r3   r   z=CTkToplevel._revert_withdraw_after_windows_set_titlebar_color  s    22EEFF!@@HLNN$BBhNLLNBBhNJJx(JJtLLM6;D3EJDBDIDA% 3r5   c                     t         |   |       t        j                  j	                  d      r| j                  |       t         |   | j                  | j                               y )Nr'   r6   )	r9   _set_appearance_moder;   r<   r=   rX   rM   rN   rL   )r2   mode_stringr_   s     r3   r   z CTkToplevel._set_appearance_mode-  sO    $[1<<""5),,[9T88HIr5   ra   )NN)(__name__
__module____qualname____doc__r   set__annotations__r    boolr!   r   r   strr   r:   re   r\   r[   rs   r~   r   rx   rw   r   r   r   rt   rv   rM   anyr   r   rW   classmethodr8   rb   rX   r   r   __classcell__)r_   s   @r3   r   r      s&   
)Z # Z :?0$>;@2D@ DH85#E#uS#X*>$?@85t*
U
344w
F 
F

(t (D (ss#03 03 0/ [ [ S S/<c /<bJ,J Jr5   r   )rc   	packagingr   r;   r.   r<   r   typingr   r   r   widgets.themer   widgets.scalingr	   widgets.appearance_moder
   7customtkinter.windows.widgets.utility.utility_functionsr   r   rd   r   r   r5   r3   <module>r      sE      
 	   ) ) ' 0 ? lcJ'""$>@S cJr5   