JFIFxxC      C  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3RbrJFIFxxC      C  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3RbrB  f@sdZddlmZmZmZmZddlmZdZdZ dZ dZ dZ d Z Gd d d eZd d ZedkrddlmZeddddddlmZeedS)zvA call-tip window class for Tkinter/IDLE. After tooltip.py, which uses ideas gleaned from PySol. Used by calltip.py. )LabelLEFTSOLIDTclError) TooltipBasez<>)z z z<>)z zdZcalltipwindowregion_rightcsveZdZdZfddZddZfddZfdd Zd d Zdd dZ ddZ fddZ ddZ ddZ ZS) CalltipWindowz+A call-tip widget for tkinter text widgets.csDtt||d|_|_d|_|_|_d|_|_ d|_ dS)z}Create a call-tip; shown by showtip(). text_widget: a Text widget with code for which call-tips are desired N) superr__init__labeltext parenlineparencollastlinehideid checkhideidcheckhide_after_id)selfZ text_widget) __class__6/opt/alt/python37/lib64/python3.7/idlelib/calltip_w.pyr s   zCalltipWindow.__init__cCst|jddd}||jkr2|j|jf}n|df}|jd|}|snt|jd}d|d<d|d<|dd|d|dfS)z$Choose the position of the call-tip.insert.rz%d.%d)int anchor_widgetindexsplitr rZbboxlist)rcurlineZ anchor_indexZboxrrr get_position#s zCalltipWindow.get_positioncsLt|jddd}||jkr(dS||_|jdtt|dS)z Reposition the window if needed.rrrN) rrrrrZseer rposition_window)rr!)rrrr#2s   zCalltipWindow.position_windowcs^||_|js|jsdS|jt|tt|j|d\|_ |_ t t | |dS)a_Show the call-tip, bind events which will close it and reposition it. text: the text to display in the call-tip parenleft: index of the opening parenthesis in the text widget parenright: index of the closing parenthesis in the text widget, or the end of the line if there is no closing parenthesis Nr)r tipwindowrZmark_set MARK_RIGHTmaprrrr rr rshowtip _bind_events)rr Z parenleftZ parenright)rrrr';s  zCalltipWindow.showtipc Cs2t|j|jtddtd|jdd|_|jdS)zCreate the call-tip widget.z#ffffd0Zblackrfont)r ZjustifyZ backgroundZ foregroundZreliefZ borderwidthr)N)rr$r rrrr pack)rrrr showcontentsPs  zCalltipWindow.showcontentsNcCs|js dStt|jdd\}}||jksT||jkrD||jksT|jddt r`| dS| |j dk r|j |j |jt|j|_ dS)z4Handle CHECK_HIDE_EVENT: call hidetip or reschedule.Nrr>break)r$r&rrrrr rZcomparer%hidetipr#rZ after_cancelafterCHECKHIDE_TIMEcheckhide_event)reventr!Zcurcolrrrr1Xs  zCalltipWindow.checkhide_eventcCs|js dS|dS)z%Handle HIDE_EVENT by calling hidetip.Nr-)r$r.)rr2rrr hide_eventsszCalltipWindow.hide_eventc s|js dSy|jWntk r,YnXd|_d|_|_|_y|jt Wntk rjYnXy | Wntt fk rYnXt t |dS)zHide the call-tip.N)r$r Zdestroyrr rrrZ mark_unsetr%_unbind_events ValueErrorr rr.)r)rrrr.{s" zCalltipWindow.hidetipcCsp|jt|j|_xtD]}|jt|qW|jt|j|jt |j |_ xt D]}|jt |qVWdS)zBind event handlers.N) rbindCHECKHIDE_EVENTr1rCHECKHIDE_SEQUENCES event_addr/r0 HIDE_EVENTr3rHIDE_SEQUENCES)rseqrrrr(s    zCalltipWindow._bind_eventscCshxtD]}|jt|qW|jt|jd|_xtD]}|jt|q8W|jt|jd|_dS)zUnbind event handlers.N) r8rZ event_deleter7Zunbindrr;r:r)rr<rrrr4s  zCalltipWindow._unbind_events)N)__name__ __module__ __qualname____doc__r r"r#r'r+r1r3r.r(r4 __classcell__rr)rrrs     rc sddlm}m}m}m}||}|dtt| ddd\}}|d|d|df||}|j ||dd | d d | t |fd d } fdd} |dd|dd|d| |d| |dS)Nr)ToplevelTextrBOTHzTest call-tips+rz 250x100+%d+%d)ZsideZfillexpandrz string.splitcsddddS)Nz(s='Hello world')rend)r')r2)calltiprr calltip_showsz%_calltip_window..calltip_showcs dS)N)r.)r2)rJrr calltip_hidesz%_calltip_window..calltip_hidez<>(z<>))tkinterrBrCrrDtitler&rZgeometryrr*rupdaterr9r6Z focus_set) parentrBrCrrDtopxyr rKrLr)rJr_calltip_windows"         rV__main__)mainz idlelib.idle_test.test_calltip_wrF) verbosityexit)runN)r@rOrrrrZidlelib.tooltiprr:r;r7r8r0r%rrVr=ZunittestrXZidlelib.idle_test.htestr[rrrrs