
\[\g                 @   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  n  d S)zA 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   +/usr/lib/python3.4/idlelib/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 <n  | 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   listZwinfo_rootxZ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 t |  j  |  _ x! t D] } |  j j t |  q4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::MacWindowStyleZ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   pack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/   s6    	-
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
   nJ |  j   |  j d  k	 r |  j j |  j  n  |  j j t |  j  |  _ d  S)Nr   r   >)r   r*   r   r   r    r!   r   r   Zcomparer)   hidetipr&   r   Zafter_cancelr2   r3   r/   )r   eventr#   Zcurcolr   r   r   r/   V   s    	*
zCallTip.checkhide_eventc             C   s   |  j  s d  S|  j   d  S)N)r   r:   )r   r;   r   r   r   r5   h   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   r0   r   Zevent_deleter.   Zunbindr   r6   r4   r   r   ZdestroyZ
mark_unsetr)   r   r   r   )r   r7   r   r   r   r:   n   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&   r8   r/   r5   r:   r=   r   r   r   r   r      s   'r   c                s   d d  l  } d d l m } m  m  m   |     j d  t t t	 | j
 d |  j      \ } } } }  j d | | d f  G     f d d   d  } |   d  S)	Nr   )TkTextr   BOTHzTest calltipsz[x+]z+%d+%d   c                   sC   e  Z d  Z      f d d   Z d d   Z d d   Z d S)z"_calltip_window.<locals>.MyEditWinc                s      } |  _  | j d  d   d d  | j d d   j   t |  |  _ | j d d  | j d	 d
  | j d |  j  | j d	 |  j	  | j
    j   d  S)NZsideZfillexpandr   r   zstring.splitz<<calltip-show>>(z<<calltip-hide>>))r(   r,   r   updater   calltipr1   r-   calltip_showcalltip_hideZ	focus_setZmainloop)r   r(   )rC   r   rB   rootr   r   r      s    

z+_calltip_window.<locals>.MyEditWin.__init__c             S   s   |  j  j d d d  d  S)NzHello worldr   end)rI   r8   )r   r;   r   r   r   rJ      s    z/_calltip_window.<locals>.MyEditWin.calltip_showc             S   s   |  j  j   d  S)N)rI   r:   )r   r;   r   r   r   rK      s    z/_calltip_window.<locals>.MyEditWin.calltip_hideN)r>   r?   r@   r   rJ   rK   r   )rC   r   rB   rL   r   r   	MyEditWin   s   rN   )retkinterrA   rB   r   rC   titler"   r*   r   r!   Zgeometry)parentrO   rA   widthZheightr$   r%   rN   r   )rC   r   rB   rL   r   _calltip_window   s    "	3"rT   __main__)runN)r   r   )r	   r
   )__doc__rP   r   r   r   r   r   r4   r6   r.   r0   r3   r)   r   rT   r>   Zidlelib.idle_test.htestrV   r   r   r   r   <module>   s   (w!