
\[\0                 @   sz   d  Z  d d l Td d l j Z d d l Z d d l Z Gd d   d e  Z e	 d k rv d d l
 m Z e e  n  d S)z6
Dialog for building Tkinter accelerator key bindings
    )*Nc               @   s   e  Z d  Z d d d  Z d d   Z d d   Z d d	   Z d
 d   Z d d   Z d d   Z	 d d   Z
 d d   Z d d   Z d d d  Z d d d  Z d d   Z d S)GetKeysDialogFc             C   s  t  j |  |  |  j d d  |  j d t d t  |  j |  |  j |  |  j   |  j d |  j	  | |  _
 | |  _ | |  _ d |  _ t |   |  _ |  j j d  |  j   g  |  _ x: |  j D]/ } t |   } | j d  |  j j |  q Wd |  _ |  j   |  j   |  j   |  j   |  j d | j   | j   d	 |  j   d	 | j   | s| j   d	 |  j    d	 n d
 f  |  j!   |  j"   d S)a3  
        action - string, the name of the virtual event these keys will be
                 mapped to
        currentKeys - list, a list of all key sequence lists currently mapped
                 to virtual events, for overlap checking
        _htest - bool, change box location when running htest
        borderwidth   heightwidthZWM_DELETE_WINDOW Fz+%d+%d      N)#Toplevel__init__Z	configureZ	resizableZFALSEtitleZ	transientZgrab_setZprotocolCancelparentactioncurrentKeySequencesresultZ	StringVar	keyStringsetSetModifiersForPlatformmodifier_vars	modifiersappendadvancedCreateWidgetsLoadFinalKeyListZwithdrawZupdate_idletasksZgeometryZwinfo_rootxZwinfo_widthZwinfo_reqwidthZwinfo_rootyZwinfo_heightZwinfo_reqheightZ	deiconifyZwait_window)selfr   r   r   r   Z_htestmodifiervariable r   ./usr/lib/python3.4/idlelib/keybindingDialog.pyr   
   s@    
				
		



		0
zGetKeysDialog.__init__c             C   sZ  t  |  d d d t } | j d t d t d t  t  |   } | j d t d t  t | d d d	 d
 d |  j	 |  _
 |  j
 j d d d d d d d d  t | d d d	 d
 d |  j |  _ |  j j d d d d d d d d  t  |  |  _ t  |  |  _ t  |  |  _ t  |  |  _ |  j j d d d d d t d d d d  |  j j d d d d d t d d d d  |  j j   |  j j d d d d d t d d  |  j j d d d d d t d d  |  j j   t | d |  j d d |  _ |  j j d d d d d t d d d d  t |  j d d |  j d } | j d t  t |  j d t d |  j d t d d } | j d d d d d t  i  |  _ d } x t |  j |  j   D] \ } } |  j! j" | |  } t# |  j d |  j$ d | d | d | d  d! }	 |	 j d d d | d d d t  |	 |  j | <| d 7} qWt |  j d t d d" d# d$ d% d& d' }
 |
 j d d d d d( d) d d d t  t% |  j d	 d* d+ d, d- t& |  _' |  j' j( d. |  j)  |  j' j d d d d) d/ d) d t*  t+ |  j d0 t, d |  j' j- } |  j' j. d1 | j/  | j d d d d d/ d) d t*  t |  j d d2 d |  j0 |  _1 |  j1 j d d d d d( d)  t |  j d t d d3 |  j d4 d5 } | j d t  t2 |  j d |  j |  _3 |  j3 j d t  t |  j d t d d6 d7 d8 d9 d: d; d< } | j d d d d d t  d  S)=Nr   r	   ZreliefZsideexpandZfilltextOKr      Zcommandrowr   columnZpadxr   Zpadyr      ZstickyzAdvanced Key Binding Entry >>ZstickzNew keys for  'z' :ZanchorZjustifyZtextvariableZipadxZipadyr   ZonvalueZoffvaluer   z!Select the desired modifier keys
z"above, and the final key from the
zlist on the right.

z"Use upper case Symbols when using
z&the Shift modifier.  (Letters will be
zconverted automatically.)Z
columnspan      r   
   Z
selectmodez<ButtonRelease-1>ZrowspanZorientZyscrollcommandz
Clear KeyszEnter new binding(s) for  'z' :
z2(These bindings will not be checked for validity!)z4Key bindings are specified using Tkinter keysyms as
zin 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!

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

z4Multiple separate bindings for one action should be
z,separated by a space, eg., <Alt-v> <Meta-v>.)4ZFrameZSUNKENZpackZTOPZTRUEZBOTHZBOTTOMXZButtonr#   ZbuttonOKZgridr   ZbuttonCancelframeKeySeqBasicframeKeySeqAdvancedframeControlsBasicframeHelpAdvancedZNSEWliftToggleLevelbuttonLevelZEWZLabelr   WZLEFTr   ZGROOVEZmodifier_checkbuttonszipr   r   modifier_labelgetZCheckbuttonBuildKeyStringZListboxZSINGLElistKeysFinalZbindFinalKeySelectedZNSZ	ScrollbarZVERTICALyviewconfigr   ClearKeySeqZbuttonClearZEntryentryKeysAdvanced)r   Z	frameMainZframeButtonsZlabelTitleBasicZlabelKeysBasicr&   r   r   ZlabelZcheckZlabelFnAdviceZscrollKeysFinalZlabelTitleAdvancedZlabelHelpAdvancedr   r   r    r   5   s    %%++%%+	"	"
(%"

zGetKeysDialog.CreateWidgetsc             C   sM   t  j d k r' d d d d g |  _ n d d d g |  _ i d d 6|  _ d S)	aU  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ShiftZControlZOptionZCommandZAltZCtrlN)sysplatformr   r5   )r   r   r   r    r      s    z%GetKeysDialog.SetModifiersForPlatformc             C   s   |  j  j d  d  d  d k rr |  j   |  j  j d d  |  j j   |  j j   |  j j   d |  _	 n@ |  j   |  j  j d d  |  j
 j   |  j j   d |  _	 d  S)Nr"   r$   ZAdvancedz<< Basic Key Binding EntryTzAdvanced Key Binding Entry >>F)r2   Zcgetr<   r;   r-   r0   r/   r=   Z	focus_setr   r,   r.   )r   r   r   r    r1      s    "

zGetKeysDialog.ToggleLevelc             C   s   |  j    d  S)N)r7   )r   eventr   r   r    r9      s    zGetKeysDialog.FinalKeySelectedc             C   so   |  j    } } |  j j t  } | rJ |  j | |  } | j |  n  |  j j d d j |  d  d  S)N<->)	GetModifiersr8   r6   ANCHORTranslateKeyr   r   r   join)r   ZkeyListr   finalKeyr   r   r    r7      s    zGetKeysDialog.BuildKeyStringc             C   s'   d d   |  j  D } d d   | D S)Nc             S   s   g  |  ] } | j     q Sr   )r6   ).0r   r   r   r    
<listcomp>   s   	 z.GetKeysDialog.GetModifiers.<locals>.<listcomp>c             S   s   g  |  ] } | r |  q Sr   r   )rK   modr   r   r    rL      s   	 )r   )r   ZmodListr   r   r    rF      s    zGetKeysDialog.GetModifiersc             C   s[   |  j  j d t  |  j  j t d  x |  j D] } | j d  q0 W|  j j d  d  S)Nr   z0.0r   )r8   Zselect_clearENDr:   ZMOVETOr   r   r   )r   r   r   r   r    r<      s
    zGetKeysDialog.ClearKeySeqc             C   s   d |  _  t t j t j  |  _ t d  |  _ d |  _ d |  _ d |  _	 |  j |  j |  j  |  j |  j |  j	 } |  j
 j t |  d  S)NF1F2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 Arrow)rO   rP   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   )rZ   r[   r\   )r]   r^   r_   )r`   ra   rb   rc   rd   re   rf   rg   )functionKeystuplestringascii_lowercaseZdigitsZalphanumKeysZpunctuationKeysZwhitespaceKeysZeditKeysmoveKeysr8   insertrN   )r   keysr   r   r    r      s     			 	,zGetKeysDialog.LoadFinalKeyListc             C   sL  i# d d 6d d 6d d 6d d 6d	 d
 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d  6d! d" 6d# d$ 6d% d& 6d' d( 6d) d* 6d+ d, 6d- d. 6d/ d0 6d1 d2 6d3 d4 6d5 d6 6d7 d8 6d9 d: 6d; d< 6d= d> 6d? d@ 6dA dB 6dC dD 6dE dE 6} | | k r| | } n  dF | k r>| t  j k r>| j   } n  dG | } | S)Hz2Translate from keycap symbol to the Tkinter keysymZspacer[   Z
asciitilde~Zexclam!at@Z
numbersign#Zpercent%Zasciicircum^Z	ampersand&Zasteriskr   Z	parenleft(Z
parenright)Z
underscore_ZminusrD   Zplus+Zequal=Z	braceleft{Z
braceright}Zbracketleft[Zbracketright]Zbar|Z	semicolon;Zcolon:Zcomma,Zperiod.ZlessrC   ZgreaterrE   Zslash/Zquestion?ZPriorzPage UpZNextz	Page DownZLeftz
Left ArrowZRightzRight ArrowZUpzUp ArrowZDownz
Down ArrowrZ   r?   zKey-)rj   rk   upper)r   keyr   ZtranslateDictr   r   r    rH      s     
#
zGetKeysDialog.TranslateKeyNc             C   s8   |  j  s |  j   r4 |  j j   |  _ |  j   n  d  S)N)r   KeysOKr   r6   r   destroy)r   rB   r   r   r    r#      s    zGetKeysDialog.OKc             C   s   d |  _  |  j   d  S)Nr   )r   r   )r   rB   r   r   r    r      s    	zGetKeysDialog.Cancelc             C   sj  |  j  j   } | j   |  j j t  } |  j   } | j   } d } d } | st t j d | d |  d d  n | j	 d  s t j d | d |  d d  n | r | |  j
 |  j k r t j d | d |  d d	  n | d
 g k r,| |  j
 |  j d k r,d } t j d | d |  d |  n: | |  j k r`d } t j d | d |  d |  n 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.

        FzKey Sequence Errorr   r   messagezNo keys specified.rE   zMissing the final KeyzNo modifier key(s) specified.r?   rZ   r[   zBThe shift modifier by itself may not be used with this key symbol.z'This key combination is already in use.T)zTabzSpace)r   r6   stripr8   rG   rF   splittkMessageBoxZ	showerrorendswithrh   rl   r   )r   rn   rJ   r   ZkeySequenceZkeysOKr   msgr   r   r    r      s6    



zGetKeysDialog.KeysOK)__name__
__module____qualname__r   r   r   r1   r9   r7   rF   r<   r   rH   r#   r   r   r   r   r   r    r   	   s   +Or   __main__)run)__doc__ZtkinterZtkinter.messageboxZ
messageboxr   rj   r@   r   r   r   Zidlelib.idle_test.htestr   r   r   r   r    <module>   s   
