o
     JAfö  ã                   @   s”   	 d dl mZmZmZmZ d dlmZ dZdZdZ	dZ
dZdZG d	d
„ d
eƒZdd„ ZedkrHd dlmZ edddd d dlmZ eeƒ dS dS )é    )ÚLabelÚLEFTÚSOLIDÚTclError)ÚTooltipBasez<<calltipwindow-hide>>)z<Key-Escape>z
<FocusOut>z<<calltipwindow-checkhide>>)z<KeyRelease>z<ButtonRelease>éd   Zcalltipwindowregion_rightc                       st   e Zd Z	 ‡ fdd„Zdd„ Z‡ fdd„Z‡ fdd„Zd	d
„ Zddd„Zdd„ Z	‡ fdd„Z
dd„ Zdd„ Z‡  ZS )ÚCalltipWindowc                    sF   	 t t| ƒ |¡ d  | _| _d  | _ | _| _d  | _| _	d | _
d S ©N)Úsuperr   Ú__init__ÚlabelÚtextÚ	parenlineÚparencolÚlastlineÚhideidÚcheckhideidÚcheckhide_after_id)ÚselfZtext_widget©Ú	__class__© ú(/usr/lib/python3.10/idlelib/calltip_w.pyr      s   
zCalltipWindow.__init__c                 C   sŒ   	 t | j d¡ d¡d ƒ}|| jkr| j| jf}n|df}| j d| ¡}|s8t| j d¡ƒ}d|d< d|d< |d d |d |d  fS )NÚinsertÚ.r   z%d.%dé   é   é   )ÚintÚanchor_widgetÚindexÚsplitr   r   ZbboxÚlist)r   ÚcurlineZanchor_indexZboxr   r   r   Úget_position#   s   
zCalltipWindow.get_positionc                    sN   	 t | j d¡ d¡d ƒ}|| jkrd S || _| j d¡ tt| ƒ ¡  d S )Nr   r   r   )	r   r   r    r!   r   Zseer
   r   Úposition_window)r   r#   r   r   r   r%   2   s   
zCalltipWindow.position_windowc                    s`   	 || _ | js
| j sd S | j t|¡ tt| j |¡ d¡ƒ\| _	| _
tt| ƒ ¡  |  ¡  d S )Nr   )r   Ú	tipwindowr   Zmark_setÚ
MARK_RIGHTÚmapr   r    r!   r   r   r
   r   ÚshowtipÚ_bind_events)r   r   Z	parenleftZ
parenrightr   r   r   r)   ;   s   ÿzCalltipWindow.showtipc              
   C   s4   	 t | j| jtddtd| jd d| _| j ¡  d S )Nz#ffffd0Zblackr   Úfont)r   ZjustifyZ
backgroundZ
foregroundZreliefZborderwidthr+   )r   r&   r   r   r   r   r   Úpack©r   r   r   r   ÚshowcontentsP   s   ýzCalltipWindow.showcontentsNc                 C   s˜   	 | j sd S tt| j d¡ d¡ƒ\}}|| jk s+|| jkr#|| jks+| j ddt	¡r1|  
¡  dS |  ¡  | jd urA| j | j¡ | j t| j¡| _d S )Nr   r   ú>Úbreak)r&   r(   r   r   r    r!   r   r   Zcomparer'   Úhidetipr%   r   Zafter_cancelÚafterÚCHECKHIDE_TIMEÚcheckhide_event)r   Úeventr#   Zcurcolr   r   r   r4   X   s    
ÿ
ÿzCalltipWindow.checkhide_eventc                 C   s   	 | j sd S |  ¡  dS )Nr0   )r&   r1   )r   r5   r   r   r   Ú
hide_events   s
   zCalltipWindow.hide_eventc              	      s    	 | j sd S z| j ¡  W n	 ty   Y nw d | _d  | _ | _| _z| j t	¡ W n	 ty4   Y nw z|  
¡  W n ttfyF   Y nw tt| ƒ ¡  d S r	   )r&   r   Zdestroyr   r   r   r   r   Z
mark_unsetr'   Ú_unbind_eventsÚ
ValueErrorr
   r   r1   r-   r   r   r   r1   {   s*   ÿÿþzCalltipWindow.hidetipc                 C   sj   	 | j  t| j¡| _tD ]	}| j  t|¡ q| j  t| j¡ | j  t	| j
¡| _tD ]	}| j  t	|¡ q)d S r	   )r   ÚbindÚCHECKHIDE_EVENTr4   r   ÚCHECKHIDE_SEQUENCESÚ	event_addr2   r3   Ú
HIDE_EVENTr6   r   ÚHIDE_SEQUENCES©r   Úseqr   r   r   r*   ”   s   ÿÿÿzCalltipWindow._bind_eventsc                 C   sb   	 t D ]	}| j t|¡ q| j t| j¡ d | _tD ]	}| j t|¡ q| j t| j¡ d | _d S r	   )	r;   r   Zevent_deleter:   Zunbindr   r>   r=   r   r?   r   r   r   r7       s   
zCalltipWindow._unbind_eventsr	   )Ú__name__Ú
__module__Ú__qualname__r   r$   r%   r)   r.   r4   r6   r1   r*   r7   Ú__classcell__r   r   r   r   r      s    	
r   c                    sì   ddl m}m}m}m} || ƒ}| d¡ tt|  ¡  	d¡dd … ƒ\}}| d|d |d f ¡ ||ƒ}|j
||dd	 | d
d¡ | ¡  t|ƒ‰ ‡ fdd„}	‡ fdd„}
| dd¡ | dd¡ | d|	¡ | d|
¡ | ¡  d S )Nr   )ÚToplevelÚTextr   ÚBOTHzTest call-tipsú+r   z250x100+%d+%dé¯   é–   )ZsideÚfillÚexpandr   zstring.splitc                    s   ˆ   ddd¡ d S )Nz(s='Hello world')r   Úend)r)   ©r5   ©Zcalltipr   r   Úcalltip_show¹   s   z%_calltip_window.<locals>.calltip_showc                    s   ˆ   ¡  d S r	   )r1   rN   rO   r   r   Úcalltip_hide»   s   z%_calltip_window.<locals>.calltip_hidez<<calltip-show>>ú(z<<calltip-hide>>ú))ÚtkinterrE   rF   r   rG   Útitler(   r   Zgeometryr!   r,   r   Úupdater   r<   r9   Z	focus_set)ÚparentrE   rF   r   rG   ÚtopÚxÚyr   rP   rQ   r   rO   r   Ú_calltip_window¬   s"   
 r[   Ú__main__)Úmainz idlelib.idle_test.test_calltip_wr   F)Ú	verbosityÚexit)ÚrunN)rT   r   r   r   r   Zidlelib.tooltipr   r=   r>   r:   r;   r3   r'   r   r[   rA   Zunittestr]   Zidlelib.idle_test.htestr`   r   r   r   r   Ú<module>   s$     û