
“àW’  ã               @   s›   d  Z  d d l m Z m Z m Z m Z m Z d Z d Z d Z	 d Z
 d	 Z d
 Z Gd d „  d ƒ Z d d „  Z e d k r— d d l m Z e e ƒ d S)z…A CallTip window class for Tkinter/IDLE.

After ToolTip.py, which uses ideas gleaned from PySol
Used by the CallTips IDLE extension.
é    )ÚToplevelÚLabelÚLEFTÚSOLIDÚTclErrorz<<calltipwindow-hide>>ú<Key-Escape>ú
<FocusOut>z<<calltipwindow-checkhide>>ú<KeyRelease>ú<ButtonRelease>éd   Zcalltipwindowregion_rightc               @   sg   e  Z d  Z d d „  Z d d „  Z d d „  Z d d d	 „ Z d
 d „  Z d d „  Z d d „  Z	 d S)ÚCallTipc             C   sO   | |  _  d  |  _ |  _ d  |  _ |  _ d  |  _ d  |  _ |  _ d  |  _ d  S)N)	ÚwidgetÚ	tipwindowÚlabelÚ	parenlineÚparencolÚlastlineÚhideidÚcheckhideidÚcheckhide_after_id)Úselfr   © r   úB/afs/.cs/s/python-3.5.2/amd64_ubu14/lib/python3.5/CallTipWindow.pyÚ__init__   s    		zCallTip.__init__c             C   s%  t  |  j j d ƒ j d ƒ d ƒ } | |  j k r8 d S| |  _ |  j j d ƒ | |  j k r… |  j j d |  j |  j f ƒ } n |  j j d | ƒ } | sÍ t	 |  j j d ƒ ƒ } d | d <d | d <| d |  j j
 ƒ  d } | d | d	 |  j j ƒ  } |  j j d
 | | f ƒ d S)z;Check if needs to reposition the window, and if so - do it.ÚinsertÚ.r   Nz%d.%dz%d.0é   é   é   z+%d+%d)Úintr   ÚindexÚsplitr   Zseer   Zbboxr   ÚlistÚwinfo_rootxÚwinfo_rootyr   Zwm_geometry)r   ÚcurlineZboxÚxÚyr   r   r   Úposition_window   s     %	

zCallTip.position_windowc             C   s´  | |  _  |  j s |  j  r  d S|  j j t | ƒ t t |  j j | ƒ j d ƒ ƒ \ |  _	 |  _
 t |  j ƒ |  _ } |  j ƒ  | j d ƒ y# | j j d d | j d d ƒ Wn t k
 rÇ Yn Xt | d |  j  d	 t d
 d d t d d d |  j d ƒ|  _ |  j j ƒ  | j ƒ  |  j j t |  j ƒ |  _ x! t D] } |  j j t | ƒ q>W|  j j t |  j ƒ |  j j t  |  j! ƒ |  _" x! t# D] } |  j j t  | ƒ q“Wd S)zMShow the calltip, bind events which will close it and reposition it.
        Nr   r   z!::tk::unsupported::MacWindowStyleÚstyleÚhelpZnoActivatesÚtextZjustifyZ
backgroundz#ffffe0ZreliefZborderwidthZfont)$r+   r   r   Zmark_setÚ
MARK_RIGHTÚmapr   r    r!   r   r   r   r(   Zwm_overrideredirectZtkÚcallZ_wr   r   r   r   r   ÚpackZliftÚbindÚCHECKHIDE_VIRTUAL_EVENT_NAMEÚcheckhide_eventr   ÚCHECKHIDE_SEQUENCESÚ	event_addÚafterÚCHECKHIDE_TIMEÚHIDE_VIRTUAL_EVENT_NAMEÚ
hide_eventr   ÚHIDE_SEQUENCES)r   r+   Z	parenleftZ
parenrightZtwÚseqr   r   r   Úshowtip/   s8    	-

zCallTip.showtipNc             C   sÔ   |  j  s d  St t |  j j d ƒ j d ƒ ƒ \ } } | |  j k  s| | |  j k rd | |  j k s| |  j j d d t	 ƒ r‰ |  j
 ƒ  nG |  j ƒ  |  j d  k	 rµ |  j j |  j ƒ |  j j t |  j ƒ |  _ d  S)Nr   r   ú>)r   r-   r   r   r    r!   r   r   Zcomparer,   Úhidetipr(   r   Zafter_cancelr5   r6   r2   )r   Úeventr%   Zcurcolr   r   r   r2   W   s    	*
zCallTip.checkhide_eventc             C   s   |  j  s d  S|  j ƒ  d  S)N)r   r=   )r   r>   r   r   r   r8   i   s    	zCallTip.hide_eventc             C   sê   |  j  s d  Sx! t D] } |  j j t | ƒ q W|  j j t |  j ƒ d  |  _ x! t D] } |  j j t | ƒ qW W|  j j t |  j	 ƒ d  |  _	 |  j
 j ƒ  d  |  _
 |  j  j ƒ  d  |  _  |  j j t ƒ d  |  _ |  _ |  _ d  S)N)r   r3   r   Zevent_deleter1   Zunbindr   r9   r7   r   r   ZdestroyZ
mark_unsetr,   r   r   r   )r   r:   r   r   r   r=   o   s     					zCallTip.hidetipc             C   s   t  |  j ƒ S)N)Úboolr   )r   r   r   r   Ú	is_active„   s    zCallTip.is_active)
Ú__name__Ú
__module__Ú__qualname__r   r(   r;   r2   r8   r=   r@   r   r   r   r   r      s   (r   c       	         s&  d d l  m } m } m } m } | |  ƒ } | j d ƒ | j d |  j ƒ  d |  j ƒ  d f ƒ | | ƒ } | j	 d | d | d	 d
 ƒ | j
 d d ƒ | j ƒ  t | ƒ ‰  ‡  f d d †  } ‡  f d d †  } | j d d ƒ | j d d ƒ | j d | ƒ | j d | ƒ | j ƒ  d  S)Nr   )r   ÚTextr   ÚBOTHzTest calltipsz200x100+%d+%déÈ   é–   ZsideÚfillÚexpandr   r   zstring.splitc                s   ˆ  j  d d d ƒ d  S)Nz(s=Hello world)r   Úend)r;   )r>   )Úcalltipr   r   Úcalltip_show•   s    z%_calltip_window.<locals>.calltip_showc                s   ˆ  j  ƒ  d  S)N)r=   )r>   )rK   r   r   Úcalltip_hide—   s    z%_calltip_window.<locals>.calltip_hidez<<calltip-show>>ú(z<<calltip-hide>>ú))Útkinterr   rD   r   rE   ÚtitleZgeometryr#   r$   r/   r   Úupdater   r4   r0   Z	focus_set)	Úparentr   rD   r   rE   Útopr+   rL   rM   r   )rK   r   Ú_calltip_windowˆ   s"    "
rU   Ú__main__)ÚrunN)r   r   )r	   r
   )Ú__doc__rP   r   r   r   r   r   r7   r9   r1   r3   r6   r,   r   rU   rA   Zidlelib.idle_test.htestrW   r   r   r   r   Ú<module>   s   (x