qfc@sdZddlTddlZddlZdefdYZedkreZdZ e edd d e j ej ndS( s6 Dialog for building Tkinter accelerator key bindings i(t*Nt GetKeysDialogcBseZdZdZdZdZdZdZdZdZ dZ d Z d d Z d d Zd ZRS(cCstj|||jdd|jdtdt|j||j||j|jd|j ||_ ||_ ||_ d|_ t||_|jjd|jg|_x:|jD]/}t|}|jd|jj|qWt|_|j|j|j|j|jd|j|jd|jd|j|j d|j!df|j"|j#d S( s 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 t borderwidthitheighttwidthtWM_DELETE_WINDOWts+%d+%diN($tToplevelt__init__t configuret resizabletFALSEttitlet transienttgrab_settprotocoltCanceltparenttactiontcurrentKeySequencestresultt StringVart keyStringtsettSetModifiersForPlatformt modifier_varst modifierstappendtFalsetadvancedt CreateWidgetstLoadFinalKeyListtwithdrawtupdate_idletaskstgeometryt winfo_rootxt winfo_widthtwinfo_reqwidtht winfo_rootyt winfo_heighttwinfo_reqheightt deiconifyt wait_window(tselfRR RRtmodifiertvariable((s0/usr/lib64/python2.7/idlelib/keybindingDialog.pyR s>                  c CsZt|dddt}|jdtdtdtt|}|jdtdtt|ddd d d |j |_ |j j d d dd ddddt|ddd d d |j |_ |j j d d ddddddt||_t||_t||_t||_|jj d d dd dtdddd|jj d d dd dtdddd|jj|jj d ddd dtdd|jj d ddd dtdd|jjt|d |jdd|_|jj d ddd dtddddt|jdd|jd}|jdtt|jdtd|jdtdd}|jdddddti|_d }xt|j|j D]\}}|j!j"||}t#|jd |j$d|d|d|d d!} | j d d d|dddt| |j|<|d7}qWt|jdtdd"d#d$d%d&d'} | j d ddd d(d)dddtt%|jd d*d+d,d-t&|_'|j'j(d.|j)|j'j d d dd)d/d)dt*t+|jd0t,d |j'j-} |j'j.d1| j/| j d d ddd/d)dt*t|jdd2d |j0|_1|j1j d ddd d(d)t|jdtdd3|jd4d5} | jdtt2|jd|j|_3|j3jdtt|jdtdd6d7d8d9d:d;d<} | j d d dd dtdS(=NRitrelieftsidetexpandtfillttexttOKRitcommandtrowitcolumntpadxitpadyRitstickysAdvanced Key Binding Entry >>tsticksNew keys for 's' :tanchortjustifyt textvariabletipadxtipadyR-tonvaluetoffvalueRs!Select the desired modifier keys s"above, and the final key from the slist on the right. s"Use upper case Symbols when using s&the Shift modifier. (Letters will be sconverted automatically.)t columnspaniiRi t selectmodestrowspantorienttyscrollcommands Clear KeyssEnter new binding(s) for 's' : s2(These bindings will not be checked for validity!)s4Key bindings are specified using Tkinter keysyms as sin these samples: , , , , , . Upper case is used when the Shift modifier is present! s8'Emacs style' multi-keystroke bindings are specified as s5follows: , where the first key s!is the 'do-nothing' keybinding. s4Multiple separate bindings for one action should be s,separated by a space, eg., .(4tFrametSUNKENtpacktTOPtTRUEtBOTHtBOTTOMtXtButtonR3tbuttonOKtgridRt buttonCanceltframeKeySeqBasictframeKeySeqAdvancedtframeControlsBasictframeHelpAdvancedtNSEWtliftt ToggleLevelt buttonLeveltEWtLabelRtWtLEFTRtGROOVEtmodifier_checkbuttonstzipRRtmodifier_labeltgett CheckbuttontBuildKeyStringtListboxtSINGLEt listKeysFinaltbindtFinalKeySelectedtNSt ScrollbartVERTICALtyviewtconfigRt ClearKeySeqt buttonCleartEntrytentryKeysAdvanced(R+t frameMaint frameButtonstlabelTitleBasictlabelKeysBasicR6R,R-tlabeltcheckt labelFnAdvicetscrollKeysFinaltlabelTitleAdvancedtlabelHelpAdvanced((s0/usr/lib64/python2.7/idlelib/keybindingDialog.pyR0s %%++ %%  +  "  "  ( %"    cCsZddlm}|jr4ddddg|_ndddg|_idd6|_d S( sUDetermine 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. i(t macosxSupporttShifttControltOptiontCommandtAlttCtrlN(tidlelibR~trunningAsOSXAppRRb(R+R~((s0/usr/lib64/python2.7/idlelib/keybindingDialog.pyRs  cCs|jjdd dkrl|j|jjdd|jj|jj|jjt |_ n@|j|jjdd|j j|j jt |_ dS(NR2itAdvanceds<< Basic Key Binding EntrysAdvanced Key Binding Entry >>(RZtcgetRpRoRTRXRVRst focus_settTrueRRSRUR(R+((s0/usr/lib64/python2.7/idlelib/keybindingDialog.pyRYs        cCs|jdS(N(Re(R+tevent((s0/usr/lib64/python2.7/idlelib/keybindingDialog.pyRjscCsr|j}}|jjt}|rJ|j||}|j|n|jjdtj |dddS(Nt( t GetModifiersRhRctANCHORt TranslateKeyRRRtstringtjoin(R+tkeyListRtfinalKey((s0/usr/lib64/python2.7/idlelib/keybindingDialog.pyRes cCs?g|jD]}|j^q }g|D]}|r)|^q)S(N(RRc(R+R-tmodListtmod((s0/usr/lib64/python2.7/idlelib/keybindingDialog.pyRs"cCs[|jjdt|jjtdx|jD]}|jdq0W|jjddS(Nis0.0R(Rht select_cleartENDRntMOVETORRR(R+R-((s0/usr/lib64/python2.7/idlelib/keybindingDialog.pyRps c Csd|_ttjtj|_td |_d|_d|_d|_ |j|j|j|j|j|j }|j j t |dS(NtF1tF2tF4tF5tF6tF7tF8tF9tF10tF11tF12s~!@#%^&*()_-+={}[]|;:,.<>/?tTabtSpacetReturnt BackSpacetDeletetInserttHometEndsPage Ups Page Downs Left Arrows Right ArrowsUp Arrows Down Arrow( RRRRRRRRRRRR(RRR(RRR(RRsPage Ups Page Downs Left Arrows Right ArrowsUp Arrows Down Arrow( t functionKeysttupleRtascii_lowercasetdigitst alphanumKeystpunctuationKeystwhitespaceKeysteditKeystmoveKeysRhtinsertR(R+tkeys((s0/usr/lib64/python2.7/idlelib/keybindingDialog.pyRs    ,cCsRi#dd6dd6dd6dd6d d 6d d 6d d6dd6dd6dd6dd6dd6dd6dd6dd6dd 6d!d"6d#d$6d%d&6d'd(6d)d*6d+d,6d-d.6d/d06d1d26d3d46d5d66d7d86d9d:6d;d<6d=d>6d?d@6dAdB6dCdD6dEdE6}||jkr||}ndF|krD|tjkrD|j}ndG|}|S(Hs2Translate from keycap symbol to the Tkinter keysymtspaceRt asciitildet~texclamt!tatt@t numbersignt#tpercentt%t asciicircumt^t ampersandt&tasteriskRt parenleftt(t parenrightt)t underscoret_tminusRtplust+tequalt=t braceleftt{t bracerightt}t bracketleftt[t bracketrightt]tbart|t semicolont;tcolont:tcommat,tperiodt.tlessRtgreaterRtslasht/tquestiont?tPriorsPage UptNexts Page DowntLefts Left ArrowtRights Right ArrowtUpsUp ArrowtDowns Down ArrowRRsKey-(RRRtupper(R+tkeyRt translateDict((s0/usr/lib64/python2.7/idlelib/keybindingDialog.pyRs  #  cCs8|js|jr4|jj|_|jndS(N(RtKeysOKRRcRtdestroy(R+R((s0/usr/lib64/python2.7/idlelib/keybindingDialog.pyR3scCsd|_|jdS(NR(RR(R+R((s0/usr/lib64/python2.7/idlelib/keybindingDialog.pyRs c Csj|jj}|j|jjt}|j}|j}t}d}|sttj d|d|ddn|j dstj d|d|ddn| r||j |j krtj d|d|ddn|d gkr,||j |j dkr,d }tj d|d|d|n:||j kr`d }tj d|d|d|nt}|S(sValidity check on user's 'basic' keybinding selection. Doesn't check the string produced by the advanced dialog because 'modifiers' isn't set. sKey Sequence ErrorR RtmessagesNo keys specified.RsMissing the final KeysNo modifier key(s) specified.RRRsBThe shift modifier by itself may not be used with this key symbol.s'This key combination is already in use.(sTabsSpace(RRctstripRhRRtsplitRt tkMessageBoxt showerrortendswithRRRR(R+RRRt keySequencetkeysOKR tmsg((s0/usr/lib64/python2.7/idlelib/keybindingDialog.pyRs6      N(t__name__t __module__RRRRYRjReRRpRRtNoneR3RR(((s0/usr/lib64/python2.7/idlelib/keybindingDialog.pyRs ' O          t__main__cCs'd}ttddg}|jGHdS(NRsGet Keyss find-again(RtrootR(tkeySeqtdlg((s0/usr/lib64/python2.7/idlelib/keybindingDialog.pytrunsR2tDialogR4( t__doc__tTkinterRRRRRtTkRRRORItmainloop(((s0/usr/lib64/python2.7/idlelib/keybindingDialog.pyts