a 9êdgõQã@s˜ddlZddlTddlmZddlmZmZddlmZdZ dZ e dfZ d Z d Z d Zd Zd ZdZdZGdd„dƒZedkr”ddlmZedddddS)é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ú2/usr/local/lib/python3.9/idlelib/autocomplete_w.pyÚ__init__s" ÿÿzAutoCompleteWindow.__init__cCs¨tt|jƒt|ƒƒ}d}||kr<|j|||kr<|d7}q|t|jƒkrr|j d|j|fd|jt|jƒf¡|t|ƒkrž|j d|j|f||d…¡||_dS)Nréú%s+%dc)ÚminÚlenrrÚdeleterÚinsert)rÚnewstartÚmin_lenÚirrrÚ _change_start>s ÿ  ÿz AutoCompleteWindow._change_startcCsTd}t|jƒ}||kr@||d}|j||kr6|}q|d}qt|t|jƒdƒS)Nrér )r#rr")rÚsr(ÚjÚmrrrÚ_binary_searchKs  z!AutoCompleteWindow._binary_searchc Csî| |¡}|j|dt|ƒ…|kr(|S|d}t|jƒ}||krx||d}|j|dt|ƒ…|krn|}q:|d}q:|d}||kr’|j|S|j|}|j|}tt|ƒt|ƒƒ} t|ƒ}|| krâ||||krâ|d7}qÀ|d|…S)Nr r*)r.rr#r") rr+Úfirstr(r,r-ZlastZ first_compZ last_compr'rrrÚ_complete_stringXs(        z#AutoCompleteWindow._complete_stringcCsDt|j ¡dƒ}|j |¡|j}|j|}| |¡|krB|}nDtt|ƒt|ƒƒ}d}||krz||||krz|d7}qX|d|…}|  |¡|j|dt|j ƒ…|j krÄ|jj |j |j dn||jj |j d¡|j d¡d|jr@|j|_d|_|j dt¡|jD]}|j t|¡q|j | |j ¡¡| ¡dS)Nrr )ÚselectbackgroundÚselectforegroundÚbgZfg)Úintr Ú curselectionÚseerrr.r"r#r)rZ configurer r Úcgetrr$ÚENDr%Ú select_setÚ_selection_changed)rÚcurselZltsZselstartr&r'r(Úitemrrrr:xs6      ÿ ÿ z%AutoCompleteWindow._selection_changedcCs„|\|_|_||_|j |¡|_|j |jd¡|_|r¢| |j¡}|j}|  |¡|  |¡}|j||kr¢|t |jƒdksš|j|ddt |ƒ…|kr¢||kS||_ |j|_ t|jƒ|_} |  d¡|  d¡z| j dd| jdd¡WntyYn0t| td|_} t| | jd d |_} |jD]} |  t| ¡q2|  d ¡|_|  d ¡|_ | j!| j"d | j#t$t%d| j#t&t'dd|  (¡|  )¡|j *|  |j¡¡| +¡|  ,t-|j.¡|_/|j ,t-|j.¡|_0|  1t-t2¡t3D]} |j 1t-| ¡qè|j ,t4|j5¡|_6t7D]} |j 1t4| ¡q|j ,t8|j9¡|_:|j 1t8t;¡|  ,t<|j=¡|_>d |_?|  ,t@|jA¡|_B|  ,tC|jD¡|_EdS)Nr%r z +10000+10000z!::tk::unsupported::MacWindowStyleÚstyleÚhelpZ noActivates)ZorientF)ZyscrollcommandZexportselectionr2r1)Zcommand)ÚsideÚfillT)r?r@Úexpand)FrrrrÚindexrÚgetrr0r)r.r#rrZToplevelr Ú wm_geometryZwm_overrideredirectZtkÚcallZ_wÚTclErrorrZVERTICALr ZListboxÚsetr r%r8r7r r ZconfigZyviewÚpackZRIGHTÚYZLEFTZBOTHÚupdate_idletasksZliftr9r:ÚbindÚ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_listsrBÚcompleterZ userWantsWinZ completedrr(Úacwr r r<ÚseqrrrÚ show_windowžs€    ÿþ  ÿÿ     ÿÿÿÿzAutoCompleteWindow.show_windowcCsP|jr dSd|_| ¡sdSzÖ|j}| |j¡| |j¡\}}}}|j}t ¡  d¡r`|  ¡|  ¡|  ¡}} |  ¡|  ¡} } |  ¡t|td| |ƒƒ} | ¡|} | ||| ksÄ|| krÎ| |7} n| | 8} | d| | f¡| ¡WntyYn0t ¡  d¡rFz| t|j¡Wnty>Yn0d|_d|_dS)NTZWindowsrz+%d+%dF)rÚ is_activerr6rZbboxr ÚplatformÚsystemÚ startswithÚupdateZ winfo_widthÚ winfo_heightZ winfo_rootxr"ÚmaxZ winfo_rootyrDrJrFÚunbindrZr)rÚeventÚtextÚxÚyZcxÚcyr_Z acw_widthZ acw_heightÚ text_widthZ text_heightZnew_xZnew_yrrrr[ës@  ÿ  z"AutoCompleteWindow.winconfig_eventcCs@|js dSz|j ¡s| ¡Wnty:| ¡Yn0dS©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 ) rbÚtypeZ EventTypeZFocusOutrZafterrtZ ButtonPressrq©rrjrrrrM+s   zAutoCompleteWindow.hide_eventcCs4| ¡r0d|_t|j ¡dƒ}| |j|¡dS)NTr)rbrr4r r5r)r©rrjr;rrrrY8sz#AutoCompleteWindow.listselect_eventcCs.t|j ¡dƒ}| |j|¡| ¡dS)Nr)r4r r5r)rrqrwrrrr]>sz$AutoCompleteWindow.doubleclick_eventcs| ¡s dS|j‰t|dƒr$|j}nd}ˆdkr6d|_tˆƒdks`ˆdvs`|jtkrJˆdvrJ|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~ˆdvs |jtkrˆdvr|t@st|j  ¡dƒ}|j|dt|j ƒ…|j krö|jtksæ|j rö|  |j|¡|  ¡dSˆdvr|sd|_t|j  ¡dƒ}ˆdkr:d}n¨ˆdkrTt|jƒd}nŽˆdvr°|j  |j  ¡¡|j  d¡}ˆdkr–td||ƒ}ntt|jƒd||ƒ}n2ˆdkrÊtd|dƒ}ntt|jƒd|dƒ}|j  |¡|j  |¡| ¡|  |j|¡dSˆdkrn|sn|jr\t|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ÚminusryÚ_rzÚ.r{ú-éÿÿÿÿÚbreakZReturn)rzÚspaceZ parenleftZ parenrightZ bracketleftZ bracketright)ZslashZ backslashZquotedblZ apostrophe)ÚHomeÚEndÚPriorÚNextÚUpZDownTr‚rƒ)r„r…r„r†c3s|]}|ˆvVqdSrpr)Ú.0r+©ÚkeysymrrÚ ¥óz4AutoCompleteWindow.keypress_event..)ZShiftZControlZAltZMetaZCommandZOptionú )rbr‰Úhasattrrxrr#rrrr)rrqrr Z select_clearr4r5r9r.r:r^rrrZnearestrgrhr"ÚanyÚchar)rrjÚstater;ZnewselZjumprrˆrrSDsÌ ÿÿÿý  ÿýÿýû  ÿÿ ÿ    ÿ    z!AutoCompleteWindow.keypress_eventcCs@| ¡s dS|j d¡|j d|jt|jƒf¡kr<| ¡dS)Nr%r!)rbrrBrr#rrqrvrrrrV¸s  ÿz#AutoCompleteWindow.keyrelease_eventcCs |jduSrp)r rsrrrrbÀszAutoCompleteWindow.is_activecCs| | |j¡¡dSrp)r)r0rrsrrrr^ÃszAutoCompleteWindow.completecCs | ¡s dS|j tt¡tD]}|j t|¡q|j t|j¡|j t|j ¡d|_d|_ t D]}|j t |¡qb|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|_dSrp)rbr Z event_deleterLrPrQrrirNrOrTrRrrUrWrr rXrrrZZ focus_setr Zdestroy)rr`rrrrqÇs@ÿÿ    zAutoCompleteWindow.hide_windowN)Ú__name__Ú __module__Ú __qualname__rr)r.r0r:rar[rtrMrYr]rSrVrbr^rqrrrrrs !   &M4  trÚ__main__)Úmainz%idlelib.idle_test.test_autocomplete_wr*F)Ú verbosityÚexit)rcÚtkinterZ tkinter.ttkrZidlelib.autocompleterrZidlelib.multicallrrLrPrQrRrTrUrWrXrZr\rr‘Zunittestr•rrrrÚs*  W