B X–ûЬ$ã@sœdZddlZddlTddlmZddlmZmZddlm Z dZ dZ e d fZ d Z d Zd Zd ZdZdZdZGdd„dƒZedkr˜ddlmZedddddS)zH An auto-completion window for IDLE, used by the autocomplete extension éN)Ú*)Ú Scrollbar)ÚFILESÚATTRS)ÚMC_SHIFTz<>z z z<>) zzz z zz z z 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|_d|_dS)NF)ÚwidgetÚautocompletewindowÚlistboxÚ scrollbarÚorigselforegroundÚorigselbackgroundÚ completionsÚmorecompletionsÚmodeÚstartÚ startindexÚlasttypedstartÚuserwantswindowZhideidÚ keypressidÚ listupdateidÚ winconfigidÚ keyreleaseidÚ doubleclickidÚlastkey_was_tabÚis_configuring)Úselfr©rú9/opt/alt/python37/lib/python3.7/idlelib/autocomplete_w.pyÚ__init__s $zAutoCompleteWindow.__init__cCs¬tt|jƒt|ƒƒ}d}x&||kr>|j|||kr>|d7}qW|t|jƒkrv|j d|j|fd|jt|jƒf¡|t|ƒkr¢|j d|j|f||d…¡||_dS)Nréz%s+%dc)ÚminÚlenrrÚdeleterÚinsert)rÚnewstartÚmin_lenÚirrrÚ _change_start>s  z AutoCompleteWindow._change_startcCsXd}t|jƒ}x4||krB||d}|j||kr8|}q|d}qWt|t|jƒdƒS)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. rér )r"rr!)rÚsr'ÚjÚmrrrÚ_binary_searchKs    z!AutoCompleteWindow._binary_searchc Csö| |¡}|j|dt|ƒ…|kr(|S|d}t|jƒ}x@||krz||d}|j|dt|ƒ…|krp|}q<|d}q|  +t?|j@¡|_A|  +tB|jC¡|_DdS)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)ZorientF)ZyscrollcommandZexportselectionr1r0)Zcommand)ÚsideÚfillT)r<r=Úexpand)ErrrrÚindexrÚgetrr/r(r-r"rrZToplevelr Ú wm_geometryZwm_overrideredirectZtkZcallZ_wZTclErrorrZVERTICALr ZListboxÚsetr r$r6r5r r ZconfigZyviewZpackZRIGHTÚYZLEFTZBOTHZliftr7r8ZbindÚ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_eventrrÚWINCONFIG_SEQUENCEÚwinconfig_eventrÚDOUBLECLICK_SEQUENCEÚdoubleclick_eventr)rZ comp_listsr?ÚcompleterZ userWantsWinZ completedrr'Úacwr r r:ÚseqrrrÚ show_windowžsn                 zAutoCompleteWindow.show_windowcCs|jr dSd|_| ¡sdS|j}| |j¡| |j¡\}}}}|j}| ¡| ¡|  ¡}} | ¡|  ¡} } |  ¡t |t d| |ƒƒ} |  ¡|} | ||| ks´|| kr¾| |7} n| | 8} | d| | f¡| ¡t ¡ d¡r| t|j¡d|_d|_dS)NTrz+%d+%dZWindowsF)rÚ is_activerr4rZbboxr ÚupdateZ winfo_widthÚ winfo_heightZ winfo_rootxr!ÚmaxZ winfo_rootyrAZupdate_idletasksÚplatformÚsystemÚ startswithÚunbindrRr)rÚeventÚtextÚxÚyZcxZcyrWZ acw_widthZ acw_heightZ text_widthZ text_heightZnew_xZnew_yrrrrSês0   z"AutoCompleteWindow.winconfig_eventcCsB|js dSy|j ¡s| ¡Wntk r<| ¡YnXdS)N)r Z focus_getÚ hide_windowÚKeyError)rrrrÚ_hide_event_checks  z$AutoCompleteWindow._hide_event_checkcCs>| ¡r:|jtjkr&|j d|j¡n|jtjkr:| ¡dS)Nr ) rZÚtypeZ EventTypeZFocusOutrZafterrhZ ButtonPressrf)rrbrrrrEs   zAutoCompleteWindow.hide_eventcCs4| ¡r0d|_t|j ¡dƒ}| |j|¡dS)NTr)rZrr2r r3r(r)rrbr9rrrrQ(sz#AutoCompleteWindow.listselect_eventcCs.t|j ¡dƒ}| |j|¡| ¡dS)Nr)r2r r3r(rrf)rrbr9rrrrU.sz$AutoCompleteWindow.doubleclick_eventcs | ¡s dS|j‰t|dƒr$|j}nd}ˆdkr6d|_tˆƒdks`ˆdks`|jtkrJˆdkrJ|t@sJtˆƒdkrŠ|  |j ˆ¡n|ˆdkr¤|  |j d ¡nbˆd kr¾|  |j d ¡nHˆd krØ|  |j d ¡n.t|j ƒdkrò|  ¡dS|  |j dd…¡|j |_ |j  dt|j  ¡dƒ¡|j  | |j ¡¡| ¡dSˆdkrh| ¡|  ¡dS|jtkr~ˆdks |jtkrˆdkr|t@st|j  ¡dƒ}|j|dt|j ƒ…|j krö|jtksæ|j rö|  |j|¡|  ¡dSˆdkr2|s2d|_t|j  ¡dƒ}ˆdkr:d}nĈdkrTt|jƒd}nªˆdkr¾|j  |j  ¡¡|j  d¡}ˆdkr–td||ƒ}n&ˆdks¤t‚tt|jƒd||ƒ}n@ˆdkrØtd|dƒ}n&ˆdksæt‚tt|jƒd|dƒ}|j  |¡|j  |¡| ¡|  |j|¡dSˆdkrŠ|sŠ|jrxt|j  ¡dƒ}|  |j|¡|  ¡dSd|_d|_dSn’t‡fdd„dDƒƒr¦dS|jr|jdkr|  |j |j¡|j |_ |j  dt|j  ¡dƒ¡|j  | |j ¡¡| ¡dS|  ¡dSdS) NÚmc_staterZTabFr )Ú underscoreZ BackSpace)ÚperiodÚminusrkÚ_rlÚ.rmú-éÿÿÿÿÚbreakZReturn)rlZspaceZ parenleftZ parenrightZ bracketleftZ bracketright)ZslashZ backslashZquotedblZ apostrophe)ÚHomeÚEndÚPriorÚNextÚUpÚDownTrsrt)rurvrurvrwrxc3s|]}|ˆkVqdS)Nr)Ú.0r*)Úkeysymrrú •sz4AutoCompleteWindow.keypress_event..)ZShiftZControlZAltZMetaZCommandZOptionú )rZrzÚhasattrrjrr"rrrr(rrfrr Z select_clearr2r3r7r-r8rVrrrZnearestr\r]ÚAssertionErrorr!ÚanyÚchar)rrbÚstater9ZnewselZjumpr)rzrrK4s°              z!AutoCompleteWindow.keypress_eventcCs@| ¡s dS|j d¡|j d|jt|jƒf¡kr<| ¡dS)Nr$z%s+%dc)rZrr?rr"rrf)rrbrrrrN¨s  z#AutoCompleteWindow.keyrelease_eventcCs |jdk S)N)r )rrrrrZ°szAutoCompleteWindow.is_activecCs| | |j¡¡dS)N)r(r/r)rrrrrV³szAutoCompleteWindow.completecCs(| ¡s dS|j tt¡xtD]}|j t|¡q W|j t|j¡|j t|j ¡d|_d|_ xt D]}|j t |¡qhW|j t |j ¡d|_ |j t t¡|j t |j¡d|_|j t|j¡d|_|jrê|j t|j¡d|_|j ¡|j ¡d|_|j ¡d|_|j ¡d|_dS)N)rZr Z event_deleterDrHrIrrarFrGrLrJrrMrOrr rPrrrRZ focus_setr Zdestroy)rrXrrrrf·s<      zAutoCompleteWindow.hide_windowN)Ú__name__Ú __module__Ú __qualname__rr(r-r/r8rYrSrhrErQrUrKrNrZrVrfrrrrrs !   &L%  trÚ__main__)Úmainz%idlelib.idle_test.test_autocomplete_wr)F)Ú verbosityÚexit)Ú__doc__r^ZtkinterZ tkinter.ttkrZidlelib.autocompleterrZidlelib.multicallrrDrHrIrJrLrMrOrPrRrTrr‚Zunittestr†rrrrÚs,  G