
    d~;                     z   d Z 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             Z ed          Zd	Zd
ZdZeez   ez   ez   ez   ez   Zd Z G d de          Z G d de          Zedk    r'ddl m!Z!  e!ddd           ddl"m#Z#  e#e$           dS dS )z6
Dialog for building Tkinter accelerator key bindings
    )ToplevelListbox	StringVarTclError)FrameButtonCheckbuttonEntryLabel	Scrollbar)
messagebox)_setup_dialogN)F1F2F3F4F5F6F7F8F9F10F11F12z~!@#%^&*()_-+={}[]|;:,.<>/?)TabSpaceReturn)	BackSpaceDeleteInsert)HomeEndPage Up	Page Down
Left ArrowRight ArrowUp Arrow
Down Arrowc                 `   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 )Hz3Translate from keycap symbol to the Tkinter keysym.r   space~
asciitilde!exclam@at#
numbersign%percent^asciicircum&	ampersand*asterisk(	parenleft)
parenright_
underscore-minus+plus=equal{	braceleft}
braceright[bracketleft]bracketright|bar;	semicolon:colon,comma.period<less>greater/slash?questionr#   Priorr$   Nextr%   Leftr&   Rightr'   Upr(   Downr   ShiftzKey-)getstringascii_lowercaseupper)key	modifiersmappings      $  /croot/python-split_1694437901252/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_plac/lib/python3.11/idlelib/config_key.pytranslate_keyrp      s   @ww @@!(@,/@69,@	@}@.1+@ 
@  @ .1@ 	@ "'	@ ,/v	@ 8;7	@
 @
 !@ @ @  #>@ 47u@ @ !@ +.g@ 8;8@ @ I@ (+7@ 58
@ g@  +6@ @ "/w@ t@ *6@ @ 49@ @G ++c3

C)v'= = =iikk#<<    c                   f     e Zd ZdZ fdZd Zd Zd Zd ZddZ	d	 Z
d
 Zd Zd Zd Zd Z xZS )GetKeysFramezKey Sequence Errorc                    t                                          |           d| d<   d| d<   || _        || _        || _        d| _        t          |           | _        | j                            d           | 	                                 g | _
        | j        D ]@}t          |           }|                    d           | j
                            |           Ad| _        |                                  dS )a  
        parent - parent of this dialog
        action - the name of the virtual event these keys will be
                 mapped to
        current_key_sequences - a list of all key sequence lists
                 currently mapped to virtual events, for overlap checking
           borderwidthsunkenrelief FN)super__init__parentactioncurrent_key_sequencesresultr   
key_stringsetset_modifiers_for_platformmodifier_varsrm   appendadvancedcreate_widgets)selfr|   r}   r~   modifiervariable	__class__s         ro   r{   zGetKeysFrame.__init__1   s     	   ]!X%:"#D//B''))) 	0 	0H HLL%%h////rq   c                 (    t          j        |i | d S N)r   	showerror)r   argskwargss      ro   r   zGetKeysFrame.showerrorL   s    d-f-----rq   c           	         t          | d          | _        | j                            ddddd           t          | j        d| j         d	          }|                    d
           t          | j        d| j        dd          }|                    ddd           t          |           | _        | j                            dddd           i | _        d}t          | j
        | j                  D ]g\  }}| j                            ||          }t          | j        | j        |||d          }|                    d|dd
           || j        |<   |dz  }ht          | j        dd          }|                    ddddd
           t!          | j        ddd          | _         | j        j        dgt&          R   | j                            d | j                   | j                            dddd!"           t-          | j        d#| j        j        $          }	| j                            |	j        %           |	                    dddd!"           t5          | j        d&| j        '          | _        | j                            ddd(           t          | d)          | _        | j                            ddddd           t          | j        dd*| j         d+d,z             }
|
                    d
           t=          | j        | j        -          | _        | j                            d.           t          |           | _         | j                             dddd           t          | j         dd/          }|                    ddd0           t5          | | j!        d12          | _"        | j"                            ddd3dd4           | !                                 d S )5Nkeyseq_basic)namer   nsew   )rowcolumnstickypadxpadyzNew keys for 'z' :textw)anchorleftgrooveru   )justifytextvariablerx   rv   x)ipadxipadyfill   )r   r   r   r   ry   )commandr   r   onvalue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.))r   r      )r   r   
columnspanr   r      
   single)widthheight
selectmodeendz<ButtonRelease-1>ns)r   r   rowspanr   vertical)orientr   )yscrollcommandz
Clear Keys)r   r   )r   r   r   keyseq_advancedzEnter new binding(s) for 'z' :
z2(These bindings will not be checked for validity!))r   )r   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)r   r   ew)r   r   stickr   r   )#r   frame_keyseq_basicgridr   r}   packr   frame_controls_basicmodifier_checkbuttonsziprm   r   modifier_labelrh   r	   build_key_stringr   list_keys_finalinsertAVAILABLE_KEYSbindfinal_key_selectedr   yviewconfigr   r   clear_key_seqbutton_clearframe_keyseq_advancedr
   advanced_keysframe_help_advancedtoggle_levelbutton_level)r   basic_title
basic_keysr   r   r   labelcheck
help_basicscroll_keys_finaladvanced_titlehelp_advanceds               ro   r   zGetKeysFrame.create_widgetsP   s   "'>"B"B"B$$1V+,1 	% 	6 	6 	6D3!B$+!B!B!BD D D$$$42F(,'(* * *
 	aqs333 %*$KK!!&&1QvA&NNN &(""%dnd6H"I"I 	 	Hh'++Hh??E 9(,(=E)18bR R RE JJ1V!CJ@@@38D&x0aKFF 44f!<= = =
 	AaAAcJJJ  't'@.0X G  G  G##E;N;;;;!!"5t7NOOO!!a1T!JJJ%d&?-7.2.B.HJ J J 	##3D3H#III1Q$GGG"4#<(4+/+=? ? ? 	1Q1=== &+46G%H%H%H""''Aa./a 	( 	9 	9 	9t96$S$S$S$S%Y%Z[ [ [ 	3'''"4#=04A A AS))) $);;  %%!Af1%MMMd6@	B 	B 	B 	q6::: #41B'CE E E1QdKKKrq   c                 ^    t           j        dk    r
g d| _        n	g d| _        ddi| _        dS )aV  Determine list of names of key modifiers for this platform.

        The names are used to build Tk bindings -- it doesn't matter if the
        keyboard has these keys; it matters if Tk understands them.  The
        order is also important: key binding equality depends on it, so
        config-keys.def must use the same ordering.
        darwin)rg   ControlOptionCommand)r   Altrg   r   CtrlN)sysplatformrm   r   r   s    ro   r   z'GetKeysFrame.set_modifiers_for_platform   s@     <8##FFFDNN888DN(&1rq   c                 6   | j                             d                              d          r|                                  | j                             d           | j                                         | j                                         | j        	                                 d| _
        dS |                                  | j                             d           | j                                         | j                                         d| _
        dS )	z'Toggle between basic and advanced keys.r   Advancedr   r   TzAdvanced Key Binding Entry >>FN)r   cget
startswithr   r   r   liftr   r   	focus_setr   r   r   r   s    ro   r   zGetKeysFrame.toggle_level   s   ""6**55jAA 	"   $$*F$GGG&++---$))+++((*** DMMM   $$*I$JJJ#((***%**,,,!DMMMrq   Nc                 .    |                                   dS )z3Handler for clicking on key in basic settings list.N)r   r   events     ro   r   zGetKeysFrame.final_key_selected   s    rq   c                    |                                  x}}| j                            d          }|r%t          ||          }|                    |           | j                            dd                    |           d           dS )z2Create formatted string of modifiers plus the key.r   rY   rA   r[   N)get_modifiersr   rh   rp   r   r   r   join)r   keylistrm   	final_keys       ro   r   zGetKeysFrame.build_key_string   s    "00222)(,,X66	 	&%i;;INN9%%%4 1 144455555rq   c                 <    d | j         D             }d |D             S )z9Return ordered list of modifiers that have been selected.c                 6    g | ]}|                                 S  )rh   ).0r   s     ro   
<listcomp>z.GetKeysFrame.get_modifiers.<locals>.<listcomp>   s     FFFxHLLNNFFFrq   c                     g | ]}||S r   r   )r   mods     ro   r   z.GetKeysFrame.get_modifiers.<locals>.<listcomp>   s    ///3////rq   )r   )r   mod_lists     ro   r   zGetKeysFrame.get_modifiers   s,    FF43EFFF//x////rq   c                     | j                             dd           | j                             dd           | j        D ]}|                    d           | j                            d           dS )z#Clear modifiers and keys selection.r   r   movetoz0.0ry   N)r   select_clearr   r   r   r   )r   r   s     ro   r   zGetKeysFrame.clear_key_seq   sw    ))!U333""8U333* 	 	HLLBrq   c                    d| _         | j                                                                        }|s|                     | j        | d           d S | j        s|                     |          r|                     |          r|| _         d S )Nry   zNo key specified.titler|   message)	r   r   rh   stripr   keyerror_titler   keys_okbind_ok)r   keyss     ro   okzGetKeysFrame.ok   s    ""$$**,, 	NN!4T#6  8 8 8FM 	T\\$// 	T\\$5G5G 	DKrq   c                    | j                             d          }|                                 }| j        }d | j        D             }|                    d          s|                     || d           n|s*|t          t          z   vr|                     || d           nW|dgk    r/|t          t          z   d	z   vrd
}|                     || |           n!||v rd}|                     || |           ndS dS )zValidity check on user's 'basic' keybinding selection.

        Doesn't check the string produced by the advanced dialog because
        'modifiers' isn't set.
        r   c                     g | ]	}|D ]}|
S r   r   )r   r   rl   s      ro   r   z(GetKeysFrame.keys_ok.<locals>.<listcomp>   s<     1 1 1(/1 1!$  1 1 1 1rq   r[   zMissing the final Key)r|   r   zNo modifier key(s) specified.r   rg   )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   rh   r   r  r~   endswithr   FUNCTION_KEYS	MOVE_KEYS)r   r  r   rm   r   key_sequencesmsgs          ro   r  zGetKeysFrame.keys_ok   sR    (,,X66	&&((	#1 1D,F 1 1 1}}S!! 	NN5#:  < < < < 	=9#<<<NNt#B  D D D DG9$$#i/2BBC C&CNNtSNAAAA]"";CNNtSNAAAA4urq   c                     	 |                      |d           }|                     ||           dS # t          $ r+}|                     | j        | d|            Y d}~dS d}~ww xY w)z:Return True if Tcl accepts the new keys else show message.c                      d S r   r   r   rq   ro   <lambda>z&GetKeysFrame.bind_ok.<locals>.<lambda>  s    d rq   Tz2The entered key sequence is not accepted.

Error: r   NF)r   unbindr   r   r  )r   r  bindingerrs       ro   r  zGetKeysFrame.bind_ok  s    
	iill33G KKg&&&4  	 	 	NN-d-'*- -  / / / 55555	s   1 
A& A!!A&r   )__name__
__module____qualname__r  r{   r   r   r   r   r   r   r   r   r  r  r  __classcell__r   s   @ro   rs   rs   ,   s         *N    6. . .W W Wr2 2 2" " "        6 6 60 0 0
     	 	 	  >      rq   rs   c                   l     e Zd Zddd fd
Zed             Zej        d             Zd	dZd	dZ xZ	S )
GetKeysWindowF)_htest_utestc                   t                                          |           |                                  d| d<   |                     dd           |                                  |                                |                                dz  |                                 dz  z
  z   }|                                |s/|	                                dz  | 
                                dz  z
  ndz   }|                     d| d|            |                     |           t          | ||          x| _        }	|                     d| j                   t#          |           }
t%          |
d	d
| j                  | _        t%          |
dd
| j                  | _        | j                            dddd           | j                            dddd           |	                    ddd           |
                    dd           |                     |           t3          |            |                                  |s*|                                  |                                  dS dS )a  
        parent - parent of this dialog
        title - string which is the title of the popup dialog
        action - string, the name of the virtual event these keys will be
                 mapped to
        current_key_sequences - list, a list of all key sequence lists
                 currently mapped to virtual events, for overlap checking
        _htest - bool, change box location when running htest
        _utest - bool, do not wait when running unittest
        r   rv   F)r   r   ru      rC   WM_DELETE_WINDOWOK   )r   r   r   Cancelr   )r   r   r   r   r   topTboth)sideexpandr   bottomr   )r%  r   N)rz   r{   withdraw	resizableupdate_idletaskswinfo_rootxwinfo_widthwinfo_reqwidthwinfo_rootywinfo_heightwinfo_reqheightgeometryr   rs   frameprotocolcancelr   r   r  	button_okbutton_cancelr   r   	transientr   grab_set	deiconifywait_window)r   r|   r   r}   r~   r  r  r   yr2  frame_buttonsr   s              ro   r{   zGetKeysWindow.__init__  st    	   ]e5111!!  ""A%(;(;(=(=q(@@B!!%v""$$a'$*>*>*@*@!*CCC!$& 	k!kkakk"""

5)$8MNNN
U($+666dD&': : :#M)*DKA A A!!!<<<Aaaa@@@

d
888s333vd 	NN	 	rq   c                     | j         j        S r   r2  r   r   s    ro   r   zGetKeysWindow.resultJ  s    z  rq   c                     || j         _        d S r   r>  )r   values     ro   r   zGetKeysWindow.resultN  s    !
rq   Nc                     | j                                          |                                  |                                  d S r   )r2  r  grab_releasedestroyr   s     ro   r  zGetKeysWindow.okR  s4    
rq   c                 d    d| _         |                                  |                                  d S )Nry   )r   rB  rC  r   s     ro   r4  zGetKeysWindow.cancelW  s,    rq   r   )
r  r  r  r{   propertyr   setterr  r4  r  r  s   @ro   r  r    s         !, , , , , , ,\ ! ! X! ]" " ]"   
       rq   r  __main__)mainz!idlelib.idle_test.test_config_keyru   F)	verbosityexit)run)%__doc__tkinterr   r   r   r   tkinter.ttkr   r   r	   r
   r   r   r   tkinter.simpledialogr   ri   r   r
  tuplerj   digitsALPHANUM_KEYSPUNCTUATION_KEYSWHITESPACE_KEYS	EDIT_KEYSr  r   rp   rs   r  r  unittestrH  idlelib.idle_test.htestrK  GetKeysDialogr   rq   ro   <module>rY     s    ; : : : : : : : : : : : K K K K K K K K K K K K K K K K       . . . . . .  



8f,v}<==5677 ,-	6	"22]B!"$-.09:  (k k k k k5 k k k\@ @ @ @ @H @ @ @F zD	,FFFF++++++C rq   