3 § fuMã @sœdZddlZddlTddlmZddlmZmZddlm Z dZ dZ e d fZ d Z d"ZdZdZdZdZdZGdd„dƒZedkr˜ddlmZeddd d!�dS)#zH An auto-completion window for IDLE, used by the autocomplete extension éN)Ú*)Ú Scrollbar)ÚCOMPLETE_FILESÚCOMPLETE_ATTRIBUTES)ÚMC_SHIFTz<>z z z<>úúú ú úú ú ú ú ú z!<>z zz zc@sŒeZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd „Zd!S)"ÚAutoCompleteWindowcCs|||_d|_|_|_d|_|_d|_d|_d|_d|_ d|_ d|_ d|_ d|_ |_|_|_|_|_d|_dS)NF)ÚwidgetÚautocompletewindowÚlistboxÚ scrollbarÚorigselforegroundÚorigselbackgroundÚ completionsÚmorecompletionsÚmodeÚstartÚ startindexÚlasttypedstartÚuserwantswindowZhideidÚ keypressidÚ listupdateidÚ winconfigidÚ keyreleaseidÚ doubleclickidÚlastkey_was_tab)Úselfr©r&ú;/opt/alt/python36/lib64/python3.6/idlelib/autocomplete_w.pyÚ__init__s $zAutoCompleteWindow.__init__cCs¬tt|jƒt|ƒƒ}d}x&||kr>|j|||kr>|d7}qW|t|jƒkrv|jjd|j|fd|jt|jƒfƒ|t|ƒkr¢|jjd|j|f||d…ƒ||_dS)Nréz%s+%dc)ÚminÚlenrrÚdeleterÚinsert)r%ÚnewstartÚmin_lenÚir&r&r'Ú _change_start=s  z AutoCompleteWindow._change_startcCsXd}t|jƒ}x4||krB||d}|j||kr8|}q|d}qWt|t|jƒdƒS)z’Find the first index in self.completions where completions[i] is greater or equal to s, or the last index if there is no such one.rér))r+rr*)r%Úsr0ÚjÚmr&r&r'Ú_binary_searchJs    z!AutoCompleteWindow._binary_searchc Csö|j|ƒ}|j|dt|ƒ…|kr(|S|d}t|jƒ}x@||krz||d}|j|dt|ƒ…|krp|}q<|d}q|j?ƒ|_@| j+tA|jBƒ|_CdS)z¤Show the autocomplete list, bind events. If complete is True, complete the text, and if there is exactly one matching completion, don't open a list.r-r)Nz +10000+10000z!::tk::unsupported::MacWindowStyleZstyleÚhelpZ noActivates)ZorientFZwhite)ZyscrollcommandZexportselectionr;r:r9)Zcommand)ÚsideÚfillT)rFrGÚexpand)DrrrrÚindexrÚgetrr8r1r6r+rrZToplevelrÚ wm_geometryZwm_overrideredirectZtkZcallZ_wZTclErrorrZVERTICALrZListboxÚsetrr-r@r?rrÚconfigZyviewZpackZRIGHTÚYZLEFTZBOTHZliftrArBZbindÚHIDE_VIRTUAL_EVENT_NAMEÚ hide_eventÚhideaidÚhidewidZ event_addÚHIDE_FOCUS_OUT_SEQUENCEÚHIDE_SEQUENCESÚKEYPRESS_VIRTUAL_EVENT_NAMEÚkeypress_eventrÚKEYPRESS_SEQUENCESÚKEYRELEASE_VIRTUAL_EVENT_NAMEÚkeyrelease_eventr"ÚKEYRELEASE_SEQUENCEÚLISTUPDATE_SEQUENCEÚlistselect_eventr ÚWINCONFIG_SEQUENCEÚwinconfig_eventr!ÚDOUBLECLICK_SEQUENCEÚdoubleclick_eventr#)r%Z comp_listsrIÚcompleterZ userWantsWinZ completedrr0ÚacwrrrDÚseqr&r&r'Ú show_windowšsl                 zAutoCompleteWindow.show_windowcCsæ|jƒs dS|j}|j|jƒ|j|jƒ\}}}}|j}|jƒ|jƒ}} |jƒ|jƒ} } |jƒt |t d| |ƒƒ} |j ƒ|} | ||| ksœ|| kr¦| |7} n| | 8} |j d| | fƒt jƒjdƒrâ|jt|jƒd|_dS)Nrz+%d+%dZWindows)Ú is_activerr>rZbboxrZ winfo_widthÚ winfo_heightZ winfo_rootxr*ÚmaxZ winfo_rootyrKÚplatformÚsystemÚ startswithÚunbindr]r!)r%ÚeventÚtextÚxÚyZcxZcyrbZ acw_widthZ acw_heightZ text_widthZ text_heightZnew_xZnew_yr&r&r'r^ãs$   z"AutoCompleteWindow.winconfig_eventc CsB|js dSy|jjƒs|jƒWntk r<|jƒYnXdS)N)rZ focus_getÚ hide_windowÚKeyError)r%r&r&r'Ú_hide_event_checkÿs  z$AutoCompleteWindow._hide_event_checkcCs>|jƒr:|jtjkr&|jjd|jƒn|jtjkr:|jƒdS)Nr)) reÚtypeZ EventTypeZFocusOutrÚafterrrZ ButtonPressrp)r%rlr&r&r'rP s   zAutoCompleteWindow.hide_eventcCs4|jƒr0d|_t|jjƒdƒ}|j|j|ƒdS)NTr)rerr<rr=r1r)r%rlrCr&r&r'r\sz#AutoCompleteWindow.listselect_eventcCs.t|jjƒdƒ}|j|j|ƒ|jƒdS)Nr)r<rr=r1rrp)r%rlrCr&r&r'r`sz$AutoCompleteWindow.doubleclick_eventcs|jƒs dS|j‰t|dƒr$|j}nd}ˆdkr6d|_tˆƒdks\ˆd(ks\|jtkofˆd)kof|t@ �rHtˆƒdkrˆ|j |j ˆƒn|ˆdkr¢|j |j d ƒnbˆdkr¼|j |j d ƒnHˆd krÖ|j |j d ƒn.t|j ƒdkrð|j ƒdS|j |j dd*…ƒ|j |_ |j jdt|j jƒdƒƒ|j j|j|j ƒƒ|jƒd Sˆdk�rf|jƒ|j ƒd S|jtk�r|ˆd+k�s |jtk�rˆd,k�r|t@ �rt|j jƒdƒ}|j|dt|j ƒ…|j k�rö|jtk�sæ|j �rö|j |j|ƒ|j ƒdSˆd-k�r| �rd|_t|j jƒdƒ}ˆdk�r…sz4AutoCompleteWindow.keypress_event..ÚShiftÚControlÚAltÚMetaÚCommandÚOptionú )rvrw)rxryéÿÿÿÿ)rxr~rr€r�r‚)rƒr„r…r†)r‡rˆr‰rŠr‹rŒ)r‰rŠ)r�r‘r’r“r”r•)rerŽÚhasattrrur$r+rrrr1rrprrZ select_clearr<r=rAr6rBrarrrZnearestrfrgr*ÚanyÚchar)r%rlÚstaterCZnewselZjumpr&)rŽr'rV$s°               z!AutoCompleteWindow.keypress_eventcCs@|jƒs dS|jjdƒ|jjd|jt|jƒfƒkr<|jƒdS)Nr-z%s+%dc)rerrIrr+rrp)r%rlr&r&r'rY˜s  z#AutoCompleteWindow.keyrelease_eventcCs |jdk S)N)r)r%r&r&r're szAutoCompleteWindow.is_activecCs|j|j|jƒƒdS)N)r1r8r)r%r&r&r'ra£szAutoCompleteWindow.completecCs(|jƒs dS|jjttƒxtD]}|jjt|ƒq W|jjt|jƒ|jjt|j ƒd|_d|_ xt D]}|jjt |ƒqhW|jjt |j ƒd|_ |jjt tƒ|jjt |jƒd|_|jjt|jƒd|_|jrê|jjt|jƒd|_|jjƒ|jjƒd|_|jjƒd|_|jjƒd|_dS)N)rerZ event_deleterOrSrTrrkrQrRrWrUrrXrZr"rr[r r!r]Z focus_setrZdestroy)r%rcr&r&r'rp§s<      zAutoCompleteWindow.hide_windowN)Ú__name__Ú __module__Ú __qualname__r(r1r6r8rBrdr^rrrPr\r`rVrYrerarpr&r&r&r'rs    $I  trÚ__main__)Úmainz%idlelib.idle_test.test_autocomplete_wr2F)Ú verbosityÚexit) rrr r r r r rrr)Ú__doc__rhZtkinterZ tkinter.ttkrZidlelib.autocompleterrZidlelib.multicallrrOrSrTrUrWrXrZr[r]r_rrœZunittestr r&r&r&r'Ús0  7