
    f=                         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
eee      Zy)    N)UnionTupleOptional)version   )ThemeManager)CTkScalingBaseClass)CTkAppearanceModeBaseClass)pop_from_dict_by_setcheck_kwargs_emptyc                       e Zd ZU dZh dZeed<   h dZeed<   dZe	ed<   dZ
e	ed<   	 d*d	eeeeeef   f      f fd
Zd Zd Zd* fd	Z fdZd Zd Z fdZ fdZ fdZ fdZ fdZd+de	de	f fdZd+dedef fdZd+dedef fdZd*def fdZ fdZ dede!f fd Z"d+ fd!	Z#d+ fd"	Z$d# Z%e&d$        Z'e&d%        Z(d&ef fd'Z)d(ef fd)Z* xZ+S ),CTkz|
    Main app window with dark titlebar on Windows and macOS.
    For detailed information check out the documentation.
    >   usesyncuseTkbaseName	className
screenName_valid_tk_constructor_arguments>   bdr   menupadxpadyclasswidthcursorheightreliefscreenvisual	container	takefocusborderwidthhighlightthickness_valid_tk_configure_argumentsF,_deactivate_macos_window_header_manipulation._deactivate_windows_window_header_manipulationfg_colorc                    | j                          t        j                  | fi t        || j                         t        j                  |        t        j                  | d       t        |d       d| _        d| _	        d| _
        d| _        d| _        d| _        d | _        |t        j                   d	   d
   n| j#                  |      | _        t&        | Q  | j+                  | j$                               | j-                  d	       d| _        d | _        d| _        d| _        d| _        d| _        d | _        t<        j>                  jA                  d      r| jC                  d| jD                         t<        j>                  jA                  d      r| jG                  | jI                                | jK                  d| jL                         | jK                  d| jN                         y )Nwindow)scaling_typeT)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   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__s      t/var/dept/share/cheung/public_html/OutSchool/python/env/lib/python3.12/site-packages/customtkinter/windows/ctk_tk.pyr3   zCTk.__init__!   s    	))+ 	!!$m*>vtGkGk*lm"++D1$$TA6t4!"  !( )DH!BJBR++E2:>X\XnXnowXx 	T88HI 	

5 */&8<5#5:2491.3+ 04, <<""5)JJsD;;< <<""5),,T-F-F-HI		-!>!>?		+t334    c                     | j                          t        j                  j                  |        t	        j                  |        t        j                  |        y N)_disable_macos_dark_title_bartkinterTkdestroyr
   r	   rS   s    rV   r]   zCTk.destroyS   s>    **, 	

4 "**40##D)rW   c                 L    t         j                  dk(  r| j                          y y )Ndarwin)rI   rJ   lift)rS   events     rV   rR   zCTk._focus_in_event[   s    <<8#IIK $rW   c                 *   | j                   st        | 	         }t        |          }| j                  | j                  |      k7  s| j                  | j                  |      k7  r-| j                  |      | _        | j                  |      | _        y y y rY   )rG   r>   winfo_widthwinfo_heightr4   _reverse_window_scalingr5   )rS   rb   detected_widthdetected_heightrU   s       rV   rQ   zCTk._update_dimensions_event`   s    22"W02N#g24O
 ""d&B&B>&RRVZVjVjnr  oK  oK  L[  o\  W\&*&B&B>&R#'+'C'CO'T$ W\ 3rW   c                    t         |   ||       t         | 	  | j                  | j                        | j                  | j
                               t         |   | j                  | j                        | j                  | j
                               t         |   | j                  | j                         d| j                  | j
                                | j                  d| j                         y )Nxi  )
r>   _set_scalingminsize_apply_window_scalingr4   r5   maxsizegeometryrL   _set_scaled_min_max)rS   new_widget_scalingnew_window_scalingrU   s      rV   rk   zCTk._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2rW   c                     d| _         y NFrG   r^   s    rV   block_update_dimensions_eventz!CTk.block_update_dimensions_eventy   
    .3+rW   c                     d| _         y rt   ru   r^   s    rV   unblock_update_dimensions_eventz#CTk.unblock_update_dimensions_event|   rw   rW   c                 p   | j                   | j                  Bt        |   | j	                  | j                         | j	                  | j                               | j
                  | j                  Ct        |   | j	                  | j
                        | j	                  | j                               y y rY   )r6   r7   r>   rl   rm   r8   r9   rn   rS   rU   s    rV   rp   zCTk._set_scaled_min_max   s    ??&$*:*:*FGOD66tGIcIcdhdtdtIuv??&$*:*:*FGOD66tGIcIcdhdtdtIuv +GrW   c                 L    | j                   du rd| _        t        |           y NFT)rD   rE   r>   withdrawr{   s    rV   r~   zCTk.withdraw   s$    %'9=D6rW   c                 L    | j                   du rd| _        t        |           y r}   )rD   rF   r>   iconifyr{   s    rV   r   zCTk.iconify   s#    %'8<D5rW   c                     | j                   du rNt        j                  j                  d      r(| j                  s| j
                  s| j                          d| _         t        | !          y )NFr/   T)	rD   rI   rJ   rK   rE   rF   	deiconifyr>   updater{   s    rV   r   z
CTk.update   sP    %'||&&u-AA$JsJsNN$"&DrW   c                    | j                   smt        j                  j                  d      rG| j	                  | j                                | j                  s| j                  s| j                          d| _         t        | (  |i | y )Nr/   T)rD   rI   rJ   rK   rN   rO   rE   rF   r   r>   mainloop)rS   argsrT   rU   s      rV   r   zCTk.mainloop   sj    ""||&&u-001J1J1LMAA$JsJsNN$"&D$)&)rW   r   r   c                     t         |   ||      }g ||df| _        t        j                  j                  d      r| j                  | j                                |S )N)r   r   r/   )r>   	resizabler:   rI   rJ   rK   rN   rO   )rS   r   r   current_resizable_valuesrU   s       rV   r   zCTk.resizable   sV    #(7#4UF#C %'5F)K$L!<<""5),,T-F-F-HI''rW   c                     || _         || _        | j                  |k  r|| _        | j                  |k  r|| _        t        |   | j                  | j                         | j                  | j                               y rY   )r6   r7   r4   r5   r>   rl   rm   rS   r   r   rU   s      rV   rl   zCTk.minsize   m    !&"'D&(#)D 224??CTE_E_`d`p`pEqrrW   c                     || _         || _        | j                  |kD  r|| _        | j                  |kD  r|| _        t        |   | j                  | j                         | j                  | j                               y rY   )r8   r9   r4   r5   r>   rn   rm   r   s      rV   rn   zCTk.maxsize   r   rW   geometry_stringc                 t   |t         |   | j                  |             | j                  |      \  }}}}|b|_t	        | j
                  t        || j                              | _        t	        | j                  t        || j                              | _        y y y | j                  t         |                S rY   )r>   ro   _apply_geometry_scaling_parse_geometry_stringmaxr6   minr8   r4   r7   r9   r5   _reverse_geometry_scaling)rS   r   r   r   rj   yrU   s         rV   ro   zCTk.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ErW   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(   r-   )bg_color )r<   popr=   r>   r?   r@   winfo_children	Exceptionr   r%   r   )rS   rT   childrU   s      rV   r?   zCTk.configure   s    !33FJJz4JKDNG!<!<T^^!LM,,. OOT^^O< 	]09[9[\]6"	 ! s   (B55	C Cattribute_namereturnc                 D    |dk(  r| j                   S t        | 	  |      S )Nr(   )r=   r>   cget)rS   r   rU   s     rV   r   zCTk.cget   s$    Z'>>!7<//rW   c                 4    d| _         t        | 	  ||       y NTrB   r>   wm_iconbitmaprS   bitmapdefaultrU   s      rV   r   zCTk.wm_iconbitmap       )-&fg.rW   c                 4    d| _         t        | 	  ||       y r   r   r   s      rV   
iconbitmapzCTk.iconbitmap   r   rW   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)NassetsiconszCustomTkinter_icon_Windows.ico)	rB   ospathdirnameabspath__file__r   joinr   )rS   customtkinter_directorys     rV   rM   zCTk._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 )Nr`   3.10info
patchlevel8.6.9z9defaults write -g NSRequiresAquaSystemAppearance -bool NorI   rJ   r&   r   parsepython_versionr[   Tclcallr   systemclss    rV   r1   z CTk._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 -]#rW   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 )Nr`   r   r   r   r   z1defaults delete -g NSRequiresAquaSystemAppearancer   r   s    rV   rZ   z!CTk._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 -]#rW   
color_modec           
         t         j                  j                  d      r| j                  s| j                  rW| j                         | _        | j                  dk7  s| j                  dk7  rU| j                         | _        t        | )          n1| 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*                  |                   | j                  s	 | j                  dk(  r| j3                          n]| j                  dk(  r| j5                          n=| j                  dk(  r| j                  d       n| j                  | j                         	 | j                  .| j7                  d| j                  j8                         d| _        yyyy# t.        $ r}t1        |       Y d}~d}~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/   iconic	withdrawndarkr   lightr   N      normalzoomed)rI   rJ   rK   r'   rD   staterC   	focus_getrH   r>   r~   r   lowerctypeswindlluser32	GetParentwinfo_iddwmapiDwmSetWindowAttributebyrefc_intsizeofr   printr   r   rL   focus)rS   r   valuehwndDWMWA_USE_IMMERSIVE_DARK_MODE)DWMWA_USE_IMMERSIVE_DARK_MODE_BEFORE_20H1errrU   s          rV   rN   zCTk._windows_set_titlebar_color  sb    <<""5)$2e2e""@D

= @@HLPTP}P}  BM  QM;?>>;KD8G$& 8<~~7G4 " !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 ""d@@HLNN$BBhNLLNBBhNJJx(JJtLLM 33?

1dBBHHI7;4 @k 3f)J  c

s   1D.K& &	L/K??Lmode_stringc                     t         |   |       t        j                  j	                  d      r| j                  |       t         |   | j                  | j                               y )Nr/   r-   )	r>   _set_appearance_moderI   rJ   rK   rN   r?   r@   r=   )rS   r   rU   s     rV   r   zCTk._set_appearance_modeG  sO    $[1<<""5),,[9T88HIrW   rY   )NN),__name__
__module____qualname____doc__r   set__annotations__r%   r&   boolr'   r   r   strr   r3   r]   rR   rQ   rk   rv   ry   rp   r~   r   r   r   r   intrl   rn   ro   r?   anyr   r   r   rM   classmethodr1   rZ   rN   r   __classcell__)rU   s   @rV   r   r      sg   
 ,k#Sj*p!3 p :?0$>;@2D@ DH05#E#uS#X*>$?@05d*
U
344w

	*(t (D (sS s ssS s s
F 
F#03 03 0// [ [ S SB<c B<HJ J JrW   r   )r[   rI   r   rJ   r   typingr   r   r   	packagingr   widgets.themer   widgets.scalingr	   widgets.appearance_moder
   7customtkinter.windows.widgets.utility.utility_functionsr   r   r\   r2   r   r   rW   rV   <module>r      sJ     
 	   ) )  ' 0 ? l:: {J
68K {JrW   