o
     JAf~;                     @   s  	 d dl mZmZmZmZ d dlmZmZmZm	Z	m
Z
mZ d dl mZ d dlmZ d dlZd dlZdZeejej ZedZdZd	Zd
Zee e e e e Zdd ZG dd deZG dd deZedkrd dlm Z  e dddd d dl!m"Z" e"e# dS dS )    )ToplevelListbox	StringVarTclError)FrameButtonCheckbuttonEntryLabel	Scrollbar)
messagebox)_setup_dialogN)ZF1ZF2ZF3ZF4ZF5ZF6ZF7ZF8ZF9ZF10ZF11ZF12z~!@#%^&*()_-+={}[]|;:,.<>/?)TabSpaceZReturn)Z	BackSpaceZDeleteZInsert)ZHomeZEndPage Up	Page Down
Left ArrowRight ArrowUp Arrow
Down Arrowc                 C   s  	 i ddddddddd	d
dddddddddddddddddddddd d!d"i d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdEi}| | | } dF|v r| tjv r|  } dG|  S )HNr   space~Z
asciitilde!Zexclam@Zat#Z
numbersign%percent^Zasciicircum&Z	ampersand*Zasterisk(Z	parenleft)Z
parenright_Z
underscore-Zminus+Zplus=Zequal{Z	braceleft}Z
braceright[Zbracketleft]Zbracketright|Zbar;Z	semicolon:colon,Zcomma.Zperiod<Zless>Zgreater/Zslash?Zquestionr   ZPriorr   ZNextr   ZLeftr   ZRightr   ZUpr   ZDownr   ShiftzKey-)getstringascii_lowercaseupper)key	modifiersmapping r<   )/usr/lib/python3.10/idlelib/config_key.pytranslate_key   s   		


r>   c                       sz   e Zd ZdZ fddZdd Zdd Zdd	 Zd
d ZdddZ	dd Z
dd Zdd Zdd Zdd Zdd Z  ZS )GetKeysFramezKey Sequence Errorc                    s   	 t  | d| d< d| d< || _|| _|| _d| _t| | _| jd | 	  g | _
| jD ]}t| }|d | j
| q0d| _|   d S )N   borderwidthZsunkenrelief F)super__init__parentactioncurrent_key_sequencesresultr   
key_stringsetset_modifiers_for_platformmodifier_varsr:   appendadvancedcreate_widgets)selfrF   rG   rH   modifiervariable	__class__r<   r=   rE   1   s$   


zGetKeysFrame.__init__c                 O   s   t j|i | d S N)r   	showerror)rQ   argskwargsr<   r<   r=   rW   L   s   zGetKeysFrame.showerrorc              	   C   s  t | dd| _| jjdddddd t| jd| j dd	}|jd
d t| jd| jddd}|jdddd t | | _| jjddddd i | _d}t	| j
| jD ])\}}| j||}t| j| j|||dd}|jd|dd
d || j|< |d7 }qRt| jddd}|jddddd
d t| jdddd| _| jjdgtR   | jd | j | jjdddd!d" t| jd#| jjd$}	| jj|	jd% |	jdddd!d" t| jd&| jd'| _| jjdddd( t | d)d| _| jjdddddd t| jdd*| j d+d, d}
|
jd
d t| j| jd-| _| jjdd. t | | _ | j jddddd t| j dd/d}|jdddd0 t| | j!d1d2| _"| j"jddd3ddd4 | !  d S )5NZkeyseq_basic)namer   Znsew   )rowcolumnstickypadxpadyzNew keys for 'z' :textw)anchorleftZgroover@   )justifytextvariablerB   rA   x)ZipadxZipadyfill   )r\   r]   r^   r_   rC   )commandrb   rS   ZonvalueZoffvalue)r\   r]   r_   r^   zSelect the desired modifier keys
above, and the final key from the
list on the right.

Use upper case Symbols when using
the Shift modifier.  (Letters will be
converted automatically.))rf   rb      )r\   r]   
columnspanr_   r^      
   Zsingle)widthheightZ
selectmodeendz<ButtonRelease-1>ns)r\   r]   Zrowspanr^   Zvertical)Zorientrk   )Zyscrollcommandz
Clear Keys)rb   rk   )r\   r]   rm   Zkeyseq_advancedzEnter new binding(s) for 'z' :
z2(These bindings will not be checked for validity!))rg   )ri   a  Key bindings are specified using Tkinter keysyms as
in these samples: <Control-f>, <Shift-F2>, <F12>,
<Control-space>, <Meta-less>, <Control-Alt-Shift-X>.
Upper case is used when the Shift modifier is present!

'Emacs style' multi-keystroke bindings are specified as
follows: <Control-x><Control-y>, where the first key
is the 'do-nothing' keybinding.

Multiple separate bindings for one action should be
separated by a space, eg., <Alt-v> <Meta-v>.)r\   r]   r^   << Basic Key Binding Entry)rk   rb   Zew)r\   r]   Zstickr_   r`   )#r   frame_keyseq_basicgridr
   rG   packrJ   frame_controls_basicZmodifier_checkbuttonszipr:   rM   modifier_labelr5   r   build_key_stringr   list_keys_finalinsertAVAILABLE_KEYSbindfinal_key_selectedr   yviewconfigrK   r   clear_key_seqZbutton_clearframe_keyseq_advancedr	   advanced_keysframe_help_advancedtoggle_levelbutton_level)rQ   Zbasic_titleZ
basic_keysr]   rR   rS   ZlabelcheckZ
help_basicZscroll_keys_finalZadvanced_titleZhelp_advancedr<   r<   r=   rP   P   s   




zGetKeysFrame.create_widgetsc                 C   s0   	 t jdkrg d| _ng d| _ddi| _d S )Ndarwin)r4   ControlZOptionZCommand)r   ZAltr4   r   ZCtrl)sysplatformr:   rz   rQ   r<   r<   r=   rL      s
   

z'GetKeysFrame.set_modifiers_for_platformc                 C   s   	 | j ddr)|   | j jdd | j  | j  | j	  d| _
d S |   | j jdd | j  | j  d| _
d S )Nrb   ZAdvancedrt   ra   TzAdvanced Key Binding Entry >>F)r   Zcget
startswithr   r   r   Zliftr   r   Z	focus_setrO   ru   rx   r   r<   r<   r=   r      s   






zGetKeysFrame.toggle_levelNc                 C   s   	 |    d S rV   )r{   rQ   eventr<   r<   r=   r      s   zGetKeysFrame.final_key_selectedc                 C   sP   	 |    }}| jd}|rt||}|| | jdd| d d S )Nrd   r0   r#   r1   )get_modifiersr|   r5   r>   rN   rJ   rK   join)rQ   keylistr:   	final_keyr<   r<   r=   r{      s   

zGetKeysFrame.build_key_stringc                 C   s    	 dd | j D }dd |D S )Nc                 S   s   g | ]}|  qS r<   )r5   ).0rS   r<   r<   r=   
<listcomp>       z.GetKeysFrame.get_modifiers.<locals>.<listcomp>c                 S   s   g | ]}|r|qS r<   r<   )r   modr<   r<   r=   r      r   )rM   )rQ   Zmod_listr<   r<   r=   r      s   zGetKeysFrame.get_modifiersc                 C   sD   	 | j dd | j dd | jD ]}|d q| jd d S )Nr   rr   Zmovetoz0.0rC   )r|   Zselect_clearr   rM   rK   rJ   )rQ   rS   r<   r<   r=   r      s   
zGetKeysFrame.clear_key_seqc                 C   sR   d| _ | j  }|s| j| j| dd d S | js| |r'| |r'|| _ d S )NrC   zNo key specified.titlerF   message)	rI   rJ   r5   striprW   keyerror_titlerO   keys_okbind_ok)rQ   keysr<   r<   r=   ok   s   
zGetKeysFrame.okc                 C   s   	 | j d}|  }| j}dd | jD }|ds%| j|| dd dS |s7|tt vr7| j|| dd dS |d	gkrP|tt d
 vrPd}| j|| |d dS ||v r`d}| j|| |d dS dS )Nrd   c                 S   s   g | ]	}|D ]}|qqS r<   r<   )r   r   r9   r<   r<   r=   r      s
    
z(GetKeysFrame.keys_ok.<locals>.<listcomp>r1   zMissing the final Key)rF   r   zNo modifier key(s) specified.r   r4   )r   r   zBThe shift modifier by itself may not be used with this key symbol.z'This key combination is already in use.TF)	r|   r5   r   r   rH   endswithrW   FUNCTION_KEYS	MOVE_KEYS)rQ   r   r   r:   r   Zkey_sequencesmsgr<   r<   r=   r      s8   


zGetKeysFrame.keys_okc              
   C   sf   	 z
|  |dd }W n ty* } z| j| j| d| d W Y d }~dS d }~ww | || dS )Nc                   S   s   d S rV   r<   r<   r<   r<   r=   <lambda>  s    z&GetKeysFrame.bind_ok.<locals>.<lambda>z2The entered key sequence is not accepted.

Error: r   FT)r   r   rW   r   Zunbind)rQ   r   Zbindingerrr<   r<   r=   r     s   zGetKeysFrame.bind_okrV   )__name__
__module____qualname__r   rE   rW   rP   rL   r   r   r{   r   r   r   r   r   __classcell__r<   r<   rT   r=   r?   ,   s    Y
	r?   c                       sR   e Zd Zddd fdd
Zedd Zejdd Zdd	d
ZdddZ  Z	S )GetKeysWindowF)_htest_utestc                   sh  	 t  | |   d| d< | jddd |   | | d |  d   }| |s;|	 d | 
 d  nd }| d| d|  | | t| || | _}	| d| j t| }
t|
d	d
| jd| _t|
dd
| jd| _| jjddddd | jjddddd |	jdddd |
jddd | | t|  |   |s|   |   d S d S )Nr[   rA   F)rq   rp   r@      r$   ZWM_DELETE_WINDOWZOK   )rb   rp   rk   ZCancelr   )r\   r]   r_   r`   rj   topTZboth)sideexpandri   Zbottomrh   )r   ri   )rD   rE   ZwithdrawZ	resizableZupdate_idletasksZwinfo_rootxZwinfo_widthZwinfo_reqwidthZwinfo_rootyZwinfo_heightZwinfo_reqheightZgeometryr   r?   frameprotocolcancelr   r   r   Z	button_okZbutton_cancelrv   rw   Z	transientr   Zgrab_setZ	deiconifyZwait_window)rQ   rF   r   rG   rH   r   r   rh   yr   Zframe_buttonsrT   r<   r=   rE     sH   


zGetKeysWindow.__init__c                 C   s   | j jS rV   r   rI   r   r<   r<   r=   rI   J  s   zGetKeysWindow.resultc                 C   s   || j _d S rV   r   )rQ   valuer<   r<   r=   rI   N  s   Nc                 C   s   | j   |   |   d S rV   )r   r   grab_releasedestroyr   r<   r<   r=   r   R  s   
zGetKeysWindow.okc                 C   s   d| _ |   |   d S )NrC   )rI   r   r   r   r<   r<   r=   r   W  s   zGetKeysWindow.cancelrV   )
r   r   r   rE   propertyrI   setterr   r   r   r<   r<   rT   r=   r     s    .


r   __main__)mainz!idlelib.idle_test.test_config_keyr@   F)	verbosityexit)run)$tkinterr   r   r   r   Ztkinter.ttkr   r   r   r	   r
   r   r   Ztkinter.simpledialogr   r6   r   r   tupler7   digitsZALPHANUM_KEYSZPUNCTUATION_KEYSZWHITESPACE_KEYSZ	EDIT_KEYSr   r~   r>   r?   r   r   Zunittestr   Zidlelib.idle_test.htestr   ZGetKeysDialogr<   r<   r<   r=   <module>   s<     
 oC