§
    �ªªj  ã                  óº   — d Z ddlmZ ddlZddlZddlmZmZmZ ddl	m
Z
mZ 	 ddlZddlmZ n# e$ r dZdZY nw xY w ej        d¦  «        Z G d„ d	¦  «        ZdS )
uZ  AutoPOE2 - TrÃ¬nh Quáº£n LÃ½ Khay Há»‡ Thá»‘ng (System Tray Manager).

Cung cáº¥p tÃ­nh nÄƒng thu nhá»� vÃ  cháº¡y ngáº§m trÃªn Windows System Tray (Taskbar Notification Area):
- Khá»Ÿi Ä‘á»™ng máº·c Ä‘á»‹nh á»Ÿ cháº¿ Ä‘á»™ áº©n (Silent Mode), khÃ´ng chiáº¿m diá»‡n tÃ­ch mÃ n hÃ¬nh lÃ m viá»‡c cá»§a ngÆ°á»�i dÃ¹ng.
- Menu chuá»™t pháº£i: Hiá»‡n/áº¨n giao diá»‡n, Báº­t/Táº¯t Bot (F8), ThoÃ¡t á»©ng dá»¥ng an toÃ n.
- Click Ä‘Ãºp hoáº·c click chuá»™t trÃ¡i vÃ o biá»ƒu tÆ°á»£ng khay Ä‘á»ƒ báº­t/táº¯t nhanh giao diá»‡n.
- TuÃ¢n thá»§ Rule 4 (Anti-Monolithic Policy & Single Responsibility Principle).
é    )ÚannotationsN)ÚAnyÚCallableÚOptional)ÚImageÚ	ImageDraw)ÚMenuItemzAutoPOE2.SystemTrayc                  ó~   — e Zd ZdZ	 	 ddd„Zdd„Zdd„Zddd„Zdd„Zdd„Z	dd„Z
dd„Zddd„Zddd„Zdd„Zdd„ZdS ) ÚSystemTrayManagerub   Quáº£n trá»‹ biá»ƒu tÆ°á»£ng vÃ  menu khay há»‡ thá»‘ng (System Tray) cho AutoPOE2 Control Center.NÚappr   Úon_exit_callbackúOptional[Callable[[], None]]Úon_toggle_bot_callbackc                óZ   — || _         || _        || _        d | _        d | _        d| _        d S )NF)r   r   r   ÚiconÚ_threadÚ_is_running)Úselfr   r   r   s       ú>C:\Projects\AutoPOE2\src\assistant_tool\system_tray_manager.pyÚ__init__zSystemTrayManager.__init__    s7   € ð ˆŒØ 0ˆÔØ&<ˆÔ#Ø,0ˆŒ	Ø37ˆŒØ ˆÔÐÐó    ÚreturnúImage.Imagec                óÆ   — t          j        ddd¬¦  «        }t          j        |¦  «        }|                     g d¢ddd¬	¦  «         |                     g d
¢dd¬¦  «         |S )uH   Táº¡o icon sáº¯c nÃ©t 64x64 mÃ u xanh cyan Ä‘áº·c trÆ°ng cá»§a AutoPOE2.ÚRGBA)é@   r   )r   r   r   r   )Úcolor)é   r   é<   r   )é   é   é*   éÿ   )é8   é½   éø   r#   é   )ÚfillÚoutlineÚwidth))é    é   )é0   é   )r-   r"   )r+   é4   )é   r"   )r0   r.   )r,   é¥   éé   éæ   )r#   r#   r#   r#   )r(   r)   )r   Únewr   ÚDrawÚellipseÚpolygon)r   ÚimgÚdraws      r   Ú_create_icon_imagez$SystemTrayManager._create_icon_image-   s{   € åŒi˜ °Ð=Ñ=Ô=ˆÝŒ~˜cÑ"Ô"ˆð 	�Š�^�^�^Ð*;ÐEXÐ`aˆÑbÔbÐbà�ŠØHÐHÐHØ$Ø(ð 	ñ 	
ô 	
ð 	
ð
 ˆ
r   Úboolc           	     ó˜  — t           €t                               d¦  «         dS 	 t          j        t	          d| j        d¬¦  «        t	          d| j        ¦  «        t           j        j        t	          d| j        ¦  «        ¦  «        }t          j	        d	|  
                    ¦   «         d
|¬¦  «        | _        t          j        | j        j        dd¬¦  «        | _        | j                             ¦   «          d| _        t                               d¦  «         dS # t&          $ r(}t                               d|› �¦  «         Y d}~dS d}~ww xY w)u*   Khá»Ÿi Ä‘á»™ng luá»“ng cháº¡y System Tray.Nu<   [SystemTray] ThÆ° viá»‡n pystray chÆ°a Ä‘Æ°á»£c cÃ i Ä‘áº·t.Fu"   Hiá»ƒn thá»‹ / áº¨n Control CenterT)Údefaultu   Báº­t / Táº¯t Bot (F8)u   ThoÃ¡t AutoPOE2ÚAutoPOE2_Trayz%AutoPOE2 Control Center (Silent Mode))ÚmenuÚSystemTrayThread)ÚtargetÚdaemonÚnameuH   [SystemTray] Ä�Ã£ khá»Ÿi táº¡o biá»ƒu tÆ°á»£ng System Tray thÃ nh cÃ´ng.u+   [SystemTray] Lá»—i khá»Ÿi táº¡o tray icon: )ÚpystrayÚloggerÚwarningÚMenuÚitemÚtoggle_windowÚ
toggle_botÚ	SEPARATORÚquit_appÚIconr:   r   Ú	threadingÚThreadÚrunr   Ústartr   ÚinfoÚ	ExceptionÚerror)r   r?   Úes      r   rQ   zSystemTrayManager.start<   sA  € åˆ?Ý�NŠNÐYÑZÔZÐZØ�5ð	Ý”<ÝÐ9¸4Ô;MÐW[Ð\Ñ\Ô\ÝÐ-¨t¬Ñ?Ô?Ý”Ô&ÝÐ&¨¬Ñ6Ô6ñ	ô ˆDõ  œØØ×'Ò'Ñ)Ô)Ø7Øð	ñ ô ˆDŒIõ %Ô+°4´9´=ÈÐTfÐgÑgÔgˆDŒLØŒL×ÒÑ Ô Ð Ø#ˆDÔÝ�KŠKÐbÑcÔcÐcØ�4øÝð 	ð 	ð 	Ý�LŠLÐJÀqÐJÐJÑKÔKÐKØ�5�5�5�5�5øøøøð	øøøs   ¥C0D Ä
E	Ä!EÅE	r   Úitem_objÚNonec                óF   — | j                              d| j        ¦  «         dS )u[   Ä�áº£o tráº¡ng thÃ¡i áº©n/hiá»‡n cá»§a cá»­a sá»• Control Center trÃªn Tkinter main thread.r   N)r   ÚafterÚ_do_toggle_window©r   r   rV   s      r   rI   zSystemTrayManager.toggle_windowZ   s!   € àŒ�Š�q˜$Ô0Ñ1Ô1Ð1Ð1Ð1r   c                óª  — 	 | j                              ¦   «         dk    s| j                              ¦   «         sM| j                              ¦   «          | j                              ¦   «          | j                              ¦   «          d S | j                              ¦   «          d S # t          $ r(}t           	                    d|› �¦  «         Y d }~d S d }~ww xY w)NÚ	withdrawnu"   [SystemTray] Lá»—i toggle window: )
r   ÚstateÚwinfo_viewableÚ	deiconifyÚliftÚfocus_forceÚwithdrawrS   rE   rT   ©r   rU   s     r   rZ   z#SystemTrayManager._do_toggle_window^   sÙ   € ð		CàŒx�~Š~ÑÔ ;Ò.Ð.°d´h×6MÒ6MÑ6OÔ6OÐ.Ø”×"Ò"Ñ$Ô$Ð$Ø”—’‘”�Ø”×$Ò$Ñ&Ô&Ð&Ð&Ð&à”×!Ò!Ñ#Ô#Ð#Ð#Ð#øÝð 	Cð 	Cð 	CÝ�LŠLÐA¸aÐAÐAÑBÔBÐBÐBÐBÐBÐBÐBÐBøøøøð	Cøøøs   ‚BB  ÂB  Â 
CÂ*CÃCc                óF   — | j                              d| j        ¦  «         dS )u7   Hiá»ƒn thá»‹ cá»­a sá»• Control Center lÃªn mÃ n hÃ¬nh.r   N)r   rY   Ú_do_show_window©r   s    r   Úshow_windowzSystemTrayManager.show_windowj   s!   € àŒ�Š�q˜$Ô.Ñ/Ô/Ð/Ð/Ð/r   c                ó  — 	 | j                              ¦   «          | j                              ¦   «          | j                              ¦   «          d S # t          $ r(}t
                               d|› �¦  «         Y d }~d S d }~ww xY w)Nu    [SystemTray] Lá»—i show window: )r   r`   ra   rb   rS   rE   rT   rd   s     r   rf   z!SystemTrayManager._do_show_windown   s•   € ð	AØŒH×ÒÑ Ô Ð ØŒH�MŠM‰OŒOˆOØŒH× Ò Ñ"Ô"Ð"Ð"Ð"øÝð 	Að 	Að 	AÝ�LŠLÐ?¸AÐ?Ð?Ñ@Ô@Ð@Ð@Ð@Ð@Ð@Ð@Ð@øøøøð	Aøøøs   ‚AA Á
BÁA<Á<Bc                óP   — | j                              d| j         j        ¦  «         dS )u5   Thu nhá»� cá»­a sá»• Control Center vá»� System Tray.r   N)r   rY   rc   rg   s    r   Úhide_windowzSystemTrayManager.hide_windowv   s#   € àŒ�Š�q˜$œ(Ô+Ñ,Ô,Ð,Ð,Ð,r   c                óX   — | j         r"| j                             d| j         ¦  «         dS dS )u9   KÃ­ch hoáº¡t phÃ­m táº¯t F8 Báº­t/Táº¯t Bot qua callback.r   N)r   r   rY   r[   s      r   rJ   zSystemTrayManager.toggle_botz   s6   € àÔ&ð 	;ØŒH�NŠN˜1˜dÔ9Ñ:Ô:Ð:Ð:Ð:ð	;ð 	;r   c                óÊ   — |                       ¦   «          | j        r"| j                             d| j        ¦  «         dS | j                             d| j        j        ¦  «         dS )u:   Dá»«ng khay há»‡ thá»‘ng vÃ  Ä‘Ã³ng á»©ng dá»¥ng an toÃ n.r   N)Ústopr   r   rY   Údestroyr[   s      r   rL   zSystemTrayManager.quit_app   sZ   € à�	Š	‰ŒˆØÔ ð 	0ØŒH�NŠN˜1˜dÔ3Ñ4Ô4Ð4Ð4Ð4àŒH�NŠN˜1˜dœhÔ.Ñ/Ô/Ð/Ð/Ð/r   c                ó†   — | j         r2	 | j                              ¦   «          n# t          $ r Y nw xY wd| _         d| _        dS )u=   Há»§y biá»ƒu tÆ°á»£ng trÃªn khay há»‡ thá»‘ng khi Ä‘Ã³ng app.NF)r   rn   rS   r   rg   s    r   rn   zSystemTrayManager.stop‡   s[   € àŒ9ð 	ðØ”	—’Ñ Ô Ð Ð øÝð ð ð Ø�ðøøøàˆDŒIØ ˆÔÐÐs   ‰# £
0¯0c                ó   — | j         S )u:   Kiá»ƒm tra tráº¡ng thÃ¡i hoáº¡t Ä‘á»™ng cá»§a System Tray.)r   rg   s    r   Ú
is_runningzSystemTrayManager.is_running‘   s   € àÔÐr   )NN)r   r   r   r   r   r   )r   r   )r   r;   )r   r   rV   r   r   rW   )r   rW   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r:   rQ   rI   rZ   rh   rf   rk   rJ   rL   rn   rr   © r   r   r   r      s.  € € € € € ØlÐlð
 :>Ø?Cð	!ð !ð !ð !ð !ðð ð ð ðð ð ð ð<2ð 2ð 2ð 2ð 2ð
Cð 
Cð 
Cð 
Cð0ð 0ð 0ð 0ðAð Að Að Að-ð -ð -ð -ð;ð ;ð ;ð ;ð ;ð
0ð 0ð 0ð 0ð 0ð!ð !ð !ð !ð ð  ð  ð  ð  ð  r   r   )rv   Ú
__future__r   ÚloggingrN   Útypingr   r   r   ÚPILr   r   rD   r	   rH   ÚImportErrorÚ	getLoggerrE   r   rw   r   r   ú<module>r~      s  ððð ð #Ð "Ð "Ð "Ð "Ð "à €€€Ø Ð Ð Ð Ø *Ð *Ð *Ð *Ð *Ð *Ð *Ð *Ð *Ð *à  Ð  Ð  Ð  Ð  Ð  Ð  Ð  ðØ€N€N€NØ(Ð(Ð(Ð(Ð(Ð(Ð(øØð ð ð Ø€GØ€D€D€Dðøøøð
 
ˆÔ	Ð0Ñ	1Ô	1€ðv ð v ð v ð v ð v ñ v ô v ð v ð v ð v s   ¤
/ ¯	;º;