B � f�N�@s�dZddlZddlTddlmZddlmZmZddlm Z dZ dZ e d fZ d Z d Zd Zd ZdZdZdZGdd�d�Zedkr�ddlmZedddd�dS)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�;/opt/alt/python37/lib64/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)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. 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`|jtk�rJ�dk�rJ|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�dk�rh|��|� �dS|jtk�r~�dk�s�|jtk�r�dk�r|t@�st|j ��d�}|j|dt|j ��|j k�r�|jtk�s�|j �r�|� |j|�|� �dS�dk�r|�sd|_t|j ��d�}�dk�r:d}n��dk�rTt|j�d}n��dk�r�|j �|j ���|j �d�}�dk�r�td||�}ntt|j�d||�}n2�dk�r�td|d�}ntt|j�d|d�}|j �|�|j �|�|��|� |j|�dS�dk�rn|�sn|j�r\t|j ��d�}|� |j|�|� �dSd|_d|_dSn�t�fdd�dD���r�dS|j�r�|jdk�r�|� |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�UpZDownTrsrt)rurvrurwc3s|]}|�kVqdS)Nr)�.0r*)�keysymrr� �sz4AutoCompleteWindow.keypress_event..)ZShiftZControlZAltZMetaZCommandZOption� )rZry�hasattrrjrr"rrrr(rrfrr Z select_clearr2r3r7r-r8rVrrrZnearestr\r]r!�any�char)rrb�stater9ZnewselZjumpr)ryrrK4s�              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