3  fuM @sdZddlZddlTddlmZddlmZmZddlm Z dZ dZ e d fZ d Z d"ZdZdZdZdZdZGdddZedkrddlmZeddd d!dS)#zH An auto-completion window for IDLE, used by the autocomplete extension N)*) Scrollbar)COMPLETE_FILESCOMPLETE_ATTRIBUTES)MC_SHIFTz<>z z z<>  z!<>z zz zc@seZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZddZddZdd Zd!S)"AutoCompleteWindowcCs|||_d|_|_|_d|_|_d|_d|_d|_d|_ d|_ d|_ d|_ d|_ |_|_|_|_|_d|_dS)NF)widgetautocompletewindowlistbox scrollbarorigselforegroundorigselbackground completionsmorecompletionsmodestart startindexlasttypedstartuserwantswindowZhideid keypressid listupdateid winconfigid keyreleaseid doubleclickidlastkey_was_tab)selfrr&;/opt/alt/python36/lib64/python3.6/idlelib/autocomplete_w.py__init__s $zAutoCompleteWindow.__init__cCstt|jt|}d}x&||kr>|j|||kr>|d7}qW|t|jkrv|jjd|j|fd|jt|jf|t|kr|jjd|j|f||d||_dS)Nrz%s+%dc)minlenrrdeleterinsert)r%newstartmin_lenir&r&r' _change_start=s  z AutoCompleteWindow._change_startcCsXd}t|j}x4||krB||d}|j||kr8|}q|d}qWt|t|jdS)zFind 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.rr))r+rr*)r%sr0jmr&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)zShow 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::MacWindowStyleZstylehelpZ noActivates)ZorientFZwhite)ZyscrollcommandZexportselectionr;r:r9)Zcommand)sidefillT)rFrGexpand)Drrrrindexrgetrr8r1r6r+rrZToplevelr wm_geometryZwm_overrideredirectZtkZcallZ_wZTclErrorrZVERTICALrZListboxsetrr-r@r?rrconfigZyviewZpackZRIGHTYZLEFTZBOTHZliftrArBZbindHIDE_VIRTUAL_EVENT_NAME hide_eventhideaidhidewidZ event_addHIDE_FOCUS_OUT_SEQUENCEHIDE_SEQUENCESKEYPRESS_VIRTUAL_EVENT_NAMEkeypress_eventrKEYPRESS_SEQUENCESKEYRELEASE_VIRTUAL_EVENT_NAMEkeyrelease_eventr"KEYRELEASE_SEQUENCELISTUPDATE_SEQUENCElistselect_eventr WINCONFIG_SEQUENCEwinconfig_eventr!DOUBLECLICK_SEQUENCEdoubleclick_eventr#)r%Z comp_listsrIcompleterZ userWantsWinZ completedrr0acwrrrDseqr&r&r' show_windowsl                 zAutoCompleteWindow.show_windowcCs|js dS|j}|j|j|j|j\}}}}|j}|j|j}} |j|j} } |jt |t d| |} |j |} | ||| ks|| kr| |7} n| | 8} |j d| | ft jjdr|jt|jd|_dS)Nrz+%d+%dZWindows) is_activerr>rZbboxrZ winfo_width winfo_heightZ winfo_rootxr*maxZ winfo_rootyrKplatformsystem startswithunbindr]r!)r%eventtextxyZcxZcyrbZ acw_widthZ acw_heightZ text_widthZ text_heightZnew_xZnew_yr&r&r'r^s$   z"AutoCompleteWindow.winconfig_eventc CsB|js dSy|jjs|jWntk r<|jYnXdS)N)rZ focus_get hide_windowKeyError)r%r&r&r'_hide_event_checks  z$AutoCompleteWindow._hide_event_checkcCs>|jr:|jtjkr&|jjd|jn|jtjkr:|jdS)Nr)) retypeZ EventTypeZFocusOutrafterrrZ ButtonPressrp)r%rlr&r&r'rP s   zAutoCompleteWindow.hide_eventcCs4|jr0d|_t|jjd}|j|j|dS)NTr)rerr<rr=r1r)r%rlrCr&r&r'r\sz#AutoCompleteWindow.listselect_eventcCs.t|jjd}|j|j||jdS)Nr)r<rr=r1rrp)r%rlrCr&r&r'r`sz$AutoCompleteWindow.doubleclick_eventcs|js dS|jt|dr$|j}nd}dkr6d|_tdks\d(ks\|jtkofd)kof|t@ rHtdkr|j |j n|dkr|j |j d nbdkr|j |j d nHd kr|j |j d n.t|j dkr|j dS|j |j dd*|j |_ |j jdt|j jd|j j|j|j |jd Sdkrf|j|j d S|jtkr|d+ks|jtkrd,kr|t@ rt|j jd}|j|dt|j |j kr|jtks|j r|j |j||j dSd-kr| rd|_t|j jd}dkrsz4AutoCompleteWindow.keypress_event..ShiftControlAltMetaCommandOption )rvrw)rxry)rxr~rrrr)rrrr)rrrrrr)rr)rrrrrr)rerhasattrrur$r+rrrr1rrprrZ select_clearr<r=rAr6rBrarrrZnearestrfrgr*anychar)r%rlstaterCZnewselZjumpr&)rr'rV$s               z!AutoCompleteWindow.keypress_eventcCs@|js dS|jjd|jjd|jt|jfkr<|jdS)Nr-z%s+%dc)rerrIrr+rrp)r%rlr&r&r'rYs  z#AutoCompleteWindow.keyrelease_eventcCs |jdk S)N)r)r%r&r&r'reszAutoCompleteWindow.is_activecCs|j|j|jdS)N)r1r8r)r%r&r&r'raszAutoCompleteWindow.completecCs(|js dS|jjttxtD]}|jjt|q W|jjt|j|jjt|j d|_d|_ xt D]}|jjt |qhW|jjt |j d|_ |jjt t|jjt |jd|_|jjt|jd|_|jr|jjt|jd|_|jj|jjd|_|jjd|_|jjd|_dS)N)rerZ event_deleterOrSrTrrkrQrRrWrUrrXrZr"rr[r r!r]Z focus_setrZdestroy)r%rcr&r&r'rps<      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) verbosityexit) rrr r r r r rrr)__doc__rhZtkinterZ tkinter.ttkrZidlelib.autocompleterrZidlelib.multicallrrOrSrTrUrWrXrZr[r]r_rrZunittestrr&r&r&r's0  7