B
    2*\9                 @   s   d dl mZ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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edkrd dlmZ edddd d dlm Z  e e dS )    )ToplevelListboxText	StringVarTclError)FrameButtonCheckbuttonEntryLabel	Scrollbar)
messageboxN)ZF1ZF2ZF3ZF4ZF5ZF6ZF7ZF8ZF9ZF10ZF11ZF12z~!@#%^&*()_-+={}[]|;:,.<>/?)TabSpaceZReturn)Z	BackSpaceZDeleteZInsert)ZHomeZEndzPage Upz	Page Downz
Left ArrowzRight ArrowzUp Arrowz
Down Arrowc          $   C   s|   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"d#d$#}| | | } d%|krr| tjkrr|  } d&|  S )'NZspaceZ
asciitildeZexclamZatZ
numbersignpercentZasciicircumZ	ampersandZasteriskZ	parenleftZ
parenrightZ
underscoreZminusZplusZequalZ	braceleftZ
bracerightZbracketleftZbracketrightZbarZ	semicoloncolonZcommaZperiodZlessZgreaterZslashZquestionZPriorZNextZLeftZRightZUpZDownr   )#r   ~!@#%^&*()_-+={}[]|;:,.<>/?zPage Upz	Page Downz
Left ArrowzRight ArrowzUp Arrowz
Down Arrowr   ShiftzKey-)getstringascii_lowercaseupper)key	modifiersmapping r5   =C:\ALexclude\prg\programme\Python37\Lib\idlelib\config_key.pytranslate_key   s     r7   c               @   s   e Zd ZdZddd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dZd!ddZdd Zdd ZdS )"GetKeysDialogzKey Sequence ErrorF)_htest_utestc      	      C   sF  t | | |   | jdd | jddd | | | | |   | d| j	 || _
|| _|| _d| _t| | _| jd |   g | _x,| jD ]"}t| }|d | j| qW d| _|   |   | d| | d |  d   | |s | d |  d  nd	 f  |sB|   |    d S )
N   )borderwidthF)heightwidthZWM_DELETE_WINDOW z+%d+%d      )!r   __init__ZwithdrawZ	configureZ	resizabletitleZ	transientZgrab_setZprotocolcancelparentactioncurrent_key_sequencesresultr   
key_stringsetset_modifiers_for_platformmodifier_varsr3   appendadvancedcreate_widgetsZupdate_idletasksZgeometryZwinfo_rootxZwinfo_widthZwinfo_reqwidthZwinfo_rootyZwinfo_heightZwinfo_reqheightZ	deiconifyZwait_window)	selfrE   rC   rF   rG   r9   r:   modifiervariabler5   r5   r6   rB   0   s@    



*zGetKeysDialog.__init__c             O   s   t j|| d S )N)r   	showerror)rP   argskwargsr5   r5   r6   rS   `   s    zGetKeysDialog.showerrorc          	   C   s0  t | ddd | _}|jdddd t | }|jdd	d
 t|dd| jd| _| jjddddd t|dd| jd| _| jjddddd 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}xft| j| jD ]T\}}| j||}t| j| j|||d!d"}	|	jd|ddd# |	| j|< |d7 }q0W t
| jdd$d%}
|
jddd&ddd' t| jd(d)d*d+| _| jjdBt  | jd-| j | jjdd&d&d.d/ t| jd0| jjd1}| jj|jd2 |jddd&d.d/ t| jd3| j d4| _!| j!jddd&d5 t |d6d| _"| j"jdddddd t
| j"dd7| j d8d9 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d= t|| j&d>d?| _'| j'jddd@dddA | &  d S )CNr@   Zsunken)r<   relieftopTZboth)sideexpandfillZbottomx)rX   rZ   ZOK   )textr>   commandr   r;   )rowcolumnpadxpadyZCancel   Zkeyseq_basic)nameZnsew)r_   r`   stickyra   rb   zNew keys for 'z' :)r]   w)anchorleftZgroove)justifytextvariablerV   r<   )ZipadxZipadyrZ   )r_   r`   re   ra   r?   )r^   r]   rR   ZonvalueZoffvalue)r_   r`   ra   re   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.))ri   r]      )r_   r`   
columnspanra   re      
   Zsingle)r>   r=   Z
selectmodeendz<ButtonRelease-1>ns)r_   r`   Zrowspanre   Zvertical)Zorientr^   )Zyscrollcommandz
Clear Keys)r]   r^   )r_   r`   rl   Zkeyseq_advancedzEnter new binding(s) for 'z' :
z2(These bindings will not be checked for validity!))rj   )rZ   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`   re   z<< Basic Key Binding Entry)r^   r]   Zew)r_   r`   Zstickra   rb   )ro   )(r   framepackr   okZ	button_okZgridrD   Zbutton_cancelframe_keyseq_basicr   rF   rI   frame_controls_basicZmodifier_checkbuttonszipr3   rL   modifier_labelr.   r	   build_key_stringr   list_keys_finalinsertAVAILABLE_KEYSbindfinal_key_selectedr   yviewconfigrJ   clear_key_seqZbutton_clearframe_keyseq_advancedr
   advanced_keysframe_help_advancedtoggle_levelbutton_level)rP   rq   Zframe_buttonsZbasic_titleZ
basic_keysr`   rQ   rR   ZlabelZcheckZ
help_basicZscroll_keys_finalZadvanced_titleZhelp_advancedr5   r5   r6   rO   d   s    






zGetKeysDialog.create_widgetsc             C   s4   t jdkrddddg| _ndddg| _ddi| _d S )Ndarwinr-   ZControlZOptionZCommandZAltZCtrl)sysplatformr3   rw   )rP   r5   r5   r6   rK      s    
z(GetKeysDialog.set_modifiers_for_platformc             C   s   | j ddrN|   | j jdd | j  | j  | j	  d| _
n0|   | j jdd | j  | j  d| _
d S )Nr]   ZAdvancedz<< Basic Key Binding Entry)r]   TzAdvanced Key Binding Entry >>F)r   Zcget
startswithr   r   r   Zliftr   r   Z	focus_setrN   rt   ru   )rP   r5   r5   r6   r      s    




zGetKeysDialog.toggle_levelNc             C   s   |    d S )N)rx   )rP   eventr5   r5   r6   r}      s    z GetKeysDialog.final_key_selectedc             C   sN   |    }}| jd}|r0t||}|| | jdd| d d S )Nrg   r)   r   r*   )get_modifiersry   r.   r7   rM   rI   rJ   join)rP   keylistr3   	final_keyr5   r5   r6   rx      s    

zGetKeysDialog.build_key_stringc             C   s   dd | j D }dd |D S )Nc             S   s   g | ]}|  qS r5   )r.   ).0rR   r5   r5   r6   
<listcomp>   s    z/GetKeysDialog.get_modifiers.<locals>.<listcomp>c             S   s   g | ]}|r|qS r5   r5   )r   modr5   r5   r6   r      s    )rL   )rP   Zmod_listr5   r5   r6   r      s    zGetKeysDialog.get_modifiersc             C   sF   | j dd | j dd x| jD ]}|d q$W | jd d S )Nr   ro   Zmovetoz0.0r?   )ry   Zselect_clearr~   rL   rJ   rI   )rP   rR   r5   r5   r6   r      s
    zGetKeysDialog.clear_key_seqc             C   s\   | j   }|s(| j| j| dd d S | js8| |rH| |rH|| _| 	  | 
  d S )NzNo key specified.)rC   rE   message)rI   r.   striprS   keyerror_titlerN   keys_okbind_okrH   grab_releasedestroy)rP   r   keysr5   r5   r6   rs     s    
zGetKeysDialog.okc             C   s   d| _ |   |   d S )Nr?   )rH   r   r   )rP   r   r5   r5   r6   rD     s    zGetKeysDialog.cancelc             C   s   | j d}|  }| j}dd | jD }|dsF| j|| dd nt|sh|tt krh| j|| dd nR|d	gkr|tt d
 krd}| j|| |d n"||krd}| j|| |d ndS dS )Nrg   c             S   s   g | ]}|D ]}|qqS r5   r5   )r   r   r2   r5   r5   r6   r     s    z)GetKeysDialog.keys_ok.<locals>.<listcomp>r*   zMissing the final Key)rE   r   zNo modifier key(s) specified.)rC   rE   r   r-   )r   r   zBThe shift modifier by itself may not be used with this key symbol.z'This key combination is already in use.TF)	ry   r.   r   r   rG   endswithrS   FUNCTION_KEYS	MOVE_KEYS)rP   r   r   r3   rC   Zkey_sequencesmsgr5   r5   r6   r     s*    



zGetKeysDialog.keys_okc          
   C   sd   y|  |dd }W n: tk
rN } z| j| j| d| d dS d }~X Y nX | || dS d S )Nc               S   s   d S )Nr5   r5   r5   r5   r6   <lambda>4      z'GetKeysDialog.bind_ok.<locals>.<lambda>z2The entered key sequence is not accepted.

Error: )rC   rE   r   FT)r|   r   rS   r   Zunbind)rP   r   Zbindingerrr5   r5   r6   r   1  s    zGetKeysDialog.bind_ok)N)N)N)__name__
__module____qualname__r   rB   rS   rO   rK   r   r}   rx   r   r   rs   rD   r   r   r5   r5   r5   r6   r8   +   s   /f
	

r8   __main__)mainz!idlelib.idle_test.test_config_keyr@   F)	verbosityexit)run)!Ztkinterr   r   r   r   r   Ztkinter.ttkr   r   r	   r
   r   r   r   r/   r   r   tupler0   digitsZALPHANUM_KEYSZPUNCTUATION_KEYSZWHITESPACE_KEYSZ	EDIT_KEYSr   r{   r7   r8   r   Zunittestr   Zidlelib.idle_test.htestr   r5   r5   r5   r6   <module>   s(      